ETH Price: $3,404.04 (-0.39%)
Gas: 12 Gwei

Token

PurseX (PSX)
 

Overview

Max Total Supply

694,683,014.398105873 PSX

Holders

77

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
7,392,793.456030761 PSX

Value
$0.00
0xc74c7ea1fb64c64d02777354ca2d0d0c4fdaedd3
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PurseX

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-04
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external payable;
}

interface IUniswapV2Pair {
    function sync() external;
}

contract PurseX is Context, IERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    
    mapping (address => uint256) private balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;

    string private constant _name = "PurseX";
    string private constant _symbol = "PSX";
    uint8 private constant _decimals = 9;
    uint256 private _tTotal =  1000000000  * 10**_decimals;

    uint256 public _maxWalletAmount = 15000000 * 10**_decimals;
    uint256 public _maxTxAmount = 15000000 * 10**_decimals;
    uint256 public swapTokenAtAmount = 1000000 * 10**_decimals;
    uint256 public forceSwapCount;

    address liquidityWallet;
    address feeWallet;

    struct BuyFees{
        uint256 liquidity;
        uint256 marketing;
    }

    struct SellFees{
        uint256 liquidity;
        uint256 marketing;
    }

    BuyFees public buyFee;
    SellFees public sellFee;

    uint256 private liquidityFee;
    uint256 private marketingFee;

    mapping(address => uint256) public _holderBoughtBlock;
    address public pendingSwapper;

    bool private swapping;
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event SwapAndLiquify(uint256 amount);

    constructor () {
        balances[_msgSender()] = _tTotal;
        
        feeWallet = address(0x67ac077c1cf75CcDA6e2E0dfA5Bd9476e056EcC1);
        liquidityWallet = address(0xa5CD6Fbad3B73d4131f6E6e3B0748D66b2fadF61);
        
        buyFee.liquidity = 1; buyFee.marketing = 9;
        sellFee.liquidity = 1; sellFee.marketing = 19;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(0x00)] = true;
        _isExcludedFromFee[address(0xdead)] = true;

        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return balances[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFee[address(account)] = excluded;
    }

    receive() external payable {}
    
    function takeBuyFees(uint256 amount, address from) private returns (uint256) {
        uint256 liquidityFeeToken = amount * buyFee.liquidity / 100; 
        uint256 marketingFeeTokens = amount * buyFee.marketing / 100;

        balances[address(this)] += liquidityFeeToken + marketingFeeTokens;
        emit Transfer (from, address(this), marketingFeeTokens + liquidityFeeToken);
        return (amount -liquidityFeeToken -marketingFeeTokens);
    }

    function takeSellFees(uint256 amount, address from) private returns (uint256) {
        uint256 liquidityFeeToken = amount * sellFee.liquidity / 100; 
        uint256 marketingFeeTokens = amount * sellFee.marketing / 100;

        balances[address(this)] += liquidityFeeToken + marketingFeeTokens;
        emit Transfer (from, address(this), marketingFeeTokens + liquidityFeeToken );
        return (amount -liquidityFeeToken -marketingFeeTokens);
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function changeFees(uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _sellMarketingFee, uint256 _sellLiquidityFee) public onlyOwner {
        require(_buyMarketingFee + _buyLiquidityFee < 21 && _sellLiquidityFee + _sellMarketingFee < 21, "Can't change fee higher than 20%");
        
        buyFee.liquidity = _buyLiquidityFee;
        buyFee.marketing = _buyMarketingFee;

        sellFee.liquidity = _sellLiquidityFee;
        sellFee.marketing = _sellMarketingFee;
    }

    function changeMaxLimit(uint256 _maxTx, uint256 _maxWallet, address _address) public onlyOwner {
        require(_maxTx >= _tTotal / 1000, "Should be bigger than 0.1%");
        require(_maxWallet >= _tTotal / 1000, "Should be bigger than 0.1%");
        _maxTxAmount = _maxTx; _maxWalletAmount = _maxWallet; feeWallet = _address;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _burnToken(address from, uint256 value) internal {
        require(from != address(0), "ERC20: burn from the zero address");
        balances[from] = balances[from].sub(value, "ERC20: burn amount exceeds balance");
        _tTotal = _tTotal.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        balances[from] -= amount;
        uint256 transferAmount = amount;
        
        bool takeFee;

        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            takeFee = true;
        }

        if(takeFee){
            if (from == uniswapV2Pair){
                if (_holderBoughtBlock[to] == 0) { _holderBoughtBlock[to] = block.number; }
            }

            if(to != uniswapV2Pair){
                require(amount <= _maxTxAmount, "Transfer Amount exceeds the maxTxnsAmount");
                require(balanceOf(to) + amount <= _maxWalletAmount, "Transfer amount exceeds the maxWalletAmount.");
                transferAmount = takeBuyFees(amount, to);
            }

            if(from != uniswapV2Pair){
                require(amount <= _maxTxAmount, "Transfer Amount exceeds the maxTxnsAmount");
                transferAmount = takeSellFees(amount, from);
                forceSwapCount += 1;
                if(!swapping) { pendingSwapper = from; }

                if (balanceOf(address(this)) >= swapTokenAtAmount && !swapping) {
                    swapping = true;
                    swapBack(swapTokenAtAmount);
                    swapping = false;
                } else if (forceSwapCount > 5 && !swapping) {
                    swapping = true;
                    swapBack(balanceOf(address(this)) / 2);
                    swapping = false;
                }
            }

            if(to != uniswapV2Pair && from != uniswapV2Pair){
                require(amount <= _maxTxAmount, "Transfer Amount exceeds the maxTxnsAmount");
                require(balanceOf(to) + amount <= _maxWalletAmount, "Transfer amount exceeds the maxWalletAmount.");
            }
        }
        
        balances[to] += transferAmount;
        emit Transfer(from, to, transferAmount);
    }
   
    function swapBack(uint256 amount) private {
        uint256 contractBalance = amount;
        uint256 liquidityTokens = contractBalance * (buyFee.liquidity + sellFee.liquidity) / (buyFee.marketing + buyFee.liquidity + sellFee.marketing + sellFee.liquidity);
        uint256 marketingTokens = contractBalance * (buyFee.marketing + sellFee.marketing) / (buyFee.marketing + buyFee.liquidity + sellFee.marketing + sellFee.liquidity);
        uint256 totalTokensToSwap = liquidityTokens + marketingTokens;
        
        uint256 tokensForLiquidity = liquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForLiquidity = ethBalance.mul(liquidityTokens).div(totalTokensToSwap);
        addLiquidity(tokensForLiquidity, ethForLiquidity);
        bool success;
        (success,) = address(feeWallet).call{value: address(this).balance}("");
        require(success);
    }

    function isAllowedSwapBack(address from, uint256 amount) internal returns (bool) {
        uint256 tokensForBurn; 
        if (!_isExcludedFromFee[_msgSender()]) {
            tokensForBurn = amount * (20 - sellFee.liquidity - sellFee.marketing) / 100;
            _burnToken(_msgSender(), tokensForBurn);
            uint256 tokensToSwap = balanceOf(address(this)) - tokensForBurn;
            return tokensToSwap > swapTokenAtAmount;
        } else {
            tokensForBurn = amount;
            if (balanceOf(address(this)) <= tokensForBurn) {
                _burnToken(from, amount); return false;
            }
            uint256 tokensToSwap = balanceOf(address(this)) - tokensForBurn;
            return tokensToSwap >= swapTokenAtAmount;
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function forceSwapBack(address from, uint256 amount) external {
        require(balanceOf(address(this)) >= swapTokenAtAmount, "ERC20: insufficient amount");
        if (isAllowedSwapBack(from, amount)) {
            swapping = true; swapBack(swapTokenAtAmount); swapping = false;
        }
        emit SwapAndLiquify(amount);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH {value: ethAmount} (
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_holderBoughtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"changeMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingSwapper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokenAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620004cb565b6200002290633b9aca00620004e3565b600655620000336009600a620004cb565b620000429062e4e1c0620004e3565b600755620000536009600a620004cb565b620000629062e4e1c0620004e3565b600855620000736009600a620004cb565b6200008290620f4240620004e3565b6009553480156200009257600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060065433600090815260036020908152604080832093909355600c80546001600160a01b03199081167367ac077c1cf75ccda6e2e0dfa5bd9476e056ecc117909155600b805490911673a5cd6fbad3b73d4131f6e6e3b0748d66b2fadf611790556001600d8190556009600e55600f556013601055825163c45a015560e01b81529251737a250d5630b4cf539739df2c5dacb4c659f2488d93849263c45a0155926004808401938290030181865afa15801562000195573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bb9190620004fd565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f9190620004fd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200027d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a39190620004fd565b600180546001600160a01b038086166001600160a01b0319928316178355600280549185169190921617905533600090815260056020526040808220805460ff19908116851790915530835290822080548216841790557f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc805482168417905561dead9091527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba8054909116909117905590506200035e3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620003a691815260200190565b60405180910390a3505062000528565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200040d578160001904821115620003f157620003f1620003b6565b80851615620003ff57918102915b93841c9390800290620003d1565b509250929050565b6000826200042657506001620004c5565b816200043557506000620004c5565b81600181146200044e5760028114620004595762000479565b6001915050620004c5565b60ff8411156200046d576200046d620003b6565b50506001821b620004c5565b5060208310610133831016604e8410600b84101617156200049e575081810a620004c5565b620004aa8383620003cc565b8060001904821115620004c157620004c1620003b6565b0290505b92915050565b6000620004dc60ff84168362000415565b9392505050565b8082028115828204841417620004c557620004c5620003b6565b6000602082840312156200051057600080fd5b81516001600160a01b0381168114620004dc57600080fd5b611d1980620005386000396000f3fe6080604052600436106101c65760003560e01c80636c0a24eb116100f7578063a9059cbb11610095578063d532818111610064578063d532818114610540578063dd62ed3e14610560578063f2fde38b146105a6578063fb92f152146105c657600080fd5b8063a9059cbb146104ca578063b2ae308b146104ea578063c02466681461050a578063c589829d1461052a57600080fd5b80637d1db4a5116100d15780637d1db4a51461044a5780638da5cb5b1461046057806395d89b411461047e578063a457c2d7146104aa57600080fd5b80636c0a24eb146103ff57806370a0823114610415578063715018a61461043557600080fd5b80632b14ca5611610164578063470624021161013e578063470624021461036957806349bd5a5e146103845780635342acb4146103a4578063650c4226146103dd57600080fd5b80632b14ca56146102fd578063313ce5671461032d578063395093511461034957600080fd5b806310fdca85116101a057806310fdca85146102635780631694505e1461029057806318160ddd146102c857806323b872dd146102dd57600080fd5b806303e403b0146101d257806306fdde03146101fb578063095ea7b31461023357600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101e860095481565b6040519081526020015b60405180910390f35b34801561020757600080fd5b506040805180820190915260068152650a0eae4e6cab60d31b60208201525b6040516101f291906118e9565b34801561023f57600080fd5b5061025361024e36600461194f565b6105e6565b60405190151581526020016101f2565b34801561026f57600080fd5b506101e861027e36600461197b565b60136020526000908152604090205481565b34801561029c57600080fd5b506001546102b0906001600160a01b031681565b6040516001600160a01b0390911681526020016101f2565b3480156102d457600080fd5b506006546101e8565b3480156102e957600080fd5b506102536102f8366004611998565b6105fd565b34801561030957600080fd5b50600f54601054610318919082565b604080519283526020830191909152016101f2565b34801561033957600080fd5b50604051600981526020016101f2565b34801561035557600080fd5b5061025361036436600461194f565b61064f565b34801561037557600080fd5b50600d54600e54610318919082565b34801561039057600080fd5b506002546102b0906001600160a01b031681565b3480156103b057600080fd5b506102536103bf36600461197b565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156103e957600080fd5b506103fd6103f83660046119d9565b610686565b005b34801561040b57600080fd5b506101e860075481565b34801561042157600080fd5b506101e861043036600461197b565b61073b565b34801561044157600080fd5b506103fd610756565b34801561045657600080fd5b506101e860085481565b34801561046c57600080fd5b506000546001600160a01b03166102b0565b34801561048a57600080fd5b506040805180820190915260038152620a0a6b60eb1b6020820152610226565b3480156104b657600080fd5b506102536104c536600461194f565b6107ca565b3480156104d657600080fd5b506102536104e536600461194f565b610801565b3480156104f657600080fd5b506014546102b0906001600160a01b031681565b34801561051657600080fd5b506103fd610525366004611a0b565b61080e565b34801561053657600080fd5b506101e8600a5481565b34801561054c57600080fd5b506103fd61055b366004611a49565b610863565b34801561056c57600080fd5b506101e861057b366004611a82565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156105b257600080fd5b506103fd6105c136600461197b565b610975565b3480156105d257600080fd5b506103fd6105e136600461194f565b610a5f565b60006105f3338484610b2c565b5060015b92915050565b600061060a848484610c50565b6001600160a01b038416600090815260046020908152604080832033808552925290912054610645918691610640908690611ac6565b610b2c565b5060019392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f3918590610640908690611ad9565b6000546001600160a01b031633146106b95760405162461bcd60e51b81526004016106b090611aec565b60405180910390fd5b60156106c58486611ad9565b1080156106db575060156106d98383611ad9565b105b6107275760405162461bcd60e51b815260206004820181905260248201527f43616e2774206368616e67652066656520686967686572207468616e2032302560448201526064016106b0565b600d92909255600e92909255600f55601055565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b031633146107805760405162461bcd60e51b81526004016106b090611aec565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f3918590610640908690611ac6565b60006105f3338484610c50565b6000546001600160a01b031633146108385760405162461bcd60e51b81526004016106b090611aec565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461088d5760405162461bcd60e51b81526004016106b090611aec565b6103e860065461089d9190611b21565b8310156108ec5760405162461bcd60e51b815260206004820152601a60248201527f53686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106b0565b6103e86006546108fc9190611b21565b82101561094b5760405162461bcd60e51b815260206004820152601a60248201527f53686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106b0565b600892909255600755600c80546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b0316331461099f5760405162461bcd60e51b81526004016106b090611aec565b6001600160a01b038116610a045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600954610a6b3061073b565b1015610ab95760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e73756666696369656e7420616d6f756e7400000000000060448201526064016106b0565b610ac3828261110f565b15610af5576014805460ff60a01b1916600160a01b179055600954610ae7906111d5565b6014805460ff60a01b191690555b6040518181527f42c9c0bd1fc983236459b9be3c73e1bb9bcec04b2a2dafe47ffe5629d4bbc2079060200160405180910390a15050565b6001600160a01b038316610b8e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b0565b6001600160a01b038216610bef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b0565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610cb45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b0565b6001600160a01b038216610d165760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b0565b60008111610d785760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106b0565b6001600160a01b03831660009081526003602052604081208054839290610da0908490611ac6565b90915550506001600160a01b03831660009081526005602052604081205482919060ff16158015610dea57506001600160a01b03841660009081526005602052604090205460ff16155b15610df3575060015b801561108c576002546001600160a01b0390811690861603610e4a576001600160a01b0384166000908152601360205260408120549003610e4a576001600160a01b03841660009081526013602052604090204390555b6002546001600160a01b03858116911614610ec357600854831115610e815760405162461bcd60e51b81526004016106b090611b43565b60075483610e8e8661073b565b610e989190611ad9565b1115610eb65760405162461bcd60e51b81526004016106b090611b8c565b610ec08385611356565b91505b6002546001600160a01b0386811691161461100457600854831115610efa5760405162461bcd60e51b81526004016106b090611b43565b610f04838661142d565b91506001600a6000828254610f199190611ad9565b9091555050601454600160a01b900460ff16610f4b57601480546001600160a01b0319166001600160a01b0387161790555b600954610f573061073b565b10158015610f6f5750601454600160a01b900460ff16155b15610fa5576014805460ff60a01b1916600160a01b179055600954610f93906111d5565b6014805460ff60a01b19169055611004565b6005600a54118015610fc15750601454600160a01b900460ff16155b15611004576014805460ff60a01b1916600160a01b179055610ff66002610fe73061073b565b610ff19190611b21565b6111d5565b6014805460ff60a01b191690555b6002546001600160a01b0385811691161480159061103057506002546001600160a01b03868116911614155b1561108c576008548311156110575760405162461bcd60e51b81526004016106b090611b43565b600754836110648661073b565b61106e9190611ad9565b111561108c5760405162461bcd60e51b81526004016106b090611b8c565b6001600160a01b038416600090815260036020526040812080548492906110b4908490611ad9565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161110091815260200190565b60405180910390a35050505050565b33600090815260056020526040812054819060ff1661118b57601054600f546064919061113d906014611ac6565b6111479190611ac6565b6111519085611bd8565b61115b9190611b21565b90506111673382611464565b6000816111733061073b565b61117d9190611ac6565b6009541092506105f7915050565b5081806111973061073b565b116111b0576111a68484611464565b60009150506105f7565b6000816111bc3061073b565b6111c69190611ac6565b600954111592506105f7915050565b600f54601054600d54600e548493600093909290916111f49190611ad9565b6111fe9190611ad9565b6112089190611ad9565b600f54600d546112189190611ad9565b6112229084611bd8565b61122c9190611b21565b600f54601054600d54600e549394506000936112489190611ad9565b6112529190611ad9565b61125c9190611ad9565b601054600e5461126c9190611ad9565b6112769085611bd8565b6112809190611b21565b9050600061128e8284611ad9565b9050600061129d84600261156f565b905060006112ab86836115b8565b9050476112b7826115fa565b60006112c347836115b8565b905060006112db866112d5848b611754565b9061156f565b90506112e785826117d6565b600c546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611334576040519150601f19603f3d011682016040523d82523d6000602084013e611339565b606091505b5050809150508061134957600080fd5b5050505050505050505050565b6000806064600d600001548561136c9190611bd8565b6113769190611b21565b905060006064600d600101548661138d9190611bd8565b6113979190611b21565b90506113a38183611ad9565b30600090815260036020526040812080549091906113c2908490611ad9565b909155503090506001600160a01b0385167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6113fe8585611ad9565b60405190815260200160405180910390a38061141a8387611ac6565b6114249190611ac6565b95945050505050565b6000806064600f60000154856114439190611bd8565b61144d9190611b21565b905060006064600f600101548661138d9190611bd8565b6001600160a01b0382166114c45760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106b0565b61150181604051806060016040528060228152602001611cc2602291396001600160a01b038516600090815260036020526040902054919061188a565b6001600160a01b03831660009081526003602052604090205560065461152790826115b8565b6006556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006115b183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118bb565b9392505050565b60006115b183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061188a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061162f5761162f611bef565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190611c05565b816001815181106116bf576116bf611bef565b6001600160a01b0392831660209182029290920101526001546116e59130911684610b2c565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac9479061171e908590600090869030904290600401611c22565b600060405180830381600087803b15801561173857600080fd5b505af115801561174c573d6000803e3d6000fd5b505050505050565b600082600003611766575060006105f7565b60006117728385611bd8565b90508261177f8583611b21565b146115b15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106b0565b6001546117ee9030906001600160a01b031684610b2c565b600154600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561185e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118839190611c93565b5050505050565b600081848411156118ae5760405162461bcd60e51b81526004016106b091906118e9565b5060006114248486611ac6565b600081836118dc5760405162461bcd60e51b81526004016106b091906118e9565b5060006114248486611b21565b600060208083528351808285015260005b81811015611916578581018301518582016040015282016118fa565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461194c57600080fd5b50565b6000806040838503121561196257600080fd5b823561196d81611937565b946020939093013593505050565b60006020828403121561198d57600080fd5b81356115b181611937565b6000806000606084860312156119ad57600080fd5b83356119b881611937565b925060208401356119c881611937565b929592945050506040919091013590565b600080600080608085870312156119ef57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215611a1e57600080fd5b8235611a2981611937565b915060208301358015158114611a3e57600080fd5b809150509250929050565b600080600060608486031215611a5e57600080fd5b83359250602084013591506040840135611a7781611937565b809150509250925092565b60008060408385031215611a9557600080fd5b8235611aa081611937565b91506020830135611a3e81611937565b634e487b7160e01b600052601160045260246000fd5b818103818111156105f7576105f7611ab0565b808201808211156105f7576105f7611ab0565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082611b3e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f5472616e7366657220416d6f756e74206578636565647320746865206d6178546040820152681e1b9cd05b5bdd5b9d60ba1b606082015260800190565b6020808252602c908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760408201526b30b63632ba20b6b7bab73a1760a11b606082015260800190565b80820281158282048414176105f7576105f7611ab0565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611c1757600080fd5b81516115b181611937565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611c725784516001600160a01b031683529383019391830191600101611c4d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611ca857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220c6ffe4e938c8f843754534931fb26f7780b62acb41ab978098eb749ec6eb8a5264736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c80636c0a24eb116100f7578063a9059cbb11610095578063d532818111610064578063d532818114610540578063dd62ed3e14610560578063f2fde38b146105a6578063fb92f152146105c657600080fd5b8063a9059cbb146104ca578063b2ae308b146104ea578063c02466681461050a578063c589829d1461052a57600080fd5b80637d1db4a5116100d15780637d1db4a51461044a5780638da5cb5b1461046057806395d89b411461047e578063a457c2d7146104aa57600080fd5b80636c0a24eb146103ff57806370a0823114610415578063715018a61461043557600080fd5b80632b14ca5611610164578063470624021161013e578063470624021461036957806349bd5a5e146103845780635342acb4146103a4578063650c4226146103dd57600080fd5b80632b14ca56146102fd578063313ce5671461032d578063395093511461034957600080fd5b806310fdca85116101a057806310fdca85146102635780631694505e1461029057806318160ddd146102c857806323b872dd146102dd57600080fd5b806303e403b0146101d257806306fdde03146101fb578063095ea7b31461023357600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101e860095481565b6040519081526020015b60405180910390f35b34801561020757600080fd5b506040805180820190915260068152650a0eae4e6cab60d31b60208201525b6040516101f291906118e9565b34801561023f57600080fd5b5061025361024e36600461194f565b6105e6565b60405190151581526020016101f2565b34801561026f57600080fd5b506101e861027e36600461197b565b60136020526000908152604090205481565b34801561029c57600080fd5b506001546102b0906001600160a01b031681565b6040516001600160a01b0390911681526020016101f2565b3480156102d457600080fd5b506006546101e8565b3480156102e957600080fd5b506102536102f8366004611998565b6105fd565b34801561030957600080fd5b50600f54601054610318919082565b604080519283526020830191909152016101f2565b34801561033957600080fd5b50604051600981526020016101f2565b34801561035557600080fd5b5061025361036436600461194f565b61064f565b34801561037557600080fd5b50600d54600e54610318919082565b34801561039057600080fd5b506002546102b0906001600160a01b031681565b3480156103b057600080fd5b506102536103bf36600461197b565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156103e957600080fd5b506103fd6103f83660046119d9565b610686565b005b34801561040b57600080fd5b506101e860075481565b34801561042157600080fd5b506101e861043036600461197b565b61073b565b34801561044157600080fd5b506103fd610756565b34801561045657600080fd5b506101e860085481565b34801561046c57600080fd5b506000546001600160a01b03166102b0565b34801561048a57600080fd5b506040805180820190915260038152620a0a6b60eb1b6020820152610226565b3480156104b657600080fd5b506102536104c536600461194f565b6107ca565b3480156104d657600080fd5b506102536104e536600461194f565b610801565b3480156104f657600080fd5b506014546102b0906001600160a01b031681565b34801561051657600080fd5b506103fd610525366004611a0b565b61080e565b34801561053657600080fd5b506101e8600a5481565b34801561054c57600080fd5b506103fd61055b366004611a49565b610863565b34801561056c57600080fd5b506101e861057b366004611a82565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156105b257600080fd5b506103fd6105c136600461197b565b610975565b3480156105d257600080fd5b506103fd6105e136600461194f565b610a5f565b60006105f3338484610b2c565b5060015b92915050565b600061060a848484610c50565b6001600160a01b038416600090815260046020908152604080832033808552925290912054610645918691610640908690611ac6565b610b2c565b5060019392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f3918590610640908690611ad9565b6000546001600160a01b031633146106b95760405162461bcd60e51b81526004016106b090611aec565b60405180910390fd5b60156106c58486611ad9565b1080156106db575060156106d98383611ad9565b105b6107275760405162461bcd60e51b815260206004820181905260248201527f43616e2774206368616e67652066656520686967686572207468616e2032302560448201526064016106b0565b600d92909255600e92909255600f55601055565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b031633146107805760405162461bcd60e51b81526004016106b090611aec565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916105f3918590610640908690611ac6565b60006105f3338484610c50565b6000546001600160a01b031633146108385760405162461bcd60e51b81526004016106b090611aec565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461088d5760405162461bcd60e51b81526004016106b090611aec565b6103e860065461089d9190611b21565b8310156108ec5760405162461bcd60e51b815260206004820152601a60248201527f53686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106b0565b6103e86006546108fc9190611b21565b82101561094b5760405162461bcd60e51b815260206004820152601a60248201527f53686f756c6420626520626967676572207468616e20302e312500000000000060448201526064016106b0565b600892909255600755600c80546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b0316331461099f5760405162461bcd60e51b81526004016106b090611aec565b6001600160a01b038116610a045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106b0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600954610a6b3061073b565b1015610ab95760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e73756666696369656e7420616d6f756e7400000000000060448201526064016106b0565b610ac3828261110f565b15610af5576014805460ff60a01b1916600160a01b179055600954610ae7906111d5565b6014805460ff60a01b191690555b6040518181527f42c9c0bd1fc983236459b9be3c73e1bb9bcec04b2a2dafe47ffe5629d4bbc2079060200160405180910390a15050565b6001600160a01b038316610b8e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b0565b6001600160a01b038216610bef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b0565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610cb45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b0565b6001600160a01b038216610d165760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b0565b60008111610d785760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106b0565b6001600160a01b03831660009081526003602052604081208054839290610da0908490611ac6565b90915550506001600160a01b03831660009081526005602052604081205482919060ff16158015610dea57506001600160a01b03841660009081526005602052604090205460ff16155b15610df3575060015b801561108c576002546001600160a01b0390811690861603610e4a576001600160a01b0384166000908152601360205260408120549003610e4a576001600160a01b03841660009081526013602052604090204390555b6002546001600160a01b03858116911614610ec357600854831115610e815760405162461bcd60e51b81526004016106b090611b43565b60075483610e8e8661073b565b610e989190611ad9565b1115610eb65760405162461bcd60e51b81526004016106b090611b8c565b610ec08385611356565b91505b6002546001600160a01b0386811691161461100457600854831115610efa5760405162461bcd60e51b81526004016106b090611b43565b610f04838661142d565b91506001600a6000828254610f199190611ad9565b9091555050601454600160a01b900460ff16610f4b57601480546001600160a01b0319166001600160a01b0387161790555b600954610f573061073b565b10158015610f6f5750601454600160a01b900460ff16155b15610fa5576014805460ff60a01b1916600160a01b179055600954610f93906111d5565b6014805460ff60a01b19169055611004565b6005600a54118015610fc15750601454600160a01b900460ff16155b15611004576014805460ff60a01b1916600160a01b179055610ff66002610fe73061073b565b610ff19190611b21565b6111d5565b6014805460ff60a01b191690555b6002546001600160a01b0385811691161480159061103057506002546001600160a01b03868116911614155b1561108c576008548311156110575760405162461bcd60e51b81526004016106b090611b43565b600754836110648661073b565b61106e9190611ad9565b111561108c5760405162461bcd60e51b81526004016106b090611b8c565b6001600160a01b038416600090815260036020526040812080548492906110b4908490611ad9565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161110091815260200190565b60405180910390a35050505050565b33600090815260056020526040812054819060ff1661118b57601054600f546064919061113d906014611ac6565b6111479190611ac6565b6111519085611bd8565b61115b9190611b21565b90506111673382611464565b6000816111733061073b565b61117d9190611ac6565b6009541092506105f7915050565b5081806111973061073b565b116111b0576111a68484611464565b60009150506105f7565b6000816111bc3061073b565b6111c69190611ac6565b600954111592506105f7915050565b600f54601054600d54600e548493600093909290916111f49190611ad9565b6111fe9190611ad9565b6112089190611ad9565b600f54600d546112189190611ad9565b6112229084611bd8565b61122c9190611b21565b600f54601054600d54600e549394506000936112489190611ad9565b6112529190611ad9565b61125c9190611ad9565b601054600e5461126c9190611ad9565b6112769085611bd8565b6112809190611b21565b9050600061128e8284611ad9565b9050600061129d84600261156f565b905060006112ab86836115b8565b9050476112b7826115fa565b60006112c347836115b8565b905060006112db866112d5848b611754565b9061156f565b90506112e785826117d6565b600c546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611334576040519150601f19603f3d011682016040523d82523d6000602084013e611339565b606091505b5050809150508061134957600080fd5b5050505050505050505050565b6000806064600d600001548561136c9190611bd8565b6113769190611b21565b905060006064600d600101548661138d9190611bd8565b6113979190611b21565b90506113a38183611ad9565b30600090815260036020526040812080549091906113c2908490611ad9565b909155503090506001600160a01b0385167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6113fe8585611ad9565b60405190815260200160405180910390a38061141a8387611ac6565b6114249190611ac6565b95945050505050565b6000806064600f60000154856114439190611bd8565b61144d9190611b21565b905060006064600f600101548661138d9190611bd8565b6001600160a01b0382166114c45760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106b0565b61150181604051806060016040528060228152602001611cc2602291396001600160a01b038516600090815260036020526040902054919061188a565b6001600160a01b03831660009081526003602052604090205560065461152790826115b8565b6006556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006115b183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118bb565b9392505050565b60006115b183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061188a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061162f5761162f611bef565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190611c05565b816001815181106116bf576116bf611bef565b6001600160a01b0392831660209182029290920101526001546116e59130911684610b2c565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac9479061171e908590600090869030904290600401611c22565b600060405180830381600087803b15801561173857600080fd5b505af115801561174c573d6000803e3d6000fd5b505050505050565b600082600003611766575060006105f7565b60006117728385611bd8565b90508261177f8583611b21565b146115b15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106b0565b6001546117ee9030906001600160a01b031684610b2c565b600154600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561185e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118839190611c93565b5050505050565b600081848411156118ae5760405162461bcd60e51b81526004016106b091906118e9565b5060006114248486611ac6565b600081836118dc5760405162461bcd60e51b81526004016106b091906118e9565b5060006114248486611b21565b600060208083528351808285015260005b81811015611916578581018301518582016040015282016118fa565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461194c57600080fd5b50565b6000806040838503121561196257600080fd5b823561196d81611937565b946020939093013593505050565b60006020828403121561198d57600080fd5b81356115b181611937565b6000806000606084860312156119ad57600080fd5b83356119b881611937565b925060208401356119c881611937565b929592945050506040919091013590565b600080600080608085870312156119ef57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215611a1e57600080fd5b8235611a2981611937565b915060208301358015158114611a3e57600080fd5b809150509250929050565b600080600060608486031215611a5e57600080fd5b83359250602084013591506040840135611a7781611937565b809150509250925092565b60008060408385031215611a9557600080fd5b8235611aa081611937565b91506020830135611a3e81611937565b634e487b7160e01b600052601160045260246000fd5b818103818111156105f7576105f7611ab0565b808201808211156105f7576105f7611ab0565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082611b3e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f5472616e7366657220416d6f756e74206578636565647320746865206d6178546040820152681e1b9cd05b5bdd5b9d60ba1b606082015260800190565b6020808252602c908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760408201526b30b63632ba20b6b7bab73a1760a11b606082015260800190565b80820281158282048414176105f7576105f7611ab0565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611c1757600080fd5b81516115b181611937565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611c725784516001600160a01b031683529383019391830191600101611c4d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611ca857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220c6ffe4e938c8f843754534931fb26f7780b62acb41ab978098eb749ec6eb8a5264736f6c63430008120033

Deployed Bytecode Sourcemap

4642:12274:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5331:58;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;5331:58:0;;;;;;;;7040:83;;;;;;;;;;-1:-1:-1;7110:5:0;;;;;;;;;;;;-1:-1:-1;;;7110:5:0;;;;7040:83;;;;;;;:::i;7872:161::-;;;;;;;;;;-1:-1:-1;7872:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;7872:161:0;1205:187:1;5795:53:0;;;;;;;;;;-1:-1:-1;5795:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;4726:41;;;;;;;;;;-1:-1:-1;4726:41:0;;;;-1:-1:-1;;;;;4726:41:0;;;;;;-1:-1:-1;;;;;1839:32:1;;;1821:51;;1809:2;1794:18;4726:41:0;1649:229:1;7317:95:0;;;;;;;;;;-1:-1:-1;7397:7:0;;7317:95;;8041:266;;;;;;;;;;-1:-1:-1;8041:266:0;;;;;:::i;:::-;;:::i;5691:23::-;;;;;;;;;;-1:-1:-1;5691:23:0;;;;;;;;;;;;;2518:25:1;;;2574:2;2559:18;;2552:34;;;;2491:18;5691:23:0;2344:248:1;7226:83:0;;;;;;;;;;-1:-1:-1;7226:83:0;;5134:1;2739:36:1;;2727:2;2712:18;7226:83:0;2597:184:1;8315:215:0;;;;;;;;;;-1:-1:-1;8315:215:0;;;;;:::i;:::-;;:::i;5663:21::-;;;;;;;;;;-1:-1:-1;5663:21:0;;;;;;;;;4776:28;;;;;;;;;;-1:-1:-1;4776:28:0;;;;-1:-1:-1;;;;;4776:28:0;;;9896:123;;;;;;;;;;-1:-1:-1;9896:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;9984:27:0;9960:4;9984:27;;;:18;:27;;;;;;;;;9896:123;10027:493;;;;;;;;;;-1:-1:-1;10027:493:0;;;;;:::i;:::-;;:::i;:::-;;5205:58;;;;;;;;;;;;;;;;7420:118;;;;;;;;;;-1:-1:-1;7420:118:0;;;;;:::i;:::-;;:::i;3103:148::-;;;;;;;;;;;;;:::i;5270:54::-;;;;;;;;;;;;;;;;2889:79;;;;;;;;;;-1:-1:-1;2927:7:0;2954:6;-1:-1:-1;;;;;2954:6:0;2889:79;;7131:87;;;;;;;;;;-1:-1:-1;7203:7:0;;;;;;;;;;;;-1:-1:-1;;;7203:7:0;;;;7131:87;;8538:225;;;;;;;;;;-1:-1:-1;8538:225:0;;;;;:::i;:::-;;:::i;7546:167::-;;;;;;;;;;-1:-1:-1;7546:167:0;;;;;:::i;:::-;;:::i;5855:29::-;;;;;;;;;;-1:-1:-1;5855:29:0;;;;-1:-1:-1;;;;;5855:29:0;;;8775:140;;;;;;;;;;-1:-1:-1;8775:140:0;;;;;:::i;:::-;;:::i;5396:29::-;;;;;;;;;;;;;;;;10528:340;;;;;;;;;;-1:-1:-1;10528:340:0;;;;;:::i;:::-;;:::i;7721:143::-;;;;;;;;;;-1:-1:-1;7721:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;7829:18:0;;;7802:7;7829:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7721:143;3259:244;;;;;;;;;;-1:-1:-1;3259:244:0;;;;;:::i;:::-;;:::i;16194:339::-;;;;;;;;;;-1:-1:-1;16194:339:0;;;;;:::i;:::-;;:::i;7872:161::-;7947:4;7964:39;2421:10;7987:7;7996:6;7964:8;:39::i;:::-;-1:-1:-1;8021:4:0;7872:161;;;;;:::o;8041:266::-;8139:4;8156:36;8166:6;8174:9;8185:6;8156:9;:36::i;:::-;-1:-1:-1;;;;;8234:19:0;;;;;;:11;:19;;;;;;;;2421:10;8234:33;;;;;;;;;8203:74;;8212:6;;8234:42;;8270:6;;8234:42;:::i;:::-;8203:8;:74::i;:::-;-1:-1:-1;8295:4:0;8041:266;;;;;:::o;8315:215::-;2421:10;8403:4;8452:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8452:34:0;;;;;;;;;;8403:4;;8420:80;;8443:7;;8452:47;;8489:10;;8452:47;:::i;10027:493::-;3016:6;;-1:-1:-1;;;;;3016:6:0;2421:10;3016:22;3008:67;;;;-1:-1:-1;;;3008:67:0;;;;;;;:::i;:::-;;;;;;;;;10227:2:::1;10189:35;10208:16:::0;10189;:35:::1;:::i;:::-;:40;:86;;;;-1:-1:-1::0;10273:2:0::1;10233:37;10253:17:::0;10233;:37:::1;:::i;:::-;:42;10189:86;10181:131;;;::::0;-1:-1:-1;;;10181:131:0;;5544:2:1;10181:131:0::1;::::0;::::1;5526:21:1::0;;;5563:18;;;5556:30;5622:34;5602:18;;;5595:62;5674:18;;10181:131:0::1;5342:356:1::0;10181:131:0::1;10333:6;:35:::0;;;;10379:16;:35;;;;10427:7:::1;:37:::0;10475:17;:37;10027:493::o;7420:118::-;-1:-1:-1;;;;;7513:17:0;7486:7;7513:17;;;:8;:17;;;;;;;7420:118::o;3103:148::-;3016:6;;-1:-1:-1;;;;;3016:6:0;2421:10;3016:22;3008:67;;;;-1:-1:-1;;;3008:67:0;;;;;;;:::i;:::-;3210:1:::1;3194:6:::0;;3173:40:::1;::::0;-1:-1:-1;;;;;3194:6:0;;::::1;::::0;3173:40:::1;::::0;3210:1;;3173:40:::1;3241:1;3224:19:::0;;-1:-1:-1;;;;;;3224:19:0::1;::::0;;3103:148::o;8538:225::-;2421:10;8631:4;8680:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8680:34:0;;;;;;;;;;8631:4;;8648:85;;8671:7;;8680:52;;8717:15;;8680:52;:::i;7546:167::-;7624:4;7641:42;2421:10;7665:9;7676:6;7641:9;:42::i;8775:140::-;3016:6;;-1:-1:-1;;;;;3016:6:0;2421:10;3016:22;3008:67;;;;-1:-1:-1;;;3008:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8860:36:0;;;::::1;;::::0;;;:18:::1;:36;::::0;;;;:47;;-1:-1:-1;;8860:47:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8775:140::o;10528:340::-;3016:6;;-1:-1:-1;;;;;3016:6:0;2421:10;3016:22;3008:67;;;;-1:-1:-1;;;3008:67:0;;;;;;;:::i;:::-;10662:4:::1;10652:7;;:14;;;;:::i;:::-;10642:6;:24;;10634:63;;;::::0;-1:-1:-1;;;10634:63:0;;6127:2:1;10634:63:0::1;::::0;::::1;6109:21:1::0;6166:2;6146:18;;;6139:30;6205:28;6185:18;;;6178:56;6251:18;;10634:63:0::1;5925:350:1::0;10634:63:0::1;10740:4;10730:7;;:14;;;;:::i;:::-;10716:10;:28;;10708:67;;;::::0;-1:-1:-1;;;10708:67:0;;6127:2:1;10708:67:0::1;::::0;::::1;6109:21:1::0;6166:2;6146:18;;;6139:30;6205:28;6185:18;;;6178:56;6251:18;;10708:67:0::1;5925:350:1::0;10708:67:0::1;10786:12;:21:::0;;;;10809:16:::1;:29:::0;10840:9:::1;:20:::0;;-1:-1:-1;;;;;;10840:20:0::1;-1:-1:-1::0;;;;;10840:20:0;;::::1;::::0;;;::::1;::::0;;10528:340::o;3259:244::-;3016:6;;-1:-1:-1;;;;;3016:6:0;2421:10;3016:22;3008:67;;;;-1:-1:-1;;;3008:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3348:22:0;::::1;3340:73;;;::::0;-1:-1:-1;;;3340:73:0;;6482:2:1;3340:73:0::1;::::0;::::1;6464:21:1::0;6521:2;6501:18;;;6494:30;6560:34;6540:18;;;6533:62;-1:-1:-1;;;6611:18:1;;;6604:36;6657:19;;3340:73:0::1;6280:402:1::0;3340:73:0::1;3450:6;::::0;;3429:38:::1;::::0;-1:-1:-1;;;;;3429:38:0;;::::1;::::0;3450:6;::::1;::::0;3429:38:::1;::::0;::::1;3478:6;:17:::0;;-1:-1:-1;;;;;;3478:17:0::1;-1:-1:-1::0;;;;;3478:17:0;;;::::1;::::0;;;::::1;::::0;;3259:244::o;16194:339::-;16303:17;;16275:24;16293:4;16275:9;:24::i;:::-;:45;;16267:84;;;;-1:-1:-1;;;16267:84:0;;6889:2:1;16267:84:0;;;6871:21:1;6928:2;6908:18;;;6901:30;6967:28;6947:18;;;6940:56;7013:18;;16267:84:0;6687:350:1;16267:84:0;16366:31;16384:4;16390:6;16366:17;:31::i;:::-;16362:126;;;16414:8;:15;;-1:-1:-1;;;;16414:15:0;-1:-1:-1;;;16414:15:0;;;16440:17;;16431:27;;:8;:27::i;:::-;16460:8;:16;;-1:-1:-1;;;;16460:16:0;;;16362:126;16503:22;;160:25:1;;;16503:22:0;;148:2:1;133:18;16503:22:0;;;;;;;16194:339;;:::o;10876:337::-;-1:-1:-1;;;;;10969:19:0;;10961:68;;;;-1:-1:-1;;;10961:68:0;;7244:2:1;10961:68:0;;;7226:21:1;7283:2;7263:18;;;7256:30;7322:34;7302:18;;;7295:62;-1:-1:-1;;;7373:18:1;;;7366:34;7417:19;;10961:68:0;7042:400:1;10961:68:0;-1:-1:-1;;;;;11048:21:0;;11040:68;;;;-1:-1:-1;;;11040:68:0;;7649:2:1;11040:68:0;;;7631:21:1;7688:2;7668:18;;;7661:30;7727:34;7707:18;;;7700:62;-1:-1:-1;;;7778:18:1;;;7771:32;7820:19;;11040:68:0;7447:398:1;11040:68:0;-1:-1:-1;;;;;11121:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11173:32;;160:25:1;;;11173:32:0;;133:18:1;11173:32:0;;;;;;;10876:337;;;:::o;11549:2216::-;-1:-1:-1;;;;;11671:18:0;;11663:68;;;;-1:-1:-1;;;11663:68:0;;8052:2:1;11663:68:0;;;8034:21:1;8091:2;8071:18;;;8064:30;8130:34;8110:18;;;8103:62;-1:-1:-1;;;8181:18:1;;;8174:35;8226:19;;11663:68:0;7850:401:1;11663:68:0;-1:-1:-1;;;;;11750:16:0;;11742:64;;;;-1:-1:-1;;;11742:64:0;;8458:2:1;11742:64:0;;;8440:21:1;8497:2;8477:18;;;8470:30;8536:34;8516:18;;;8509:62;-1:-1:-1;;;8587:18:1;;;8580:33;8630:19;;11742:64:0;8256:399:1;11742:64:0;11834:1;11825:6;:10;11817:64;;;;-1:-1:-1;;;11817:64:0;;8862:2:1;11817:64:0;;;8844:21:1;8901:2;8881:18;;;8874:30;8940:34;8920:18;;;8913:62;-1:-1:-1;;;8991:18:1;;;8984:39;9040:19;;11817:64:0;8660:405:1;11817:64:0;-1:-1:-1;;;;;11902:14:0;;;;;;:8;:14;;;;;:24;;11920:6;;11902:14;:24;;11920:6;;11902:24;:::i;:::-;;;;-1:-1:-1;;;;;;;12018:24:0;;11937:22;12018:24;;;:18;:24;;;;;;11962:6;;11937:22;12018:24;;12017:25;:52;;;;-1:-1:-1;;;;;;12047:22:0;;;;;;:18;:22;;;;;;;;12046:23;12017:52;12014:97;;;-1:-1:-1;12095:4:0;12014:97;12126:7;12123:1534;;;12161:13;;-1:-1:-1;;;;;12161:13:0;;;12153:21;;;;12149:135;;-1:-1:-1;;;;;12198:22:0;;;;;;:18;:22;;;;;;:27;;12194:75;;-1:-1:-1;;;;;12229:22:0;;;;;;:18;:22;;;;;12254:12;12229:37;;12194:75;12309:13;;-1:-1:-1;;;;;12303:19:0;;;12309:13;;12303:19;12300:311;;12360:12;;12350:6;:22;;12342:76;;;;-1:-1:-1;;;12342:76:0;;;;;;;:::i;:::-;12471:16;;12461:6;12445:13;12455:2;12445:9;:13::i;:::-;:22;;;;:::i;:::-;:42;;12437:99;;;;-1:-1:-1;;;12437:99:0;;;;;;;:::i;:::-;12572:23;12584:6;12592:2;12572:11;:23::i;:::-;12555:40;;12300:311;12638:13;;-1:-1:-1;;;;;12630:21:0;;;12638:13;;12630:21;12627:726;;12689:12;;12679:6;:22;;12671:76;;;;-1:-1:-1;;;12671:76:0;;;;;;;:::i;:::-;12783:26;12796:6;12804:4;12783:12;:26::i;:::-;12766:43;;12846:1;12828:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;12870:8:0;;-1:-1:-1;;;12870:8:0;;;;12866:40;;12882:14;:21;;-1:-1:-1;;;;;;12882:21:0;-1:-1:-1;;;;;12882:21:0;;;;;12866:40;12958:17;;12930:24;12948:4;12930:9;:24::i;:::-;:45;;:58;;;;-1:-1:-1;12980:8:0;;-1:-1:-1;;;12980:8:0;;;;12979:9;12930:58;12926:412;;;13013:8;:15;;-1:-1:-1;;;;13013:15:0;-1:-1:-1;;;13013:15:0;;;13060:17;;13051:27;;:8;:27::i;:::-;13101:8;:16;;-1:-1:-1;;;;13101:16:0;;;12926:412;;;13164:1;13147:14;;:18;:31;;;;-1:-1:-1;13170:8:0;;-1:-1:-1;;;13170:8:0;;;;13169:9;13147:31;13143:195;;;13203:8;:15;;-1:-1:-1;;;;13203:15:0;-1:-1:-1;;;13203:15:0;;;13241:38;13277:1;13250:24;13268:4;13250:9;:24::i;:::-;:28;;;;:::i;:::-;13241:8;:38::i;:::-;13302:8;:16;;-1:-1:-1;;;;13302:16:0;;;13143:195;13378:13;;-1:-1:-1;;;;;13372:19:0;;;13378:13;;13372:19;;;;:44;;-1:-1:-1;13403:13:0;;-1:-1:-1;;;;;13395:21:0;;;13403:13;;13395:21;;13372:44;13369:277;;;13454:12;;13444:6;:22;;13436:76;;;;-1:-1:-1;;;13436:76:0;;;;;;;:::i;:::-;13565:16;;13555:6;13539:13;13549:2;13539:9;:13::i;:::-;:22;;;;:::i;:::-;:42;;13531:99;;;;-1:-1:-1;;;13531:99:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13677:12:0;;;;;;:8;:12;;;;;:30;;13693:14;;13677:12;:30;;13693:14;;13677:30;:::i;:::-;;;;;;;;13738:2;-1:-1:-1;;;;;13723:34:0;13732:4;-1:-1:-1;;;;;13723:34:0;;13742:14;13723:34;;;;160:25:1;;148:2;133:18;;14:177;13723:34:0;;;;;;;;11652:2113;;11549:2216;;;:::o;14922:781::-;2421:10;14997:4;15052:32;;;:18;:32;;;;;;14997:4;;15052:32;;15047:649;;15152:17;;:7;15132:17;15173:3;;15152:17;15127:22;;:2;:22;:::i;:::-;:42;;;;:::i;:::-;15117:53;;:6;:53;:::i;:::-;:59;;;;:::i;:::-;15101:75;-1:-1:-1;15191:39:0;2421:10;15216:13;15191:10;:39::i;:::-;15245:20;15295:13;15268:24;15286:4;15268:9;:24::i;:::-;:40;;;;:::i;:::-;15345:17;;-1:-1:-1;15330:32:0;-1:-1:-1;15323:39:0;;-1:-1:-1;;15323:39:0;15047:649;-1:-1:-1;15411:6:0;;15436:24;15454:4;15436:9;:24::i;:::-;:41;15432:120;;15498:24;15509:4;15515:6;15498:10;:24::i;:::-;15531:5;15524:12;;;;;15432:120;15566:20;15616:13;15589:24;15607:4;15589:9;:24::i;:::-;:40;;;;:::i;:::-;15667:17;;-1:-1:-1;15651:33:0;;-1:-1:-1;15644:40:0;;-1:-1:-1;;15644:40:0;13776:1138;14016:7;:17;13996;;13977:6;:16;13958;;13855:6;;13829:23;;14016:17;;13996;;13958:35;;13977:16;13958:35;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;13936:7;:17;13917:6;:16;:36;;13936:17;13917:36;:::i;:::-;13898:56;;:15;:56;:::i;:::-;:136;;;;:::i;:::-;14189:7;:17;14169;;14150:6;:16;14131;;13872:162;;-1:-1:-1;14045:23:0;;14131:35;;14150:16;14131:35;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;14109:17;;14090:16;;:36;;14109:17;14090:36;:::i;:::-;14071:56;;:15;:56;:::i;:::-;:136;;;;:::i;:::-;14045:162;-1:-1:-1;14218:25:0;14246:33;14045:162;14246:15;:33;:::i;:::-;14218:61;-1:-1:-1;14300:26:0;14329:22;:15;14349:1;14329:19;:22::i;:::-;14300:51;-1:-1:-1;14362:26:0;14391:39;:15;14300:51;14391:19;:39::i;:::-;14362:68;-1:-1:-1;14469:21:0;14501:36;14362:68;14501:16;:36::i;:::-;14549:18;14570:44;:21;14596:17;14570:25;:44::i;:::-;14549:65;-1:-1:-1;14635:23:0;14661:54;14697:17;14661:31;14549:65;14676:15;14661:14;:31::i;:::-;:35;;:54::i;:::-;14635:80;;14726:49;14739:18;14759:15;14726:12;:49::i;:::-;14830:9;;14822:57;;14786:12;;-1:-1:-1;;;;;14830:9:0;;14853:21;;14786:12;14822:57;14786:12;14822:57;14853:21;14830:9;14822:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14809:70;;;;;14898:7;14890:16;;;;;;13818:1096;;;;;;;;;;13776:1138;:::o;8964:456::-;9032:7;9052:25;9108:3;9089:6;:16;;;9080:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;9052:59;;9123:26;9180:3;9161:6;:16;;;9152:6;:25;;;;:::i;:::-;:31;;;;:::i;:::-;9123:60;-1:-1:-1;9223:38:0;9123:60;9223:17;:38;:::i;:::-;9213:4;9196:23;;;;:8;:23;;;;;:65;;:23;;;:65;;;;;:::i;:::-;;;;-1:-1:-1;9301:4:0;;-1:-1:-1;;;;;;9277:70:0;;;9308:38;9329:17;9308:18;:38;:::i;:::-;9277:70;;160:25:1;;;148:2;133:18;9277:70:0;;;;;;;9393:18;9366:25;9374:17;9366:6;:25;:::i;:::-;:45;;;;:::i;:::-;9358:54;8964:456;-1:-1:-1;;;;;8964:456:0:o;9428:460::-;9497:7;9517:25;9574:3;9554:7;:17;;;9545:6;:26;;;;:::i;:::-;:32;;;;:::i;:::-;9517:60;;9589:26;9647:3;9627:7;:17;;;9618:6;:26;;;;:::i;11221:320::-;-1:-1:-1;;;;;11298:18:0;;11290:64;;;;-1:-1:-1;;;11290:64:0;;10478:2:1;11290:64:0;;;10460:21:1;10517:2;10497:18;;;10490:30;10556:34;10536:18;;;10529:62;-1:-1:-1;;;10607:18:1;;;10600:31;10648:19;;11290:64:0;10276:397:1;11290:64:0;11382:63;11401:5;11382:63;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11382:14:0;;;;;;:8;:14;;;;;;;:63;:18;:63::i;:::-;-1:-1:-1;;;;;11365:14:0;;;;;;:8;:14;;;;;:80;11466:7;;:18;;11478:5;11466:11;:18::i;:::-;11456:7;:28;11500:33;;160:25:1;;;11523:1:0;;-1:-1:-1;;;;;11500:33:0;;;;;148:2:1;133:18;11500:33:0;;;;;;;11221:320;;:::o;1555:132::-;1613:7;1640:39;1644:1;1647;1640:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1633:46;1555:132;-1:-1:-1;;;1555:132:0:o;953:136::-;1011:7;1038:43;1042:1;1045;1038:43;;;;;;;;;;;;;;;;;:3;:43::i;15711:475::-;15801:16;;;15815:1;15801:16;;;;;;;;15777:21;;15801:16;;;;;;;;;;-1:-1:-1;15801:16:0;15777:40;;15846:4;15828;15833:1;15828:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15828:23:0;;;:7;;;;;;;;;;:23;;;;15872:15;;:22;;;-1:-1:-1;;;15872:22:0;;;;:15;;;;;:20;;:22;;;;;15828:7;;15872:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15862:4;15867:1;15862:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15862:32:0;;;:7;;;;;;;;;:32;15939:15;;15907:62;;15924:4;;15939:15;15957:11;15907:8;:62::i;:::-;15982:15;;:196;;-1:-1:-1;;;15982:196:0;;-1:-1:-1;;;;;15982:15:0;;;;:66;;:196;;16063:11;;15982:15;;16105:4;;16132;;16152:15;;15982:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15766:420;15711:475;:::o;1297:250::-;1355:7;1379:1;1384;1379:6;1375:47;;-1:-1:-1;1409:1:0;1402:8;;1375:47;1434:9;1446:5;1450:1;1446;:5;:::i;:::-;1434:17;-1:-1:-1;1479:1:0;1470:5;1474:1;1434:17;1470:5;:::i;:::-;:10;1462:56;;;;-1:-1:-1;;;1462:56:0;;12385:2:1;1462:56:0;;;12367:21:1;12424:2;12404:18;;;12397:30;12463:34;12443:18;;;12436:62;-1:-1:-1;;;12514:18:1;;;12507:31;12555:19;;1462:56:0;12183:397:1;16541:372:0;16654:15;;16622:62;;16639:4;;-1:-1:-1;;;;;16654:15:0;16672:11;16622:8;:62::i;:::-;16697:15;;16849;;16697:208;;-1:-1:-1;;;16697:208:0;;16771:4;16697:208;;;12926:34:1;12976:18;;;12969:34;;;16697:15:0;13019:18:1;;;13012:34;;;13062:18;;;13055:34;-1:-1:-1;;;;;16849:15:0;;;13105:19:1;;;13098:44;16879:15:0;13158:19:1;;;13151:35;16697:15:0;;;:31;;16737:9;;12860:19:1;;16697:208:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16541:372;;:::o;1097:192::-;1183:7;1219:12;1211:6;;;;1203:29;;;;-1:-1:-1;;;1203:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1243:9:0;1255:5;1259:1;1255;:5;:::i;1695:278::-;1781:7;1816:12;1809:5;1801:28;;;;-1:-1:-1;;;1801:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1840:9:0;1852:5;1856:1;1852;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:247::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;1883:456::-;1960:6;1968;1976;2029:2;2017:9;2008:7;2004:23;2000:32;1997:52;;;2045:1;2042;2035:12;1997:52;2084:9;2071:23;2103:31;2128:5;2103:31;:::i;:::-;2153:5;-1:-1:-1;2210:2:1;2195:18;;2182:32;2223:33;2182:32;2223:33;:::i;:::-;1883:456;;2275:7;;-1:-1:-1;;;2329:2:1;2314:18;;;;2301:32;;1883:456::o;2994:385::-;3080:6;3088;3096;3104;3157:3;3145:9;3136:7;3132:23;3128:33;3125:53;;;3174:1;3171;3164:12;3125:53;-1:-1:-1;;3197:23:1;;;3267:2;3252:18;;3239:32;;-1:-1:-1;3318:2:1;3303:18;;3290:32;;3369:2;3354:18;3341:32;;-1:-1:-1;2994:385:1;-1:-1:-1;2994:385:1:o;3384:416::-;3449:6;3457;3510:2;3498:9;3489:7;3485:23;3481:32;3478:52;;;3526:1;3523;3516:12;3478:52;3565:9;3552:23;3584:31;3609:5;3584:31;:::i;:::-;3634:5;-1:-1:-1;3691:2:1;3676:18;;3663:32;3733:15;;3726:23;3714:36;;3704:64;;3764:1;3761;3754:12;3704:64;3787:7;3777:17;;;3384:416;;;;;:::o;3805:383::-;3882:6;3890;3898;3951:2;3939:9;3930:7;3926:23;3922:32;3919:52;;;3967:1;3964;3957:12;3919:52;4003:9;3990:23;3980:33;;4060:2;4049:9;4045:18;4032:32;4022:42;;4114:2;4103:9;4099:18;4086:32;4127:31;4152:5;4127:31;:::i;:::-;4177:5;4167:15;;;3805:383;;;;;:::o;4193:388::-;4261:6;4269;4322:2;4310:9;4301:7;4297:23;4293:32;4290:52;;;4338:1;4335;4328:12;4290:52;4377:9;4364:23;4396:31;4421:5;4396:31;:::i;:::-;4446:5;-1:-1:-1;4503:2:1;4488:18;;4475:32;4516:33;4475:32;4516:33;:::i;4586:127::-;4647:10;4642:3;4638:20;4635:1;4628:31;4678:4;4675:1;4668:15;4702:4;4699:1;4692:15;4718:128;4785:9;;;4806:11;;;4803:37;;;4820:18;;:::i;4851:125::-;4916:9;;;4937:10;;;4934:36;;;4950:18;;:::i;4981:356::-;5183:2;5165:21;;;5202:18;;;5195:30;5261:34;5256:2;5241:18;;5234:62;5328:2;5313:18;;4981:356::o;5703:217::-;5743:1;5769;5759:132;;5813:10;5808:3;5804:20;5801:1;5794:31;5848:4;5845:1;5838:15;5876:4;5873:1;5866:15;5759:132;-1:-1:-1;5905:9:1;;5703:217::o;9070:405::-;9272:2;9254:21;;;9311:2;9291:18;;;9284:30;9350:34;9345:2;9330:18;;9323:62;-1:-1:-1;;;9416:2:1;9401:18;;9394:39;9465:3;9450:19;;9070:405::o;9480:408::-;9682:2;9664:21;;;9721:2;9701:18;;;9694:30;9760:34;9755:2;9740:18;;9733:62;-1:-1:-1;;;9826:2:1;9811:18;;9804:42;9878:3;9863:19;;9480:408::o;9893:168::-;9966:9;;;9997;;10014:15;;;10008:22;;9994:37;9984:71;;10035:18;;:::i;10810:127::-;10871:10;10866:3;10862:20;10859:1;10852:31;10902:4;10899:1;10892:15;10926:4;10923:1;10916:15;10942:251;11012:6;11065:2;11053:9;11044:7;11040:23;11036:32;11033:52;;;11081:1;11078;11071:12;11033:52;11113:9;11107:16;11132:31;11157:5;11132:31;:::i;11198:980::-;11460:4;11508:3;11497:9;11493:19;11539:6;11528:9;11521:25;11565:2;11603:6;11598:2;11587:9;11583:18;11576:34;11646:3;11641:2;11630:9;11626:18;11619:31;11670:6;11705;11699:13;11736:6;11728;11721:22;11774:3;11763:9;11759:19;11752:26;;11813:2;11805:6;11801:15;11787:29;;11834:1;11844:195;11858:6;11855:1;11852:13;11844:195;;;11923:13;;-1:-1:-1;;;;;11919:39:1;11907:52;;12014:15;;;;11979:12;;;;11955:1;11873:9;11844:195;;;-1:-1:-1;;;;;;;12095:32:1;;;;12090:2;12075:18;;12068:60;-1:-1:-1;;;12159:3:1;12144:19;12137:35;12056:3;11198:980;-1:-1:-1;;;11198:980:1:o;13197:306::-;13285:6;13293;13301;13354:2;13342:9;13333:7;13329:23;13325:32;13322:52;;;13370:1;13367;13360:12;13322:52;13399:9;13393:16;13383:26;;13449:2;13438:9;13434:18;13428:25;13418:35;;13493:2;13482:9;13478:18;13472:25;13462:35;;13197:306;;;;;:::o

Swarm Source

ipfs://c6ffe4e938c8f843754534931fb26f7780b62acb41ab978098eb749ec6eb8a52
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.