S Price: $0.461891 (+5.63%)

Token

SONICVAULT ($SVAULT)

Overview

Max Total Supply

1,000,000,000 $SVAULT

Holders

22

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
52,958.61131991 $SVAULT

Value
$0.00
0x315293C7aa0e5f07513E799790de6f198CC2eB9a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
SONICVAULT

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-03-07
*/

//Sonic  Vault we believe in empowering individuals to take control of their earnings. In an ever-evolving content sharing world, we offer a cryptocurrency that prioritizes security, efficiency, and user empowerment.
//TG: https://t.me/S0nicVault
//X: https://x.com/sonic_vault
//WEB: https://sonic-vault.fun/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.26;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() 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 getOwner() external view returns (address);
    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);}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    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 removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

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

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

contract SONICVAULT is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'SONICVAULT';
    string private constant _symbol = '$SVAULT';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 private _maxTxAmount = ( _totalSupply * 10000 ) / 10000;
    uint256 private _maxSellAmount = ( _totalSupply * 600 ) / 10000;
    uint256 private _maxWalletToken = ( _totalSupply * 10000 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) private isBot;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 0;
    uint256 private rewardsFee = 200;
    uint256 private developmentFee = 400;
    uint256 private burnFee = 0;
    uint256 private totalFee = 600;
    uint256 private sellFee = 600;
    uint256 private transferFee = 600;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping; 
    uint256 private swapThreshold = ( _totalSupply * 500 ) / 100000;
    uint256 private _minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    address public reward = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 internal dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    struct Share {uint256 amount; uint256 totalExcluded; uint256 totalRealised; }
    mapping (address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPeriod = 60 minutes;
    uint256 public minDistribution = 1 * (10 ** 16);
    uint256 public distributorGas = 350000;
    function _claimDividend() external {distributeDividend(msg.sender);}

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal constant development_receiver = 0x7E55f221cAAb49204eeC80363B6ce2CDE3804b9B; 
    address internal constant marketing_receiver = 0x7E55f221cAAb49204eeC80363B6ce2CDE3804b9B;
    address internal constant liquidity_receiver = 0x7E55f221cAAb49204eeC80363B6ce2CDE3804b9B;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3    );
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[address(pair)] = true;
        isDividendExempt[address(msg.sender)] = true;        
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(DEAD)] = true;
        isDividendExempt[address(0)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }




    receive() external payable {}
    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 getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function isCont(address addr) internal view returns (bool) {uint size; assembly { size := extcodesize(addr) } return size > 0; }
    function setisExempt(address _address, bool _enabled) external onlyOwner {isFeeExempt[_address] = _enabled;}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function startTrading() external onlyOwner {
        require(!tradingAllowed,"trading is already open");
        tradingAllowed = true;
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > uint256(0), "Transfer amount must be greater than zero");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        swapbackCounters(sender, recipient);
        checkTxLimit(sender, recipient, amount); 
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));}
        if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));}
        if(shares[recipient].amount > 0){distributeDividend(recipient);}
        process(distributorGas);
    }

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _burn, uint256 _rewards, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        rewardsFee = _rewards;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        require(totalFee <= denominator.div(10) && sellFee <= denominator.div(10) && transferFee <= denominator.div(10), "totalFee and sellFee cannot be more than 10%");
    }

    function setisBot(address _address, bool _enabled) external onlyOwner {
        require(_address != address(pair) && _address != address(router) && _address != address(this), "Ineligible Address");
        isBot[_address] = _enabled;
    }

    function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmount = newTx;
        _maxSellAmount = newTransfer;
        _maxWalletToken = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender]){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee).add(rewardsFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);}
        uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
        if(rewardsAmount > 0){deposit(rewardsAmount);}
        if(address(this).balance > uint256(0)){payable(development_receiver).transfer(address(this).balance);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= uint256(2) && aboveThreshold;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(isBot[sender] || isBot[recipient]){return denominator.sub(uint256(100));}
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(burnFee > uint256(0)){_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));}
        return amount.sub(feeAmount);} return amount;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    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 setisDividendExempt(address holder, bool exempt) external onlyOwner {
        isDividendExempt[holder] = exempt;
        if(exempt){setShare(holder, 0);}
        else{setShare(holder, balanceOf(holder)); }
    }

    function setShare(address shareholder, uint256 amount) internal {
        if(amount > 0 && shares[shareholder].amount == 0){addShareholder(shareholder);}
        else if(amount == 0 && shares[shareholder].amount > 0){removeShareholder(shareholder); }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(reward).balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(reward);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}(
            0,
            path,
            address(this),
            block.timestamp);
        uint256 amount = IERC20(reward).balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) internal {
        uint256 shareholderCount = shareholders.length;
        if(shareholderCount == 0) { return; }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){currentIndex = 0;}
            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);}
            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

   function rescueERC20(address _address, uint256 _amount) external {
    IERC20(_address).transfer(marketing_receiver, _amount);

    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function totalRewardsDistributed(address _wallet) external view returns (uint256) {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }
        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            IERC20(reward).transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);}
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _distributorGas) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }
}

Contract Security Audit

Contract ABI

API
[{"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":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":"_claimDividend","outputs":[],"stateMutability":"nonpayable","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":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","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":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","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"},{"stateMutability":"payable","type":"receive"}]

60806040526100106009600a61051f565b61001e90633b9aca00610534565b6001556127106001546127106100349190610534565b61003e919061054b565b6002556127106001546102586100549190610534565b61005e919061054b565b6003556127106001546127106100749190610534565b61007e919061054b565b600455600b805460ff60a01b191690555f600c819055600d81905560c8600e55610190600f55601055610258601181905560128190556013556127106014556015805460ff1916600190811790915554620186a0906100df906101f4610534565b6100e9919061054b565b601855620186a0600154600a6100ff9190610534565b610109919061054b565b601955601a80546001600160a01b03191673039e2fb66102314ce7b64ce5ce3e5183bc94ad381790556ec097ce7bc90715b34b9f1000000000601f55610e10602555662386f26fc1000060265562055730602755348015610168575f80fd5b505f80546001600160a01b031916331781556040805163c45a015560e01b815290517395a7e403d7cf20f675ff9273d66e94d35ba49fa39291839163c45a0155916004808201926020929091908290030181865afa1580156101cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f0919061056a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561023b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061025f919061056a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156102a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102cd919061056a565b600a80546001600160a01b038581166001600160a01b031992831617909255600b80548484169216919091178155305f818152600760209081526040808320805460ff1990811660019081179092557f499447f25295a9b088231a196ce56bf6524e953596d3ff4bd0d23d8d2cca1fad805482168317905533808652838620805483168417905596549097168452600883528184208054881682179055858452818420805488168217905593835280832080548716851790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548716851790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909616841790955591548382526005835284822081905593519384529394509092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050610590565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156104755780850481111561045957610459610426565b600184161561046757908102905b60019390931c92800261043e565b935093915050565b5f8261048b57506001610519565b8161049757505f610519565b81600181146104ad57600281146104b7576104d3565b6001915050610519565b60ff8411156104c8576104c8610426565b50506001821b610519565b5060208310610133831016604e8410600b84101617156104f6575081810a610519565b6105025f19848461043a565b805f190482111561051557610515610426565b0290505b92915050565b5f61052d60ff84168361047d565b9392505050565b808202811582820484141761051957610519610426565b5f8261056557634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561057a575f80fd5b81516001600160a01b038116811461052d575f80fd5b6127238061059d5f395ff3fe6080604052600436106101ff575f3560e01c806370a0823111610113578063c942435d1161009d578063e2d6f94c1161006d578063e2d6f94c14610659578063ef43b02b14610678578063efca2eed14610697578063f2fde38b146106ac578063ffd49c84146106cb575f80fd5b8063c942435d14610575578063ca89b89914610589578063ce7c2ac2146105c0578063dd62ed3e14610615575f80fd5b80639358928b116100e35780639358928b146104df57806395d89b41146104f3578063997664d714610522578063a8aa1b3114610537578063a9059cbb14610556575f80fd5b806370a0823114610466578063893d20e8146104855780638c41180e146104a15780638cd4426d146104c0575f80fd5b80632f54bf6e116101945780633f4218e0116101645780633f4218e0146103c15780634355855a146103ef57806348ff2b8b1461041d5780634fab0ae81461043c57806360e7196214610451575f80fd5b80632f54bf6e14610345578063313ce5671461037257806334c5d2ce1461038d5780633a98ef39146103ac575f80fd5b8063228cb733116101cf578063228cb733146102bc57806323b872dd146102f357806328fd319814610312578063293230b814610331575f80fd5b806306fdde031461020a578063095ea7b31461024e5780630ca61cb11461027d57806318160ddd1461029e575f80fd5b3661020657005b5f80fd5b348015610215575f80fd5b5060408051808201909152600a81526914d3d39250d59055531560b21b60208201525b6040516102459190612313565b60405180910390f35b348015610259575f80fd5b5061026d61026836600461235f565b6106e0565b6040519015158152602001610245565b348015610288575f80fd5b5061029c610297366004612389565b6106f6565b005b3480156102a9575f80fd5b506001545b604051908152602001610245565b3480156102c7575f80fd5b50601a546102db906001600160a01b031681565b6040516001600160a01b039091168152602001610245565b3480156102fe575f80fd5b5061026d61030d3660046123b2565b610736565b34801561031d575f80fd5b506102ae61032c3660046123f0565b61079e565b34801561033c575f80fd5b5061029c610824565b348015610350575f80fd5b5061026d61035f3660046123f0565b5f546001600160a01b0391821691161490565b34801561037d575f80fd5b5060405160098152602001610245565b348015610398575f80fd5b5061029c6103a7366004612389565b6108bc565b3480156103b7575f80fd5b506102ae601b5481565b3480156103cc575f80fd5b5061026d6103db3660046123f0565b60076020525f908152604090205460ff1681565b3480156103fa575f80fd5b5061026d6104093660046123f0565b60086020525f908152604090205460ff1681565b348015610428575f80fd5b5061029c610437366004612418565b610a0b565b348015610447575f80fd5b506102ae60265481565b34801561045c575f80fd5b506102ae60275481565b348015610471575f80fd5b506102ae6104803660046123f0565b610a5e565b348015610490575f80fd5b505f546001600160a01b03166102db565b3480156104ac575f80fd5b5061029c6104bb366004612418565b610a78565b3480156104cb575f80fd5b5061029c6104da36600461235f565b610b4d565b3480156104ea575f80fd5b506102ae610bd4565b3480156104fe575f80fd5b506040805180820190915260078152660914d59055531560ca1b6020820152610238565b34801561052d575f80fd5b506102ae601c5481565b348015610542575f80fd5b50600b546102db906001600160a01b031681565b348015610561575f80fd5b5061026d61057036600461235f565b610c03565b348015610580575f80fd5b5061029c610c0f565b348015610594575f80fd5b506102ae6105a33660046123f0565b6001600160a01b03165f9081526023602052604090206002015490565b3480156105cb575f80fd5b506105fa6105da3660046123f0565b60236020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610245565b348015610620575f80fd5b506102ae61062f36600461244f565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b348015610664575f80fd5b5061029c61067336600461247b565b610c1a565b348015610683575f80fd5b5061029c610692366004612418565b610d1f565b3480156106a2575f80fd5b506102ae601d5481565b3480156106b7575f80fd5b5061029c6106c63660046123f0565b610d94565b3480156106d6575f80fd5b506102ae60255481565b5f6106ec338484610e10565b5060015b92915050565b5f546001600160a01b031633146107285760405162461bcd60e51b815260040161071f906124cb565b60405180910390fd5b602592909255602655602755565b5f610742848484610f33565b610793843361078e856040518060600160405280602881526020016126c6602891396001600160a01b038a165f90815260066020908152604080832033845290915290205491906110de565b610e10565b5060015b9392505050565b6001600160a01b0381165f9081526023602052604081205481036107c357505f919050565b6001600160a01b0382165f908152602360205260408120546107e490611109565b6001600160a01b0384165f9081526023602052604090206001015490915080821161081257505f9392505050565b61081c8282611125565b949350505050565b5f546001600160a01b0316331461084d5760405162461bcd60e51b815260040161071f906124cb565b600b54600160a01b900460ff16156108a75760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015260640161071f565b600b805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146108e55760405162461bcd60e51b815260040161071f906124cb565b5f612710846108f360015490565b6108fd91906124ff565b6109079190612516565b90505f6127108461091760015490565b61092191906124ff565b61092b9190612516565b90505f6127108461093b60015490565b61094591906124ff565b61094f9190612516565b60028490556003839055600481905590505f6109816103e861097b600561097560015490565b90611130565b9061113b565b90508084101580156109935750808310155b801561099f5750808210155b610a025760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b606482015260840161071f565b50505050505050565b5f546001600160a01b03163314610a345760405162461bcd60e51b815260040161071f906124cb565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03165f9081526005602052604090205490565b5f546001600160a01b03163314610aa15760405162461bcd60e51b815260040161071f906124cb565b600b546001600160a01b03838116911614801590610acd5750600a546001600160a01b03838116911614155b8015610ae257506001600160a01b0382163014155b610b235760405162461bcd60e51b8152602060048201526012602482015271496e656c696769626c65204164647265737360701b604482015260640161071f565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b60405163a9059cbb60e01b8152737e55f221caab49204eec80363b6ce2cde3804b9b6004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610bab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bcf9190612535565b505050565b5f610bfe610be15f610a5e565b610bf8610bef61dead610a5e565b60015490611125565b90611125565b905090565b5f6106ec338484610f33565b610c1833611146565b565b5f546001600160a01b03163314610c435760405162461bcd60e51b815260040161071f906124cb565b600c889055600d8790556010869055600e859055600f849055601183905560128290556013819055601454610c7990600a61113b565b60115411158015610c995750601454610c9390600a61113b565b60125411155b8015610cb45750601454610cae90600a61113b565b60135411155b610d155760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2031302560a01b606482015260840161071f565b5050505050505050565b5f546001600160a01b03163314610d485760405162461bcd60e51b815260040161071f906124cb565b6001600160a01b0382165f908152600860205260409020805460ff19168215801591909117909155610d8257610d7e825f611278565b5050565b610d7e82610d8f84610a5e565b611278565b5f546001600160a01b03163314610dbd5760405162461bcd60e51b815260040161071f906124cb565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b038316610e725760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161071f565b6001600160a01b038216610ed35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161071f565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f3e838383611388565b610f488383611521565b610f538383836115b0565b610f5d8383611699565b610f688383836116ee565b610f73838383611817565b6001600160a01b0383165f90815260056020526040902054610f959082611125565b6001600160a01b0384165f90815260056020526040812091909155610fba848461183b565b610fc45781610fcf565b610fcf84848461187f565b6001600160a01b0384165f90815260056020526040902054909150610ff49082611969565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110479085815260200190565b60405180910390a36001600160a01b0384165f9081526008602052604090205460ff1661107b5761107b84610d8f86610a5e565b6001600160a01b0383165f9081526008602052604090205460ff166110a7576110a783610d8f85610a5e565b6001600160a01b0383165f90815260236020526040902054156110cd576110cd83611146565b6110d8602754611974565b50505050565b5f81848411156111015760405162461bcd60e51b815260040161071f9190612313565b505050900390565b5f6106f0601f5461097b601e548561113090919063ffffffff16565b5f6107978284612550565b5f61079782846124ff565b5f6107978284612516565b6001600160a01b0381165f9081526023602052604081205490036111675750565b5f6111718261079e565b90508015610d7e57601d546111869082611969565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af11580156111d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fd9190612535565b506001600160a01b0382165f90815260226020908152604080832042905560239091529020600201546112309082611969565b6001600160a01b0383165f90815260236020526040902060028101919091555461125990611109565b6001600160a01b0383165f908152602360205260409020600101555050565b5f8111801561129c57506001600160a01b0382165f90815260236020526040902054155b1561130057602080546001600160a01b0384165f8181526021845260408120839055600183018455929092527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0180546001600160a01b0319169091179055611332565b8015801561132457506001600160a01b0382165f9081526023602052604090205415155b156113325761133282611a5a565b6001600160a01b0382165f90815260236020526040902054601b5461136291839161135c91611125565b90611969565b601b556001600160a01b0382165f90815260236020526040902081905561125981611109565b6001600160a01b0383166113ec5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161071f565b6001600160a01b03821661144e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161071f565b5f81116114af5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161071f565b6114b883610a5e565b811115610bcf5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161071f565b6001600160a01b0382165f9081526007602052604090205460ff1615801561156157506001600160a01b0381165f9081526007602052604090205460ff16155b15610d7e57600b54600160a01b900460ff16610d7e5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b604482015260640161071f565b6001600160a01b0383165f9081526007602052604090205460ff161580156115f057506001600160a01b0382165f9081526007602052604090205460ff16155b801561160a5750600b546001600160a01b03838116911614155b801561162157506001600160a01b03821661dead14155b15610bcf576004546001600160a01b0383165f9081526005602052604090205461164b9083611969565b1115610bcf5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161071f565b600b546001600160a01b0382811691161480156116ce57506001600160a01b0382165f9081526007602052604090205460ff16155b15610d7e57600160165f8282546116e59190612563565b90915550505050565b600b546001600160a01b0384811691161461178d576003548111158061172b57506001600160a01b0383165f9081526007602052604090205460ff165b8061174d57506001600160a01b0382165f9081526007602052604090205460ff165b61178d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161071f565b600254811115806117b557506001600160a01b0383165f9081526007602052604090205460ff165b806117d757506001600160a01b0382165f9081526007602052604090205460ff165b610bcf5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161071f565b611822838383611b69565b15610bcf57611832601854611c17565b5f601655505050565b6001600160a01b0382165f9081526007602052604081205460ff161580156107975750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f8061188b8585611dc7565b1115611962575f6118ad61189f8686611dc7565b60145461097590869061113b565b305f908152600560205260409020549091506118c99082611969565b305f81815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119199085815260200190565b60405180910390a360105415611950576119503061dead61194b6010546109756014548961113b90919063ffffffff16565b610f33565b61195a8382611125565b915050610797565b5092915050565b5f6107978284612563565b6020545f819003611983575050565b5f805a90505f5b848310801561199857508381105b15611a535783602454106119ab575f6024555b6119dc6020602454815481106119c3576119c3612576565b5f918252602090912001546001600160a01b0316611e66565b15611a1257611a126020602454815481106119f9576119f9612576565b5f918252602090912001546001600160a01b0316611146565b611a27611a205a8490611125565b8490611969565b92505a602480549193505f611a3b8361258a565b91905055508080611a4b9061258a565b91505061198a565b5050505050565b60208054611a6a90600190612550565b81548110611a7a57611a7a612576565b5f9182526020808320909101546001600160a01b03848116845260218352604090932054825493909116928110611ab357611ab3612576565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152602180835260408220548354909391929190611afd90600190612550565b81548110611b0d57611b0d612576565b5f9182526020808320909101546001600160a01b03168352828101939093526040909101902091909155805480611b4657611b466125a2565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f8060195483101590505f601854611b8030610a5e565b601754911115915060ff16158015611b9a575060155460ff165b8015611baf5750600b54600160a01b900460ff165b8015611bb85750815b8015611bdc57506001600160a01b0386165f9081526007602052604090205460ff16155b8015611bf55750600b546001600160a01b038681169116145b8015611c045750600260165410155b8015611c0d5750805b9695505050505050565b600160175f6101000a81548160ff0219169083151502179055505f611c5f6002610975600e5461135c600f5461135c600d5461135c6001600c5461196990919063ffffffff16565b90505f611c7b8261097b600c548661113090919063ffffffff16565b90505f611c888483611125565b905047611c9482611eaa565b5f611c9f4783611125565b90505f611cc1611cba600c548861112590919063ffffffff16565b839061113b565b90505f611cd9600c548361113090919063ffffffff16565b90508015611ceb57611ceb8682611ffa565b600d545f90611cff90610975856002611130565b90508015611d4757604051737e55f221caab49204eec80363b6ce2cde3804b9b9082156108fc029083905f818181858888f19350505050158015611d45573d5f803e3d5ffd5b505b600e545f90611d5b90610975866002611130565b90508015611d6c57611d6c816120b4565b4715611db157604051737e55f221caab49204eec80363b6ce2cde3804b9b904780156108fc02915f818181858888f19350505050158015611daf573d5f803e3d5ffd5b505b50506017805460ff191690555050505050505050565b6001600160a01b0382165f9081526009602052604081205460ff1680611e0457506001600160a01b0382165f9081526009602052604090205460ff165b15611e1e57601454611e17906064611125565b90506106f0565b600b546001600160a01b0390811690831603611e3d57506012546106f0565b600b546001600160a01b0390811690841603611e5c57506011546106f0565b5060135492915050565b6025546001600160a01b0382165f9081526022602052604081205490914291611e8f9190612563565b1080156106f05750602654611ea38361079e565b1192915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611edd57611edd612576565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f5891906125b6565b81600181518110611f6b57611f6b612576565b6001600160a01b039283166020918202929092010152600a54611f919130911684610e10565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611fc99085905f90869030904290600401612614565b5f604051808303815f87803b158015611fe0575f80fd5b505af1158015611ff2573d5f803e3d5ffd5b505050505050565b600a546120129030906001600160a01b031684610e10565b600a5460405163f305d71960e01b8152306004820152602481018490525f604482018190526064820152737e55f221caab49204eec80363b6ce2cde3804b9b60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561208f573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a53919061264f565b601a546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156120fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061211e919061267a565b6040805160028082526060820183529293505f9290916020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561218a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ae91906125b6565b815f815181106121c0576121c0612576565b6001600160a01b039283166020918202929092010152601a548251911690829060019081106121f1576121f1612576565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de95908590612236905f90869030904290600401612691565b5f604051808303818588803b15801561224d575f80fd5b505af115801561225f573d5f803e3d5ffd5b5050601a546040516370a0823160e01b81523060048201525f94506122d693508692506001600160a01b03909116906370a0823190602401602060405180830381865afa1580156122b2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf8919061267a565b601c549091506122e69082611969565b601c55601b54601f5461230a916123019161097b9085611130565b601e5490611969565b601e5550505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461235c575f80fd5b50565b5f8060408385031215612370575f80fd5b823561237b81612348565b946020939093013593505050565b5f805f6060848603121561239b575f80fd5b505081359360208301359350604090920135919050565b5f805f606084860312156123c4575f80fd5b83356123cf81612348565b925060208401356123df81612348565b929592945050506040919091013590565b5f60208284031215612400575f80fd5b813561079781612348565b801515811461235c575f80fd5b5f8060408385031215612429575f80fd5b823561243481612348565b915060208301356124448161240b565b809150509250929050565b5f8060408385031215612460575f80fd5b823561246b81612348565b9150602083013561244481612348565b5f805f805f805f80610100898b031215612493575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106f0576106f06124eb565b5f8261253057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612545575f80fd5b81516107978161240b565b818103818111156106f0576106f06124eb565b808201808211156106f0576106f06124eb565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161259b5761259b6124eb565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156125c6575f80fd5b815161079781612348565b5f8151808452602084019350602083015f5b8281101561260a5781516001600160a01b03168652602095860195909101906001016125e3565b5093949350505050565b85815284602082015260a060408201525f61263260a08301866125d1565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215612661575f80fd5b5050815160208301516040909301519094929350919050565b5f6020828403121561268a575f80fd5b5051919050565b848152608060208201525f6126a960808301866125d1565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122079f8b05fbc71183b1e46955cdb2dd260ad6e0fbd984126e2a6a1eca1758fbadc64736f6c634300081a0033

Deployed Bytecode

0x6080604052600436106101ff575f3560e01c806370a0823111610113578063c942435d1161009d578063e2d6f94c1161006d578063e2d6f94c14610659578063ef43b02b14610678578063efca2eed14610697578063f2fde38b146106ac578063ffd49c84146106cb575f80fd5b8063c942435d14610575578063ca89b89914610589578063ce7c2ac2146105c0578063dd62ed3e14610615575f80fd5b80639358928b116100e35780639358928b146104df57806395d89b41146104f3578063997664d714610522578063a8aa1b3114610537578063a9059cbb14610556575f80fd5b806370a0823114610466578063893d20e8146104855780638c41180e146104a15780638cd4426d146104c0575f80fd5b80632f54bf6e116101945780633f4218e0116101645780633f4218e0146103c15780634355855a146103ef57806348ff2b8b1461041d5780634fab0ae81461043c57806360e7196214610451575f80fd5b80632f54bf6e14610345578063313ce5671461037257806334c5d2ce1461038d5780633a98ef39146103ac575f80fd5b8063228cb733116101cf578063228cb733146102bc57806323b872dd146102f357806328fd319814610312578063293230b814610331575f80fd5b806306fdde031461020a578063095ea7b31461024e5780630ca61cb11461027d57806318160ddd1461029e575f80fd5b3661020657005b5f80fd5b348015610215575f80fd5b5060408051808201909152600a81526914d3d39250d59055531560b21b60208201525b6040516102459190612313565b60405180910390f35b348015610259575f80fd5b5061026d61026836600461235f565b6106e0565b6040519015158152602001610245565b348015610288575f80fd5b5061029c610297366004612389565b6106f6565b005b3480156102a9575f80fd5b506001545b604051908152602001610245565b3480156102c7575f80fd5b50601a546102db906001600160a01b031681565b6040516001600160a01b039091168152602001610245565b3480156102fe575f80fd5b5061026d61030d3660046123b2565b610736565b34801561031d575f80fd5b506102ae61032c3660046123f0565b61079e565b34801561033c575f80fd5b5061029c610824565b348015610350575f80fd5b5061026d61035f3660046123f0565b5f546001600160a01b0391821691161490565b34801561037d575f80fd5b5060405160098152602001610245565b348015610398575f80fd5b5061029c6103a7366004612389565b6108bc565b3480156103b7575f80fd5b506102ae601b5481565b3480156103cc575f80fd5b5061026d6103db3660046123f0565b60076020525f908152604090205460ff1681565b3480156103fa575f80fd5b5061026d6104093660046123f0565b60086020525f908152604090205460ff1681565b348015610428575f80fd5b5061029c610437366004612418565b610a0b565b348015610447575f80fd5b506102ae60265481565b34801561045c575f80fd5b506102ae60275481565b348015610471575f80fd5b506102ae6104803660046123f0565b610a5e565b348015610490575f80fd5b505f546001600160a01b03166102db565b3480156104ac575f80fd5b5061029c6104bb366004612418565b610a78565b3480156104cb575f80fd5b5061029c6104da36600461235f565b610b4d565b3480156104ea575f80fd5b506102ae610bd4565b3480156104fe575f80fd5b506040805180820190915260078152660914d59055531560ca1b6020820152610238565b34801561052d575f80fd5b506102ae601c5481565b348015610542575f80fd5b50600b546102db906001600160a01b031681565b348015610561575f80fd5b5061026d61057036600461235f565b610c03565b348015610580575f80fd5b5061029c610c0f565b348015610594575f80fd5b506102ae6105a33660046123f0565b6001600160a01b03165f9081526023602052604090206002015490565b3480156105cb575f80fd5b506105fa6105da3660046123f0565b60236020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610245565b348015610620575f80fd5b506102ae61062f36600461244f565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b348015610664575f80fd5b5061029c61067336600461247b565b610c1a565b348015610683575f80fd5b5061029c610692366004612418565b610d1f565b3480156106a2575f80fd5b506102ae601d5481565b3480156106b7575f80fd5b5061029c6106c63660046123f0565b610d94565b3480156106d6575f80fd5b506102ae60255481565b5f6106ec338484610e10565b5060015b92915050565b5f546001600160a01b031633146107285760405162461bcd60e51b815260040161071f906124cb565b60405180910390fd5b602592909255602655602755565b5f610742848484610f33565b610793843361078e856040518060600160405280602881526020016126c6602891396001600160a01b038a165f90815260066020908152604080832033845290915290205491906110de565b610e10565b5060015b9392505050565b6001600160a01b0381165f9081526023602052604081205481036107c357505f919050565b6001600160a01b0382165f908152602360205260408120546107e490611109565b6001600160a01b0384165f9081526023602052604090206001015490915080821161081257505f9392505050565b61081c8282611125565b949350505050565b5f546001600160a01b0316331461084d5760405162461bcd60e51b815260040161071f906124cb565b600b54600160a01b900460ff16156108a75760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604482015260640161071f565b600b805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146108e55760405162461bcd60e51b815260040161071f906124cb565b5f612710846108f360015490565b6108fd91906124ff565b6109079190612516565b90505f6127108461091760015490565b61092191906124ff565b61092b9190612516565b90505f6127108461093b60015490565b61094591906124ff565b61094f9190612516565b60028490556003839055600481905590505f6109816103e861097b600561097560015490565b90611130565b9061113b565b90508084101580156109935750808310155b801561099f5750808210155b610a025760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b606482015260840161071f565b50505050505050565b5f546001600160a01b03163314610a345760405162461bcd60e51b815260040161071f906124cb565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03165f9081526005602052604090205490565b5f546001600160a01b03163314610aa15760405162461bcd60e51b815260040161071f906124cb565b600b546001600160a01b03838116911614801590610acd5750600a546001600160a01b03838116911614155b8015610ae257506001600160a01b0382163014155b610b235760405162461bcd60e51b8152602060048201526012602482015271496e656c696769626c65204164647265737360701b604482015260640161071f565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b60405163a9059cbb60e01b8152737e55f221caab49204eec80363b6ce2cde3804b9b6004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610bab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bcf9190612535565b505050565b5f610bfe610be15f610a5e565b610bf8610bef61dead610a5e565b60015490611125565b90611125565b905090565b5f6106ec338484610f33565b610c1833611146565b565b5f546001600160a01b03163314610c435760405162461bcd60e51b815260040161071f906124cb565b600c889055600d8790556010869055600e859055600f849055601183905560128290556013819055601454610c7990600a61113b565b60115411158015610c995750601454610c9390600a61113b565b60125411155b8015610cb45750601454610cae90600a61113b565b60135411155b610d155760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2031302560a01b606482015260840161071f565b5050505050505050565b5f546001600160a01b03163314610d485760405162461bcd60e51b815260040161071f906124cb565b6001600160a01b0382165f908152600860205260409020805460ff19168215801591909117909155610d8257610d7e825f611278565b5050565b610d7e82610d8f84610a5e565b611278565b5f546001600160a01b03163314610dbd5760405162461bcd60e51b815260040161071f906124cb565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b038316610e725760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161071f565b6001600160a01b038216610ed35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161071f565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610f3e838383611388565b610f488383611521565b610f538383836115b0565b610f5d8383611699565b610f688383836116ee565b610f73838383611817565b6001600160a01b0383165f90815260056020526040902054610f959082611125565b6001600160a01b0384165f90815260056020526040812091909155610fba848461183b565b610fc45781610fcf565b610fcf84848461187f565b6001600160a01b0384165f90815260056020526040902054909150610ff49082611969565b6001600160a01b038085165f8181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906110479085815260200190565b60405180910390a36001600160a01b0384165f9081526008602052604090205460ff1661107b5761107b84610d8f86610a5e565b6001600160a01b0383165f9081526008602052604090205460ff166110a7576110a783610d8f85610a5e565b6001600160a01b0383165f90815260236020526040902054156110cd576110cd83611146565b6110d8602754611974565b50505050565b5f81848411156111015760405162461bcd60e51b815260040161071f9190612313565b505050900390565b5f6106f0601f5461097b601e548561113090919063ffffffff16565b5f6107978284612550565b5f61079782846124ff565b5f6107978284612516565b6001600160a01b0381165f9081526023602052604081205490036111675750565b5f6111718261079e565b90508015610d7e57601d546111869082611969565b601d55601a5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af11580156111d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fd9190612535565b506001600160a01b0382165f90815260226020908152604080832042905560239091529020600201546112309082611969565b6001600160a01b0383165f90815260236020526040902060028101919091555461125990611109565b6001600160a01b0383165f908152602360205260409020600101555050565b5f8111801561129c57506001600160a01b0382165f90815260236020526040902054155b1561130057602080546001600160a01b0384165f8181526021845260408120839055600183018455929092527fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb0180546001600160a01b0319169091179055611332565b8015801561132457506001600160a01b0382165f9081526023602052604090205415155b156113325761133282611a5a565b6001600160a01b0382165f90815260236020526040902054601b5461136291839161135c91611125565b90611969565b601b556001600160a01b0382165f90815260236020526040902081905561125981611109565b6001600160a01b0383166113ec5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161071f565b6001600160a01b03821661144e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161071f565b5f81116114af5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161071f565b6114b883610a5e565b811115610bcf5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161071f565b6001600160a01b0382165f9081526007602052604090205460ff1615801561156157506001600160a01b0381165f9081526007602052604090205460ff16155b15610d7e57600b54600160a01b900460ff16610d7e5760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b604482015260640161071f565b6001600160a01b0383165f9081526007602052604090205460ff161580156115f057506001600160a01b0382165f9081526007602052604090205460ff16155b801561160a5750600b546001600160a01b03838116911614155b801561162157506001600160a01b03821661dead14155b15610bcf576004546001600160a01b0383165f9081526005602052604090205461164b9083611969565b1115610bcf5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161071f565b600b546001600160a01b0382811691161480156116ce57506001600160a01b0382165f9081526007602052604090205460ff16155b15610d7e57600160165f8282546116e59190612563565b90915550505050565b600b546001600160a01b0384811691161461178d576003548111158061172b57506001600160a01b0383165f9081526007602052604090205460ff165b8061174d57506001600160a01b0382165f9081526007602052604090205460ff165b61178d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161071f565b600254811115806117b557506001600160a01b0383165f9081526007602052604090205460ff165b806117d757506001600160a01b0382165f9081526007602052604090205460ff165b610bcf5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161071f565b611822838383611b69565b15610bcf57611832601854611c17565b5f601655505050565b6001600160a01b0382165f9081526007602052604081205460ff161580156107975750506001600160a01b03165f9081526007602052604090205460ff1615919050565b5f8061188b8585611dc7565b1115611962575f6118ad61189f8686611dc7565b60145461097590869061113b565b305f908152600560205260409020549091506118c99082611969565b305f81815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119199085815260200190565b60405180910390a360105415611950576119503061dead61194b6010546109756014548961113b90919063ffffffff16565b610f33565b61195a8382611125565b915050610797565b5092915050565b5f6107978284612563565b6020545f819003611983575050565b5f805a90505f5b848310801561199857508381105b15611a535783602454106119ab575f6024555b6119dc6020602454815481106119c3576119c3612576565b5f918252602090912001546001600160a01b0316611e66565b15611a1257611a126020602454815481106119f9576119f9612576565b5f918252602090912001546001600160a01b0316611146565b611a27611a205a8490611125565b8490611969565b92505a602480549193505f611a3b8361258a565b91905055508080611a4b9061258a565b91505061198a565b5050505050565b60208054611a6a90600190612550565b81548110611a7a57611a7a612576565b5f9182526020808320909101546001600160a01b03848116845260218352604090932054825493909116928110611ab357611ab3612576565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152602180835260408220548354909391929190611afd90600190612550565b81548110611b0d57611b0d612576565b5f9182526020808320909101546001600160a01b03168352828101939093526040909101902091909155805480611b4657611b466125a2565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f8060195483101590505f601854611b8030610a5e565b601754911115915060ff16158015611b9a575060155460ff165b8015611baf5750600b54600160a01b900460ff165b8015611bb85750815b8015611bdc57506001600160a01b0386165f9081526007602052604090205460ff16155b8015611bf55750600b546001600160a01b038681169116145b8015611c045750600260165410155b8015611c0d5750805b9695505050505050565b600160175f6101000a81548160ff0219169083151502179055505f611c5f6002610975600e5461135c600f5461135c600d5461135c6001600c5461196990919063ffffffff16565b90505f611c7b8261097b600c548661113090919063ffffffff16565b90505f611c888483611125565b905047611c9482611eaa565b5f611c9f4783611125565b90505f611cc1611cba600c548861112590919063ffffffff16565b839061113b565b90505f611cd9600c548361113090919063ffffffff16565b90508015611ceb57611ceb8682611ffa565b600d545f90611cff90610975856002611130565b90508015611d4757604051737e55f221caab49204eec80363b6ce2cde3804b9b9082156108fc029083905f818181858888f19350505050158015611d45573d5f803e3d5ffd5b505b600e545f90611d5b90610975866002611130565b90508015611d6c57611d6c816120b4565b4715611db157604051737e55f221caab49204eec80363b6ce2cde3804b9b904780156108fc02915f818181858888f19350505050158015611daf573d5f803e3d5ffd5b505b50506017805460ff191690555050505050505050565b6001600160a01b0382165f9081526009602052604081205460ff1680611e0457506001600160a01b0382165f9081526009602052604090205460ff165b15611e1e57601454611e17906064611125565b90506106f0565b600b546001600160a01b0390811690831603611e3d57506012546106f0565b600b546001600160a01b0390811690841603611e5c57506011546106f0565b5060135492915050565b6025546001600160a01b0382165f9081526022602052604081205490914291611e8f9190612563565b1080156106f05750602654611ea38361079e565b1192915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611edd57611edd612576565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f5891906125b6565b81600181518110611f6b57611f6b612576565b6001600160a01b039283166020918202929092010152600a54611f919130911684610e10565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611fc99085905f90869030904290600401612614565b5f604051808303815f87803b158015611fe0575f80fd5b505af1158015611ff2573d5f803e3d5ffd5b505050505050565b600a546120129030906001600160a01b031684610e10565b600a5460405163f305d71960e01b8152306004820152602481018490525f604482018190526064820152737e55f221caab49204eec80363b6ce2cde3804b9b60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561208f573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a53919061264f565b601a546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156120fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061211e919061267a565b6040805160028082526060820183529293505f9290916020830190803683375050600a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561218a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ae91906125b6565b815f815181106121c0576121c0612576565b6001600160a01b039283166020918202929092010152601a548251911690829060019081106121f1576121f1612576565b6001600160a01b039283166020918202929092010152600a5460405163b6f9de9560e01b815291169063b6f9de95908590612236905f90869030904290600401612691565b5f604051808303818588803b15801561224d575f80fd5b505af115801561225f573d5f803e3d5ffd5b5050601a546040516370a0823160e01b81523060048201525f94506122d693508692506001600160a01b03909116906370a0823190602401602060405180830381865afa1580156122b2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf8919061267a565b601c549091506122e69082611969565b601c55601b54601f5461230a916123019161097b9085611130565b601e5490611969565b601e5550505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461235c575f80fd5b50565b5f8060408385031215612370575f80fd5b823561237b81612348565b946020939093013593505050565b5f805f6060848603121561239b575f80fd5b505081359360208301359350604090920135919050565b5f805f606084860312156123c4575f80fd5b83356123cf81612348565b925060208401356123df81612348565b929592945050506040919091013590565b5f60208284031215612400575f80fd5b813561079781612348565b801515811461235c575f80fd5b5f8060408385031215612429575f80fd5b823561243481612348565b915060208301356124448161240b565b809150509250929050565b5f8060408385031215612460575f80fd5b823561246b81612348565b9150602083013561244481612348565b5f805f805f805f80610100898b031215612493575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106f0576106f06124eb565b5f8261253057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612545575f80fd5b81516107978161240b565b818103818111156106f0576106f06124eb565b808201808211156106f0576106f06124eb565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161259b5761259b6124eb565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156125c6575f80fd5b815161079781612348565b5f8151808452602084019350602083015f5b8281101561260a5781516001600160a01b03168652602095860195909101906001016125e3565b5093949350505050565b85815284602082015260a060408201525f61263260a08301866125d1565b6001600160a01b0394909416606083015250608001529392505050565b5f805f60608486031215612661575f80fd5b5050815160208301516040909301519094929350919050565b5f6020828403121561268a575f80fd5b5051919050565b848152608060208201525f6126a960808301866125d1565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122079f8b05fbc71183b1e46955cdb2dd260ad6e0fbd984126e2a6a1eca1758fbadc64736f6c634300081a0033

Deployed Bytecode Sourcemap

4993:17910:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8567:67;;;;;;;;;;-1:-1:-1;8627:5:0;;;;;;;;;;;;-1:-1:-1;;;8627:5:0;;;;8567:67;;;;;;;:::i;:::-;;;;;;;;9599:133;;;;;;;;;;-1:-1:-1;9599:133:0;;;;;:::i;:::-;;:::i;:::-;;;1110:14:1;;1103:22;1085:41;;1073:2;1058:18;9599:133:0;945:187:1;22648:252:0;;;;;;;;;;-1:-1:-1;22648:252:0;;;;;:::i;:::-;;:::i;:::-;;8874:84;;;;;;;;;;-1:-1:-1;8944:12:0;;8874:84;;;1754:25:1;;;1742:2;1727:18;8874:84:0;1608:177:1;6515:66:0;;;;;;;;;;-1:-1:-1;6515:66:0;;;;-1:-1:-1;;;;;6515:66:0;;;;;;-1:-1:-1;;;;;1954:32:1;;;1936:51;;1924:2;1909:18;6515:66:0;1790:203:1;17583:309:0;;;;;;;;;;-1:-1:-1;17583:309:0;;;;;:::i;:::-;;:::i;21518:473::-;;;;;;;;;;-1:-1:-1;21518:473:0;;;;;:::i;:::-;;:::i;9884:144::-;;;;;;;;;;;;;:::i;3373:87::-;;;;;;;;;;-1:-1:-1;3373:87:0;;;;;:::i;:::-;3428:4;3453:5;-1:-1:-1;;;;;3442:16:0;;;3453:5;;3442:16;;3373:87;8717:67;;;;;;;;;;-1:-1:-1;8717:67:0;;5208:1;2905:36:1;;2893:2;2878:18;8717:67:0;2763:184:1;12323:578:0;;;;;;;;;;-1:-1:-1;12323:578:0;;;;;:::i;:::-;;:::i;6588:26::-;;;;;;;;;;;;;;;;5618:44;;;;;;;;;;-1:-1:-1;5618:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5669:49;;;;;;;;;;-1:-1:-1;5669:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9485:108;;;;;;;;;;-1:-1:-1;9485:108:0;;;;;:::i;:::-;;:::i;7148:47::-;;;;;;;;;;;;;;;;7202:38;;;;;;;;;;;;;;;;8964:103;;;;;;;;;;-1:-1:-1;8964:103:0;;;;;:::i;:::-;;:::i;8790:78::-;;;;;;;;;;-1:-1:-1;8842:7:0;8860:5;-1:-1:-1;;;;;8860:5:0;8790:78;;12073:242;;;;;;;;;;-1:-1:-1;12073:242:0;;;;;:::i;:::-;;:::i;20338:136::-;;;;;;;;;;-1:-1:-1;20338:136:0;;;;;:::i;:::-;;:::i;9738:138::-;;;;;;;;;;;;;:::i;8640:71::-;;;;;;;;;;-1:-1:-1;8702:7:0;;;;;;;;;;;;-1:-1:-1;;;8702:7:0;;;;8640:71;;6621:29;;;;;;;;;;;;;;;;5792:19;;;;;;;;;;-1:-1:-1;5792:19:0;;;;-1:-1:-1;;;;;5792:19:0;;;9073:139;;;;;;;;;;-1:-1:-1;9073:139:0;;;;;:::i;:::-;;:::i;7247:68::-;;;;;;;;;;;;;:::i;20725:190::-;;;;;;;;;;-1:-1:-1;20725:190:0;;;;;:::i;:::-;-1:-1:-1;;;;;20873:19:0;20798:7;20873:19;;;:6;:19;;;;;:33;;;;20725:190;7021:40;;;;;;;;;;-1:-1:-1;7021:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3664:25:1;;;3720:2;3705:18;;3698:34;;;;3748:18;;;3741:34;3652:2;3637:18;7021:40:0;3462:319:1;9218:127:0;;;;;;;;;;-1:-1:-1;9218:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9316:18:0;;;9299:7;9316:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9218:127;11448:617;;;;;;;;;;-1:-1:-1;11448:617:0;;;;;:::i;:::-;;:::i;18243:224::-;;;;;;;;;;-1:-1:-1;18243:224:0;;;;;:::i;:::-;;:::i;6657:31::-;;;;;;;;;;;;;;;;3466:111;;;;;;;;;;-1:-1:-1;3466:111:0;;;;;:::i;:::-;;:::i;7104:37::-;;;;;;;;;;;;;;;;9599:133;9674:4;9681:37;9690:10;9702:7;9711:6;9681:8;:37::i;:::-;-1:-1:-1;9726:4:0;9599:133;;;;;:::o;22648:252::-;3428:4;3453:5;-1:-1:-1;;;;;3453:5:0;3340:10;3442:16;3324:38;;;;-1:-1:-1;;;3324:38:0;;;;;;;:::i;:::-;;;;;;;;;22782:9:::1;:22:::0;;;;22815:15:::1;:34:::0;22860:14:::1;:32:::0;22648:252::o;17583:309::-;17681:4;17698:36;17708:6;17716:9;17727:6;17698:9;:36::i;:::-;17745:117;17754:6;17762:10;17774:87;17810:6;17774:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17774:19:0;;;;;;:11;:19;;;;;;;;17794:10;17774:31;;;;;;;;;:87;:35;:87::i;:::-;17745:8;:117::i;:::-;-1:-1:-1;17880:4:0;17583:309;;;;;;:::o;21518:473::-;-1:-1:-1;;;;;21610:19:0;;21587:7;21610:19;;;:6;:19;;;;;:26;:31;;21607:48;;-1:-1:-1;21651:1:0;;21518:473;-1:-1:-1;21518:473:0:o;21607:48::-;-1:-1:-1;;;;;21724:19:0;;21665:33;21724:19;;;:6;:19;;;;;:26;21701:50;;:22;:50::i;:::-;-1:-1:-1;;;;;21797:19:0;;21762:32;21797:19;;;:6;:19;;;;;:33;;;21665:86;;-1:-1:-1;21844:53:0;;;21841:70;;-1:-1:-1;21907:1:0;;21518:473;-1:-1:-1;;;21518:473:0:o;21841:70::-;21928:55;:25;21958:24;21928:29;:55::i;:::-;21921:62;21518:473;-1:-1:-1;;;;21518:473:0:o;9884:144::-;3428:4;3453:5;-1:-1:-1;;;;;3453:5:0;3340:10;3442:16;3324:38;;;;-1:-1:-1;;;3324:38:0;;;;;;;:::i;:::-;9947:14:::1;::::0;-1:-1:-1;;;9947:14:0;::::1;;;9946:15;9938:50;;;::::0;-1:-1:-1;;;9938:50:0;;6051:2:1;9938:50:0::1;::::0;::::1;6033:21:1::0;6090:2;6070:18;;;6063:30;6129:25;6109:18;;;6102:53;6172:18;;9938:50:0::1;5849:347:1::0;9938:50:0::1;9999:14;:21:::0;;-1:-1:-1;;;;9999:21:0::1;-1:-1:-1::0;;;9999:21:0::1;::::0;;9884:144::o;12323:578::-;3428:4;3453:5;-1:-1:-1;;;;;3453:5:0;3340:10;3442:16;3324:38;;;;-1:-1:-1;;;3324:38:0;;;;;;;:::i;:::-;12423:13:::1;12464:5;12456:4;12440:13;8944:12:::0;;;8874:84;12440:13:::1;:20;;;;:::i;:::-;12439:30;;;;:::i;:::-;12423:46;;12480:19;12529:5;12519:6;12503:13;8944:12:::0;;;8874:84;12503:13:::1;:22;;;;:::i;:::-;12502:32;;;;:::i;:::-;12480:54;;12545:17;12593:5;12582:7;12566:13;8944:12:::0;;;8874:84;12566:13:::1;:23;;;;:::i;:::-;12565:33;;;;:::i;:::-;12609:12;:20:::0;;;12640:14:::1;:28:::0;;;12679:15:::1;:27:::0;;;12545:53;-1:-1:-1;;12733:30:0::1;12758:4;12733:20;12751:1;12733:13;8944:12:::0;;;8874:84;12733:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;12717:46;;12791:5;12782;:14;;:38;;;;;12815:5;12800:11;:20;;12782:38;:60;;;;;12837:5;12824:9;:18;;12782:60;12774:119;;;::::0;-1:-1:-1;;;12774:119:0;;6930:2:1;12774:119:0::1;::::0;::::1;6912:21:1::0;6969:2;6949:18;;;6942:30;7008:34;6988:18;;;6981:62;-1:-1:-1;;;7059:18:1;;;7052:44;7113:19;;12774:119:0::1;6728:410:1::0;12774:119:0::1;12412:489;;;;12323:578:::0;;;:::o;9485:108::-;3428:4;3453:5;-1:-1:-1;;;;;3453:5:0;3340:10;3442:16;3324:38;;;;-1:-1:-1;;;3324:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9559:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;9559:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;9485:108::o;8964:103::-;-1:-1:-1;;;;;9047:18:0;9030:7;9047:18;;;:9;:18;;;;;;;8964:103::o;12073:242::-;3428:4;3453:5;-1:-1:-1;;;;;3453:5:0;3340:10;3442:16;3324:38;;;;-1:-1:-1;;;3324:38:0;;;;;;;:::i;:::-;12182:4:::1;::::0;-1:-1:-1;;;;;12162:25:0;;::::1;12182:4:::0;::::1;12162:25;::::0;::::1;::::0;:56:::1;;-1:-1:-1::0;12211:6:0::1;::::0;-1:-1:-1;;;;;12191:27:0;;::::1;12211:6:::0;::::1;12191:27;;12162:56;:85;;;;-1:-1:-1::0;;;;;;12222:25:0;::::1;12242:4;12222:25;;12162:85;12154:116;;;::::0;-1:-1:-1;;;12154:116:0;;7345:2:1;12154:116:0::1;::::0;::::1;7327:21:1::0;7384:2;7364:18;;;7357:30;-1:-1:-1;;;7403:18:1;;;7396:48;7461:18;;12154:116:0::1;7143:342:1::0;12154:116:0::1;-1:-1:-1::0;;;;;12281:15:0;;;::::1;;::::0;;;:5:::1;:15;::::0;;;;:26;;-1:-1:-1;;12281:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12073:242::o;20338:136::-;20410:54;;-1:-1:-1;;;20410:54:0;;7551:42;20410:54;;;7664:51:1;7731:18;;;7724:34;;;-1:-1:-1;;;;;20410:25:0;;;;;7637:18:1;;20410:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20338:136;;:::o;9738:138::-;9797:7;9814:60;9852:21;9870:1;9852:9;:21::i;:::-;9814:33;9831:15;7356:42;9831:9;:15::i;:::-;9814:12;;;:16;:33::i;:::-;:37;;:60::i;:::-;9807:67;;9738:138;:::o;9073:139::-;9151:4;9158:40;9168:10;9180:9;9191:6;9158:9;:40::i;7247:68::-;7283:30;7302:10;7283:18;:30::i;:::-;7247:68::o;11448:617::-;3428:4;3453:5;-1:-1:-1;;;;;3453:5:0;3340:10;3442:16;3324:38;;;;-1:-1:-1;;;3324:38:0;;;;;;;:::i;:::-;11642:12:::1;:25:::0;;;11678:12:::1;:25:::0;;;11714:7:::1;:15:::0;;;11740:10:::1;:21:::0;;;11772:14:::1;:29:::0;;;11812:8:::1;:17:::0;;;11840:7:::1;:15:::0;;;11866:11:::1;:20:::0;;;11917:11:::1;::::0;:19:::1;::::0;11933:2:::1;11917:15;:19::i;:::-;11905:8;;:31;;:65;;;;-1:-1:-1::0;11951:11:0::1;::::0;:19:::1;::::0;11967:2:::1;11951:15;:19::i;:::-;11940:7;;:30;;11905:65;:103;;;;-1:-1:-1::0;11989:11:0::1;::::0;:19:::1;::::0;12005:2:::1;11989:15;:19::i;:::-;11974:11;;:34;;11905:103;11897:160;;;::::0;-1:-1:-1;;;11897:160:0;;8221:2:1;11897:160:0::1;::::0;::::1;8203:21:1::0;8260:2;8240:18;;;8233:30;8299:34;8279:18;;;8272:62;-1:-1:-1;;;8350:18:1;;;8343:42;8402:19;;11897:160:0::1;8019:408:1::0;11897:160:0::1;11448:617:::0;;;;;;;;:::o;18243:224::-;3428:4;3453:5;-1:-1:-1;;;;;3453:5:0;3340:10;3442:16;3324:38;;;;-1:-1:-1;;;3324:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18331:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;18331:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;18375:85:::1;;18386:19;18395:6;18403:1;18386:8;:19::i;:::-;18243:224:::0;;:::o;18375:85::-:1;18422:35;18431:6;18439:17;18449:6;18439:9;:17::i;:::-;18422:8;:35::i;3466:111::-:0;3428:4;3453:5;-1:-1:-1;;;;;3453:5:0;3340:10;3442:16;3324:38;;;;-1:-1:-1;;;3324:38:0;;;;;;;:::i;:::-;3532:5:::1;:11:::0;;-1:-1:-1;;;;;;3532:11:0::1;-1:-1:-1::0;;;;;3532:11:0;::::1;::::0;;::::1;::::0;;;3550:25:::1;::::0;1936:51:1;;;3550:25:0::1;::::0;1924:2:1;1909:18;3550:25:0::1;;;;;;;3466:111:::0;:::o;17900:335::-;-1:-1:-1;;;;;17993:19:0;;17985:68;;;;-1:-1:-1;;;17985:68:0;;8850:2:1;17985:68:0;;;8832:21:1;8889:2;8869:18;;;8862:30;8928:34;8908:18;;;8901:62;-1:-1:-1;;;8979:18:1;;;8972:34;9023:19;;17985:68:0;8648:400:1;17985:68:0;-1:-1:-1;;;;;18072:21:0;;18064:68;;;;-1:-1:-1;;;18064:68:0;;9255:2:1;18064:68:0;;;9237:21:1;9294:2;9274:18;;;9267:30;9333:34;9313:18;;;9306:62;-1:-1:-1;;;9384:18:1;;;9377:32;9426:19;;18064:68:0;9053:398:1;18064:68:0;-1:-1:-1;;;;;18143:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18195:32;;1754:25:1;;;18195:32:0;;1727:18:1;18195:32:0;;;;;;;17900:335;;;:::o;10483:957::-;10572:37;10583:6;10591:9;10602:6;10572:10;:37::i;:::-;10620:38;10640:6;10648:9;10620:19;:38::i;:::-;10669:41;10684:6;10692:9;10703:6;10669:14;:41::i;:::-;10722:35;10739:6;10747:9;10722:16;:35::i;:::-;10768:39;10781:6;10789:9;10800:6;10768:12;:39::i;:::-;10819:35;10828:6;10836:9;10847:6;10819:8;:35::i;:::-;-1:-1:-1;;;;;10885:17:0;;;;;;:9;:17;;;;;;:29;;10907:6;10885:21;:29::i;:::-;-1:-1:-1;;;;;10865:17:0;;;;;;:9;:17;;;;;:49;;;;10950:32;10875:6;10972:9;10950:13;:32::i;:::-;:78;;11022:6;10950:78;;;10985:34;10993:6;11001:9;11012:6;10985:7;:34::i;:::-;-1:-1:-1;;;;;11062:20:0;;;;;;:9;:20;;;;;;10925:103;;-1:-1:-1;11062:40:0;;10925:103;11062:24;:40::i;:::-;-1:-1:-1;;;;;11039:20:0;;;;;;;:9;:20;;;;;;;:63;;;;11118:43;;;;;;;;;;11146:14;1754:25:1;;1742:2;1727:18;;1608:177;11118:43:0;;;;;;;;-1:-1:-1;;;;;11176:24:0;;;;;;:16;:24;;;;;;;;11172:67;;11202:35;11211:6;11219:17;11229:6;11219:9;:17::i;11202:35::-;-1:-1:-1;;;;;11253:27:0;;;;;;:16;:27;;;;;;;;11249:76;;11282:41;11291:9;11302:20;11312:9;11302;:20::i;11282:41::-;-1:-1:-1;;;;;11338:17:0;;11365:1;11338:17;;;:6;:17;;;;;:24;:28;11335:64;;11368:29;11387:9;11368:18;:29::i;:::-;11409:23;11417:14;;11409:7;:23::i;:::-;10561:879;10483:957;;;:::o;1705:162::-;1791:7;1837:12;1829:6;;;;1821:29;;;;-1:-1:-1;;;1821:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1859:5:0;;;1705:162::o;21999:170::-;22069:7;22096:65;22129:31;;22096:28;22106:17;;22096:5;:9;;:28;;;;:::i;492:82::-;550:7;567:5;571:1;567;:5;:::i;580:82::-;638:7;655:5;659:1;655;:5;:::i;668:82::-;726:7;743:5;747:1;743;:5;:::i;20923:587::-;-1:-1:-1;;;;;20995:19:0;;;;;;:6;:19;;;;;:26;:31;;20992:46;;20923:587;:::o;20992:46::-;21048:14;21065:30;21083:11;21065:17;:30::i;:::-;21048:47;-1:-1:-1;21109:10:0;;21106:397;;21154:16;;:28;;21175:6;21154:20;:28::i;:::-;21135:16;:47;21204:6;;21197:44;;-1:-1:-1;;;21197:44:0;;-1:-1:-1;;;;;7682:32:1;;;21197:44:0;;;7664:51:1;7731:18;;;7724:34;;;21204:6:0;;;;21197:23;;7637:18:1;;21197:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21256:30:0;;;;;;:17;:30;;;;;;;;21289:15;21256:48;;21355:6;:19;;;;;:33;;;:45;;21393:6;21355:37;:45::i;:::-;-1:-1:-1;;;;;21319:19:0;;;;;;:6;:19;;;;;:33;;;:81;;;;21474:26;21451:50;;:22;:50::i;:::-;-1:-1:-1;;;;;21415:19:0;;;;;;:6;:19;;;;;:33;;:86;20981:529;20923:587;:::o;18475:482::-;18562:1;18553:6;:10;:45;;;;-1:-1:-1;;;;;;18567:19:0;;;;;;:6;:19;;;;;:26;:31;18553:45;18550:177;;;22276:12;:19;;-1:-1:-1;;;;;22242:31:0;;;;;;:18;:31;;;;;:53;;;22306:30;;;;;;;;;;;;;-1:-1:-1;;;;;;22306:30:0;;;;;;18550:177;;;18647:11;;:45;;;;-1:-1:-1;;;;;;18662:19:0;;18691:1;18662:19;;;:6;:19;;;;;:26;:30;;18647:45;18644:83;;;18694:30;18712:11;18694:17;:30::i;:::-;-1:-1:-1;;;;;18767:19:0;;;;;;:6;:19;;;;;:26;18751:11;;:55;;18799:6;;18751:43;;:15;:43::i;:::-;:47;;:55::i;:::-;18737:11;:69;-1:-1:-1;;;;;18817:19:0;;;;;;:6;:19;;;;;:35;;;18899:50;18846:6;18899:22;:50::i;10036:439::-;-1:-1:-1;;;;;10140:20:0;;10132:70;;;;-1:-1:-1;;;10132:70:0;;9791:2:1;10132:70:0;;;9773:21:1;9830:2;9810:18;;;9803:30;9869:34;9849:18;;;9842:62;-1:-1:-1;;;9920:18:1;;;9913:35;9965:19;;10132:70:0;9589:401:1;10132:70:0;-1:-1:-1;;;;;10221:23:0;;10213:71;;;;-1:-1:-1;;;10213:71:0;;10197:2:1;10213:71:0;;;10179:21:1;10236:2;10216:18;;;10209:30;10275:34;10255:18;;;10248:62;-1:-1:-1;;;10326:18:1;;;10319:33;10369:19;;10213:71:0;9995:399:1;10213:71:0;10320:1;10303:6;:19;10295:73;;;;-1:-1:-1;;;10295:73:0;;10601:2:1;10295:73:0;;;10583:21:1;10640:2;10620:18;;;10613:30;10679:34;10659:18;;;10652:62;-1:-1:-1;;;10730:18:1;;;10723:39;10779:19;;10295:73:0;10399:405:1;10295:73:0;10397:17;10407:6;10397:9;:17::i;:::-;10387:6;:27;;10379:88;;;;-1:-1:-1;;;10379:88:0;;11011:2:1;10379:88:0;;;10993:21:1;11050:2;11030:18;;;11023:30;11089:34;11069:18;;;11062:62;-1:-1:-1;;;11140:18:1;;;11133:47;11197:19;;10379:88:0;10809:413:1;12909:191:0;-1:-1:-1;;;;;13002:19:0;;;;;;:11;:19;;;;;;;;13001:20;:47;;;;-1:-1:-1;;;;;;13026:22:0;;;;;;:11;:22;;;;;;;;13025:23;13001:47;12998:95;;;13058:14;;-1:-1:-1;;;13058:14:0;;;;13050:41;;;;-1:-1:-1;;;13050:41:0;;11429:2:1;13050:41:0;;;11411:21:1;11468:2;11448:18;;;11441:30;-1:-1:-1;;;11487:18:1;;;11480:44;11541:18;;13050:41:0;11227:338:1;13112:331:0;-1:-1:-1;;;;;13216:19:0;;;;;;:11;:19;;;;;;;;13215:20;:47;;;;-1:-1:-1;;;;;;13240:22:0;;;;;;:11;:22;;;;;;;;13239:23;13215:47;:77;;;;-1:-1:-1;13287:4:0;;-1:-1:-1;;;;;13266:26:0;;;13287:4;;13266:26;;13215:77;:107;;;;-1:-1:-1;;;;;;13296:26:0;;7356:42;13296:26;;13215:107;13212:224;;;13384:15;;-1:-1:-1;;;;;13347:20:0;;;;;;:9;:20;;;;;;:32;;13372:6;13347:24;:32::i;:::-;13346:53;;13338:96;;;;-1:-1:-1;;;13338:96:0;;11772:2:1;13338:96:0;;;11754:21:1;11811:2;11791:18;;;11784:30;11850:32;11830:18;;;11823:60;11900:18;;13338:96:0;11570:354:1;13451:159:0;13548:4;;-1:-1:-1;;;;;13535:17:0;;;13548:4;;13535:17;:41;;;;-1:-1:-1;;;;;;13557:19:0;;;;;;:11;:19;;;;;;;;13556:20;13535:41;13532:71;;;13599:1;13578:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;13451:159:0;;:::o;13618:341::-;13729:4;;-1:-1:-1;;;;;13719:14:0;;;13729:4;;13719:14;13716:124;;13753:14;;13743:6;:24;;:47;;;-1:-1:-1;;;;;;13771:19:0;;;;;;:11;:19;;;;;;;;13743:47;:73;;;-1:-1:-1;;;;;;13794:22:0;;;;;;:11;:22;;;;;;;;13743:73;13735:103;;;;-1:-1:-1;;;13735:103:0;;12261:2:1;13735:103:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;13735:103:0;12059:341:1;13735:103:0;13868:12;;13858:6;:22;;:45;;;-1:-1:-1;;;;;;13884:19:0;;;;;;:11;:19;;;;;;;;13858:45;:71;;;-1:-1:-1;;;;;;13907:22:0;;;;;;:11;:22;;;;;;;;13858:71;13850:101;;;;-1:-1:-1;;;13850:101:0;;12261:2:1;13850:101:0;;;12243:21:1;12300:2;12280:18;;;12273:30;-1:-1:-1;;;12319:18:1;;;12312:47;12376:18;;13850:101:0;12059:341:1;16343:197:0;16435:41;16450:6;16458:9;16469:6;16435:14;:41::i;:::-;16432:101;;;16478:29;16493:13;;16478:14;:29::i;:::-;16529:1;16509:9;:22;16343:197;;;:::o;16548:160::-;-1:-1:-1;;;;;16654:19:0;;16629:4;16654:19;;;:11;:19;;;;;;;;16653:20;:47;;;;-1:-1:-1;;;;;;;16678:22:0;;;;;:11;:22;;;;;;;;16677:23;;16548:160;-1:-1:-1;16548:160:0:o;17029:546::-;17115:7;17171:1;17138:30;17150:6;17158:9;17138:11;:30::i;:::-;:34;17135:418;;;17184:17;17204:59;17232:30;17244:6;17252:9;17232:11;:30::i;:::-;17215:11;;17204:23;;:6;;:10;:23::i;:59::-;17319:4;17301:24;;;;:9;:24;;;;;;17184:79;;-1:-1:-1;17301:39:0;;17184:79;17301:28;:39::i;:::-;17292:4;17274:24;;;;:9;:24;;;;;;;:66;;;;17356:42;;-1:-1:-1;;;;;17356:42:0;;;;;;;17388:9;1754:25:1;;1742:2;1727:18;;1608:177;17356:42:0;;;;;;;;17412:7;;:20;17409:104;;17434:77;17452:4;7356:42;17474:36;17502:7;;17474:23;17485:11;;17474:6;:10;;:23;;;;:::i;:36::-;17434:9;:77::i;:::-;17530:21;:6;17541:9;17530:10;:21::i;:::-;17523:28;;;;;17135:418;-1:-1:-1;17561:6:0;17029:546;-1:-1:-1;;17029:546:0:o;404:82::-;462:7;479:5;483:1;479;:5;:::i;19655:676::-;19732:12;:19;19705:24;19765:21;;;19762:37;;19790:7;19655:676;:::o;19762:37::-;19809:15;19839;19857:9;19839:27;;19877:18;19910:414;19926:3;19916:7;:13;:46;;;;;19946:16;19933:10;:29;19916:46;19910:414;;;19998:16;19982:12;;:32;19979:55;;20031:1;20016:12;:16;19979:55;20051:44;20068:12;20081;;20068:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;20068:26:0;20051:16;:44::i;:::-;20048:115;;;20115:46;20134:12;20147;;20134:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;20134:26:0;20115:18;:46::i;:::-;20187:35;20199:22;20211:9;20199:7;;:11;:22::i;:::-;20187:7;;:11;:35::i;:::-;20177:45;;20247:9;20271:12;:14;;20237:19;;-1:-1:-1;20271:12:0;:14;;;:::i;:::-;;;;;;20300:12;;;;;:::i;:::-;;;;19910:414;;;19694:637;;;;19655:676;:::o;22352:288::-;22468:12;22481:19;;:21;;22501:1;;22481:21;:::i;:::-;22468:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22433:31:0;;;;;:18;:31;;;;;;;22420:45;;22468:35;;;;;22420:45;;;;;;:::i;:::-;;;;;;;;;;;;;:83;;-1:-1:-1;;;;;;22420:83:0;-1:-1:-1;;;;;22420:83:0;;;;;;22572:31;;;;;:18;:31;;;;;;;22546:19;;22572:31;;:18;;22420:45;;22546:21;;-1:-1:-1;;22546:21:0;:::i;:::-;22533:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22533:35:0;22514:55;;;;;;;;;;;;;;;:89;;;;22614:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;22614:18:0;;;;;-1:-1:-1;;;;;;22614:18:0;;;;;;-1:-1:-1;22352:288:0:o;15935:400::-;16033:4;16050:13;16076:15;;16066:6;:25;;16050:41;;16102:19;16152:13;;16124:24;16142:4;16124:9;:24::i;:::-;16184:8;;16124:41;-1:-1:-1;16124:41:0;;-1:-1:-1;16184:8:0;;16183:9;:24;;;;-1:-1:-1;16196:11:0;;;;16183:24;:42;;;;-1:-1:-1;16211:14:0;;-1:-1:-1;;;16211:14:0;;;;16183:42;:54;;;;;16229:8;16183:54;:78;;;;-1:-1:-1;;;;;;16242:19:0;;;;;;:11;:19;;;;;;;;16241:20;16183:78;:99;;;;-1:-1:-1;16278:4:0;;-1:-1:-1;;;;;16265:17:0;;;16278:4;;16265:17;16183:99;:126;;;;;16307:1;16286:9;;:23;;16183:126;:144;;;;;16313:14;16183:144;16176:151;15935:400;-1:-1:-1;;;;;;15935:400:0:o;13967:1167::-;6482:4;6471:8;;:15;;;;;;;;;;;;;;;;;;14038:20:::1;14061:82;14141:1;14062:73;14124:10;;14062:57;14104:14;;14062:37;14086:12;;14062:19;14079:1;14062:12;;:16;;:19;;;;:::i;14061:82::-;14038:105;;14154:32;14189:42;14218:12;14189:24;14200:12;;14189:6;:10;;:24;;;;:::i;:42::-;14154:77:::0;-1:-1:-1;14242:14:0::1;14259:36;:6:::0;14154:77;14259:10:::1;:36::i;:::-;14242:53:::0;-1:-1:-1;14331:21:0::1;14363:24;14242:53:::0;14363:16:::1;:24::i;:::-;14398:20;14421:41;:21;14447:14:::0;14421:25:::1;:41::i;:::-;14398:64;;14473:19;14494:48;14511:30;14528:12;;14511;:16;;:30;;;;:::i;:::-;14494:12:::0;;:16:::1;:48::i;:::-;14473:69;;14553:29;14585;14601:12;;14585:11;:15;;:29;;;;:::i;:::-;14553:61:::0;-1:-1:-1;14628:34:0;;14625:103:::1;;14664:61;14677:24;14703:21;14664:12;:61::i;:::-;14787:12;::::0;14738:23:::1;::::0;14764:36:::1;::::0;:18:::1;:11:::0;14780:1:::1;14764:15;:18::i;:36::-;14738:62:::0;-1:-1:-1;14814:19:0;;14811:79:::1;;14835:53;::::0;7551:42:::1;::::0;14835:53;::::1;;;::::0;14872:15;;14835:53:::1;::::0;;;14872:15;7551:42;14835:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14811:79;14947:10;::::0;14900:21:::1;::::0;14924:34:::1;::::0;:18:::1;:11:::0;14940:1:::1;14924:15;:18::i;:34::-;14900:58:::0;-1:-1:-1;14972:17:0;;14969:46:::1;;14991:22;14999:13;14991:7;:22::i;:::-;15028:21;:34:::0;15025:102:::1;;15064:61;::::0;7454:42:::1;::::0;15103:21:::1;15064:61:::0;::::1;;;::::0;::::1;::::0;;;15103:21;7454:42;15064:61;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15025:102;-1:-1:-1::0;;6491:8:0;:16;;-1:-1:-1;;6491:16:0;;;-1:-1:-1;;;;;;;;13967:1167:0:o;16716:305::-;-1:-1:-1;;;;;16818:13:0;;16795:7;16818:13;;;:5;:13;;;;;;;;;:33;;-1:-1:-1;;;;;;16835:16:0;;;;;;:5;:16;;;;;;;;16818:33;16815:76;;;16860:11;;:29;;16884:3;16860:15;:29::i;:::-;16853:36;;;;16815:76;16917:4;;-1:-1:-1;;;;;16917:4:0;;;16904:17;;;;16901:38;;-1:-1:-1;16930:7:0;;16923:14;;16901:38;16962:4;;-1:-1:-1;;;;;16962:4:0;;;16952:14;;;;16949:36;;-1:-1:-1;16975:8:0;;16968:15;;16949:36;-1:-1:-1;17002:11:0;;16716:305;;;;:::o;20486:231::-;20613:9;;-1:-1:-1;;;;;20580:30:0;;20556:4;20580:30;;;:17;:30;;;;;;20556:4;;20625:15;;20580:42;;20613:9;20580:42;:::i;:::-;:60;:129;;;;;20694:15;;20661:30;20679:11;20661:17;:30::i;:::-;:48;20573:136;20486:231;-1:-1:-1;;20486:231:0:o;15493:434::-;15583:16;;;15597:1;15583:16;;;;;;;;15559:21;;15583:16;;;;;;;;;;-1:-1:-1;15583:16:0;15559:40;;15628:4;15610;15615:1;15610:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15610:23:0;;;:7;;;;;;;;;;:23;;;;15654:6;;:13;;;-1:-1:-1;;;15654:13:0;;;;:6;;;;;:11;;:13;;;;;15610:7;;15654:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15644:4;15649:1;15644:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15644:23:0;;;:7;;;;;;;;;:23;15710:6;;15678:53;;15695:4;;15710:6;15719:11;15678:8;:53::i;:::-;15742:6;;:177;;-1:-1:-1;;;15742:177:0;;-1:-1:-1;;;;;15742:6:0;;;;:57;;:177;;15814:11;;15742:6;;15856:4;;15883;;15903:15;;15742:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15548:379;15493:434;:::o;15142:343::-;15255:6;;15223:53;;15240:4;;-1:-1:-1;;;;;15255:6:0;15264:11;15223:8;:53::i;:::-;15287:6;;:190;;-1:-1:-1;;;15287:190:0;;15350:4;15287:190;;;14538:51:1;14605:18;;;14598:34;;;15287:6:0;14648:18:1;;;14641:34;;;14691:18;;;14684:34;7647:42:0;14734:19:1;;;14727:61;15461:15:0;14804:19:1;;;14797:35;-1:-1:-1;;;;;15287:6:0;;;;:22;;15317:9;;14510:19:1;;15287:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18965:682::-;19052:6;;19045:39;;-1:-1:-1;;;19045:39:0;;19078:4;19045:39;;;1936:51:1;19021:21:0;;-1:-1:-1;;;;;19052:6:0;;19045:24;;1909:18:1;;19045:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19119:16;;;19133:1;19119:16;;;;;;;;19021:63;;-1:-1:-1;19095:21:0;;19119:16;;;;;;;;;;-1:-1:-1;;19156:6:0;;:13;;;-1:-1:-1;;;19156:13:0;;;;19095:40;;-1:-1:-1;;;;;;19156:6:0;;;;:11;;-1:-1:-1;19156:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19146:4;19151:1;19146:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19146:23:0;;;:7;;;;;;;;;:23;19198:6;;19180:7;;19198:6;;;19180:4;;19198:6;;19180:7;;;;;;:::i;:::-;-1:-1:-1;;;;;19180:25:0;;;:7;;;;;;;;;:25;19216:6;;:169;;-1:-1:-1;;;19216:169:0;;:6;;;:57;;19281:9;;19216:169;;:6;;19322:4;;19349;;19369:15;;19216:169;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19420:6:0;;19413:39;;-1:-1:-1;;;19413:39:0;;19446:4;19413:39;;;1936:51:1;19396:14:0;;-1:-1:-1;19413:58:0;;-1:-1:-1;19457:13:0;;-1:-1:-1;;;;;;19420:6:0;;;;19413:24;;1909:18:1;;19413:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:58::-;19499:14;;19396:75;;-1:-1:-1;19499:26:0;;19396:75;19499:18;:26::i;:::-;19482:14;:43;19626:11;;19578:31;;19556:83;;19578:60;;:43;;19614:6;19578:35;:43::i;:60::-;19556:17;;;:21;:83::i;:::-;19536:17;:103;-1:-1:-1;;;;18965:682:0:o;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;492:70;437:131;:::o;573:367::-;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;904:2;889:18;;;;876:32;;-1:-1:-1;;;573:367:1:o;1137:466::-;1214:6;1222;1230;1283:2;1271:9;1262:7;1258:23;1254:32;1251:52;;;1299:1;1296;1289:12;1251:52;-1:-1:-1;;1344:23:1;;;1464:2;1449:18;;1436:32;;-1:-1:-1;1567:2:1;1552:18;;;1539:32;;1137:466;-1:-1:-1;1137:466:1:o;1998:508::-;2075:6;2083;2091;2144:2;2132:9;2123:7;2119:23;2115:32;2112:52;;;2160:1;2157;2150:12;2112:52;2199:9;2186:23;2218:31;2243:5;2218:31;:::i;:::-;2268:5;-1:-1:-1;2325:2:1;2310:18;;2297:32;2338:33;2297:32;2338:33;:::i;:::-;1998:508;;2390:7;;-1:-1:-1;;;2470:2:1;2455:18;;;;2442:32;;1998:508::o;2511:247::-;2570:6;2623:2;2611:9;2602:7;2598:23;2594:32;2591:52;;;2639:1;2636;2629:12;2591:52;2678:9;2665:23;2697:31;2722:5;2697:31;:::i;2952:118::-;3038:5;3031:13;3024:21;3017:5;3014:32;3004:60;;3060:1;3057;3050:12;3075:382;3140:6;3148;3201:2;3189:9;3180:7;3176:23;3172:32;3169:52;;;3217:1;3214;3207:12;3169:52;3256:9;3243:23;3275:31;3300:5;3275:31;:::i;:::-;3325:5;-1:-1:-1;3382:2:1;3367:18;;3354:32;3395:30;3354:32;3395:30;:::i;:::-;3444:7;3434:17;;;3075:382;;;;;:::o;3786:388::-;3854:6;3862;3915:2;3903:9;3894:7;3890:23;3886:32;3883:52;;;3931:1;3928;3921:12;3883:52;3970:9;3957:23;3989:31;4014:5;3989:31;:::i;:::-;4039:5;-1:-1:-1;4096:2:1;4081:18;;4068:32;4109:33;4068:32;4109:33;:::i;4179:1071::-;4301:6;4309;4317;4325;4333;4341;4349;4357;4410:3;4398:9;4389:7;4385:23;4381:33;4378:53;;;4427:1;4424;4417:12;4378:53;-1:-1:-1;;4472:23:1;;;4592:2;4577:18;;4564:32;;-1:-1:-1;4695:2:1;4680:18;;4667:32;;4798:2;4783:18;;4770:32;;-1:-1:-1;4901:3:1;4886:19;;4873:33;;-1:-1:-1;5005:3:1;4990:19;;4977:33;;-1:-1:-1;5109:3:1;5094:19;;5081:33;;-1:-1:-1;5213:3:1;5198:19;5185:33;;-1:-1:-1;4179:1071:1;-1:-1:-1;4179:1071:1:o;5515:329::-;5717:2;5699:21;;;5756:1;5736:18;;;5729:29;-1:-1:-1;;;5789:2:1;5774:18;;5767:36;5835:2;5820:18;;5515:329::o;6201:127::-;6262:10;6257:3;6253:20;6250:1;6243:31;6293:4;6290:1;6283:15;6317:4;6314:1;6307:15;6333:168;6406:9;;;6437;;6454:15;;;6448:22;;6434:37;6424:71;;6475:18;;:::i;6506:217::-;6546:1;6572;6562:132;;6616:10;6611:3;6607:20;6604:1;6597:31;6651:4;6648:1;6641:15;6679:4;6676:1;6669:15;6562:132;-1:-1:-1;6708:9:1;;6506:217::o;7769:245::-;7836:6;7889:2;7877:9;7868:7;7864:23;7860:32;7857:52;;;7905:1;7902;7895:12;7857:52;7937:9;7931:16;7956:28;7978:5;7956:28;:::i;9456:128::-;9523:9;;;9544:11;;;9541:37;;;9558:18;;:::i;11929:125::-;11994:9;;;12015:10;;;12012:36;;;12028:18;;:::i;12405:127::-;12466:10;12461:3;12457:20;12454:1;12447:31;12497:4;12494:1;12487:15;12521:4;12518:1;12511:15;12537:135;12576:3;12597:17;;;12594:43;;12617:18;;:::i;:::-;-1:-1:-1;12664:1:1;12653:13;;12537:135::o;12677:127::-;12738:10;12733:3;12729:20;12726:1;12719:31;12769:4;12766:1;12759:15;12793:4;12790:1;12783:15;12941:251;13011:6;13064:2;13052:9;13043:7;13039:23;13035:32;13032:52;;;13080:1;13077;13070:12;13032:52;13112:9;13106:16;13131:31;13156:5;13131:31;:::i;13197:446::-;13250:3;13288:5;13282:12;13315:6;13310:3;13303:19;13347:4;13342:3;13338:14;13331:21;;13386:4;13379:5;13375:16;13409:1;13419:199;13433:6;13430:1;13427:13;13419:199;;;13498:13;;-1:-1:-1;;;;;13494:39:1;13482:52;;13563:4;13554:14;;;;13591:17;;;;13530:1;13448:9;13419:199;;;-1:-1:-1;13634:3:1;;13197:446;-1:-1:-1;;;;13197:446:1:o;13648:582::-;13947:6;13936:9;13929:25;13990:6;13985:2;13974:9;13970:18;13963:34;14033:3;14028:2;14017:9;14013:18;14006:31;13910:4;14054:57;14106:3;14095:9;14091:19;14083:6;14054:57;:::i;:::-;-1:-1:-1;;;;;14147:32:1;;;;14142:2;14127:18;;14120:60;-1:-1:-1;14211:3:1;14196:19;14189:35;14046:65;13648:582;-1:-1:-1;;;13648:582:1:o;14843:456::-;14931:6;14939;14947;15000:2;14988:9;14979:7;14975:23;14971:32;14968:52;;;15016:1;15013;15006:12;14968:52;-1:-1:-1;;15061:16:1;;15167:2;15152:18;;15146:25;15263:2;15248:18;;;15242:25;15061:16;;15146:25;;-1:-1:-1;15242:25:1;14843:456;-1:-1:-1;14843:456:1:o;15304:230::-;15374:6;15427:2;15415:9;15406:7;15402:23;15398:32;15395:52;;;15443:1;15440;15433:12;15395:52;-1:-1:-1;15488:16:1;;15304:230;-1:-1:-1;15304:230:1:o;15539:510::-;15810:6;15799:9;15792:25;15853:3;15848:2;15837:9;15833:18;15826:31;15773:4;15874:57;15926:3;15915:9;15911:19;15903:6;15874:57;:::i;:::-;-1:-1:-1;;;;;15967:32:1;;;;15962:2;15947:18;;15940:60;-1:-1:-1;16031:2:1;16016:18;16009:34;15866:65;15539:510;-1:-1:-1;;15539:510:1:o

Swarm Source

ipfs://79f8b05fbc71183b1e46955cdb2dd260ad6e0fbd984126e2a6a1eca1758fbadc
[ 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.