ETH Price: $3,632.46 (+0.86%)
 

Overview

Max Total Supply

1,000,000,000 oLeash

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
12,412,584.188374342838070747 oLeash

Value
$0.00
0x46609f85d7d6be9c014868ece56682ed21b6ea75
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:
OrdinalLeash

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
https://t.me/ordinal_leash_erc
*/
//SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
// Just the basic IERC20 interface
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    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);
}

// We use the Auth contract mainly to have two devs able to interacet with the contract
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

interface IDEXRouter {
    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;
}

contract OrdinalLeash is IERC20, Auth {
   
    // Constant addresses 
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;
    IDEXRouter public constant router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    // Immutable vars
    address public immutable pair; // After we set the pair we don't have to change it again

    // Token info is constant
    string constant _name = "Ordinal Leash";
    string constant _symbol = "oLeash";
    uint8 constant _decimals = 18;

    // Total supply is 1 billion
    uint256 _totalSupply = 1 * (10**9) * (10 ** _decimals);

    // The tax divisor is also constant (and hence immutable)
    // 1000 so we can also use halves, like 2.5%
    uint256 constant taxDivisor = 1_000;
    
    // 10 / 1000 = 0.01 = 1%
    uint256 public _maxTxAmount = _totalSupply * 20 / taxDivisor; 
    uint256 public _maxWalletToken =  _totalSupply * 20 / taxDivisor; 

    // Keep track of wallet balances and approvals (allowance)
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    // Mapping to keep track of what wallets/contracts are exempt
    // from fees
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt; // Both wallet + max TX

    // Also, to keep it organized, a seperate mapping to exclude the presale
    // and locker from limits
    mapping (address => bool) presaleOrlock;

    //fees are mulitplied by 10 to allow decimals, and therefore dividied by 1000 (see takefee)
    uint256 marketingBuyFee = 10;
    uint256 liquidityBuyFee = 0;
    uint256 developmentBuyFee = 10;
    uint256 public totalBuyFee = marketingBuyFee + liquidityBuyFee + developmentBuyFee;

    uint256 marketingSellFee = 10;
    uint256 liquiditySellFee = 0;
    uint256 developmentSellFee = 10;
    uint256 public totalSellFee = marketingSellFee + liquiditySellFee + developmentSellFee;

    // For the sniper friends
    uint256 private sniperTaxTill; 

    // In case anything would go wrong with fees we can just disable them
    bool feesEnabled = true;

    // Whether tx limits should apply or not 
    bool limits = true;

    // To keep track of the tokens collected to swap
    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForDev;

    // Wallets used to send the fees to
    address public liquidityWallet;
    address public marketingWallet;
    address public developmentWallet;

    // One time trade lock
    bool tradeBlock = true;
    bool lockUsed = false;

    // Contract cant be tricked into spam selling exploit
    uint256 lastSellTime;
    
    // When to swap contract tokens, and how many to swap
    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 10 / 100_000; // 0.01%
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    // This will just check if the transferf is called from within 
    // the token -> ETH swap when processing the fees (and adding LP)
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }


    constructor () Auth(msg.sender) {
        // Create the lp pair
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));

        // Exclude the contract
        isFeeExempt[address(this)] = true;
        isTxLimitExempt[address(this)] = true;

        // Exclude the owner
        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        
        // Exclude the pair
        isTxLimitExempt[address(pair)] = true; 

        // Exclude the router 
        isTxLimitExempt[address(router)] = true;

        // Set fee receivers
        liquidityWallet = 0xC1A175557237f29AC121954F0703c7d7F9037b18;
        marketingWallet = 0xC1A175557237f29AC121954F0703c7d7F9037b18;
        developmentWallet = 0xC1A175557237f29AC121954F0703c7d7F9037b18;

        // Approve this contract & owner to interact with the 
        // router and pair contract (for swapping)
        _approve(address(this), address(router), _totalSupply);
        _approve(msg.sender, address(pair), _totalSupply);

        // Mint the tokens
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function getPair() external view returns (address){return pair;}

    // Internal approve 
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    // Regular approve the contract
    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    // We actually only need to exempt any locks or presale addresses
    // we could use a feeexempt or authorize it, but this is a bit cleaner
    function excludeLockorPresale(address add) external authorized {
        // Exclude from fees
        isFeeExempt[add] = true;
        isTxLimitExempt[add] = true;
        // We want to allow transfers to locks and from the presale
        // address when trading is not yet enabled. 
        presaleOrlock[add] = true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        uint256 senderBalance = _balances[sender];
        // Check if the sender has sufficient balance
        require(senderBalance >= amount, "Insufficient Balance");
        // Update balances
        _balances[sender] = _balances[sender] - amount; 
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    // Set the buy fees, this can not exceed 15%, 150 / 1000 = 0.15 = 15%
    function setBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _developFee) external authorized{
        require(_marketingFee + _liquidityFee + _developFee <= 100); // max 10%
        marketingBuyFee = _marketingFee;
        liquidityBuyFee = _liquidityFee;
        developmentBuyFee = _developFee;
        totalBuyFee = _marketingFee + _liquidityFee + _developFee;
    }
    
    // Set the sell fees, this can not exceed 15%, 150 / 1000 = 0.15 = 15%
    function setSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _developFee) external authorized{
        require(_marketingFee + _liquidityFee + _developFee <= 250); // max 25%
        marketingSellFee = _marketingFee;
        liquiditySellFee = _liquidityFee;
        developmentSellFee = _developFee;
        totalSellFee = _marketingFee + _liquidityFee + _developFee;
    }

    // To change the tax receiving wallets
    function setWallets(address _marketingWallet, address _liquidityWallet, address _developWallet) external authorized {
        marketingWallet = _marketingWallet;
        liquidityWallet = _liquidityWallet;
        developmentWallet = _developWallet;
    }

    // To limit the number of tokens a wallet can buy, especially relevant at launch
    function setMaxWallet(uint256 percent) external authorized {
        require(percent >= 10); //should be at least 1% of the total supply (note divisor is 1000)
        _maxWalletToken = ( _totalSupply * percent ) / taxDivisor;
    }

    // To limit the number of tokens per transactions
    function setTxLimit(uint256 percent) external authorized {
        require(percent >= 10); //should be at least 1% of the total supply (note divisor is 1000)
        _maxTxAmount = ( _totalSupply * percent ) / taxDivisor;
    }
    
    function checkLimits(address sender,address recipient, uint256 amount) internal view {
        // If both sender and recipient are excluded we don't have to limit 
        if (isTxLimitExempt[sender] && isTxLimitExempt[recipient]){return;}

        // In any other case we will check whether this is a buy or sell
        // to determine the tx limit
        
        // buy
        if (sender == pair && !isTxLimitExempt[recipient]) {  
            require(amount <= _maxTxAmount, "Max tx limit");

        // sell
        } else if(recipient == pair && !isTxLimitExempt[sender] ) { 
            require(amount <= _maxTxAmount, "Max tx limit");
        }

        // Also check max wallet 
        if (!isTxLimitExempt[recipient]) {
            require(amount + balanceOf(recipient) <= _maxWalletToken, "Max wallet");
        }

    }

    // We will lift the transaction limits just after launch
    function liftLimits() external authorized {
        limits = false;
    }

    // This would make the token fee-less in case taking fees
    // would at any point block transfers. This is reversible
    function setFeeTaking(bool takeFees) external authorized {
        feesEnabled = takeFees;
    }

    // Enable trading - this can only be called once (by just the owner)
    function startTrading() external onlyOwner {
        require(lockUsed == false);
        tradeBlock = false;
        sniperTaxTill = block.number + 2; // (<sniperTaxTill, so first block)
        lockUsed = true;
    }
    
    // When and if to swap the tokens in the contract
    function setTokenSwapSettings(bool _enabled, uint256 _threshold) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _threshold * (10 ** _decimals); 
    }
    
    // Check if the contract should swap tokens
    function shouldTokenSwap(address recipient) internal view returns (bool) {
        return recipient == pair // i.e. is sell
        && lastSellTime + 1 < block.timestamp // block contract spam sells
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function takeFee(address from, address to, uint256 amount) internal returns (uint256) {

        // If the sender or receiver is exempt from fees, skip fees
        if (isFeeExempt[from] || isFeeExempt[to]) {
            return amount;
        }

        // This does not charge for wallet-wallet transfers
        uint256 fees;

        // Sniper tax
        if (block.number < sniperTaxTill) {
            fees = amount * 98 / 100; // 98% tax
            tokensForLiquidity += (fees * 50) / 98;
            tokensForMarketing += (fees * 48) / 98;
        }

        // On sell
        else if (to == pair && totalSellFee > 0) {
            fees = amount * totalSellFee / taxDivisor;
            tokensForLiquidity += (fees * liquiditySellFee)   / totalSellFee;
            tokensForDev       += (fees * developmentSellFee) / totalSellFee;
            tokensForMarketing += (fees * marketingSellFee)   / totalSellFee;
        }

        // On buy
        else if (from == pair && totalBuyFee > 0) {
            fees = amount * totalBuyFee / taxDivisor;
            tokensForLiquidity += (fees * liquidityBuyFee)   / totalBuyFee ;
            tokensForDev       += (fees * developmentBuyFee) / totalBuyFee;
            tokensForMarketing += (fees * marketingBuyFee)   / totalBuyFee;
        }

        // If we collected fees, send them to the contract
        if (fees > 0) {
            _basicTransfer(from, address(this), fees);
            emit Transfer(from, address(this), fees);
        }

        // Return the taxed amount
        return amount -= fees;
    }

    
    function swapTokensForEth(uint256 tokenAmount) private {
        // Swap path token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        // Make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // Add liquidity from the contract. Now the LP tokens get send to the lP
        // wallet, but we could also change the LP receiver to the burn address leter
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            liquidityWallet,
            block.timestamp
        );
    }

    function swapBack() internal swapping {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {return;}
  
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;

        uint256 initialETHBalance = address(this).balance;

        // Swap the tokens for ETH
        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) / totalTokensToSwap;
        uint256 ethForDev       = (ethBalance * tokensForDev)       / totalTokensToSwap;
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        // Reset token fee counts
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        // Send Dev fees
        (success, ) = address(developmentWallet).call{value: ethForDev}("");

        // Add liquidty
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }

        // Whatever remains (this should be ~ethForMarketing) send to the marketing wallet
        (success, ) = address(marketingWallet).call{value: address(this).balance}("");

        lastSellTime = block.timestamp;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        if (owner == msg.sender){
            return _basicTransfer(msg.sender, recipient, amount);
        }
        else {
            return _transferFrom(msg.sender, recipient, amount);
        }
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        if(_allowances[sender][msg.sender] != _totalSupply){
            // Get the current allowance
            uint256 curAllowance =  _allowances[sender][msg.sender];
            require(curAllowance >= amount, "Insufficient Allowance");
            _allowances[sender][msg.sender] -= amount;
        }
        return _transferFrom(sender, recipient, amount);
    }


    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        // These transfers are always feeless and limitless
        if ( authorizations[sender] || authorizations[recipient] || presaleOrlock[sender] || inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        // In any other case, check if trading is open already
        require(tradeBlock == false,"Trading not open yet");
            
        // If limits are enabled we check the max wallet and max tx.
        if (limits){checkLimits(sender, recipient, amount);}

        // Check how much fees are accumulated in the contract, if > threshold, swap
        if(shouldTokenSwap(recipient)){ swapBack();}

        // Charge transaction fees (only swaps) when enabled
        if(feesEnabled){
             amount = (recipient == pair || sender == pair) ? takeFee(sender, recipient, amount) : amount;
        } 

        // Send the remaining tokens, after fee
        _basicTransfer(sender, recipient, amount);

        emit Transfer(sender, recipient, amount);
        return true;
    }

    // In case anyone would send ETH to the contract directly
    // or when, for some reason, autoswap would fail. We 
    // send the contact ETH to the marketing wallet
    function clearStuckWETH(uint256 perc) external authorized {
        uint256 amountWETH = address(this).balance;
        payable(marketingWallet).transfer(amountWETH * perc / 100);
    }

}

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":false,"internalType":"address","name":"owner","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":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":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"perc","type":"uint256"}],"name":"clearStuckWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"excludeLockorPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liftLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"takeFees","type":"bool"}],"name":"setFeeTaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"setTokenSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_liquidityWallet","type":"address"},{"internalType":"address","name":"_developWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052620000126012600a620005a3565b6200002290633b9aca00620005bb565b6002556103e86002546014620000399190620005bb565b620000459190620005d5565b6003556103e860025460146200005c9190620005bb565b620000689190620005d5565b600455600a8080556000600b819055600c829055620000889082620005f8565b620000949190620005f8565b600d55600a600e8190556000600f8190556010829055620000b69082620005f8565b620000c29190620005f8565b6011556013805461010161ffff199091161790556019805461ffff60a01b1916600160a01b179055601b805460ff19166001179055600254620186a0906200010c90600a620005bb565b620001189190620005d5565b601c553480156200012857600080fd5b50600080546001600160a01b031916339081178255815260016020818152604092839020805460ff1916909217909155815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d9263c45a01559260048083019391928290030181865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca91906200060e565b6001600160a01b031663c9c65396737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025191906200060e565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c491906200060e565b6001600160a01b031660808190523060008181526007602081815260408084208054600160ff1991821681179092556008808552838720805483168417905533875294845282862080548216831790559390925280842080548416831790559483529382208054821685179055737a250d5630b4cf539739df2c5dacb4c659f2488d918290527f226e7c4e32ba0cd918c39b21526eb23f3f5958fcfd83d5cf69b9510bf01e2e1780549091169093179092556017805473c1a175557237f29ac121954f0703c7d7f9037b186001600160a01b0319918216811790925560188054821683179055601980549091169091179055600254620003c592906200042d565b620003dc336080516002546200042d60201b60201c565b60025433600081815260056020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000639565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004e5578160001904821115620004c957620004c96200048e565b80851615620004d757918102915b93841c9390800290620004a9565b509250929050565b600082620004fe575060016200059d565b816200050d575060006200059d565b8160018114620005265760028114620005315762000551565b60019150506200059d565b60ff8411156200054557620005456200048e565b50506001821b6200059d565b5060208310610133831016604e8410600b841016171562000576575081810a6200059d565b620005828383620004a4565b80600019048211156200059957620005996200048e565b0290505b92915050565b6000620005b460ff841683620004ed565b9392505050565b80820281158282048414176200059d576200059d6200048e565b600082620005f357634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200059d576200059d6200048e565b6000602082840312156200062157600080fd5b81516001600160a01b0381168114620005b457600080fd5b6080516121576200068d6000396000818161058501528181610616015281816110220152818161105d01528181611273015281816113180152818161143b015281816117cc01526118a201526121576000f3fe6080604052600436106102295760003560e01c806375f0a87411610123578063c1f1b1b5116100ab578063f2fde38b1161006f578063f2fde38b146106e0578063f60b3d6d14610700578063f887ea4014610715578063fe6236741461073d578063fe9fbb801461075d57600080fd5b8063c1f1b1b514610607578063d46980161461063a578063dd62ed3e1461065a578063eb341040146106a0578063f0b37c04146106c057600080fd5b80639d9241ec116100f25780639d9241ec1461055d578063a8aa1b3114610573578063a9059cbb146105a7578063b6a5d7de146105c7578063c04a5414146105e757600080fd5b806375f0a874146104ca57806378109e54146105025780637d1db4a51461051857806395d89b411461052e57600080fd5b80632f54bf6e116101b15780635d0044ca116101755780635d0044ca1461041a5780636ddd17131461043a57806370a082311461045457806372f2943a1461048a57806375cb1bd1146104aa57600080fd5b80632f54bf6e14610379578063313ce567146103a8578063571ac8b0146103c457806359b107b9146103e45780635c85974f146103fa57600080fd5b80630d075d9c116101f85780630d075d9c146102ef5780630f683e901461030f57806318160ddd1461032f57806323b872dd14610344578063293230b81461036457600080fd5b80630445b6671461023557806304fda8ff1461025e57806306fdde0314610280578063095ea7b3146102bf57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b601c5481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5061027e610279366004611c15565b61077d565b005b34801561028c57600080fd5b5060408051808201909152600d81526c09ee4c8d2dcc2d84098cac2e6d609b1b60208201525b6040516102559190611c2e565b3480156102cb57600080fd5b506102df6102da366004611c94565b6107ff565b6040519015158152602001610255565b3480156102fb57600080fd5b5061027e61030a366004611cc0565b61086c565b34801561031b57600080fd5b5061027e61032a366004611cc0565b6108df565b34801561033b57600080fd5b5060025461024b565b34801561035057600080fd5b506102df61035f366004611cec565b610952565b34801561037057600080fd5b5061027e610a88565b34801561038557600080fd5b506102df610394366004611d2d565b6000546001600160a01b0391821691161490565b3480156103b457600080fd5b5060405160128152602001610255565b3480156103d057600080fd5b506102df6103df366004611d2d565b610af9565b3480156103f057600080fd5b5061024b600d5481565b34801561040657600080fd5b5061027e610415366004611c15565b610b07565b34801561042657600080fd5b5061027e610435366004611c15565b610b5b565b34801561044657600080fd5b50601b546102df9060ff1681565b34801561046057600080fd5b5061024b61046f366004611d2d565b6001600160a01b031660009081526005602052604090205490565b34801561049657600080fd5b5061027e6104a5366004611d2d565b610baf565b3480156104b657600080fd5b5061027e6104c5366004611d4a565b610c1f565b3480156104d657600080fd5b506018546104ea906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561050e57600080fd5b5061024b60045481565b34801561052457600080fd5b5061024b60035481565b34801561053a57600080fd5b506040805180820190915260068152650de98cac2e6d60d31b60208201526102b2565b34801561056957600080fd5b5061024b60115481565b34801561057f57600080fd5b506104ea7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b357600080fd5b506102df6105c2366004611c94565b610c83565b3480156105d357600080fd5b5061027e6105e2366004611d2d565b610cb5565b3480156105f357600080fd5b506019546104ea906001600160a01b031681565b34801561061357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006104ea565b34801561064657600080fd5b506017546104ea906001600160a01b031681565b34801561066657600080fd5b5061024b610675366004611d95565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156106ac57600080fd5b5061027e6106bb366004611de3565b610d06565b3480156106cc57600080fd5b5061027e6106db366004611d2d565b610d56565b3480156106ec57600080fd5b5061027e6106fb366004611d2d565b610da1565b34801561070c57600080fd5b5061027e610e37565b34801561072157600080fd5b506104ea737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561074957600080fd5b5061027e610758366004611dff565b610e69565b34801561076957600080fd5b506102df610778366004611d2d565b610ea1565b61078633610ea1565b6107ab5760405162461bcd60e51b81526004016107a290611e1a565b60405180910390fd5b60185447906001600160a01b03166108fc60646107c88585611e55565b6107d29190611e6c565b6040518115909202916000818181858888f193505050501580156107fa573d6000803e3d6000fd5b505050565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061085a9086815260200190565b60405180910390a35060015b92915050565b61087533610ea1565b6108915760405162461bcd60e51b81526004016107a290611e1a565b60648161089e8486611e8e565b6108a89190611e8e565b11156108b357600080fd5b600a839055600b829055600c819055806108cd8385611e8e565b6108d79190611e8e565b600d55505050565b6108e833610ea1565b6109045760405162461bcd60e51b81526004016107a290611e1a565b60fa816109118486611e8e565b61091b9190611e8e565b111561092657600080fd5b600e839055600f8290556010819055806109408385611e8e565b61094a9190611e8e565b601155505050565b60006001600160a01b03841661097a5760405162461bcd60e51b81526004016107a290611ea1565b6001600160a01b0383166109a05760405162461bcd60e51b81526004016107a290611ee6565b6002546001600160a01b038516600090815260066020908152604080832033845290915290205414610a73576001600160a01b038416600090815260066020908152604080832033845290915290205482811015610a395760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064016107a2565b6001600160a01b038516600090815260066020908152604080832033845290915281208054859290610a6c908490611f29565b9091555050505b610a7e848484610ebf565b90505b9392505050565b6000546001600160a01b03163314610ab25760405162461bcd60e51b81526004016107a290611f3c565b601954600160a81b900460ff1615610ac957600080fd5b6019805460ff60a01b19169055610ae1436002611e8e565b6012556019805460ff60a81b1916600160a81b179055565b6000610866826002546107ff565b610b1033610ea1565b610b2c5760405162461bcd60e51b81526004016107a290611e1a565b600a811015610b3a57600080fd5b6103e881600254610b4b9190611e55565b610b559190611e6c565b60035550565b610b6433610ea1565b610b805760405162461bcd60e51b81526004016107a290611e1a565b600a811015610b8e57600080fd5b6103e881600254610b9f9190611e55565b610ba99190611e6c565b60045550565b610bb833610ea1565b610bd45760405162461bcd60e51b81526004016107a290611e1a565b6001600160a01b031660009081526007602090815260408083208054600160ff1991821681179092556008845282852080548216831790556009909352922080549091169091179055565b610c2833610ea1565b610c445760405162461bcd60e51b81526004016107a290611e1a565b601880546001600160a01b039485166001600160a01b031991821617909155601780549385169382169390931790925560198054919093169116179055565b60008054336001600160a01b0390911603610caa57610ca333848461110c565b9050610866565b610ca3338484610ebf565b6000546001600160a01b03163314610cdf5760405162461bcd60e51b81526004016107a290611f3c565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610d0f33610ea1565b610d2b5760405162461bcd60e51b81526004016107a290611e1a565b601b805460ff1916831515179055610d456012600a612040565b610d4f9082611e55565b601c555050565b6000546001600160a01b03163314610d805760405162461bcd60e51b81526004016107a290611f3c565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610dcb5760405162461bcd60e51b81526004016107a290611f3c565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b610e4033610ea1565b610e5c5760405162461bcd60e51b81526004016107a290611e1a565b6013805461ff0019169055565b610e7233610ea1565b610e8e5760405162461bcd60e51b81526004016107a290611e1a565b6013805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60006001600160a01b038416610ee75760405162461bcd60e51b81526004016107a290611ea1565b6001600160a01b038316610f0d5760405162461bcd60e51b81526004016107a290611ee6565b6001600160a01b03841660009081526001602052604090205460ff1680610f4c57506001600160a01b03831660009081526001602052604090205460ff165b80610f6f57506001600160a01b03841660009081526009602052604090205460ff165b80610f7c5750601d5460ff165b15610f9357610f8c84848461110c565b9050610a81565b601954600160a01b900460ff1615610fe45760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107a2565b601354610100900460ff1615610fff57610fff848484611227565b61100883611437565b15611015576110156114c6565b60135460ff16156110a9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148061109157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b61109b57816110a6565b6110a68484846116f9565b91505b6110b484848461110c565b50826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110fa91815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600560205260408120548281101561116c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b60448201526064016107a2565b6001600160a01b038516600090815260056020526040902054611190908490611f29565b6001600160a01b0380871660009081526005602052604080822093909355908616815220546111c0908490611e8e565b6001600160a01b0380861660008181526005602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112149087815260200190565b60405180910390a3506001949350505050565b6001600160a01b03831660009081526008602052604090205460ff16801561126757506001600160a01b03821660009081526008602052604090205460ff165b1561127157505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480156112cb57506001600160a01b03821660009081526008602052604090205460ff16155b15611316576003548111156113115760405162461bcd60e51b815260206004820152600c60248201526b13585e081d1e081b1a5b5a5d60a21b60448201526064016107a2565b6113b6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614801561137057506001600160a01b03831660009081526008602052604090205460ff16155b156113b6576003548111156113b65760405162461bcd60e51b815260206004820152600c60248201526b13585e081d1e081b1a5b5a5d60a21b60448201526064016107a2565b6001600160a01b03821660009081526008602052604090205460ff166107fa576004546001600160a01b0383166000908152600560205260409020546113fc9083611e8e565b11156107fa5760405162461bcd60e51b815260206004820152600a60248201526913585e081dd85b1b195d60b21b60448201526064016107a2565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148015611487575042601a5460016114859190611e8e565b105b80156114965750601d5460ff16155b80156114a45750601b5460ff165b80156108665750601c5430600090815260056020526040902054101592915050565b601d805460ff1916600117905530600090815260056020526040812054905060006016546014546015546114fa9190611e8e565b6115049190611e8e565b90506000821580611513575081155b15611520575050506116ed565b6000600283601554866115339190611e55565b61153d9190611e6c565b6115479190611e6c565b905060006115558286611f29565b905047611561826119fd565b600061156d8247611f29565b9050600086601454836115809190611e55565b61158a9190611e6c565b90506000876016548461159d9190611e55565b6115a79190611e6c565b90506000816115b68486611f29565b6115c09190611f29565b60006015819055601481905560168190556019546040519293506001600160a01b031691849181818185875af1925050503d806000811461161d576040519150601f19603f3d011682016040523d82523d6000602084013e611622565b606091505b509098505086158015906116365750600081115b15611689576116458782611b69565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6018546040516001600160a01b03909116904790600081818185875af1925050503d80600081146116d6576040519150601f19603f3d011682016040523d82523d6000602084013e6116db565b606091505b505042601a5550505050505050505050505b601d805460ff19169055565b6001600160a01b03831660009081526007602052604081205460ff168061173857506001600160a01b03831660009081526007602052604090205460ff165b15611744575080610a81565b60006012544310156117ca57606461175d846062611e55565b6117679190611e6c565b90506062611776826032611e55565b6117809190611e6c565b601560008282546117919190611e8e565b90915550606290506117a4826030611e55565b6117ae9190611e6c565b601460008282546117bf9190611e8e565b909155506119979050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614801561180d57506000601154115b156118a0576103e8601154846118239190611e55565b61182d9190611e6c565b9050601154600f54826118409190611e55565b61184a9190611e6c565b6015600082825461185b9190611e8e565b90915550506011546010546118709083611e55565b61187a9190611e6c565b6016600082825461188b9190611e8e565b9091555050601154600e546117a49083611e55565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161480156118e357506000600d54115b15611997576103e8600d54846118f99190611e55565b6119039190611e6c565b9050600d54600b54826119169190611e55565b6119209190611e6c565b601560008282546119319190611e8e565b9091555050600d54600c546119469083611e55565b6119509190611e6c565b601660008282546119619190611e8e565b9091555050600d54600a546119769083611e55565b6119809190611e6c565b601460008282546119919190611e8e565b90915550505b80156119ea576119a885308361110c565b5060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6119f48184611f29565b95945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a3257611a3261204f565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190612065565b81600181518110611adb57611adb61204f565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790611b33908590600090869030904290600401612082565b600060405180830381600087803b158015611b4d57600080fd5b505af1158015611b61573d6000803e3d6000fd5b505050505050565b60175460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0390911660848201524260a4820152737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990839060c40160606040518083038185885af1158015611be9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c0e91906120f3565b5050505050565b600060208284031215611c2757600080fd5b5035919050565b600060208083528351808285015260005b81811015611c5b57858101830151858201604001528201611c3f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611c9157600080fd5b50565b60008060408385031215611ca757600080fd5b8235611cb281611c7c565b946020939093013593505050565b600080600060608486031215611cd557600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611d0157600080fd5b8335611d0c81611c7c565b92506020840135611d1c81611c7c565b929592945050506040919091013590565b600060208284031215611d3f57600080fd5b8135610a8181611c7c565b600080600060608486031215611d5f57600080fd5b8335611d6a81611c7c565b92506020840135611d7a81611c7c565b91506040840135611d8a81611c7c565b809150509250925092565b60008060408385031215611da857600080fd5b8235611db381611c7c565b91506020830135611dc381611c7c565b809150509250929050565b80358015158114611dde57600080fd5b919050565b60008060408385031215611df657600080fd5b611cb283611dce565b600060208284031215611e1157600080fd5b610a8182611dce565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761086657610866611e3f565b600082611e8957634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561086657610866611e3f565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561086657610866611e3f565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600181815b80851115611f97578160001904821115611f7d57611f7d611e3f565b80851615611f8a57918102915b93841c9390800290611f61565b509250929050565b600082611fae57506001610866565b81611fbb57506000610866565b8160018114611fd15760028114611fdb57611ff7565b6001915050610866565b60ff841115611fec57611fec611e3f565b50506001821b610866565b5060208310610133831016604e8410600b841016171561201a575081810a610866565b6120248383611f5c565b806000190482111561203857612038611e3f565b029392505050565b6000610a8160ff841683611f9f565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561207757600080fd5b8151610a8181611c7c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120d25784516001600160a01b0316835293830193918301916001016120ad565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561210857600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220bde82df34f8ae99cf99ba858f83aed82594cf1d2000cca26e2e956516309e0cb64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102295760003560e01c806375f0a87411610123578063c1f1b1b5116100ab578063f2fde38b1161006f578063f2fde38b146106e0578063f60b3d6d14610700578063f887ea4014610715578063fe6236741461073d578063fe9fbb801461075d57600080fd5b8063c1f1b1b514610607578063d46980161461063a578063dd62ed3e1461065a578063eb341040146106a0578063f0b37c04146106c057600080fd5b80639d9241ec116100f25780639d9241ec1461055d578063a8aa1b3114610573578063a9059cbb146105a7578063b6a5d7de146105c7578063c04a5414146105e757600080fd5b806375f0a874146104ca57806378109e54146105025780637d1db4a51461051857806395d89b411461052e57600080fd5b80632f54bf6e116101b15780635d0044ca116101755780635d0044ca1461041a5780636ddd17131461043a57806370a082311461045457806372f2943a1461048a57806375cb1bd1146104aa57600080fd5b80632f54bf6e14610379578063313ce567146103a8578063571ac8b0146103c457806359b107b9146103e45780635c85974f146103fa57600080fd5b80630d075d9c116101f85780630d075d9c146102ef5780630f683e901461030f57806318160ddd1461032f57806323b872dd14610344578063293230b81461036457600080fd5b80630445b6671461023557806304fda8ff1461025e57806306fdde0314610280578063095ea7b3146102bf57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b601c5481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5061027e610279366004611c15565b61077d565b005b34801561028c57600080fd5b5060408051808201909152600d81526c09ee4c8d2dcc2d84098cac2e6d609b1b60208201525b6040516102559190611c2e565b3480156102cb57600080fd5b506102df6102da366004611c94565b6107ff565b6040519015158152602001610255565b3480156102fb57600080fd5b5061027e61030a366004611cc0565b61086c565b34801561031b57600080fd5b5061027e61032a366004611cc0565b6108df565b34801561033b57600080fd5b5060025461024b565b34801561035057600080fd5b506102df61035f366004611cec565b610952565b34801561037057600080fd5b5061027e610a88565b34801561038557600080fd5b506102df610394366004611d2d565b6000546001600160a01b0391821691161490565b3480156103b457600080fd5b5060405160128152602001610255565b3480156103d057600080fd5b506102df6103df366004611d2d565b610af9565b3480156103f057600080fd5b5061024b600d5481565b34801561040657600080fd5b5061027e610415366004611c15565b610b07565b34801561042657600080fd5b5061027e610435366004611c15565b610b5b565b34801561044657600080fd5b50601b546102df9060ff1681565b34801561046057600080fd5b5061024b61046f366004611d2d565b6001600160a01b031660009081526005602052604090205490565b34801561049657600080fd5b5061027e6104a5366004611d2d565b610baf565b3480156104b657600080fd5b5061027e6104c5366004611d4a565b610c1f565b3480156104d657600080fd5b506018546104ea906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561050e57600080fd5b5061024b60045481565b34801561052457600080fd5b5061024b60035481565b34801561053a57600080fd5b506040805180820190915260068152650de98cac2e6d60d31b60208201526102b2565b34801561056957600080fd5b5061024b60115481565b34801561057f57600080fd5b506104ea7f000000000000000000000000a1813b03fa20eae157b513121d33cd165188686081565b3480156105b357600080fd5b506102df6105c2366004611c94565b610c83565b3480156105d357600080fd5b5061027e6105e2366004611d2d565b610cb5565b3480156105f357600080fd5b506019546104ea906001600160a01b031681565b34801561061357600080fd5b507f000000000000000000000000a1813b03fa20eae157b513121d33cd16518868606104ea565b34801561064657600080fd5b506017546104ea906001600160a01b031681565b34801561066657600080fd5b5061024b610675366004611d95565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156106ac57600080fd5b5061027e6106bb366004611de3565b610d06565b3480156106cc57600080fd5b5061027e6106db366004611d2d565b610d56565b3480156106ec57600080fd5b5061027e6106fb366004611d2d565b610da1565b34801561070c57600080fd5b5061027e610e37565b34801561072157600080fd5b506104ea737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561074957600080fd5b5061027e610758366004611dff565b610e69565b34801561076957600080fd5b506102df610778366004611d2d565b610ea1565b61078633610ea1565b6107ab5760405162461bcd60e51b81526004016107a290611e1a565b60405180910390fd5b60185447906001600160a01b03166108fc60646107c88585611e55565b6107d29190611e6c565b6040518115909202916000818181858888f193505050501580156107fa573d6000803e3d6000fd5b505050565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061085a9086815260200190565b60405180910390a35060015b92915050565b61087533610ea1565b6108915760405162461bcd60e51b81526004016107a290611e1a565b60648161089e8486611e8e565b6108a89190611e8e565b11156108b357600080fd5b600a839055600b829055600c819055806108cd8385611e8e565b6108d79190611e8e565b600d55505050565b6108e833610ea1565b6109045760405162461bcd60e51b81526004016107a290611e1a565b60fa816109118486611e8e565b61091b9190611e8e565b111561092657600080fd5b600e839055600f8290556010819055806109408385611e8e565b61094a9190611e8e565b601155505050565b60006001600160a01b03841661097a5760405162461bcd60e51b81526004016107a290611ea1565b6001600160a01b0383166109a05760405162461bcd60e51b81526004016107a290611ee6565b6002546001600160a01b038516600090815260066020908152604080832033845290915290205414610a73576001600160a01b038416600090815260066020908152604080832033845290915290205482811015610a395760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064016107a2565b6001600160a01b038516600090815260066020908152604080832033845290915281208054859290610a6c908490611f29565b9091555050505b610a7e848484610ebf565b90505b9392505050565b6000546001600160a01b03163314610ab25760405162461bcd60e51b81526004016107a290611f3c565b601954600160a81b900460ff1615610ac957600080fd5b6019805460ff60a01b19169055610ae1436002611e8e565b6012556019805460ff60a81b1916600160a81b179055565b6000610866826002546107ff565b610b1033610ea1565b610b2c5760405162461bcd60e51b81526004016107a290611e1a565b600a811015610b3a57600080fd5b6103e881600254610b4b9190611e55565b610b559190611e6c565b60035550565b610b6433610ea1565b610b805760405162461bcd60e51b81526004016107a290611e1a565b600a811015610b8e57600080fd5b6103e881600254610b9f9190611e55565b610ba99190611e6c565b60045550565b610bb833610ea1565b610bd45760405162461bcd60e51b81526004016107a290611e1a565b6001600160a01b031660009081526007602090815260408083208054600160ff1991821681179092556008845282852080548216831790556009909352922080549091169091179055565b610c2833610ea1565b610c445760405162461bcd60e51b81526004016107a290611e1a565b601880546001600160a01b039485166001600160a01b031991821617909155601780549385169382169390931790925560198054919093169116179055565b60008054336001600160a01b0390911603610caa57610ca333848461110c565b9050610866565b610ca3338484610ebf565b6000546001600160a01b03163314610cdf5760405162461bcd60e51b81526004016107a290611f3c565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610d0f33610ea1565b610d2b5760405162461bcd60e51b81526004016107a290611e1a565b601b805460ff1916831515179055610d456012600a612040565b610d4f9082611e55565b601c555050565b6000546001600160a01b03163314610d805760405162461bcd60e51b81526004016107a290611f3c565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314610dcb5760405162461bcd60e51b81526004016107a290611f3c565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b610e4033610ea1565b610e5c5760405162461bcd60e51b81526004016107a290611e1a565b6013805461ff0019169055565b610e7233610ea1565b610e8e5760405162461bcd60e51b81526004016107a290611e1a565b6013805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60006001600160a01b038416610ee75760405162461bcd60e51b81526004016107a290611ea1565b6001600160a01b038316610f0d5760405162461bcd60e51b81526004016107a290611ee6565b6001600160a01b03841660009081526001602052604090205460ff1680610f4c57506001600160a01b03831660009081526001602052604090205460ff165b80610f6f57506001600160a01b03841660009081526009602052604090205460ff165b80610f7c5750601d5460ff165b15610f9357610f8c84848461110c565b9050610a81565b601954600160a01b900460ff1615610fe45760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107a2565b601354610100900460ff1615610fff57610fff848484611227565b61100883611437565b15611015576110156114c6565b60135460ff16156110a9577f000000000000000000000000a1813b03fa20eae157b513121d33cd16518868606001600160a01b0316836001600160a01b0316148061109157507f000000000000000000000000a1813b03fa20eae157b513121d33cd16518868606001600160a01b0316846001600160a01b0316145b61109b57816110a6565b6110a68484846116f9565b91505b6110b484848461110c565b50826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110fa91815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600560205260408120548281101561116c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b60448201526064016107a2565b6001600160a01b038516600090815260056020526040902054611190908490611f29565b6001600160a01b0380871660009081526005602052604080822093909355908616815220546111c0908490611e8e565b6001600160a01b0380861660008181526005602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112149087815260200190565b60405180910390a3506001949350505050565b6001600160a01b03831660009081526008602052604090205460ff16801561126757506001600160a01b03821660009081526008602052604090205460ff165b1561127157505050565b7f000000000000000000000000a1813b03fa20eae157b513121d33cd16518868606001600160a01b0316836001600160a01b03161480156112cb57506001600160a01b03821660009081526008602052604090205460ff16155b15611316576003548111156113115760405162461bcd60e51b815260206004820152600c60248201526b13585e081d1e081b1a5b5a5d60a21b60448201526064016107a2565b6113b6565b7f000000000000000000000000a1813b03fa20eae157b513121d33cd16518868606001600160a01b0316826001600160a01b031614801561137057506001600160a01b03831660009081526008602052604090205460ff16155b156113b6576003548111156113b65760405162461bcd60e51b815260206004820152600c60248201526b13585e081d1e081b1a5b5a5d60a21b60448201526064016107a2565b6001600160a01b03821660009081526008602052604090205460ff166107fa576004546001600160a01b0383166000908152600560205260409020546113fc9083611e8e565b11156107fa5760405162461bcd60e51b815260206004820152600a60248201526913585e081dd85b1b195d60b21b60448201526064016107a2565b60007f000000000000000000000000a1813b03fa20eae157b513121d33cd16518868606001600160a01b0316826001600160a01b0316148015611487575042601a5460016114859190611e8e565b105b80156114965750601d5460ff16155b80156114a45750601b5460ff165b80156108665750601c5430600090815260056020526040902054101592915050565b601d805460ff1916600117905530600090815260056020526040812054905060006016546014546015546114fa9190611e8e565b6115049190611e8e565b90506000821580611513575081155b15611520575050506116ed565b6000600283601554866115339190611e55565b61153d9190611e6c565b6115479190611e6c565b905060006115558286611f29565b905047611561826119fd565b600061156d8247611f29565b9050600086601454836115809190611e55565b61158a9190611e6c565b90506000876016548461159d9190611e55565b6115a79190611e6c565b90506000816115b68486611f29565b6115c09190611f29565b60006015819055601481905560168190556019546040519293506001600160a01b031691849181818185875af1925050503d806000811461161d576040519150601f19603f3d011682016040523d82523d6000602084013e611622565b606091505b509098505086158015906116365750600081115b15611689576116458782611b69565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6018546040516001600160a01b03909116904790600081818185875af1925050503d80600081146116d6576040519150601f19603f3d011682016040523d82523d6000602084013e6116db565b606091505b505042601a5550505050505050505050505b601d805460ff19169055565b6001600160a01b03831660009081526007602052604081205460ff168061173857506001600160a01b03831660009081526007602052604090205460ff165b15611744575080610a81565b60006012544310156117ca57606461175d846062611e55565b6117679190611e6c565b90506062611776826032611e55565b6117809190611e6c565b601560008282546117919190611e8e565b90915550606290506117a4826030611e55565b6117ae9190611e6c565b601460008282546117bf9190611e8e565b909155506119979050565b7f000000000000000000000000a1813b03fa20eae157b513121d33cd16518868606001600160a01b0316846001600160a01b031614801561180d57506000601154115b156118a0576103e8601154846118239190611e55565b61182d9190611e6c565b9050601154600f54826118409190611e55565b61184a9190611e6c565b6015600082825461185b9190611e8e565b90915550506011546010546118709083611e55565b61187a9190611e6c565b6016600082825461188b9190611e8e565b9091555050601154600e546117a49083611e55565b7f000000000000000000000000a1813b03fa20eae157b513121d33cd16518868606001600160a01b0316856001600160a01b03161480156118e357506000600d54115b15611997576103e8600d54846118f99190611e55565b6119039190611e6c565b9050600d54600b54826119169190611e55565b6119209190611e6c565b601560008282546119319190611e8e565b9091555050600d54600c546119469083611e55565b6119509190611e6c565b601660008282546119619190611e8e565b9091555050600d54600a546119769083611e55565b6119809190611e6c565b601460008282546119919190611e8e565b90915550505b80156119ea576119a885308361110c565b5060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6119f48184611f29565b95945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a3257611a3261204f565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190612065565b81600181518110611adb57611adb61204f565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790611b33908590600090869030904290600401612082565b600060405180830381600087803b158015611b4d57600080fd5b505af1158015611b61573d6000803e3d6000fd5b505050505050565b60175460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0390911660848201524260a4820152737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990839060c40160606040518083038185885af1158015611be9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c0e91906120f3565b5050505050565b600060208284031215611c2757600080fd5b5035919050565b600060208083528351808285015260005b81811015611c5b57858101830151858201604001528201611c3f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611c9157600080fd5b50565b60008060408385031215611ca757600080fd5b8235611cb281611c7c565b946020939093013593505050565b600080600060608486031215611cd557600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611d0157600080fd5b8335611d0c81611c7c565b92506020840135611d1c81611c7c565b929592945050506040919091013590565b600060208284031215611d3f57600080fd5b8135610a8181611c7c565b600080600060608486031215611d5f57600080fd5b8335611d6a81611c7c565b92506020840135611d7a81611c7c565b91506040840135611d8a81611c7c565b809150509250925092565b60008060408385031215611da857600080fd5b8235611db381611c7c565b91506020830135611dc381611c7c565b809150509250929050565b80358015158114611dde57600080fd5b919050565b60008060408385031215611df657600080fd5b611cb283611dce565b600060208284031215611e1157600080fd5b610a8182611dce565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761086657610866611e3f565b600082611e8957634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561086657610866611e3f565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561086657610866611e3f565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600181815b80851115611f97578160001904821115611f7d57611f7d611e3f565b80851615611f8a57918102915b93841c9390800290611f61565b509250929050565b600082611fae57506001610866565b81611fbb57506000610866565b8160018114611fd15760028114611fdb57611ff7565b6001915050610866565b60ff841115611fec57611fec611e3f565b50506001821b610866565b5060208310610133831016604e8410600b841016171561201a575081810a610866565b6120248383611f5c565b806000190482111561203857612038611e3f565b029392505050565b6000610a8160ff841683611f9f565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561207757600080fd5b8151610a8181611c7c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120d25784516001600160a01b0316835293830193918301916001016120ad565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561210857600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220bde82df34f8ae99cf99ba858f83aed82594cf1d2000cca26e2e956516309e0cb64736f6c63430008120033

Deployed Bytecode Sourcemap

2909:17829:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5829:58;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;5829:58:0;;;;;;;;20545:188;;;;;;;;;;-1:-1:-1;20545:188:0;;;;;:::i;:::-;;:::i;:::-;;7751:80;;;;;;;;;;-1:-1:-1;7823:5:0;;;;;;;;;;;;-1:-1:-1;;;7823:5:0;;;;7751:80;;;;;;;:::i;8416:216::-;;;;;;;;;;-1:-1:-1;8416:216:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;8416:216:0;1390:187:1;9842:389:0;;;;;;;;;;-1:-1:-1;9842:389:0;;;;;:::i;:::-;;:::i;10319:394::-;;;;;;;;;;-1:-1:-1;10319:394:0;;;;;:::i;:::-;;:::i;7481:88::-;;;;;;;;;;-1:-1:-1;7554:12:0;;7481:88;;18388:648;;;;;;;;;;-1:-1:-1;18388:648:0;;;;;:::i;:::-;;:::i;12973:222::-;;;;;;;;;;;;;:::i;1701:103::-;;;;;;;;;;-1:-1:-1;1701:103:0;;;;;:::i;:::-;1756:4;1791:5;-1:-1:-1;;;;;1780:16:0;;;1791:5;;1780:16;;1701:103;7575:80;;;;;;;;;;-1:-1:-1;7575:80:0;;3496:2;2758:36:1;;2746:2;2731:18;7575:80:0;2616:184:1;8640:117:0;;;;;;;;;;-1:-1:-1;8640:117:0;;;;;:::i;:::-;;:::i;4679:82::-;;;;;;;;;;;;;;;;11416:230;;;;;;;;;;-1:-1:-1;11416:230:0;;;;;:::i;:::-;;:::i;11118:235::-;;;;;;;;;;-1:-1:-1;11118:235:0;;;;;:::i;:::-;;:::i;5792:30::-;;;;;;;;;;-1:-1:-1;5792:30:0;;;;;;;;7837:105;;;;;;;;;;-1:-1:-1;7837:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;7921:18:0;7903:7;7921:18;;;:9;:18;;;;;;;7837:105;8912:332;;;;;;;;;;-1:-1:-1;8912:332:0;;;;;:::i;:::-;;:::i;10765:259::-;;;;;;;;;;-1:-1:-1;10765:259:0;;;;;:::i;:::-;;:::i;5476:30::-;;;;;;;;;;-1:-1:-1;5476:30:0;;;;-1:-1:-1;;;;;5476:30:0;;;;;;-1:-1:-1;;;;;3503:32:1;;;3485:51;;3473:2;3458:18;5476:30:0;3339:203:1;3863:64:0;;;;;;;;;;;;;;;;3795:60;;;;;;;;;;;;;;;;7661:84;;;;;;;;;;-1:-1:-1;7735:7:0;;;;;;;;;;;;-1:-1:-1;;;7735:7:0;;;;7661:84;;4879:86;;;;;;;;;;;;;;;;3255:29;;;;;;;;;;;;;;;18080:300;;;;;;;;;;-1:-1:-1;18080:300:0;;;;;:::i;:::-;;:::i;1494:94::-;;;;;;;;;;-1:-1:-1;1494:94:0;;;;;:::i;:::-;;:::i;5513:32::-;;;;;;;;;;-1:-1:-1;5513:32:0;;;;-1:-1:-1;;;;;5513:32:0;;;8087:64;;;;;;;;;;-1:-1:-1;8145:4:0;8087:64;;5439:30;;;;;;;;;;-1:-1:-1;5439:30:0;;;;-1:-1:-1;;;;;5439:30:0;;;7948:133;;;;;;;;;;-1:-1:-1;7948:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;8050:19:0;;;8032:7;8050:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;7948:133;13262:184;;;;;;;;;;-1:-1:-1;13262:184:0;;;;;:::i;:::-;;:::i;1596:97::-;;;;;;;;;;-1:-1:-1;1596:97:0;;;;;:::i;:::-;;:::i;1927:173::-;;;;;;;;;;-1:-1:-1;1927:173:0;;;;;:::i;:::-;;:::i;12584:75::-;;;;;;;;;;;;;:::i;3133:90::-;;;;;;;;;;;;3180:42;3133:90;;12793:98;;;;;;;;;;-1:-1:-1;12793:98:0;;;;;:::i;:::-;;:::i;1812:107::-;;;;;;;;;;-1:-1:-1;1812:107:0;;;;;:::i;:::-;;:::i;20545:188::-;1435:24;1448:10;1435:12;:24::i;:::-;1427:48;;;;-1:-1:-1;;;1427:48:0;;;;;;;:::i;:::-;;;;;;;;;20675:15:::1;::::0;20635:21:::1;::::0;-1:-1:-1;;;;;20675:15:0::1;20667:58;20721:3;20701:17;20714:4:::0;20635:21;20701:17:::1;:::i;:::-;:23;;;;:::i;:::-;20667:58;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;20603:130;20545:188:::0;:::o;8416:216::-;8520:10;8491:4;8508:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;8508:32:0;;;;;;;;;;:41;;;8565:37;8491:4;;8508:32;;8565:37;;;;8543:6;160:25:1;;148:2;133:18;;14:177;8565:37:0;;;;;;;;-1:-1:-1;8620:4:0;8416:216;;;;;:::o;9842:389::-;1435:24;1448:10;1435:12;:24::i;:::-;1427:48;;;;-1:-1:-1;;;1427:48:0;;;;;;;:::i;:::-;10014:3:::1;9999:11:::0;9967:29:::1;9983:13:::0;9967;:29:::1;:::i;:::-;:43;;;;:::i;:::-;:50;;9959:59;;;::::0;::::1;;10040:15;:31:::0;;;10082:15:::1;:31:::0;;;10124:17:::1;:31:::0;;;10144:11;10180:29:::1;10100:13:::0;10058;10180:29:::1;:::i;:::-;:43;;;;:::i;:::-;10166:11;:57:::0;-1:-1:-1;;;9842:389:0:o;10319:394::-;1435:24;1448:10;1435:12;:24::i;:::-;1427:48;;;;-1:-1:-1;;;1427:48:0;;;;;;;:::i;:::-;10492:3:::1;10477:11:::0;10445:29:::1;10461:13:::0;10445;:29:::1;:::i;:::-;:43;;;;:::i;:::-;:50;;10437:59;;;::::0;::::1;;10518:16;:32:::0;;;10561:16:::1;:32:::0;;;10604:18:::1;:32:::0;;;10625:11;10662:29:::1;10580:13:::0;10537;10662:29:::1;:::i;:::-;:43;;;;:::i;:::-;10647:12;:58:::0;-1:-1:-1;;;10319:394:0:o;18388:648::-;18488:4;-1:-1:-1;;;;;18513:20:0;;18505:70;;;;-1:-1:-1;;;18505:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18594:23:0;;18586:71;;;;-1:-1:-1;;;18586:71:0;;;;;;;:::i;:::-;18706:12;;-1:-1:-1;;;;;18671:19:0;;;;;;:11;:19;;;;;;;;18691:10;18671:31;;;;;;;;:47;18668:303;;-1:-1:-1;;;;;18800:19:0;;18776:20;18800:19;;;:11;:19;;;;;;;;18820:10;18800:31;;;;;;;;18854:22;;;;18846:57;;;;-1:-1:-1;;;18846:57:0;;7038:2:1;18846:57:0;;;7020:21:1;7077:2;7057:18;;;7050:30;-1:-1:-1;;;7096:18:1;;;7089:52;7158:18;;18846:57:0;6836:346:1;18846:57:0;-1:-1:-1;;;;;18918:19:0;;;;;;:11;:19;;;;;;;;18938:10;18918:31;;;;;;;:41;;18953:6;;18918:19;:41;;18953:6;;18918:41;:::i;:::-;;;;-1:-1:-1;;;18668:303:0;18988:40;19002:6;19010:9;19021:6;18988:13;:40::i;:::-;18981:47;;18388:648;;;;;;:::o;12973:222::-;1756:4;1791:5;-1:-1:-1;;;;;1791:5:0;1353:10;1780:16;1337:38;;;;-1:-1:-1;;;1337:38:0;;;;;;;:::i;:::-;13035:8:::1;::::0;-1:-1:-1;;;13035:8:0;::::1;;;:17;13027:26;;;::::0;::::1;;13064:10;:18:::0;;-1:-1:-1;;;;13064:18:0::1;::::0;;13109:16:::1;:12;13124:1;13109:16;:::i;:::-;13093:13;:32:::0;13172:8:::1;:15:::0;;-1:-1:-1;;;;13172:15:0::1;-1:-1:-1::0;;;13172:15:0::1;::::0;;12973:222::o;8640:117::-;8695:4;8719:30;8727:7;8736:12;;8719:7;:30::i;11416:230::-;1435:24;1448:10;1435:12;:24::i;:::-;1427:48;;;;-1:-1:-1;;;1427:48:0;;;;;;;:::i;:::-;11503:2:::1;11492:7;:13;;11484:22;;;::::0;::::1;;3747:5;11616:7;11601:12;;:22;;;;:::i;:::-;11599:39;;;;:::i;:::-;11584:12;:54:::0;-1:-1:-1;11416:230:0:o;11118:235::-;1435:24;1448:10;1435:12;:24::i;:::-;1427:48;;;;-1:-1:-1;;;1427:48:0;;;;;;;:::i;:::-;11207:2:::1;11196:7;:13;;11188:22;;;::::0;::::1;;3747:5;11323:7;11308:12;;:22;;;;:::i;:::-;11306:39;;;;:::i;:::-;11288:15;:57:::0;-1:-1:-1;11118:235:0:o;8912:332::-;1435:24;1448:10;1435:12;:24::i;:::-;1427:48;;;;-1:-1:-1;;;1427:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9016:16:0::1;;::::0;;;:11:::1;:16;::::0;;;;;;;:23;;9035:4:::1;-1:-1:-1::0;;9016:23:0;;::::1;::::0;::::1;::::0;;;9050:15:::1;:20:::0;;;;;:27;;;::::1;::::0;::::1;::::0;;9211:13:::1;:18:::0;;;;;:25;;;;::::1;::::0;;::::1;::::0;;8912:332::o;10765:259::-;1435:24;1448:10;1435:12;:24::i;:::-;1427:48;;;;-1:-1:-1;;;1427:48:0;;;;;;;:::i;:::-;10892:15:::1;:34:::0;;-1:-1:-1;;;;;10892:34:0;;::::1;-1:-1:-1::0;;;;;;10892:34:0;;::::1;;::::0;;;10937:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;10982:17:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;10765:259::o;18080:300::-;18160:4;18181:5;;18190:10;-1:-1:-1;;;;;18181:5:0;;;:19;18177:196;;18223:45;18238:10;18250:9;18261:6;18223:14;:45::i;:::-;18216:52;;;;18177:196;18317:44;18331:10;18343:9;18354:6;18317:13;:44::i;1494:94::-;1756:4;1791:5;-1:-1:-1;;;;;1791:5:0;1353:10;1780:16;1337:38;;;;-1:-1:-1;;;1337:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1554:19:0::1;;::::0;;;1576:4:::1;1554:19;::::0;;;;;;;:26;;-1:-1:-1;;1554:26:0::1;::::0;;::::1;::::0;;1494:94::o;13262:184::-;1435:24;1448:10;1435:12;:24::i;:::-;1427:48;;;;-1:-1:-1;;;1427:48:0;;;;;;;:::i;:::-;13358:11:::1;:22:::0;;-1:-1:-1;;13358:22:0::1;::::0;::::1;;;::::0;;13421:15:::1;3496:2;13421;:15;:::i;:::-;13407:30;::::0;:10;:30:::1;:::i;:::-;13391:13;:46:::0;-1:-1:-1;;13262:184:0:o;1596:97::-;1756:4;1791:5;-1:-1:-1;;;;;1791:5:0;1353:10;1780:16;1337:38;;;;-1:-1:-1;;;1337:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1658:19:0::1;1680:5;1658:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;1658:27:0::1;::::0;;1596:97::o;1927:173::-;1756:4;1791:5;-1:-1:-1;;;;;1791:5:0;1353:10;1780:16;1337:38;;;;-1:-1:-1;;;1337:38:0;;;;;;;:::i;:::-;2003:5:::1;:11:::0;;-1:-1:-1;;;;;;2003:11:0::1;-1:-1:-1::0;;;;;2003:11:0;::::1;::::0;;::::1;::::0;;2025:19;;;-1:-1:-1;2025:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;2025:26:0::1;::::0;;::::1;::::0;;;2067:25;;3485:51:1;;;2067:25:0::1;::::0;3458:18:1;2067:25:0::1;;;;;;;1927:173:::0;:::o;12584:75::-;1435:24;1448:10;1435:12;:24::i;:::-;1427:48;;;;-1:-1:-1;;;1427:48:0;;;;;;;:::i;:::-;12637:6:::1;:14:::0;;-1:-1:-1;;12637:14:0::1;::::0;;12584:75::o;12793:98::-;1435:24;1448:10;1435:12;:24::i;:::-;1427:48;;;;-1:-1:-1;;;1427:48:0;;;;;;;:::i;:::-;12861:11:::1;:22:::0;;-1:-1:-1;;12861:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12793:98::o;1812:107::-;-1:-1:-1;;;;;1892:19:0;1868:4;1892:19;;;:14;:19;;;;;;;;;1812:107::o;19046:1316::-;19138:4;-1:-1:-1;;;;;19165:20:0;;19157:70;;;;-1:-1:-1;;;19157:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19246:23:0;;19238:71;;;;-1:-1:-1;;;19238:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19388:22:0;;;;;;:14;:22;;;;;;;;;:51;;-1:-1:-1;;;;;;19414:25:0;;;;;;:14;:25;;;;;;;;19388:51;:76;;;-1:-1:-1;;;;;;19443:21:0;;;;;;:13;:21;;;;;;;;19388:76;:86;;;-1:-1:-1;19468:6:0;;;;19388:86;19383:168;;;19498:41;19513:6;19521:9;19532:6;19498:14;:41::i;:::-;19491:48;;;;19383:168;19635:10;;-1:-1:-1;;;19635:10:0;;;;:19;19627:51;;;;-1:-1:-1;;;19627:51:0;;9455:2:1;19627:51:0;;;9437:21:1;9494:2;9474:18;;;9467:30;-1:-1:-1;;;9513:18:1;;;9506:50;9573:18;;19627:51:0;9253:344:1;19627:51:0;19777:6;;;;;;;19773:52;;;19785:38;19797:6;19805:9;19816:6;19785:11;:38::i;:::-;19926:26;19942:9;19926:15;:26::i;:::-;19923:44;;;19955:10;:8;:10::i;:::-;20044:11;;;;20041:135;;;20095:4;-1:-1:-1;;;;;20082:17:0;:9;-1:-1:-1;;;;;20082:17:0;;:35;;;;20113:4;-1:-1:-1;;;;;20103:14:0;:6;-1:-1:-1;;;;;20103:14:0;;20082:35;20081:83;;20158:6;20081:83;;;20121:34;20129:6;20137:9;20148:6;20121:7;:34::i;:::-;20072:92;;20041:135;20238:41;20253:6;20261:9;20272:6;20238:14;:41::i;:::-;;20314:9;-1:-1:-1;;;;;20297:35:0;20306:6;-1:-1:-1;;;;;20297:35:0;;20325:6;20297:35;;;;160:25:1;;148:2;133:18;;14:177;20297:35:0;;;;;;;;-1:-1:-1;20350:4:0;19046:1316;;;;;:::o;9256:503::-;-1:-1:-1;;;;;9390:17:0;;9349:4;9390:17;;;:9;:17;;;;;;9481:23;;;;9473:56;;;;-1:-1:-1;;;9473:56:0;;9804:2:1;9473:56:0;;;9786:21:1;9843:2;9823:18;;;9816:30;-1:-1:-1;;;9862:18:1;;;9855:50;9922:18;;9473:56:0;9602:344:1;9473:56:0;-1:-1:-1;;;;;9588:17:0;;;;;;:9;:17;;;;;;:26;;9608:6;;9588:26;:::i;:::-;-1:-1:-1;;;;;9568:17:0;;;;;;;:9;:17;;;;;;:46;;;;9649:20;;;;;;;:29;;9672:6;;9649:29;:::i;:::-;-1:-1:-1;;;;;9626:20:0;;;;;;;:9;:20;;;;;;;:52;;;;9694:35;;;;;;;;;;9722:6;160:25:1;;148:2;133:18;;14:177;9694:35:0;;;;;;;;-1:-1:-1;9747:4:0;;9256:503;-1:-1:-1;;;;9256:503:0:o;11658:856::-;-1:-1:-1;;;;;11836:23:0;;;;;;:15;:23;;;;;;;;:53;;;;-1:-1:-1;;;;;;11863:26:0;;;;;;:15;:26;;;;;;;;11836:53;11832:67;;;11658:856;;;:::o;11832:67::-;12063:4;-1:-1:-1;;;;;12053:14:0;:6;-1:-1:-1;;;;;12053:14:0;;:45;;;;-1:-1:-1;;;;;;12072:26:0;;;;;;:15;:26;;;;;;;;12071:27;12053:45;12049:278;;;12135:12;;12125:6;:22;;12117:47;;;;-1:-1:-1;;;12117:47:0;;10153:2:1;12117:47:0;;;10135:21:1;10192:2;10172:18;;;10165:30;-1:-1:-1;;;10211:18:1;;;10204:42;10263:18;;12117:47:0;9951:336:1;12117:47:0;12049:278;;;12217:4;-1:-1:-1;;;;;12204:17:0;:9;-1:-1:-1;;;;;12204:17:0;;:45;;;;-1:-1:-1;;;;;;12226:23:0;;;;;;:15;:23;;;;;;;;12225:24;12204:45;12201:126;;;12286:12;;12276:6;:22;;12268:47;;;;-1:-1:-1;;;12268:47:0;;10153:2:1;12268:47:0;;;10135:21:1;10192:2;10172:18;;;10165:30;-1:-1:-1;;;10211:18:1;;;10204:42;10263:18;;12268:47:0;9951:336:1;12268:47:0;-1:-1:-1;;;;;12379:26:0;;;;;;:15;:26;;;;;;;;12374:131;;12463:15;;-1:-1:-1;;;;;7921:18:0;;7903:7;7921:18;;;:9;:18;;;;;;12430:29;;:6;:29;:::i;:::-;:48;;12422:71;;;;-1:-1:-1;;;12422:71:0;;10494:2:1;12422:71:0;;;10476:21:1;10533:2;10513:18;;;10506:30;-1:-1:-1;;;10552:18:1;;;10545:40;10602:18;;12422:71:0;10292:334:1;13507:306:0;13574:4;13611;-1:-1:-1;;;;;13598:17:0;:9;-1:-1:-1;;;;;13598:17:0;;:80;;;;;13663:15;13644:12;;13659:1;13644:16;;;;:::i;:::-;:34;13598:80;:129;;;;-1:-1:-1;13721:6:0;;;;13720:7;13598:129;:153;;;;-1:-1:-1;13740:11:0;;;;13598:153;:207;;;;-1:-1:-1;13792:13:0;;13782:4;13764:24;;;;:9;:24;;;;;;:41;;13591:214;13507:306;-1:-1:-1;;13507:306:0:o;16362:1710::-;6185:6;:13;;-1:-1:-1;;6185:13:0;6194:4;6185:13;;;16455:4:::1;-1:-1:-1::0;7921:18:0;;;:9;:18;;;;;;16411:50:::1;;16472:25;16542:12;;16521:18;;16500;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;16472:82:::0;-1:-1:-1;16565:12:0::1;16594:20:::0;;;:46:::1;;-1:-1:-1::0;16618:22:0;;16594:46:::1;16590:61;;;16643:7;;;;;16590:61;16714:23;16801:1;16781:17;16759:18;;16741:15;:36;;;;:::i;:::-;16740:58;;;;:::i;:::-;:62;;;;:::i;:::-;16714:88:::0;-1:-1:-1;16813:26:0::1;16842:33;16714:88:::0;16842:15;:33:::1;:::i;:::-;16813:62:::0;-1:-1:-1;16916:21:0::1;16986:36;16813:62:::0;16986:16:::1;:36::i;:::-;17035:18;17056:41;17080:17:::0;17056:21:::1;:41;:::i;:::-;17035:62;;17108:23;17170:17;17148:18;;17135:10;:31;;;;:::i;:::-;17134:53;;;;:::i;:::-;17108:79;;17198:17;17260;17238:12;;17225:10;:25;;;;:::i;:::-;17224:53;;;;:::i;:::-;17198:79:::0;-1:-1:-1;17288:23:0::1;17198:79:::0;17314:28:::1;17327:15:::0;17314:10;:28:::1;:::i;:::-;:40;;;;:::i;:::-;17423:1;17402:18;:22:::0;;;17435:18:::1;:22:::0;;;17468:12:::1;:16:::0;;;17545:17:::1;::::0;17537:53:::1;::::0;17288:66;;-1:-1:-1;;;;;;17545:17:0::1;::::0;17576:9;;17537:53;17423:1;17537:53;17576:9;17545:17;17537:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;17523:67:0;;-1:-1:-1;;17632:19:0;;;;;:42:::1;;;17673:1;17655:15;:19;17632:42;17628:212;;;17691:46;17704:15;17721;17691:12;:46::i;:::-;17809:18;::::0;17757:71:::1;::::0;;11043:25:1;;;11099:2;11084:18;;11077:34;;;11127:18;;;11120:34;;;;17757:71:0;::::1;::::0;;;;11031:2:1;17757:71:0;;::::1;17628:212;17966:15;::::0;17958:63:::1;::::0;-1:-1:-1;;;;;17966:15:0;;::::1;::::0;17995:21:::1;::::0;17958:63:::1;::::0;;;17995:21;17966:15;17958:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;18049:15:0::1;18034:12;:30:::0;-1:-1:-1;;;;;;;;;;;6200:1:0::1;6203:6:::0;:14;;-1:-1:-1;;6203:14:0;;;16362:1710::o;13821:1609::-;-1:-1:-1;;;;;13993:17:0;;13898:7;13993:17;;;:11;:17;;;;;;;;;:36;;-1:-1:-1;;;;;;14014:15:0;;;;;;:11;:15;;;;;;;;13993:36;13989:82;;;-1:-1:-1;14053:6:0;14046:13;;13989:82;14144:12;14211:13;;14196:12;:28;14192:952;;;14262:3;14248:11;:6;14257:2;14248:11;:::i;:::-;:17;;;;:::i;:::-;14241:24;-1:-1:-1;14327:2:0;14314:9;14241:24;14321:2;14314:9;:::i;:::-;14313:16;;;;:::i;:::-;14291:18;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;14380:2:0;;-1:-1:-1;14367:9:0;:4;14374:2;14367:9;:::i;:::-;14366:16;;;;:::i;:::-;14344:18;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;14192:952:0;;-1:-1:-1;14192:952:0;;14441:4;-1:-1:-1;;;;;14435:10:0;:2;-1:-1:-1;;;;;14435:10:0;;:30;;;;;14464:1;14449:12;;:16;14435:30;14431:713;;;3747:5;14498:12;;14489:6;:21;;;;:::i;:::-;:34;;;;:::i;:::-;14482:41;;14590:12;;14568:16;;14561:4;:23;;;;:::i;:::-;14560:42;;;;:::i;:::-;14538:18;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;14669:12:0;;14647:18;;14640:25;;:4;:25;:::i;:::-;14639:42;;;;:::i;:::-;14617:12;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;14748:12:0;;14726:16;;14719:23;;:4;:23;:::i;14431:713::-;14820:4;-1:-1:-1;;;;;14812:12:0;:4;-1:-1:-1;;;;;14812:12:0;;:31;;;;;14842:1;14828:11;;:15;14812:31;14808:336;;;3747:5;14876:11;;14867:6;:20;;;;:::i;:::-;:33;;;;:::i;:::-;14860:40;;14966:11;;14945:15;;14938:4;:22;;;;:::i;:::-;14937:40;;;;:::i;:::-;14915:18;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;15044:11:0;;15023:17;;15016:24;;:4;:24;:::i;:::-;15015:40;;;;:::i;:::-;14993:12;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;15121:11:0;;15100:15;;15093:22;;:4;:22;:::i;:::-;15092:40;;;;:::i;:::-;15070:18;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;14808:336:0;15220:8;;15216:137;;15245:41;15260:4;15274;15281;15245:14;:41::i;:::-;-1:-1:-1;15306:35:0;;160:25:1;;;15329:4:0;;-1:-1:-1;;;;;15306:35:0;;;;;148:2:1;133:18;15306:35:0;;;;;;;15216:137;15408:14;15418:4;15408:14;;:::i;:::-;;13821:1609;-1:-1:-1;;;;;13821:1609:0:o;15444:445::-;15570:16;;;15584:1;15570:16;;;;;;;;15546:21;;15570:16;;;;;;;;;;-1:-1:-1;15570:16:0;15546:40;;15615:4;15597;15602:1;15597:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15597:23:0;;;-1:-1:-1;;;;;15597:23:0;;;;;3180:42;-1:-1:-1;;;;;15641:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15631:4;15636:1;15631:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15631:23:0;;;:7;;;;;;;;;;;:23;15693:188;;-1:-1:-1;;;15693:188:0;;3180:42;;15693:57;;:188;;15765:11;;15791:1;;15808:4;;15835;;15855:15;;15693:188;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15499:390;15444:445;:::o;15897:457::-;16290:15;;16147:199;;-1:-1:-1;;;16147:199:0;;16210:4;16147:199;;;13011:34:1;13061:18;;;13054:34;;;16256:1:0;13104:18:1;;;13097:34;;;13147:18;;;13140:34;-1:-1:-1;;;;;16290:15:0;;;13190:19:1;;;13183:44;16320:15:0;13243:19:1;;;13236:35;3180:42:0;;16147:22;;16177:9;;12945:19:1;;16147:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15897:457;;:::o;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:548::-;493:4;522:2;551;540:9;533:21;583:6;577:13;626:6;621:2;610:9;606:18;599:34;651:1;661:140;675:6;672:1;669:13;661:140;;;770:14;;;766:23;;760:30;736:17;;;755:2;732:26;725:66;690:10;;661:140;;;665:3;850:1;845:2;836:6;825:9;821:22;817:31;810:42;920:2;913;909:7;904:2;896:6;892:15;888:29;877:9;873:45;869:54;861:62;;;;381:548;;;;:::o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;989:70;934:131;:::o;1070:315::-;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:316::-;1659:6;1667;1675;1728:2;1716:9;1707:7;1703:23;1699:32;1696:52;;;1744:1;1741;1734:12;1696:52;-1:-1:-1;;1767:23:1;;;1837:2;1822:18;;1809:32;;-1:-1:-1;1888:2:1;1873:18;;;1860:32;;1582:316;-1:-1:-1;1582:316:1:o;1903:456::-;1980:6;1988;1996;2049:2;2037:9;2028:7;2024:23;2020:32;2017:52;;;2065:1;2062;2055:12;2017:52;2104:9;2091:23;2123:31;2148:5;2123:31;:::i;:::-;2173:5;-1:-1:-1;2230:2:1;2215:18;;2202:32;2243:33;2202:32;2243:33;:::i;:::-;1903:456;;2295:7;;-1:-1:-1;;;2349:2:1;2334:18;;;;2321:32;;1903:456::o;2364:247::-;2423:6;2476:2;2464:9;2455:7;2451:23;2447:32;2444:52;;;2492:1;2489;2482:12;2444:52;2531:9;2518:23;2550:31;2575:5;2550:31;:::i;2805:529::-;2882:6;2890;2898;2951:2;2939:9;2930:7;2926:23;2922:32;2919:52;;;2967:1;2964;2957:12;2919:52;3006:9;2993:23;3025:31;3050:5;3025:31;:::i;:::-;3075:5;-1:-1:-1;3132:2:1;3117:18;;3104:32;3145:33;3104:32;3145:33;:::i;:::-;3197:7;-1:-1:-1;3256:2:1;3241:18;;3228:32;3269:33;3228:32;3269:33;:::i;:::-;3321:7;3311:17;;;2805:529;;;;;:::o;3547:388::-;3615:6;3623;3676:2;3664:9;3655:7;3651:23;3647:32;3644:52;;;3692:1;3689;3682:12;3644:52;3731:9;3718:23;3750:31;3775:5;3750:31;:::i;:::-;3800:5;-1:-1:-1;3857:2:1;3842:18;;3829:32;3870:33;3829:32;3870:33;:::i;:::-;3922:7;3912:17;;;3547:388;;;;;:::o;3940:160::-;4005:20;;4061:13;;4054:21;4044:32;;4034:60;;4090:1;4087;4080:12;4034:60;3940:160;;;:::o;4105:248::-;4170:6;4178;4231:2;4219:9;4210:7;4206:23;4202:32;4199:52;;;4247:1;4244;4237:12;4199:52;4270:26;4286:9;4270:26;:::i;4844:180::-;4900:6;4953:2;4941:9;4932:7;4928:23;4924:32;4921:52;;;4969:1;4966;4959:12;4921:52;4992:26;5008:9;4992:26;:::i;5029:335::-;5231:2;5213:21;;;5270:2;5250:18;;;5243:30;-1:-1:-1;;;5304:2:1;5289:18;;5282:41;5355:2;5340:18;;5029:335::o;5369:127::-;5430:10;5425:3;5421:20;5418:1;5411:31;5461:4;5458:1;5451:15;5485:4;5482:1;5475:15;5501:168;5574:9;;;5605;;5622:15;;;5616:22;;5602:37;5592:71;;5643:18;;:::i;5674:217::-;5714:1;5740;5730:132;;5784:10;5779:3;5775:20;5772:1;5765:31;5819:4;5816:1;5809:15;5847:4;5844:1;5837:15;5730:132;-1:-1:-1;5876:9:1;;5674:217::o;5896:125::-;5961:9;;;5982:10;;;5979:36;;;5995:18;;:::i;6026:401::-;6228:2;6210:21;;;6267:2;6247:18;;;6240:30;6306:34;6301:2;6286:18;;6279:62;-1:-1:-1;;;6372:2:1;6357:18;;6350:35;6417:3;6402:19;;6026:401::o;6432:399::-;6634:2;6616:21;;;6673:2;6653:18;;;6646:30;6712:34;6707:2;6692:18;;6685:62;-1:-1:-1;;;6778:2:1;6763:18;;6756:33;6821:3;6806:19;;6432:399::o;7187:128::-;7254:9;;;7275:11;;;7272:37;;;7289:18;;:::i;7320:329::-;7522:2;7504:21;;;7561:1;7541:18;;;7534:29;-1:-1:-1;;;7594:2:1;7579:18;;7572:36;7640:2;7625:18;;7320:329::o;7654:422::-;7743:1;7786:5;7743:1;7800:270;7821:7;7811:8;7808:21;7800:270;;;7880:4;7876:1;7872:6;7868:17;7862:4;7859:27;7856:53;;;7889:18;;:::i;:::-;7939:7;7929:8;7925:22;7922:55;;;7959:16;;;;7922:55;8038:22;;;;7998:15;;;;7800:270;;;7804:3;7654:422;;;;;:::o;8081:806::-;8130:5;8160:8;8150:80;;-1:-1:-1;8201:1:1;8215:5;;8150:80;8249:4;8239:76;;-1:-1:-1;8286:1:1;8300:5;;8239:76;8331:4;8349:1;8344:59;;;;8417:1;8412:130;;;;8324:218;;8344:59;8374:1;8365:10;;8388:5;;;8412:130;8449:3;8439:8;8436:17;8433:43;;;8456:18;;:::i;:::-;-1:-1:-1;;8512:1:1;8498:16;;8527:5;;8324:218;;8626:2;8616:8;8613:16;8607:3;8601:4;8598:13;8594:36;8588:2;8578:8;8575:16;8570:2;8564:4;8561:12;8557:35;8554:77;8551:159;;;-1:-1:-1;8663:19:1;;;8695:5;;8551:159;8742:34;8767:8;8761:4;8742:34;:::i;:::-;8812:6;8808:1;8804:6;8800:19;8791:7;8788:32;8785:58;;;8823:18;;:::i;:::-;8861:20;;8081:806;-1:-1:-1;;;8081:806:1:o;8892:140::-;8950:5;8979:47;9020:4;9010:8;9006:19;9000:4;8979:47;:::i;11297:127::-;11358:10;11353:3;11349:20;11346:1;11339:31;11389:4;11386:1;11379:15;11413:4;11410:1;11403:15;11429:251;11499:6;11552:2;11540:9;11531:7;11527:23;11523:32;11520:52;;;11568:1;11565;11558:12;11520:52;11600:9;11594:16;11619:31;11644:5;11619:31;:::i;11685:980::-;11947:4;11995:3;11984:9;11980:19;12026:6;12015:9;12008:25;12052:2;12090:6;12085:2;12074:9;12070:18;12063:34;12133:3;12128:2;12117:9;12113:18;12106:31;12157:6;12192;12186:13;12223:6;12215;12208:22;12261:3;12250:9;12246:19;12239:26;;12300:2;12292:6;12288:15;12274:29;;12321:1;12331:195;12345:6;12342:1;12339:13;12331:195;;;12410:13;;-1:-1:-1;;;;;12406:39:1;12394:52;;12501:15;;;;12466:12;;;;12442:1;12360:9;12331:195;;;-1:-1:-1;;;;;;;12582:32:1;;;;12577:2;12562:18;;12555:60;-1:-1:-1;;;12646:3:1;12631:19;12624:35;12543:3;11685:980;-1:-1:-1;;;11685:980:1:o;13282:306::-;13370:6;13378;13386;13439:2;13427:9;13418:7;13414:23;13410:32;13407:52;;;13455:1;13452;13445:12;13407:52;13484:9;13478:16;13468:26;;13534:2;13523:9;13519:18;13513:25;13503:35;;13578:2;13567:9;13563:18;13557:25;13547:35;;13282:306;;;;;:::o

Swarm Source

ipfs://bde82df34f8ae99cf99ba858f83aed82594cf1d2000cca26e2e956516309e0cb
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.