ETH Price: $3,396.12 (-0.64%)
Gas: 13 Gwei

Token

DOGTAG (DTAG)
 

Overview

Max Total Supply

100,000,000 DTAG

Holders

78

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 DTAG

Value
$0.00
0x7669aab150b715417ec4c6e19fd11c9d2e48eb82
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DOGTAG

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

𝙳𝙾𝙶𝚃𝙰𝙶

https://t.me/DogTagERC
https://dogtag.ink/
https://twitter.com/DogTagERC

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;


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 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 DOGTAG is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'DOGTAG';
    string private constant _symbol = 'DTAG';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 100000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxSellAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxWalletToken = ( _totalSupply * 200 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 100;
    uint256 private marketingFee = 200;
    uint256 private rewardsFee = 200;
    uint256 private burnFee = 100;
    uint256 private stakingFee = 0;
    uint256 private totalFee = 600;
    uint256 private sellFee = 600;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    uint256 private swapAmount = 2;
    bool private swapping;
    uint256 private swapThreshold = ( _totalSupply * 500 ) / 100000;
    uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    address internal token_receiver;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public currentDividends;
    uint256 public excessDividends;
    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 = 15 minutes;
    uint256 public minDistribution = 1 * (10 ** 9);
    address public reward = 0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal development_receiver = 0x5Cdf3cb724e52Ff24A882A0161Eea09Ece7a726c; 
    address internal marketing_receiver = 0x5Cdf3cb724e52Ff24A882A0161Eea09Ece7a726c;
    address internal liquidity_receiver = 0x5Cdf3cb724e52Ff24A882A0161Eea09Ece7a726c;
    address internal staking_receiver = 0x5Cdf3cb724e52Ff24A882A0161Eea09Ece7a726c;
    event ExcludeFromFees(address indexed account, bool indexed isExcluded, uint256 indexed timestamp);
    event SetDividendExempt(address indexed account, bool indexed isExempt, uint256 indexed timestamp);
    event SetInternalAddresses(address indexed marketing, address indexed liquidity, address indexed development, uint256 timestamp);
    event SetDistributionCriteria(uint256 indexed minPeriod, uint256 indexed minDistribution, uint256 indexed timestamp);
    event SetParameters(uint256 indexed maxTxAmount, uint256 indexed maxWalletToken, uint256 indexed maxTransfer, uint256 timestamp);
    event SetSwapBackSettings(uint256 indexed swapAmount, uint256 indexed swapThreshold, uint256 indexed swapMinAmount, uint256 timestamp);
    event SetStructure(uint256 indexed total, uint256 indexed sell, uint256 transfer, uint256 indexed timestamp);

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        token_receiver = address(this);
        liquidityFee = uint256(200);
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(pair)] = 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 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 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 <= 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); 
        checkTxLimit(sender, recipient, amount);
        swapbackCounters(sender, recipient);
        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);
        processRewards(sender, recipient);
    }

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

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

    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] && !swapping){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 startTrading(uint256 launchBuy, uint256 launchSell) external onlyOwner {
        totalFee = launchBuy; sellFee = launchSell; tradingAllowed = true;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _swapThreshold; minTokenAmount = _minTokenAmount;
        emit SetSwapBackSettings(_swapAmount, _swapThreshold, _minTokenAmount, block.timestamp);  
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _development, address _staking, address _token) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; development_receiver = _development; staking_receiver = _staking; token_receiver = _token;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_development] = true; isFeeExempt[_staking] = true; isFeeExempt[_token] = true;
        emit SetInternalAddresses(_marketing, _liquidity, _development, block.timestamp);
    }

    function setisExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
        emit ExcludeFromFees(_address, _enabled, block.timestamp);
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(marketingFee).add(rewardsFee).add(stakingFee)).mul(2);
        uint256 toSwap = tokens;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator);
        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){depositRewards(rewardsAmount);}
        uint256 stakingAmount = unitBalance.mul(2).mul(stakingFee);
        if(stakingAmount > 0){payable(staking_receiver).transfer(stakingAmount);}
        uint256 excessAmount = address(this).balance;
        if(excessAmount > uint256(0)){payable(development_receiver).transfer(excessAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount, address receiver) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(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 swapETHForTokens(uint256 amountETH, address token, address recipient) internal {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(token);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}(
            0,
            path,
            address(recipient),
            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 >= swapAmount && 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(recipient == pair && sellFee > uint256(0)){return sellFee;}
        if(sender == pair && totalFee > uint256(0)){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));}
        emit SetDividendExempt(holder, exempt, block.timestamp);
    }

    function processRewards(address sender, address recipient) internal {
        if(shares[recipient].amount > 0){distributeDividend(recipient, recipient);}
        if(recipient == pair && shares[sender].amount > 0){excessDividends = excessDividends.add(getUnpaidEarnings(sender));}
        if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));}
        if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));}
    }

    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 depositRewards(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(reward).balanceOf(address(this));
        swapETHForTokens(amountETH, reward, address(this));
        uint256 amount = IERC20(reward).balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        currentDividends = currentDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function transferERC20(address _address, uint256 _amount) external {
        IERC20(_address).transfer(development_receiver, _amount);
    }

    function transferBalance(uint256 _amount) external {
        payable(development_receiver).transfer(_amount);
    }

    function setExcess() external {
        IERC20(reward).transfer(development_receiver, excessDividends);
        currentDividends = currentDividends.sub(excessDividends);
        excessDividends = uint256(0);
    }

    function setTokenAddress(address _address) external onlyOwner {
        token_receiver = _address;
    }

    function setRewardAddress(address _address) external onlyOwner {
        reward = _address;
    }
    
    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 _claimDividend() external {
        if(shouldDistribute(msg.sender)){distributeDividend(msg.sender, msg.sender);}
    }

    function distributeDividend(address shareholder, address recipient) internal {
        if(shares[shareholder].amount == 0){ return; }
        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            IERC20(reward).transfer(recipient, amount);
            currentDividends = currentDividends.sub(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) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        emit SetDistributionCriteria(_minPeriod, _minDistribution, block.timestamp);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"minPeriod","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minDistribution","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetDistributionCriteria","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExempt","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetDividendExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketing","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"development","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetInternalAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxWalletToken","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxTransfer","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetStructure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"swapAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapThreshold","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapMinAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetSwapBackSettings","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":[],"name":"_maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentDividends","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":"excessDividends","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":[],"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"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setExcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_development","type":"address"},{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"setInternalAddresses","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":"address","name":"_address","type":"address"}],"name":"setRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_staking","type":"uint256"},{"internalType":"uint256","name":"_burn","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":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setTokenAddress","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":[{"internalType":"uint256","name":"launchBuy","type":"uint256"},{"internalType":"uint256","name":"launchSell","type":"uint256"}],"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":"uint256","name":"_amount","type":"uint256"}],"name":"transferBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferERC20","outputs":[],"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"}]

6080604052620000126009600a6200059e565b62000022906305f5e100620005b6565b6001556127106001546064620000399190620005b6565b620000459190620005d0565b60025561271060015460646200005c9190620005b6565b620000689190620005d0565b60035561271060015460c86200007f9190620005b6565b6200008b9190620005d0565b600455600a805460ff60a01b191690556064600b81905560c8600c819055600d55600e556000600f81905561025860108190556011556012556127106013556014805460ff19166001908117909155600260165554620186a090620000f3906101f4620005b6565b620000ff9190620005d0565b601855620186a0600154600a620001179190620005b6565b620001239190620005d0565b6019556ec097ce7bc90715b34b9f1000000000602155610384602755633b9aca00602855602980546001600160a01b03199081167395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce17909155602a80548216735cdf3cb724e52ff24a882a0161eea09ece7a726c908117909155602b8054831682179055602c8054831682179055602d8054909216179055348015620001bc57600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a9190620005f3565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be9190620005f3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003329190620005f3565b600980546001600160a01b03199081166001600160a01b0386811691909117909255600a80548216848416178155601a80543093168317905560c8600b556000828152600760209081526040808320805460ff199081166001908117909255602c54881685528285208054821683179055602b548816855282852080548216831790553380865283862080548316841790559685526008845282852080548216831790559454909616835280832080548516871790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548516871790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909416861790935593548382526005855282822081905591519182529394509092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350506200061e565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004e0578160001904821115620004c457620004c462000489565b80851615620004d257918102915b93841c9390800290620004a4565b509250929050565b600082620004f95750600162000598565b81620005085750600062000598565b81600181146200052157600281146200052c576200054c565b600191505062000598565b60ff84111562000540576200054062000489565b50506001821b62000598565b5060208310610133831016604e8410600b841016171562000571575081810a62000598565b6200057d83836200049f565b806000190482111562000594576200059462000489565b0290505b92915050565b6000620005af60ff841683620004e8565b9392505050565b808202811582820484141762000598576200059862000489565b600082620005ee57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200060657600080fd5b81516001600160a01b0381168114620005af57600080fd5b612b21806200062e6000396000f3fe60806040526004361061026b5760003560e01c80637d1db4a511610144578063ca89b899116100b6578063e94dd17c1161007a578063e94dd17c146107c0578063ef43b02b146107e0578063efca2eed14610800578063f2fde38b14610816578063f7448a3114610836578063ffd49c841461085657600080fd5b8063ca89b899146106aa578063ce7c2ac2146106e3578063d691a7341461073a578063dd62ed3e1461075a578063e2d6f94c146107a057600080fd5b8063997664d711610108578063997664d7146106095780639fb05d371461061f578063a8aa1b311461063f578063a9059cbb1461065f578063c0c493941461067f578063c942435d1461069557600080fd5b80637d1db4a514610573578063893d20e8146105895780638a60c4c1146105a75780639358928b146105c757806395d89b41146105dc57600080fd5b806334c5d2ce116101dd57806348ff2b8b116101a157806348ff2b8b146104d15780634fab0ae8146104f15780635e00e6791461050757806370a082311461052757806378109e54146105475780637cca52fe1461055d57600080fd5b806334c5d2ce146104265780633773eafb146104465780633a98ef391461045b5780633f4218e0146104715780634355855a146104a157600080fd5b806323b872dd1161022f57806323b872dd1461035957806326a4e8d21461037957806328fd31981461039b5780632d48e896146103bb5780632f54bf6e146103db578063313ce5671461040a57600080fd5b806306fdde031461027757806308e20e1f146102b8578063095ea7b3146102dc57806318160ddd1461030c578063228cb7331461032157600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50604080518082019091526006815265444f4754414760d01b60208201525b6040516102af9190612668565b60405180910390f35b3480156102c457600080fd5b506102ce601e5481565b6040519081526020016102af565b3480156102e857600080fd5b506102fc6102f73660046126ce565b61086c565b60405190151581526020016102af565b34801561031857600080fd5b506001546102ce565b34801561032d57600080fd5b50602954610341906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561036557600080fd5b506102fc6103743660046126fa565b610883565b34801561038557600080fd5b5061039961039436600461273b565b6108ed565b005b3480156103a757600080fd5b506102ce6103b636600461273b565b610942565b3480156103c757600080fd5b506103996103d6366004612758565b6109cd565b3480156103e757600080fd5b506102fc6103f636600461273b565b6000546001600160a01b0391821691161490565b34801561041657600080fd5b50604051600981526020016102af565b34801561043257600080fd5b5061039961044136600461277a565b610a34565b34801561045257600080fd5b50610399610b9e565b34801561046757600080fd5b506102ce601b5481565b34801561047d57600080fd5b506102fc61048c36600461273b565b60076020526000908152604090205460ff1681565b3480156104ad57600080fd5b506102fc6104bc36600461273b565b60086020526000908152604090205460ff1681565b3480156104dd57600080fd5b506103996104ec3660046127b4565b610c35565b3480156104fd57600080fd5b506102ce60285481565b34801561051357600080fd5b5061039961052236600461273b565b610cb4565b34801561053357600080fd5b506102ce61054236600461273b565b610d00565b34801561055357600080fd5b506102ce60045481565b34801561056957600080fd5b506102ce60035481565b34801561057f57600080fd5b506102ce60025481565b34801561059557600080fd5b506000546001600160a01b0316610341565b3480156105b357600080fd5b506103996105c23660046127ed565b610d1b565b3480156105d357600080fd5b506102ce610d59565b3480156105e857600080fd5b506040805180820190915260048152634454414760e01b60208201526102a2565b34801561061557600080fd5b506102ce601c5481565b34801561062b57600080fd5b5061039961063a366004612806565b610d8a565b34801561064b57600080fd5b50600a54610341906001600160a01b031681565b34801561066b57600080fd5b506102fc61067a3660046126ce565b610eb0565b34801561068b57600080fd5b506102ce601f5481565b3480156106a157600080fd5b50610399610ebd565b3480156106b657600080fd5b506102ce6106c536600461273b565b6001600160a01b031660009081526025602052604090206002015490565b3480156106ef57600080fd5b5061071f6106fe36600461273b565b60256020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016102af565b34801561074657600080fd5b50610399610755366004612758565b610ed7565b34801561076657600080fd5b506102ce610775366004612877565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107ac57600080fd5b506103996107bb3660046128a5565b610f1f565b3480156107cc57600080fd5b506103996107db36600461277a565b61107c565b3480156107ec57600080fd5b506103996107fb3660046127b4565b6110f3565b34801561080c57600080fd5b506102ce601d5481565b34801561082257600080fd5b5061039961083136600461273b565b6111aa565b34801561084257600080fd5b506103996108513660046126ce565b611228565b34801561086257600080fd5b506102ce60275481565b60006108793384846112a4565b5060015b92915050565b60006108908484846113c8565b6108e284336108dd85604051806060016040528060288152602001612ac4602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906114f8565b6112a4565b5060015b9392505050565b6000546001600160a01b031633146109205760405162461bcd60e51b8152600401610917906128fa565b60405180910390fd5b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260256020526040812054810361096957506000919050565b6001600160a01b03821660009081526025602052604081205461098b90611524565b6001600160a01b0384166000908152602560205260409020600101549091508082116109bb575060009392505050565b6109c58282611541565b949350505050565b6000546001600160a01b031633146109f75760405162461bcd60e51b8152600401610917906128fa565b602782905560288190556040514290829084907fc83811714572426615980444a6ab691c0a8b3cdc133e5954eaedad87d9a9721990600090a45050565b6000546001600160a01b03163314610a5e5760405162461bcd60e51b8152600401610917906128fa565b6000610a7f612710610a7986610a7360015490565b9061154d565b90611559565b90506000610a96612710610a7986610a7360015490565b90506000610aad612710610a7986610a7360015490565b90506000610ac56103e8610a796005610a7360015490565b9050808410158015610ad75750808310155b8015610ae35750808210155b610b4d5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610917565b6002849055600383905560048290556040514281528390839086907fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f9060200160405180910390a450505050505050565b602954602a54601f5460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b919061291a565b50601f54601e54610c2b91611541565b601e556000601f55565b6000546001600160a01b03163314610c5f5760405162461bcd60e51b8152600401610917906128fa565b6001600160a01b038216600081815260076020526040808220805460ff19168515159081179091559051429391927ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821191a45050565b6000546001600160a01b03163314610cde5760405162461bcd60e51b8152600401610917906128fa565b602980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526005602052604090205490565b602a546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610d55573d6000803e3d6000fd5b5050565b6000610d85610d686000610d00565b610d7f610d7661dead610d00565b60015490611541565b90611541565b905090565b6000546001600160a01b03163314610db45760405162461bcd60e51b8152600401610917906128fa565b602b80546001600160a01b038088166001600160a01b03199283168117909355602c80548883169084168117909155602a80548884169085168117909155602d80548885169086168117909155601a8054948816949095168417909455600085815260076020526040808220805460ff1990811660019081179092558584528284208054821683179055848452828420805482168317905596835281832080548816821790559482529081902080549095169093179093559051919290917f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca90610ea19042815260200190565b60405180910390a45050505050565b60006108793384846113c8565b610ec633611565565b15610ed557610ed533336115aa565b565b6000546001600160a01b03163314610f015760405162461bcd60e51b8152600401610917906128fa565b601091909155601155600a805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610f495760405162461bcd60e51b8152600401610917906128fa565b600b889055600c879055600d869055600f859055600e849055601083905560118290556012819055601354610f7f90600a611559565b60105411158015610f9f5750601354610f9990600a611559565b60115411155b8015610fba5750601354610fb4906014611559565b600e5411155b8015610fd55750601354610fcf90600a611559565b60125411155b6110365760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610917565b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc9898460405161106a91815260200190565b60405180910390a45050505050505050565b6000546001600160a01b031633146110a65760405162461bcd60e51b8152600401610917906128fa565b6016839055601882905560198190556040514281528190839085907f3af591b474e55c209cfbc3da369b6762366e3015997314ac10bd5c3198d26fb39060200160405180910390a4505050565b6000546001600160a01b0316331461111d5760405162461bcd60e51b8152600401610917906128fa565b6001600160a01b0382166000908152600860205260409020805460ff1916821580159190911790915561115a576111558260006116f6565b61116c565b61116c8261116784610d00565b6116f6565b42811515836001600160a01b03167f9d5aa14a9b3912640cacc1223833fffedd9010feefa1a219300eb732a86ce8ba60405160405180910390a45050565b6000546001600160a01b031633146111d45760405162461bcd60e51b8152600401610917906128fa565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b602a5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af115801561127b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129f919061291a565b505050565b6001600160a01b0383166113065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610917565b6001600160a01b0382166113675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610917565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6113d3838383611830565b6113dd8383611968565b6113e88383836119f9565b6113f3838383611ae5565b6113fd8383611c12565b611408838383611c78565b6001600160a01b03831660009081526005602052604090205461142b9082611541565b6001600160a01b0384166000908152600560205260408120919091556114518484611c9d565b61145b5781611466565b611466848484611ce3565b6001600160a01b03841660009081526005602052604090205490915061148c9082611dd1565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114e09085815260200190565b60405180910390a36114f28484611ddd565b50505050565b6000818484111561151c5760405162461bcd60e51b81526004016109179190612668565b505050900390565b600061087d602154610a796020548561154d90919063ffffffff16565b60006108e6828461294d565b60006108e68284612960565b60006108e68284612977565b6027546001600160a01b0382166000908152602460205260408120549091429161158f9190612999565b10801561087d57506028546115a383610942565b1192915050565b6001600160a01b03821660009081526025602052604081205490036115cd575050565b60006115d883610942565b9050801561129f57601d546115ed9082611dd1565b601d5560295460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015611643573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611667919061291a565b50601e546116759082611541565b601e556001600160a01b038316600090815260246020908152604080832042905560259091529020600201546116ab9082611dd1565b6001600160a01b03841660009081526025602052604090206002810191909155546116d590611524565b6001600160a01b038416600090815260256020526040902060010155505050565b60008111801561171c57506001600160a01b038216600090815260256020526040902054155b1561178257602280546001600160a01b0384166000818152602360205260408120839055600183018455929092527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5100180546001600160a01b03191690911790556117b5565b801580156117a757506001600160a01b03821660009081526025602052604090205415155b156117b5576117b582611eb1565b6001600160a01b038216600090815260256020526040902054601b546117e69183916117e091611541565b90611dd1565b601b556001600160a01b038216600090815260256020526040902081905561180d81611524565b6001600160a01b0390921660009081526025602052604090206001019190915550565b6001600160a01b0383166118945760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610917565b6001600160a01b0382166118f65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610917565b6118ff83610d00565b81111561129f5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610917565b6001600160a01b03821660009081526007602052604090205460ff161580156119aa57506001600160a01b03811660009081526007602052604090205460ff16155b15610d5557600a54600160a01b900460ff16610d555760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610917565b6001600160a01b03831660009081526007602052604090205460ff16158015611a3b57506001600160a01b03821660009081526007602052604090205460ff16155b8015611a555750600a546001600160a01b03838116911614155b8015611a6c57506001600160a01b03821661dead14155b1561129f576004546001600160a01b038316600090815260056020526040902054611a979083611dd1565b111561129f5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610917565b600a546001600160a01b03848116911614611b865760035481111580611b2357506001600160a01b03831660009081526007602052604090205460ff165b80611b4657506001600160a01b03821660009081526007602052604090205460ff165b611b865760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610917565b60025481111580611baf57506001600160a01b03831660009081526007602052604090205460ff165b80611bd257506001600160a01b03821660009081526007602052604090205460ff165b61129f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610917565b600a546001600160a01b038281169116148015611c4857506001600160a01b03821660009081526007602052604090205460ff16155b8015611c57575060175460ff16155b15610d5557600160156000828254611c6f9190612999565b90915550505050565b611c83838383611fc6565b1561129f57611c93601854612078565b6000601555505050565b6001600160a01b03821660009081526007602052604081205460ff161580156108e65750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080611cf0858561220d565b1115611dca576000611d13611d05868661220d565b601354610a73908690611559565b30600090815260056020526040902054909150611d309082611dd1565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d819085815260200190565b60405180910390a3600e5415611db857611db83061dead611db3600e54610a736013548961155990919063ffffffff16565b6113c8565b611dc28382611541565b9150506108e6565b5092915050565b60006108e68284612999565b6001600160a01b03811660009081526025602052604090205415611e0557611e0581826115aa565b600a546001600160a01b038281169116148015611e3957506001600160a01b03821660009081526025602052604090205415155b15611e5757611e53611e4a83610942565b601f5490611dd1565b601f555b6001600160a01b03821660009081526008602052604090205460ff16611e8457611e848261116784610d00565b6001600160a01b03811660009081526008602052604090205460ff16610d5557610d558161116783610d00565b60228054611ec19060019061294d565b81548110611ed157611ed16129ac565b60009182526020808320909101546001600160a01b0384811684526023909252604090922054602280549290931692918110611f0f57611f0f6129ac565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260239182905260408120546022805491939291611f5b9060019061294d565b81548110611f6b57611f6b6129ac565b60009182526020808320909101546001600160a01b031683528201929092526040019020556022805480611fa157611fa16129c2565b600082815260209020810160001990810180546001600160a01b031916905501905550565b60008060195483101590506000601854611fdf30610d00565b601754911115915060ff16158015611ff9575060145460ff165b801561200e5750600a54600160a01b900460ff165b80156120175750815b801561203c57506001600160a01b03861660009081526007602052604090205460ff16155b80156120555750600a546001600160a01b038681169116145b8015612065575060165460155410155b801561206e5750805b9695505050505050565b6017805460ff19166001179055600f54600d54600c54600b546000936120ac93600293610a73936117e09291839190611dd1565b905081476120b982612274565b60006120c54783611541565b905060006120d38286611559565b905060006120f1600c54610a7360028561154d90919063ffffffff16565b9050801561213557602b546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612133573d6000803e3d6000fd5b505b600d5460009061214a90610a7385600261154d565b9050801561215b5761215b816123ce565b600f5460009061217090610a7386600261154d565b905080156121b457602d546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156121b2573d6000803e3d6000fd5b505b4780156121f757602a546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156121f5573d6000803e3d6000fd5b505b50506017805460ff191690555050505050505050565b600a546000906001600160a01b03838116911614801561222f57506000601154115b1561223d575060115461087d565b600a546001600160a01b03848116911614801561225c57506000601054115b1561226a575060105461087d565b5060125492915050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122a9576122a96129ac565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232691906129d8565b81600181518110612339576123396129ac565b6001600160a01b03928316602091820292909201015260095461235f91309116846112a4565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612398908590600090869030904290600401612a39565b600060405180830381600087803b1580156123b257600080fd5b505af11580156123c6573d6000803e3d6000fd5b505050505050565b6029546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b9190612a75565b6029549091506124569083906001600160a01b031630612515565b6029546040516370a0823160e01b81523060048201526000916124c99184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156124a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7f9190612a75565b601c549091506124d99082611dd1565b601c55601e546124e99082611dd1565b601e55601b5460215461250d9161250491610a79908561154d565b60205490611dd1565b602055505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561257f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a391906129d8565b816000815181106125b6576125b66129ac565b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106125ea576125ea6129ac565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590869061263090600090869088904290600401612a8e565b6000604051808303818588803b15801561264957600080fd5b505af115801561265d573d6000803e3d6000fd5b505050505050505050565b600060208083528351808285015260005b8181101561269557858101830151858201604001528201612679565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146126cb57600080fd5b50565b600080604083850312156126e157600080fd5b82356126ec816126b6565b946020939093013593505050565b60008060006060848603121561270f57600080fd5b833561271a816126b6565b9250602084013561272a816126b6565b929592945050506040919091013590565b60006020828403121561274d57600080fd5b81356108e6816126b6565b6000806040838503121561276b57600080fd5b50508035926020909101359150565b60008060006060848603121561278f57600080fd5b505081359360208301359350604090920135919050565b80151581146126cb57600080fd5b600080604083850312156127c757600080fd5b82356127d2816126b6565b915060208301356127e2816127a6565b809150509250929050565b6000602082840312156127ff57600080fd5b5035919050565b600080600080600060a0868803121561281e57600080fd5b8535612829816126b6565b94506020860135612839816126b6565b93506040860135612849816126b6565b92506060860135612859816126b6565b91506080860135612869816126b6565b809150509295509295909350565b6000806040838503121561288a57600080fd5b8235612895816126b6565b915060208301356127e2816126b6565b600080600080600080600080610100898b0312156128c257600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60006020828403121561292c57600080fd5b81516108e6816127a6565b634e487b7160e01b600052601160045260246000fd5b8181038181111561087d5761087d612937565b808202811582820484141761087d5761087d612937565b60008261299457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561087d5761087d612937565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000602082840312156129ea57600080fd5b81516108e6816126b6565b600081518084526020808501945080840160005b83811015612a2e5781516001600160a01b031687529582019590820190600101612a09565b509495945050505050565b85815284602082015260a060408201526000612a5860a08301866129f5565b6001600160a01b0394909416606083015250608001529392505050565b600060208284031215612a8757600080fd5b5051919050565b848152608060208201526000612aa760808301866129f5565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212208b191e4414d9fd709d3da7a05ec1e9700cf31bd70efa331bc8c0c97841083be864736f6c63430008130033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80637d1db4a511610144578063ca89b899116100b6578063e94dd17c1161007a578063e94dd17c146107c0578063ef43b02b146107e0578063efca2eed14610800578063f2fde38b14610816578063f7448a3114610836578063ffd49c841461085657600080fd5b8063ca89b899146106aa578063ce7c2ac2146106e3578063d691a7341461073a578063dd62ed3e1461075a578063e2d6f94c146107a057600080fd5b8063997664d711610108578063997664d7146106095780639fb05d371461061f578063a8aa1b311461063f578063a9059cbb1461065f578063c0c493941461067f578063c942435d1461069557600080fd5b80637d1db4a514610573578063893d20e8146105895780638a60c4c1146105a75780639358928b146105c757806395d89b41146105dc57600080fd5b806334c5d2ce116101dd57806348ff2b8b116101a157806348ff2b8b146104d15780634fab0ae8146104f15780635e00e6791461050757806370a082311461052757806378109e54146105475780637cca52fe1461055d57600080fd5b806334c5d2ce146104265780633773eafb146104465780633a98ef391461045b5780633f4218e0146104715780634355855a146104a157600080fd5b806323b872dd1161022f57806323b872dd1461035957806326a4e8d21461037957806328fd31981461039b5780632d48e896146103bb5780632f54bf6e146103db578063313ce5671461040a57600080fd5b806306fdde031461027757806308e20e1f146102b8578063095ea7b3146102dc57806318160ddd1461030c578063228cb7331461032157600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50604080518082019091526006815265444f4754414760d01b60208201525b6040516102af9190612668565b60405180910390f35b3480156102c457600080fd5b506102ce601e5481565b6040519081526020016102af565b3480156102e857600080fd5b506102fc6102f73660046126ce565b61086c565b60405190151581526020016102af565b34801561031857600080fd5b506001546102ce565b34801561032d57600080fd5b50602954610341906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561036557600080fd5b506102fc6103743660046126fa565b610883565b34801561038557600080fd5b5061039961039436600461273b565b6108ed565b005b3480156103a757600080fd5b506102ce6103b636600461273b565b610942565b3480156103c757600080fd5b506103996103d6366004612758565b6109cd565b3480156103e757600080fd5b506102fc6103f636600461273b565b6000546001600160a01b0391821691161490565b34801561041657600080fd5b50604051600981526020016102af565b34801561043257600080fd5b5061039961044136600461277a565b610a34565b34801561045257600080fd5b50610399610b9e565b34801561046757600080fd5b506102ce601b5481565b34801561047d57600080fd5b506102fc61048c36600461273b565b60076020526000908152604090205460ff1681565b3480156104ad57600080fd5b506102fc6104bc36600461273b565b60086020526000908152604090205460ff1681565b3480156104dd57600080fd5b506103996104ec3660046127b4565b610c35565b3480156104fd57600080fd5b506102ce60285481565b34801561051357600080fd5b5061039961052236600461273b565b610cb4565b34801561053357600080fd5b506102ce61054236600461273b565b610d00565b34801561055357600080fd5b506102ce60045481565b34801561056957600080fd5b506102ce60035481565b34801561057f57600080fd5b506102ce60025481565b34801561059557600080fd5b506000546001600160a01b0316610341565b3480156105b357600080fd5b506103996105c23660046127ed565b610d1b565b3480156105d357600080fd5b506102ce610d59565b3480156105e857600080fd5b506040805180820190915260048152634454414760e01b60208201526102a2565b34801561061557600080fd5b506102ce601c5481565b34801561062b57600080fd5b5061039961063a366004612806565b610d8a565b34801561064b57600080fd5b50600a54610341906001600160a01b031681565b34801561066b57600080fd5b506102fc61067a3660046126ce565b610eb0565b34801561068b57600080fd5b506102ce601f5481565b3480156106a157600080fd5b50610399610ebd565b3480156106b657600080fd5b506102ce6106c536600461273b565b6001600160a01b031660009081526025602052604090206002015490565b3480156106ef57600080fd5b5061071f6106fe36600461273b565b60256020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016102af565b34801561074657600080fd5b50610399610755366004612758565b610ed7565b34801561076657600080fd5b506102ce610775366004612877565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107ac57600080fd5b506103996107bb3660046128a5565b610f1f565b3480156107cc57600080fd5b506103996107db36600461277a565b61107c565b3480156107ec57600080fd5b506103996107fb3660046127b4565b6110f3565b34801561080c57600080fd5b506102ce601d5481565b34801561082257600080fd5b5061039961083136600461273b565b6111aa565b34801561084257600080fd5b506103996108513660046126ce565b611228565b34801561086257600080fd5b506102ce60275481565b60006108793384846112a4565b5060015b92915050565b60006108908484846113c8565b6108e284336108dd85604051806060016040528060288152602001612ac4602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906114f8565b6112a4565b5060015b9392505050565b6000546001600160a01b031633146109205760405162461bcd60e51b8152600401610917906128fa565b60405180910390fd5b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260256020526040812054810361096957506000919050565b6001600160a01b03821660009081526025602052604081205461098b90611524565b6001600160a01b0384166000908152602560205260409020600101549091508082116109bb575060009392505050565b6109c58282611541565b949350505050565b6000546001600160a01b031633146109f75760405162461bcd60e51b8152600401610917906128fa565b602782905560288190556040514290829084907fc83811714572426615980444a6ab691c0a8b3cdc133e5954eaedad87d9a9721990600090a45050565b6000546001600160a01b03163314610a5e5760405162461bcd60e51b8152600401610917906128fa565b6000610a7f612710610a7986610a7360015490565b9061154d565b90611559565b90506000610a96612710610a7986610a7360015490565b90506000610aad612710610a7986610a7360015490565b90506000610ac56103e8610a796005610a7360015490565b9050808410158015610ad75750808310155b8015610ae35750808210155b610b4d5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610917565b6002849055600383905560048290556040514281528390839086907fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f9060200160405180910390a450505050505050565b602954602a54601f5460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af1158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b919061291a565b50601f54601e54610c2b91611541565b601e556000601f55565b6000546001600160a01b03163314610c5f5760405162461bcd60e51b8152600401610917906128fa565b6001600160a01b038216600081815260076020526040808220805460ff19168515159081179091559051429391927ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821191a45050565b6000546001600160a01b03163314610cde5760405162461bcd60e51b8152600401610917906128fa565b602980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526005602052604090205490565b602a546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610d55573d6000803e3d6000fd5b5050565b6000610d85610d686000610d00565b610d7f610d7661dead610d00565b60015490611541565b90611541565b905090565b6000546001600160a01b03163314610db45760405162461bcd60e51b8152600401610917906128fa565b602b80546001600160a01b038088166001600160a01b03199283168117909355602c80548883169084168117909155602a80548884169085168117909155602d80548885169086168117909155601a8054948816949095168417909455600085815260076020526040808220805460ff1990811660019081179092558584528284208054821683179055848452828420805482168317905596835281832080548816821790559482529081902080549095169093179093559051919290917f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca90610ea19042815260200190565b60405180910390a45050505050565b60006108793384846113c8565b610ec633611565565b15610ed557610ed533336115aa565b565b6000546001600160a01b03163314610f015760405162461bcd60e51b8152600401610917906128fa565b601091909155601155600a805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610f495760405162461bcd60e51b8152600401610917906128fa565b600b889055600c879055600d869055600f859055600e849055601083905560118290556012819055601354610f7f90600a611559565b60105411158015610f9f5750601354610f9990600a611559565b60115411155b8015610fba5750601354610fb4906014611559565b600e5411155b8015610fd55750601354610fcf90600a611559565b60125411155b6110365760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b6064820152608401610917565b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc9898460405161106a91815260200190565b60405180910390a45050505050505050565b6000546001600160a01b031633146110a65760405162461bcd60e51b8152600401610917906128fa565b6016839055601882905560198190556040514281528190839085907f3af591b474e55c209cfbc3da369b6762366e3015997314ac10bd5c3198d26fb39060200160405180910390a4505050565b6000546001600160a01b0316331461111d5760405162461bcd60e51b8152600401610917906128fa565b6001600160a01b0382166000908152600860205260409020805460ff1916821580159190911790915561115a576111558260006116f6565b61116c565b61116c8261116784610d00565b6116f6565b42811515836001600160a01b03167f9d5aa14a9b3912640cacc1223833fffedd9010feefa1a219300eb732a86ce8ba60405160405180910390a45050565b6000546001600160a01b031633146111d45760405162461bcd60e51b8152600401610917906128fa565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b602a5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af115801561127b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129f919061291a565b505050565b6001600160a01b0383166113065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610917565b6001600160a01b0382166113675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610917565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6113d3838383611830565b6113dd8383611968565b6113e88383836119f9565b6113f3838383611ae5565b6113fd8383611c12565b611408838383611c78565b6001600160a01b03831660009081526005602052604090205461142b9082611541565b6001600160a01b0384166000908152600560205260408120919091556114518484611c9d565b61145b5781611466565b611466848484611ce3565b6001600160a01b03841660009081526005602052604090205490915061148c9082611dd1565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114e09085815260200190565b60405180910390a36114f28484611ddd565b50505050565b6000818484111561151c5760405162461bcd60e51b81526004016109179190612668565b505050900390565b600061087d602154610a796020548561154d90919063ffffffff16565b60006108e6828461294d565b60006108e68284612960565b60006108e68284612977565b6027546001600160a01b0382166000908152602460205260408120549091429161158f9190612999565b10801561087d57506028546115a383610942565b1192915050565b6001600160a01b03821660009081526025602052604081205490036115cd575050565b60006115d883610942565b9050801561129f57601d546115ed9082611dd1565b601d5560295460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015611643573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611667919061291a565b50601e546116759082611541565b601e556001600160a01b038316600090815260246020908152604080832042905560259091529020600201546116ab9082611dd1565b6001600160a01b03841660009081526025602052604090206002810191909155546116d590611524565b6001600160a01b038416600090815260256020526040902060010155505050565b60008111801561171c57506001600160a01b038216600090815260256020526040902054155b1561178257602280546001600160a01b0384166000818152602360205260408120839055600183018455929092527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5100180546001600160a01b03191690911790556117b5565b801580156117a757506001600160a01b03821660009081526025602052604090205415155b156117b5576117b582611eb1565b6001600160a01b038216600090815260256020526040902054601b546117e69183916117e091611541565b90611dd1565b601b556001600160a01b038216600090815260256020526040902081905561180d81611524565b6001600160a01b0390921660009081526025602052604090206001019190915550565b6001600160a01b0383166118945760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610917565b6001600160a01b0382166118f65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610917565b6118ff83610d00565b81111561129f5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610917565b6001600160a01b03821660009081526007602052604090205460ff161580156119aa57506001600160a01b03811660009081526007602052604090205460ff16155b15610d5557600a54600160a01b900460ff16610d555760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b6044820152606401610917565b6001600160a01b03831660009081526007602052604090205460ff16158015611a3b57506001600160a01b03821660009081526007602052604090205460ff16155b8015611a555750600a546001600160a01b03838116911614155b8015611a6c57506001600160a01b03821661dead14155b1561129f576004546001600160a01b038316600090815260056020526040902054611a979083611dd1565b111561129f5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610917565b600a546001600160a01b03848116911614611b865760035481111580611b2357506001600160a01b03831660009081526007602052604090205460ff165b80611b4657506001600160a01b03821660009081526007602052604090205460ff165b611b865760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610917565b60025481111580611baf57506001600160a01b03831660009081526007602052604090205460ff165b80611bd257506001600160a01b03821660009081526007602052604090205460ff165b61129f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610917565b600a546001600160a01b038281169116148015611c4857506001600160a01b03821660009081526007602052604090205460ff16155b8015611c57575060175460ff16155b15610d5557600160156000828254611c6f9190612999565b90915550505050565b611c83838383611fc6565b1561129f57611c93601854612078565b6000601555505050565b6001600160a01b03821660009081526007602052604081205460ff161580156108e65750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080611cf0858561220d565b1115611dca576000611d13611d05868661220d565b601354610a73908690611559565b30600090815260056020526040902054909150611d309082611dd1565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d819085815260200190565b60405180910390a3600e5415611db857611db83061dead611db3600e54610a736013548961155990919063ffffffff16565b6113c8565b611dc28382611541565b9150506108e6565b5092915050565b60006108e68284612999565b6001600160a01b03811660009081526025602052604090205415611e0557611e0581826115aa565b600a546001600160a01b038281169116148015611e3957506001600160a01b03821660009081526025602052604090205415155b15611e5757611e53611e4a83610942565b601f5490611dd1565b601f555b6001600160a01b03821660009081526008602052604090205460ff16611e8457611e848261116784610d00565b6001600160a01b03811660009081526008602052604090205460ff16610d5557610d558161116783610d00565b60228054611ec19060019061294d565b81548110611ed157611ed16129ac565b60009182526020808320909101546001600160a01b0384811684526023909252604090922054602280549290931692918110611f0f57611f0f6129ac565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260239182905260408120546022805491939291611f5b9060019061294d565b81548110611f6b57611f6b6129ac565b60009182526020808320909101546001600160a01b031683528201929092526040019020556022805480611fa157611fa16129c2565b600082815260209020810160001990810180546001600160a01b031916905501905550565b60008060195483101590506000601854611fdf30610d00565b601754911115915060ff16158015611ff9575060145460ff165b801561200e5750600a54600160a01b900460ff165b80156120175750815b801561203c57506001600160a01b03861660009081526007602052604090205460ff16155b80156120555750600a546001600160a01b038681169116145b8015612065575060165460155410155b801561206e5750805b9695505050505050565b6017805460ff19166001179055600f54600d54600c54600b546000936120ac93600293610a73936117e09291839190611dd1565b905081476120b982612274565b60006120c54783611541565b905060006120d38286611559565b905060006120f1600c54610a7360028561154d90919063ffffffff16565b9050801561213557602b546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612133573d6000803e3d6000fd5b505b600d5460009061214a90610a7385600261154d565b9050801561215b5761215b816123ce565b600f5460009061217090610a7386600261154d565b905080156121b457602d546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156121b2573d6000803e3d6000fd5b505b4780156121f757602a546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156121f5573d6000803e3d6000fd5b505b50506017805460ff191690555050505050505050565b600a546000906001600160a01b03838116911614801561222f57506000601154115b1561223d575060115461087d565b600a546001600160a01b03848116911614801561225c57506000601054115b1561226a575060105461087d565b5060125492915050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122a9576122a96129ac565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232691906129d8565b81600181518110612339576123396129ac565b6001600160a01b03928316602091820292909201015260095461235f91309116846112a4565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612398908590600090869030904290600401612a39565b600060405180830381600087803b1580156123b257600080fd5b505af11580156123c6573d6000803e3d6000fd5b505050505050565b6029546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b9190612a75565b6029549091506124569083906001600160a01b031630612515565b6029546040516370a0823160e01b81523060048201526000916124c99184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156124a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7f9190612a75565b601c549091506124d99082611dd1565b601c55601e546124e99082611dd1565b601e55601b5460215461250d9161250491610a79908561154d565b60205490611dd1565b602055505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561257f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a391906129d8565b816000815181106125b6576125b66129ac565b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106125ea576125ea6129ac565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590869061263090600090869088904290600401612a8e565b6000604051808303818588803b15801561264957600080fd5b505af115801561265d573d6000803e3d6000fd5b505050505050505050565b600060208083528351808285015260005b8181101561269557858101830151858201604001528201612679565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146126cb57600080fd5b50565b600080604083850312156126e157600080fd5b82356126ec816126b6565b946020939093013593505050565b60008060006060848603121561270f57600080fd5b833561271a816126b6565b9250602084013561272a816126b6565b929592945050506040919091013590565b60006020828403121561274d57600080fd5b81356108e6816126b6565b6000806040838503121561276b57600080fd5b50508035926020909101359150565b60008060006060848603121561278f57600080fd5b505081359360208301359350604090920135919050565b80151581146126cb57600080fd5b600080604083850312156127c757600080fd5b82356127d2816126b6565b915060208301356127e2816127a6565b809150509250929050565b6000602082840312156127ff57600080fd5b5035919050565b600080600080600060a0868803121561281e57600080fd5b8535612829816126b6565b94506020860135612839816126b6565b93506040860135612849816126b6565b92506060860135612859816126b6565b91506080860135612869816126b6565b809150509295509295909350565b6000806040838503121561288a57600080fd5b8235612895816126b6565b915060208301356127e2816126b6565b600080600080600080600080610100898b0312156128c257600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60006020828403121561292c57600080fd5b81516108e6816127a6565b634e487b7160e01b600052601160045260246000fd5b8181038181111561087d5761087d612937565b808202811582820484141761087d5761087d612937565b60008261299457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561087d5761087d612937565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000602082840312156129ea57600080fd5b81516108e6816126b6565b600081518084526020808501945080840160005b83811015612a2e5781516001600160a01b031687529582019590820190600101612a09565b509495945050505050565b85815284602082015260a060408201526000612a5860a08301866129f5565b6001600160a01b0394909416606083015250608001529392505050565b600060208284031215612a8757600080fd5b5051919050565b848152608060208201526000612aa760808301866129f5565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212208b191e4414d9fd709d3da7a05ec1e9700cf31bd70efa331bc8c0c97841083be864736f6c63430008130033

Deployed Bytecode Sourcemap

3937:20134:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8393:67;;;;;;;;;;-1:-1:-1;8453:5:0;;;;;;;;;;;;-1:-1:-1;;;8453:5:0;;;;8393:67;;;;;;;:::i;:::-;;;;;;;;5572:31;;;;;;;;;;;;;;;;;;;713:25:1;;;701:2;686:18;5572:31:0;567:177:1;9311:133:0;;;;;;;;;;-1:-1:-1;9311:133:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;9311:133:0;1205:187:1;8700:84:0;;;;;;;;;;-1:-1:-1;8770:12:0;;8700:84;;6153:66;;;;;;;;;;-1:-1:-1;6153:66:0;;;;-1:-1:-1;;;;;6153:66:0;;;;;;-1:-1:-1;;;;;1561:32:1;;;1543:51;;1531:2;1516:18;6153:66:0;1397:203:1;18273:309:0;;;;;;;;;;-1:-1:-1;18273:309:0;;;;;:::i;:::-;;:::i;21194:106::-;;;;;;;;;;-1:-1:-1;21194:106:0;;;;;:::i;:::-;;:::i;:::-;;22668:473;;;;;;;;;;-1:-1:-1;22668:473:0;;;;;:::i;:::-;;:::i;23798:270::-;;;;;;;;;;-1:-1:-1;23798:270:0;;;;;:::i;:::-;;:::i;2317:87::-;;;;;;;;;;-1:-1:-1;2317:87:0;;;;;:::i;:::-;2372:4;2397:5;-1:-1:-1;;;;;2386:16:0;;;2397:5;;2386:16;;2317:87;8543:67;;;;;;;;;;-1:-1:-1;8543:67:0;;4141:1;2713:36:1;;2701:2;2686:18;8543:67:0;2571:184:1;11357:665:0;;;;;;;;;;-1:-1:-1;11357:665:0;;;;;:::i;:::-;;:::i;20969:217::-;;;;;;;;;;;;;:::i;5465:26::-;;;;;;;;;;;;;;;;4543:44;;;;;;;;;;-1:-1:-1;4543:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4594:49;;;;;;;;;;-1:-1:-1;4594:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14191:192;;;;;;;;;;-1:-1:-1;14191:192:0;;;;;:::i;:::-;;:::i;6100:46::-;;;;;;;;;;;;;;;;21308:99;;;;;;;;;;-1:-1:-1;21308:99:0;;;;;:::i;:::-;;:::i;8790:103::-;;;;;;;;;;-1:-1:-1;8790:103:0;;;;;:::i;:::-;;:::i;4352:63::-;;;;;;;;;;;;;;;;4283:62;;;;;;;;;;;;;;;;4216:60;;;;;;;;;;;;;;;;8616:78;;;;;;;;;;-1:-1:-1;8668:7:0;8686:5;-1:-1:-1;;;;;8686:5:0;8616:78;;20844:117;;;;;;;;;;-1:-1:-1;20844:117:0;;;;;:::i;:::-;;:::i;9450:138::-;;;;;;;;;;;;;:::i;8466:71::-;;;;;;;;;;-1:-1:-1;8528:7:0;;;;;;;;;;;;-1:-1:-1;;;8528:7:0;;;;8466:71;;5498:29;;;;;;;;;;;;;;;;13608:575;;;;;;;;;;-1:-1:-1;13608:575:0;;;;;:::i;:::-;;:::i;4671:19::-;;;;;;;;;;-1:-1:-1;4671:19:0;;;;-1:-1:-1;;;;;4671:19:0;;;8899:139;;;;;;;;;;-1:-1:-1;8899:139:0;;;;;:::i;:::-;;:::i;5610:30::-;;;;;;;;;;;;;;;;21856:130;;;;;;;;;;;;;:::i;21658:190::-;;;;;;;;;;-1:-1:-1;21658:190:0;;;;;:::i;:::-;-1:-1:-1;;;;;21806:19:0;21731:7;21806:19;;;:6;:19;;;;;:33;;;;21658:190;5973:40;;;;;;;;;;-1:-1:-1;5973:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4796:25:1;;;4852:2;4837:18;;4830:34;;;;4880:18;;;4873:34;4784:2;4769:18;5973:40:0;4594:319:1;13101:164:0;;;;;;;;;;-1:-1:-1;13101:164:0;;;;;:::i;:::-;;:::i;9044:127::-;;;;;;;;;;-1:-1:-1;9044:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9142:18:0;;;9125:7;9142:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9044:127;10696:653;;;;;;;;;;-1:-1:-1;10696:653:0;;;;;:::i;:::-;;:::i;13273:327::-;;;;;;;;;;-1:-1:-1;13273:327:0;;;;;:::i;:::-;;:::i;18933:289::-;;;;;;;;;;-1:-1:-1;18933:289:0;;;;;:::i;:::-;;:::i;5534:31::-;;;;;;;;;;;;;;;;2410:111;;;;;;;;;;-1:-1:-1;2410:111:0;;;;;:::i;:::-;;:::i;20694:142::-;;;;;;;;;;-1:-1:-1;20694:142:0;;;;;:::i;:::-;;:::i;6056:37::-;;;;;;;;;;;;;;;;9311:133;9386:4;9393:37;9402:10;9414:7;9423:6;9393:8;:37::i;:::-;-1:-1:-1;9438:4:0;9311:133;;;;;:::o;18273:309::-;18371:4;18388:36;18398:6;18406:9;18417:6;18388:9;:36::i;:::-;18435:117;18444:6;18452:10;18464:87;18500:6;18464:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18464:19:0;;;;;;:11;:19;;;;;;;;18484:10;18464:31;;;;;;;;;:87;:35;:87::i;:::-;18435:8;:117::i;:::-;-1:-1:-1;18570:4:0;18273:309;;;;;;:::o;21194:106::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;;;;;;;;;21267:14:::1;:25:::0;;-1:-1:-1;;;;;;21267:25:0::1;-1:-1:-1::0;;;;;21267:25:0;;;::::1;::::0;;;::::1;::::0;;21194:106::o;22668:473::-;-1:-1:-1;;;;;22760:19:0;;22737:7;22760:19;;;:6;:19;;;;;:26;:31;;22757:48;;-1:-1:-1;22801:1:0;;22668:473;-1:-1:-1;22668:473:0:o;22757:48::-;-1:-1:-1;;;;;22874:19:0;;22815:33;22874:19;;;:6;:19;;;;;:26;22851:50;;:22;:50::i;:::-;-1:-1:-1;;;;;22947:19:0;;22912:32;22947:19;;;:6;:19;;;;;:33;;;22815:86;;-1:-1:-1;22994:53:0;;;22991:70;;-1:-1:-1;23057:1:0;;22668:473;-1:-1:-1;;;22668:473:0:o;22991:70::-;23078:55;:25;23108:24;23078:29;:55::i;:::-;23071:62;22668:473;-1:-1:-1;;;;22668:473:0:o;23798:270::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;23907:9:::1;:22:::0;;;23940:15:::1;:34:::0;;;23990:70:::1;::::0;24044:15:::1;::::0;23958:16;;23919:10;;23990:70:::1;::::0;-1:-1:-1;;23990:70:0::1;23798:270:::0;;:::o;11357:665::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;11457:13:::1;11473:43;11509:5;11473:23;11491:4;11473:13;8770:12:::0;;;8700:84;11473:13:::1;:17:::0;::::1;:23::i;:::-;:27:::0;::::1;:43::i;:::-;11457:59;;11518:19;11540:45;11578:5;11540:25;11558:6;11540:13;8770:12:::0;;;8700:84;11540:45:::1;11518:67;;11596:17;11616:46;11655:5;11616:26;11634:7;11616:13;8770:12:::0;;;8700:84;11616:46:::1;11596:66;;11664:13;11680:30;11705:4;11680:20;11698:1;11680:13;8770:12:::0;;;8700:84;11680:30:::1;11664:46;;11738:5;11729;:14;;:38;;;;;11762:5;11747:11;:20;;11729:38;:60;;;;;11784:5;11771:9;:18;;11729:60;11721:126;;;::::0;-1:-1:-1;;;11721:126:0;;6773:2:1;11721:126:0::1;::::0;::::1;6755:21:1::0;6812:2;6792:18;;;6785:30;6851:34;6831:18;;;6824:62;-1:-1:-1;;;6902:18:1;;;6895:51;6963:19;;11721:126:0::1;6571:417:1::0;11721:126:0::1;11858:12;:20:::0;;;11880:14:::1;:28:::0;;;11910:15:::1;:27:::0;;;11953:61:::1;::::0;11998:15:::1;713:25:1::0;;11880:28:0;;11910:27;;11858:20;;11953:61:::1;::::0;701:2:1;686:18;11953:61:0::1;;;;;;;11446:576;;;;11357:665:::0;;;:::o;20969:217::-;21017:6;;21034:20;;21056:15;;21010:62;;-1:-1:-1;;;21010:62:0;;-1:-1:-1;;;;;21034:20:0;;;21010:62;;;7167:51:1;7234:18;;;7227:34;;;;21017:6:0;;;21010:23;;7140:18:1;;21010:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21123:15:0;;21102:16;;:37;;:20;:37::i;:::-;21083:16;:56;21176:1;21150:15;:28;20969:217::o;14191:192::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14275:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:32;;-1:-1:-1;;14275:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14323:52;;14359:15:::1;::::0;14275:32;;14323:52:::1;::::0;::::1;14191:192:::0;;:::o;21308:99::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;21382:6:::1;:17:::0;;-1:-1:-1;;;;;;21382:17:0::1;-1:-1:-1::0;;;;;21382:17:0;;;::::1;::::0;;;::::1;::::0;;21308:99::o;8790:103::-;-1:-1:-1;;;;;8873:18:0;8856:7;8873:18;;;:9;:18;;;;;;;8790:103::o;20844:117::-;20914:20;;20906:47;;-1:-1:-1;;;;;20914:20:0;;;;20906:47;;;;;20945:7;;20914:20;20906:47;20914:20;20906:47;20945:7;20914:20;20906:47;;;;;;;;;;;;;;;;;;;;;20844:117;:::o;9450:138::-;9509:7;9526:60;9564:21;9582:1;9564:9;:21::i;:::-;9526:33;9543:15;6259:42;9543:9;:15::i;:::-;9526:12;;;:16;:33::i;:::-;:37;;:60::i;:::-;9519:67;;9450:138;:::o;13608:575::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;13764:18:::1;:31:::0;;-1:-1:-1;;;;;13764:31:0;;::::1;-1:-1:-1::0;;;;;;13764:31:0;;::::1;::::0;::::1;::::0;;;13797:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;13830:20:::1;:35:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;13867:16:::1;:27:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;13896:14:::1;:23:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;13764:18:::1;13930:23:::0;;;:11:::1;:23;::::0;;;;;:30;;-1:-1:-1;;13930:30:0;;::::1;13764:31:::0;13930:30;;::::1;::::0;;;13962:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;13994:25;;;;;;:32;;;::::1;::::0;::::1;::::0;;14028:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;14058:19;;;;;;;:26;;;;::::1;::::0;;::::1;::::0;;;14100:75;;13830:35;;13797:31;;14100:75:::1;::::0;::::1;::::0;14159:15:::1;713:25:1::0;;701:2;686:18;;567:177;14100:75:0::1;;;;;;;;13608:575:::0;;;;;:::o;8899:139::-;8977:4;8984:40;8994:10;9006:9;9017:6;8984:9;:40::i;21856:130::-;21905:28;21922:10;21905:16;:28::i;:::-;21902:77;;;21935:42;21954:10;21966;21935:18;:42::i;:::-;21856:130::o;13101:164::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;13192:8:::1;:20:::0;;;;13214:7:::1;:20:::0;13236:14:::1;:21:::0;;-1:-1:-1;;;;13236:21:0::1;-1:-1:-1::0;;;13236:21:0::1;::::0;;13101:164::o;10696:653::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;10886:12:::1;:25:::0;;;10913:12:::1;:25:::0;;;10940:10:::1;:21:::0;;;10963:10:::1;:21:::0;;;10995:7:::1;:15:::0;;;11012:8:::1;:17:::0;;;11031:7:::1;:15:::0;;;11048:11:::1;:20:::0;;;11099:11:::1;::::0;:19:::1;::::0;11115:2:::1;11099:15;:19::i;:::-;11087:8;;:31;;:65;;;;-1:-1:-1::0;11133:11:0::1;::::0;:19:::1;::::0;11149:2:::1;11133:15;:19::i;:::-;11122:7;;:30;;11087:65;:99;;;;-1:-1:-1::0;11167:11:0::1;::::0;:19:::1;::::0;11183:2:::1;11167:15;:19::i;:::-;11156:7;;:30;;11087:99;:137;;;;-1:-1:-1::0;11205:11:0::1;::::0;:19:::1;::::0;11221:2:::1;11205:15;:19::i;:::-;11190:11;;:34;;11087:137;11079:194;;;::::0;-1:-1:-1;;;11079:194:0;;7724:2:1;11079:194:0::1;::::0;::::1;7706:21:1::0;7763:2;7743:18;;;7736:30;7802:34;7782:18;;;7775:62;-1:-1:-1;;;7853:18:1;;;7846:42;7905:19;;11079:194:0::1;7522:408:1::0;11079:194:0::1;11325:15;11310:5;11302:6;11289:52;11317:6;11289:52;;;;713:25:1::0;;701:2;686:18;;567:177;11289:52:0::1;;;;;;;;10696:653:::0;;;;;;;;:::o;13273:327::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;13402:10:::1;:24:::0;;;13428:13:::1;:30:::0;;;13460:14:::1;:32:::0;;;13508:82:::1;::::0;13574:15:::1;713:25:1::0;;13460:32:0;;13428:30;;13402:24;;13508:82:::1;::::0;701:2:1;686:18;13508:82:0::1;;;;;;;13273:327:::0;;;:::o;18933:289::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19021:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;19021:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;19065:84:::1;;19076:19;19085:6;19093:1;19076:8;:19::i;:::-;19065:84;;;19112:35;19121:6;19129:17;19139:6;19129:9;:17::i;:::-;19112:8;:35::i;:::-;19198:15;19190:6;19164:50;;19182:6;-1:-1:-1::0;;;;;19164:50:0::1;;;;;;;;;;;18933:289:::0;;:::o;2410:111::-;2372:4;2397:5;-1:-1:-1;;;;;2397:5:0;2284:10;2386:16;2268:38;;;;-1:-1:-1;;;2268:38:0;;;;;;;:::i;:::-;2476:5:::1;:11:::0;;-1:-1:-1;;;;;;2476:11:0::1;-1:-1:-1::0;;;;;2476:11:0;::::1;::::0;;::::1;::::0;;;2494:25:::1;::::0;1543:51:1;;;2494:25:0::1;::::0;1531:2:1;1516:18;2494:25:0::1;;;;;;;2410:111:::0;:::o;20694:142::-;20798:20;;20772:56;;-1:-1:-1;;;20772:56:0;;-1:-1:-1;;;;;20798:20:0;;;20772:56;;;7167:51:1;7234:18;;;7227:34;;;20772:25:0;;;;;;7140:18:1;;20772:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20694:142;;:::o;18590:335::-;-1:-1:-1;;;;;18683:19:0;;18675:68;;;;-1:-1:-1;;;18675:68:0;;8353:2:1;18675:68:0;;;8335:21:1;8392:2;8372:18;;;8365:30;8431:34;8411:18;;;8404:62;-1:-1:-1;;;8482:18:1;;;8475:34;8526:19;;18675:68:0;8151:400:1;18675:68:0;-1:-1:-1;;;;;18762:21:0;;18754:68;;;;-1:-1:-1;;;18754:68:0;;8758:2:1;18754:68:0;;;8740:21:1;8797:2;8777:18;;;8770:30;8836:34;8816:18;;;8809:62;-1:-1:-1;;;8887:18:1;;;8880:32;8929:19;;18754:68:0;8556:398:1;18754:68:0;-1:-1:-1;;;;;18833:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18885:32;;713:25:1;;;18885:32:0;;686:18:1;18885:32:0;;;;;;;18590:335;;;:::o;9959:729::-;10048:37;10059:6;10067:9;10078:6;10048:10;:37::i;:::-;10096:38;10116:6;10124:9;10096:19;:38::i;:::-;10145:41;10160:6;10168:9;10179:6;10145:14;:41::i;:::-;10198:39;10211:6;10219:9;10230:6;10198:12;:39::i;:::-;10248:35;10265:6;10273:9;10248:16;:35::i;:::-;10294;10303:6;10311:9;10322:6;10294:8;:35::i;:::-;-1:-1:-1;;;;;10360:17:0;;;;;;:9;:17;;;;;;:29;;10382:6;10360:21;:29::i;:::-;-1:-1:-1;;;;;10340:17:0;;;;;;:9;:17;;;;;:49;;;;10425:32;10350:6;10447:9;10425:13;:32::i;:::-;:78;;10497:6;10425:78;;;10460:34;10468:6;10476:9;10487:6;10460:7;:34::i;:::-;-1:-1:-1;;;;;10537:20:0;;;;;;:9;:20;;;;;;10400:103;;-1:-1:-1;10537:40:0;;10400:103;10537:24;:40::i;:::-;-1:-1:-1;;;;;10514:20:0;;;;;;;:9;:20;;;;;;;:63;;;;10593:43;;;;;;;;;;10621:14;713:25:1;;701:2;686:18;;567:177;10593:43:0;;;;;;;;10647:33;10662:6;10670:9;10647:14;:33::i;:::-;10037:651;9959:729;;;:::o;649:162::-;735:7;781:12;773:6;;;;765:29;;;;-1:-1:-1;;;765:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;803:5:0;;;649:162::o;23149:170::-;23219:7;23246:65;23279:31;;23246:28;23256:17;;23246:5;:9;;:28;;;;:::i;295:82::-;353:7;370:5;374:1;370;:5;:::i;383:82::-;441:7;458:5;462:1;458;:5;:::i;471:82::-;529:7;546:5;550:1;546;:5;:::i;21419:231::-;21546:9;;-1:-1:-1;;;;;21513:30:0;;21489:4;21513:30;;;:17;:30;;;;;;21489:4;;21558:15;;21513:42;;21546:9;21513:42;:::i;:::-;:60;:129;;;;;21627:15;;21594:30;21612:11;21594:17;:30::i;:::-;:48;21506:136;21419:231;-1:-1:-1;;21419:231:0:o;21994:666::-;-1:-1:-1;;;;;22085:19:0;;;;;;:6;:19;;;;;:26;:31;;22082:46;;21994:666;;:::o;22082:46::-;22138:14;22155:30;22173:11;22155:17;:30::i;:::-;22138:47;-1:-1:-1;22199:10:0;;22196:457;;22244:16;;:28;;22265:6;22244:20;:28::i;:::-;22225:16;:47;22294:6;;22287:42;;-1:-1:-1;;;22287:42:0;;-1:-1:-1;;;;;7185:32:1;;;22287:42:0;;;7167:51:1;7234:18;;;7227:34;;;22294:6:0;;;;22287:23;;7140:18:1;;22287:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22363:16:0;;:28;;22384:6;22363:20;:28::i;:::-;22344:16;:47;-1:-1:-1;;;;;22406:30:0;;;;;;:17;:30;;;;;;;;22439:15;22406:48;;22505:6;:19;;;;;:33;;;:45;;22543:6;22505:37;:45::i;:::-;-1:-1:-1;;;;;22469:19:0;;;;;;:6;:19;;;;;:33;;;:81;;;;22624:26;22601:50;;:22;:50::i;:::-;-1:-1:-1;;;;;22565:19:0;;;;;;:6;:19;;;;;:33;;:86;22071:589;21994:666;;:::o;19689:482::-;19776:1;19767:6;:10;:45;;;;-1:-1:-1;;;;;;19781:19:0;;;;;;:6;:19;;;;;:26;:31;19767:45;19764:177;;;23426:12;:19;;-1:-1:-1;;;;;23392:31:0;;;;;;:18;:31;;;;;:53;;;23456:30;;;;;;;;;;;;;-1:-1:-1;;;;;;23456:30:0;;;;;;19764:177;;;19861:11;;:45;;;;-1:-1:-1;;;;;;19876:19:0;;19905:1;19876:19;;;:6;:19;;;;;:26;:30;;19861:45;19858:83;;;19908:30;19926:11;19908:17;:30::i;:::-;-1:-1:-1;;;;;19981:19:0;;;;;;:6;:19;;;;;:26;19965:11;;:55;;20013:6;;19965:43;;:15;:43::i;:::-;:47;;:55::i;:::-;19951:11;:69;-1:-1:-1;;;;;20031:19:0;;;;;;:6;:19;;;;;:35;;;20113:50;20060:6;20113:22;:50::i;:::-;-1:-1:-1;;;;;20077:19:0;;;;;;;:6;:19;;;;;:33;;:86;;;;-1:-1:-1;19689:482:0:o;9596:355::-;-1:-1:-1;;;;;9700:20:0;;9692:70;;;;-1:-1:-1;;;9692:70:0;;9951:2:1;9692:70:0;;;9933:21:1;9990:2;9970:18;;;9963:30;10029:34;10009:18;;;10002:62;-1:-1:-1;;;10080:18:1;;;10073:35;10125:19;;9692:70:0;9749:401:1;9692:70:0;-1:-1:-1;;;;;9781:23:0;;9773:71;;;;-1:-1:-1;;;9773:71:0;;10357:2:1;9773:71:0;;;10339:21:1;10396:2;10376:18;;;10369:30;10435:34;10415:18;;;10408:62;-1:-1:-1;;;10486:18:1;;;10479:33;10529:19;;9773:71:0;10155:399:1;9773:71:0;9873:17;9883:6;9873:9;:17::i;:::-;9863:6;:27;;9855:88;;;;-1:-1:-1;;;9855:88:0;;10761:2:1;9855:88:0;;;10743:21:1;10800:2;10780:18;;;10773:30;10839:34;10819:18;;;10812:62;-1:-1:-1;;;10890:18:1;;;10883:47;10947:19;;9855:88:0;10559:413:1;12030:191:0;-1:-1:-1;;;;;12123:19:0;;;;;;:11;:19;;;;;;;;12122:20;:47;;;;-1:-1:-1;;;;;;12147:22:0;;;;;;:11;:22;;;;;;;;12146:23;12122:47;12119:95;;;12179:14;;-1:-1:-1;;;12179:14:0;;;;12171:41;;;;-1:-1:-1;;;12171:41:0;;11179:2:1;12171:41:0;;;11161:21:1;11218:2;11198:18;;;11191:30;-1:-1:-1;;;11237:18:1;;;11230:44;11291:18;;12171:41:0;10977:338:1;12233:331:0;-1:-1:-1;;;;;12337:19:0;;;;;;:11;:19;;;;;;;;12336:20;:47;;;;-1:-1:-1;;;;;;12361:22:0;;;;;;:11;:22;;;;;;;;12360:23;12336:47;:77;;;;-1:-1:-1;12408:4:0;;-1:-1:-1;;;;;12387:26:0;;;12408:4;;12387:26;;12336:77;:107;;;;-1:-1:-1;;;;;;12417:26:0;;6259:42;12417:26;;12336:107;12333:224;;;12505:15;;-1:-1:-1;;;;;12468:20:0;;;;;;:9;:20;;;;;;:32;;12493:6;12468:24;:32::i;:::-;12467:53;;12459:96;;;;-1:-1:-1;;;12459:96:0;;11522:2:1;12459:96:0;;;11504:21:1;11561:2;11541:18;;;11534:30;11600:32;11580:18;;;11573:60;11650:18;;12459:96:0;11320:354:1;12752:341:0;12863:4;;-1:-1:-1;;;;;12853:14:0;;;12863:4;;12853:14;12850:124;;12887:14;;12877:6;:24;;:47;;;-1:-1:-1;;;;;;12905:19:0;;;;;;:11;:19;;;;;;;;12877:47;:73;;;-1:-1:-1;;;;;;12928:22:0;;;;;;:11;:22;;;;;;;;12877:73;12869:103;;;;-1:-1:-1;;;12869:103:0;;11881:2:1;12869:103:0;;;11863:21:1;11920:2;11900:18;;;11893:30;-1:-1:-1;;;11939:18:1;;;11932:47;11996:18;;12869:103:0;11679:341:1;12869:103:0;13002:12;;12992:6;:22;;:45;;;-1:-1:-1;;;;;;13018:19:0;;;;;;:11;:19;;;;;;;;12992:45;:71;;;-1:-1:-1;;;;;;13041:22:0;;;;;;:11;:22;;;;;;;;12992:71;12984:101;;;;-1:-1:-1;;;12984:101:0;;11881:2:1;12984:101:0;;;11863:21:1;11920:2;11900:18;;;11893:30;-1:-1:-1;;;11939:18:1;;;11932:47;11996:18;;12984:101:0;11679:341:1;12572:172:0;12669:4;;-1:-1:-1;;;;;12656:17:0;;;12669:4;;12656:17;:41;;;;-1:-1:-1;;;;;;12678:19:0;;;;;;:11;:19;;;;;;;;12677:20;12656:41;:54;;;;-1:-1:-1;12702:8:0;;;;12701:9;12656:54;12653:84;;;12733:1;12712:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;12572:172:0;;:::o;17070:197::-;17162:41;17177:6;17185:9;17196:6;17162:14;:41::i;:::-;17159:101;;;17205:29;17220:13;;17205:14;:29::i;:::-;17256:1;17236:9;:22;17070:197;;;:::o;17275:160::-;-1:-1:-1;;;;;17381:19:0;;17356:4;17381:19;;;:11;:19;;;;;;;;17380:20;:47;;;;-1:-1:-1;;;;;;;17405:22:0;;;;;:11;:22;;;;;;;;17404:23;;17275:160;-1:-1:-1;17275:160:0:o;17719:546::-;17805:7;17861:1;17828:30;17840:6;17848:9;17828:11;:30::i;:::-;:34;17825:418;;;17874:17;17894:59;17922:30;17934:6;17942:9;17922:11;:30::i;:::-;17905:11;;17894:23;;:6;;:10;:23::i;:59::-;18009:4;17991:24;;;;:9;:24;;;;;;17874:79;;-1:-1:-1;17991:39:0;;17874:79;17991:28;:39::i;:::-;17982:4;17964:24;;;;:9;:24;;;;;;;:66;;;;18046:42;;-1:-1:-1;;;;;18046:42:0;;;;;;;18078:9;713:25:1;;701:2;686:18;;567:177;18046:42:0;;;;;;;;18102:7;;:20;18099:104;;18124:77;18142:4;6259:42;18164:36;18192:7;;18164:23;18175:11;;18164:6;:10;;:23;;;;:::i;:36::-;18124:9;:77::i;:::-;18220:21;:6;18231:9;18220:10;:21::i;:::-;18213:28;;;;;17825:418;-1:-1:-1;18251:6:0;17719:546;-1:-1:-1;;17719:546:0:o;207:82::-;265:7;282:5;286:1;282;:5;:::i;19230:451::-;-1:-1:-1;;;;;19312:17:0;;19339:1;19312:17;;;:6;:17;;;;;:24;:28;19309:75;;19342:40;19361:9;19372;19342:18;:40::i;:::-;19410:4;;-1:-1:-1;;;;;19397:17:0;;;19410:4;;19397:17;:46;;;;-1:-1:-1;;;;;;19418:14:0;;19442:1;19418:14;;;:6;:14;;;;;:21;:25;;19397:46;19394:117;;;19463:46;19483:25;19501:6;19483:17;:25::i;:::-;19463:15;;;:19;:46::i;:::-;19445:15;:64;19394:117;-1:-1:-1;;;;;19525:24:0;;;;;;:16;:24;;;;;;;;19521:67;;19551:35;19560:6;19568:17;19578:6;19568:9;:17::i;19551:35::-;-1:-1:-1;;;;;19602:27:0;;;;;;:16;:27;;;;;;;;19598:76;;19631:41;19640:9;19651:20;19661:9;19651;:20::i;23502:288::-;23618:12;23631:19;;:21;;23651:1;;23631:21;:::i;:::-;23618:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23583:31:0;;;;;:18;:31;;;;;;;;23570:12;:45;;23618:35;;;;;23570:12;:45;;;;;;:::i;:::-;;;;;;;;;;;;;:83;;-1:-1:-1;;;;;;23570:83:0;-1:-1:-1;;;;;23570:83:0;;;;;;23722:31;;;;;:18;:31;;;;;;;;23683:12;23696:19;;23722:31;;:18;23570:45;23696:21;;-1:-1:-1;;23696:21:0;:::i;:::-;23683:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23683:35:0;23664:55;;;;;;;;;;;;:89;23764:12;:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;23764:18:0;;;;;-1:-1:-1;;;;;;23764:18:0;;;;;;-1:-1:-1;23502:288:0:o;16649:413::-;16747:4;16764:13;16790:14;;16780:6;:24;;16764:40;;16815:19;16865:13;;16837:24;16855:4;16837:9;:24::i;:::-;16897:8;;16837:41;-1:-1:-1;16837:41:0;;-1:-1:-1;16897:8:0;;16896:9;:24;;;;-1:-1:-1;16909:11:0;;;;16896:24;:42;;;;-1:-1:-1;16924:14:0;;-1:-1:-1;;;16924:14:0;;;;16896:42;:54;;;;;16942:8;16896:54;:78;;;;-1:-1:-1;;;;;;16955:19:0;;;;;;:11;:19;;;;;;;;16954:20;16896:78;:113;;;;-1:-1:-1;17005:4:0;;-1:-1:-1;;;;;16992:17:0;;;17005:4;;16992:17;16896:113;:140;;;;;17026:10;;17013:9;;:23;;16896:140;:158;;;;;17040:14;16896:158;16889:165;16649:413;-1:-1:-1;;;;;;16649:413:0:o;14391:1031::-;5383:8;:15;;-1:-1:-1;;5383:15:0;5394:4;5383:15;;;14537:10:::1;::::0;14521::::1;::::0;14503:12:::1;::::0;14486::::1;::::0;5383:8;;14485:71:::1;::::0;14554:1:::1;::::0;14486:62:::1;::::0;:46:::1;::::0;14521:10;14486:46;;:12;:16:::1;:30::i;14485:71::-;14462:94:::0;-1:-1:-1;14584:6:0;14626:21:::1;14658:24;14584:6:::0;14658:16:::1;:24::i;:::-;14693:20;14716:41;:21;14742:14:::0;14716:25:::1;:41::i;:::-;14693:64:::0;-1:-1:-1;14768:19:0::1;14789:30;14693:64:::0;14806:12;14789:16:::1;:30::i;:::-;14768:51;;14830:23;14856:36;14879:12;;14856:18;14872:1;14856:11;:15;;:18;;;;:::i;:36::-;14830:62:::0;-1:-1:-1;14906:19:0;;14903:79:::1;;14935:18;::::0;14927:53:::1;::::0;-1:-1:-1;;;;;14935:18:0;;::::1;::::0;14927:53;::::1;;;::::0;14964:15;;14935:18:::1;14927:53:::0;14935:18;14927:53;14964:15;14935:18;14927:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14903:79;15039:10;::::0;14992:21:::1;::::0;15016:34:::1;::::0;:18:::1;:11:::0;15032:1:::1;15016:15;:18::i;:34::-;14992:58:::0;-1:-1:-1;15064:17:0;;15061:53:::1;;15083:29;15098:13;15083:14;:29::i;:::-;15171:10;::::0;15124:21:::1;::::0;15148:34:::1;::::0;:18:::1;:11:::0;15164:1:::1;15148:15;:18::i;:34::-;15124:58:::0;-1:-1:-1;15196:17:0;;15193:73:::1;;15223:16;::::0;15215:49:::1;::::0;-1:-1:-1;;;;;15223:16:0;;::::1;::::0;15215:49;::::1;;;::::0;15250:13;;15223:16:::1;15215:49:::0;15223:16;15215:49;15250:13;15223:16;15215:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15193:73;15299:21;15334:25:::0;;15331:84:::1;;15369:20;::::0;15361:52:::1;::::0;-1:-1:-1;;;;;15369:20:0;;::::1;::::0;15361:52;::::1;;;::::0;15400:12;;15369:20:::1;15361:52:::0;15369:20;15361:52;15400:12;15369:20;15361:52;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15331:84;-1:-1:-1::0;;5403:8:0;:16;;-1:-1:-1;;5403:16:0;;;-1:-1:-1;;;;;;;;14391:1031:0:o;17443:268::-;17558:4;;17522:7;;-1:-1:-1;;;;;17545:17:0;;;17558:4;;17545:17;:41;;;;;17584:1;17566:7;;:20;17545:41;17542:62;;;-1:-1:-1;17595:7:0;;17588:14;;17542:62;17627:4;;-1:-1:-1;;;;;17617:14:0;;;17627:4;;17617:14;:39;;;;;17654:1;17635:8;;:21;17617:39;17614:61;;;-1:-1:-1;17665:8:0;;17658:15;;17614:61;-1:-1:-1;17692:11:0;;17443:268;;;;:::o;15798:434::-;15888:16;;;15902:1;15888:16;;;;;;;;15864:21;;15888:16;;;;;;;;;;-1:-1:-1;15888:16:0;15864:40;;15933:4;15915;15920:1;15915:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15915:23:0;;;:7;;;;;;;;;;:23;;;;15959:6;;:13;;;-1:-1:-1;;;15959:13:0;;;;:6;;;;;:11;;:13;;;;;15915:7;;15959:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15949:4;15954:1;15949:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15949:23:0;;;:7;;;;;;;;;:23;16015:6;;15983:53;;16000:4;;16015:6;16024:11;15983:8;:53::i;:::-;16047:6;;:177;;-1:-1:-1;;;16047:177:0;;-1:-1:-1;;;;;16047:6:0;;;;:57;;:177;;16119:11;;16047:6;;16161:4;;16188;;16208:15;;16047:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15853:379;15798:434;:::o;20179:507::-;20273:6;;20266:39;;-1:-1:-1;;;20266:39:0;;20299:4;20266:39;;;1543:51:1;20242:21:0;;-1:-1:-1;;;;;20273:6:0;;20266:24;;1516:18:1;;20266:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20344:6;;20242:63;;-1:-1:-1;20316:50:0;;20333:9;;-1:-1:-1;;;;;20344:6:0;20360:4;20316:16;:50::i;:::-;20401:6;;20394:39;;-1:-1:-1;;;20394:39:0;;20427:4;20394:39;;;1543:51:1;20377:14:0;;20394:58;;20438:13;;-1:-1:-1;;;;;20401:6:0;;20394:24;;1516:18:1;;20394:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:58::-;20480:14;;20377:75;;-1:-1:-1;20480:26:0;;20377:75;20480:18;:26::i;:::-;20463:14;:43;20536:16;;:28;;20557:6;20536:20;:28::i;:::-;20517:16;:47;20665:11;;20617:31;;20595:83;;20617:60;;:43;;20653:6;20617:35;:43::i;:60::-;20595:17;;;:21;:83::i;:::-;20575:17;:103;-1:-1:-1;;;20179:507:0:o;16240:401::-;16363:16;;;16377:1;16363:16;;;;;;;;16339:21;;16363:16;;;;;;;;-1:-1:-1;;16400:6:0;;:13;;;-1:-1:-1;;;16400:13:0;;;;16339:40;;-1:-1:-1;;;;;;16400:6:0;;;;:11;;-1:-1:-1;16400:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16390:4;16395:1;16390:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;16390:23:0;;;-1:-1:-1;;;;;16390:23:0;;;;;16442:5;16424:4;16429:1;16424:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16424:24:0;;;:7;;;;;;;;;:24;16459:6;;:174;;-1:-1:-1;;;16459:174:0;;:6;;;:57;;16524:9;;16459:174;;:6;;16565:4;;16592:9;;16617:15;;16459:174;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16328:313;16240:401;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1605:456::-;1682:6;1690;1698;1751:2;1739:9;1730:7;1726:23;1722:32;1719:52;;;1767:1;1764;1757:12;1719:52;1806:9;1793:23;1825:31;1850:5;1825:31;:::i;:::-;1875:5;-1:-1:-1;1932:2:1;1917:18;;1904:32;1945:33;1904:32;1945:33;:::i;:::-;1605:456;;1997:7;;-1:-1:-1;;;2051:2:1;2036:18;;;;2023:32;;1605:456::o;2066:247::-;2125:6;2178:2;2166:9;2157:7;2153:23;2149:32;2146:52;;;2194:1;2191;2184:12;2146:52;2233:9;2220:23;2252:31;2277:5;2252:31;:::i;2318:248::-;2386:6;2394;2447:2;2435:9;2426:7;2422:23;2418:32;2415:52;;;2463:1;2460;2453:12;2415:52;-1:-1:-1;;2486:23:1;;;2556:2;2541:18;;;2528:32;;-1:-1:-1;2318:248:1:o;2760:316::-;2837:6;2845;2853;2906:2;2894:9;2885:7;2881:23;2877:32;2874:52;;;2922:1;2919;2912:12;2874:52;-1:-1:-1;;2945:23:1;;;3015:2;3000:18;;2987:32;;-1:-1:-1;3066:2:1;3051:18;;;3038:32;;2760:316;-1:-1:-1;2760:316:1:o;3081:118::-;3167:5;3160:13;3153:21;3146:5;3143:32;3133:60;;3189:1;3186;3179:12;3204:382;3269:6;3277;3330:2;3318:9;3309:7;3305:23;3301:32;3298:52;;;3346:1;3343;3336:12;3298:52;3385:9;3372:23;3404:31;3429:5;3404:31;:::i;:::-;3454:5;-1:-1:-1;3511:2:1;3496:18;;3483:32;3524:30;3483:32;3524:30;:::i;:::-;3573:7;3563:17;;;3204:382;;;;;:::o;3591:180::-;3650:6;3703:2;3691:9;3682:7;3678:23;3674:32;3671:52;;;3719:1;3716;3709:12;3671:52;-1:-1:-1;3742:23:1;;3591:180;-1:-1:-1;3591:180:1:o;3776:813::-;3871:6;3879;3887;3895;3903;3956:3;3944:9;3935:7;3931:23;3927:33;3924:53;;;3973:1;3970;3963:12;3924:53;4012:9;3999:23;4031:31;4056:5;4031:31;:::i;:::-;4081:5;-1:-1:-1;4138:2:1;4123:18;;4110:32;4151:33;4110:32;4151:33;:::i;:::-;4203:7;-1:-1:-1;4262:2:1;4247:18;;4234:32;4275:33;4234:32;4275:33;:::i;:::-;4327:7;-1:-1:-1;4386:2:1;4371:18;;4358:32;4399:33;4358:32;4399:33;:::i;:::-;4451:7;-1:-1:-1;4510:3:1;4495:19;;4482:33;4524;4482;4524;:::i;:::-;4576:7;4566:17;;;3776:813;;;;;;;;:::o;4918:388::-;4986:6;4994;5047:2;5035:9;5026:7;5022:23;5018:32;5015:52;;;5063:1;5060;5053:12;5015:52;5102:9;5089:23;5121:31;5146:5;5121:31;:::i;:::-;5171:5;-1:-1:-1;5228:2:1;5213:18;;5200:32;5241:33;5200:32;5241:33;:::i;5311:661::-;5433:6;5441;5449;5457;5465;5473;5481;5489;5542:3;5530:9;5521:7;5517:23;5513:33;5510:53;;;5559:1;5556;5549:12;5510:53;-1:-1:-1;;5582:23:1;;;5652:2;5637:18;;5624:32;;-1:-1:-1;5703:2:1;5688:18;;5675:32;;5754:2;5739:18;;5726:32;;-1:-1:-1;5805:3:1;5790:19;;5777:33;;-1:-1:-1;5857:3:1;5842:19;;5829:33;;-1:-1:-1;5909:3:1;5894:19;;5881:33;;-1:-1:-1;5961:3:1;5946:19;5933:33;;-1:-1:-1;5311:661:1;-1:-1:-1;5311:661:1:o;6237:329::-;6439:2;6421:21;;;6478:1;6458:18;;;6451:29;-1:-1:-1;;;6511:2:1;6496:18;;6489:36;6557:2;6542:18;;6237:329::o;7272:245::-;7339:6;7392:2;7380:9;7371:7;7367:23;7363:32;7360:52;;;7408:1;7405;7398:12;7360:52;7440:9;7434:16;7459:28;7481:5;7459:28;:::i;8959:127::-;9020:10;9015:3;9011:20;9008:1;9001:31;9051:4;9048:1;9041:15;9075:4;9072:1;9065:15;9091:128;9158:9;;;9179:11;;;9176:37;;;9193:18;;:::i;9224:168::-;9297:9;;;9328;;9345:15;;;9339:22;;9325:37;9315:71;;9366:18;;:::i;9397:217::-;9437:1;9463;9453:132;;9507:10;9502:3;9498:20;9495:1;9488:31;9542:4;9539:1;9532:15;9570:4;9567:1;9560:15;9453:132;-1:-1:-1;9599:9:1;;9397:217::o;9619:125::-;9684:9;;;9705:10;;;9702:36;;;9718:18;;:::i;12025:127::-;12086:10;12081:3;12077:20;12074:1;12067:31;12117:4;12114:1;12107:15;12141:4;12138:1;12131:15;12157:127;12218:10;12213:3;12209:20;12206:1;12199:31;12249:4;12246:1;12239:15;12273:4;12270:1;12263:15;12421:251;12491:6;12544:2;12532:9;12523:7;12519:23;12515:32;12512:52;;;12560:1;12557;12550:12;12512:52;12592:9;12586:16;12611:31;12636:5;12611:31;:::i;12677:461::-;12730:3;12768:5;12762:12;12795:6;12790:3;12783:19;12821:4;12850:2;12845:3;12841:12;12834:19;;12887:2;12880:5;12876:14;12908:1;12918:195;12932:6;12929:1;12926:13;12918:195;;;12997:13;;-1:-1:-1;;;;;12993:39:1;12981:52;;13053:12;;;;13088:15;;;;13029:1;12947:9;12918:195;;;-1:-1:-1;13129:3:1;;12677:461;-1:-1:-1;;;;;12677:461:1:o;13143:582::-;13442:6;13431:9;13424:25;13485:6;13480:2;13469:9;13465:18;13458:34;13528:3;13523:2;13512:9;13508:18;13501:31;13405:4;13549:57;13601:3;13590:9;13586:19;13578:6;13549:57;:::i;:::-;-1:-1:-1;;;;;13642:32:1;;;;13637:2;13622:18;;13615:60;-1:-1:-1;13706:3:1;13691:19;13684:35;13541:65;13143:582;-1:-1:-1;;;13143:582:1:o;13730:184::-;13800:6;13853:2;13841:9;13832:7;13828:23;13824:32;13821:52;;;13869:1;13866;13859:12;13821:52;-1:-1:-1;13892:16:1;;13730:184;-1:-1:-1;13730:184:1:o;13919:510::-;14190:6;14179:9;14172:25;14233:3;14228:2;14217:9;14213:18;14206:31;14153:4;14254:57;14306:3;14295:9;14291:19;14283:6;14254:57;:::i;:::-;-1:-1:-1;;;;;14347:32:1;;;;14342:2;14327:18;;14320:60;-1:-1:-1;14411:2:1;14396:18;14389:34;14246:65;13919:510;-1:-1:-1;;13919:510:1:o

Swarm Source

ipfs://8b191e4414d9fd709d3da7a05ec1e9700cf31bd70efa331bc8c0c97841083be8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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