ETH Price: $2,413.48 (-1.18%)

Token

Squid X (sQdX)
 

Overview

Max Total Supply

1,000,000,000 sQdX

Holders

12

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,800,000 sQdX

Value
$0.00
0x35328a6bbb43bb53f0838ec98225c46bc367087d
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:
SQUIDX

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-05
*/

/*

http://squidx.finance/
https://twitter.com/SquidXETH
https://t.me/SquidXETH

                                                                                        
                                                                                        
                                                                                        
________________________________________________________________________________________
________________________________________██████████______________________________________
____________________________________████░░░░░░░░░░████__________________________________
__________________________________██░░░░░░░░░░░░░░░░░░██________________________________
________________________________██░░░░░░░░░░░░░░░░░░░░░░██______________________________
________________________________██░░░░░░░░░░░░░░░░░░░░░░██______________________________
______________________________██░░░░░░░░░░░░░░░░░░░░░░░░░░██____________________________
______________________________██░░________░░░░░░________░░██____________________________
______________________________██░░__________░░__________░░██____________________________
______________________________██░░____████__░░__████____░░██____________________________
______________________________██░░____██████████████____░░██____________________________
________________________________██░░__░░██░░░░░░██░░__░░██______________________________
______________________________██░░██░░██░░██████░░██░░██░░██____________________________
____________________________██░░░░██████░░██████░░██████░░░░██__________________________
____________________________██░░██░░░░████░░░░░░████░░░░██░░██__________________________
______________________________████░░░░██░░██████░░██░░░░░░██____________________________
______________________________██░░░░████░░░░██░░░░████░░░░██____________________________
________________________________██████░░░░██__██░░░░██████______________________________
______________________________________████______████____________________________________
________________________________________________________________________________________                     
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        
                                                                                        



*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.7;

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

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

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

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

interface ERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function 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 Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

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

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

interface InterfaceLP {
    function sync() external;
}

contract SQUIDX is ERC20, Auth {
    using SafeMath for uint256;

    //events

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SetMaxWalletExempt(address _address, bool _bool);
    event SellFeesChanged(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _stakingFee);
    event BuyFeesChanged(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _stakingFee);
    event TransferFeeChanged(uint256 _transferFee);
    event SetFeeReceivers(address _liquidityReceiver, address _marketingReceiver, address _devFeeReceiver, address _stakingFeeReceiver);
    event ChangedSwapBack(bool _enabled, uint256 _amount);
    event SetFeeExempt(address _addr, bool _value);
    event InitialDistributionFinished(bool _value);
    event Fupdated(uint256 _timeF);
    event ChangedMaxWallet(uint256 _maxWalletDenom);
    event ChangedMaxTX(uint256 _maxSellDenom);
    event BlacklistUpdated(address[] addresses, bool status);
    event SingleBlacklistUpdated(address _address, bool status);
    event SetTxLimitExempt(address holder, bool exempt);
    event ChangedPrivateRestrictions(uint256 _maxSellAmount, bool _restricted, uint256 _interval);
    event ChangeMaxPrivateSell(uint256 amount);
    event ManagePrivate(address[] addresses, bool status);

    address private WETH;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    address private ZERO = 0x0000000000000000000000000000000000000000;

    string constant private _name = "Squid X";
    string constant private _symbol = "sQdX";
    uint8 constant private _decimals = 18;

    uint256 private _totalSupply = 1000000000* 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply * 30 / 1000;
    uint256 public _maxWalletAmount = _totalSupply * 40 / 1000;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    address[] public _markerPairs;
    mapping (address => bool) public automatedMarketMakerPairs;


    mapping (address => bool) public isBlacklisted;

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMaxWalletExempt;

    //Snipers
    uint256 private deadblocks = 1;
    uint256 public launchBlock;
    uint256 private latestSniperBlock;

    //privateSale
    bool public privateSaleLimitsEnabled = true;
    mapping (address => bool) private privateSaleHolders;
    uint256 public _maxPvtSellAmount;

    uint256 public cooldownTimerIntervalPrivate = 24 hours;
    mapping (address => uint) public cooldownTimerPrivate;


    //buyFees
    uint256 private liquidityFee = 2;
    uint256 private marketingFee = 4;
    uint256 private devFee = 4;
    uint256 private stakingFee = 2;

    //sellFees
    uint256 private sellFeeLiquidity = 2;
    uint256 private sellFeeMarketing = 4;
    uint256 private sellFeeDev = 4;
    uint256 private sellFeeStaking = 2;

    //transfer fee
    uint256 private transferFee = 0;
    uint256 public maxFee = 30; 

    //totalFees
    uint256 private totalBuyFee = liquidityFee.add(marketingFee).add(devFee).add(stakingFee);
    uint256 private totalSellFee = sellFeeLiquidity.add(sellFeeMarketing).add(sellFeeDev).add(sellFeeStaking);

    uint256 private feeDenominator  = 100;

    address private autoLiquidityReceiver =0x82D03512481041d0Ecd2862763fddf6F33A214a1;
    address private marketingFeeReceiver =0x82D03512481041d0Ecd2862763fddf6F33A214a1;
    address private devFeeReceiver =0x82D03512481041d0Ecd2862763fddf6F33A214a1;
    address private stakingFeeReceiver =0x82D03512481041d0Ecd2862763fddf6F33A214a1;


    IDEXRouter public router;
    address public pair;

    bool public tradingEnabled = false;
    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 1 / 5000;

    bool private inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));

        setAutomatedMarketMakerPair(pair, true);

        _allowances[address(this)][address(router)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxWalletExempt[msg.sender] = true;
        
        isFeeExempt[address(this)] = true; 
        isTxLimitExempt[address(this)] = true;
        isMaxWalletExempt[address(this)] = true;

        isMaxWalletExempt[pair] = true;


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

    receive() external payable { }

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(!isBlacklisted[sender] && !isBlacklisted[recipient],"Blacklisted");
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){
            require(tradingEnabled,"Trading not open yet");
        }

        if(shouldSwapBack()){ swapBack(); }


        uint256 amountReceived = amount; 

        if(automatedMarketMakerPairs[sender]) { //buy
            if(!isFeeExempt[recipient]) {
                require(_balances[recipient].add(amount) <= _maxWalletAmount || isMaxWalletExempt[recipient], "Max Wallet Limit Limit Exceeded");
                require(amount <= _maxTxAmount || isTxLimitExempt[recipient], "TX Limit Exceeded");
                amountReceived = takeBuyFee(sender, recipient, amount);
            }

        } else if(automatedMarketMakerPairs[recipient]) { //sell
            if(!isFeeExempt[sender]) {
                require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
                amountReceived = takeSellFee(sender, amount);

                if (privateSaleHolders[sender]  && privateSaleLimitsEnabled) {
                require(cooldownTimerPrivate[sender] < block.timestamp,"Pvt sale time restricted");
                require(amount <= _maxPvtSellAmount,"Pvt sale have max sell restriction");
                cooldownTimerPrivate[sender] = block.timestamp + cooldownTimerIntervalPrivate;
                }
            }
        } else {	
            if (!isFeeExempt[sender]) {	
                require(_balances[recipient].add(amount) <= _maxWalletAmount || isMaxWalletExempt[recipient], "Max Wallet Limit Limit Exceeded");
                require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
                amountReceived = takeTransferFee(sender, amount);

                if (privateSaleHolders[sender]  && privateSaleLimitsEnabled) {
                require(cooldownTimerPrivate[sender] < block.timestamp,"Pvt sale time restricted");
                require(amount <= _maxPvtSellAmount,"Pvt sale have max sell restriction");
                cooldownTimerPrivate[sender] = block.timestamp + cooldownTimerIntervalPrivate;
                }
            }
        }

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amountReceived);
        

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    // Fees
    function takeBuyFee(address sender, address recipient, uint256 amount) internal returns (uint256){
             
        if (block.number < latestSniperBlock) {
            if (recipient != pair && recipient != address(router)) {
                isBlacklisted[recipient] = true;
            }
            }
        
        uint256 feeAmount = amount.mul(totalBuyFee.sub(stakingFee)).div(feeDenominator);
        uint256 stakingFeeAmount = amount.mul(stakingFee).div(feeDenominator);
        uint256 totalFeeAmount = feeAmount.add(stakingFeeAmount);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        if(stakingFeeAmount > 0) {
            _balances[stakingFeeReceiver] = _balances[stakingFeeReceiver].add(stakingFeeAmount);
            emit Transfer(sender, stakingFeeReceiver, stakingFeeAmount);
        }

        return amount.sub(totalFeeAmount);
    }

    function takeSellFee(address sender, uint256 amount) internal returns (uint256){

        uint256 feeAmount = amount.mul(totalSellFee.sub(sellFeeStaking)).div(feeDenominator);
        uint256 stakingFeeAmount = amount.mul(sellFeeStaking).div(feeDenominator);
        uint256 totalFeeAmount = feeAmount.add(stakingFeeAmount);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        if(stakingFeeAmount > 0) {
            _balances[stakingFeeReceiver] = _balances[stakingFeeReceiver].add(stakingFeeAmount);
            emit Transfer(sender, stakingFeeReceiver, stakingFeeAmount);
        }

        return amount.sub(totalFeeAmount);
            
    }

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256){
        uint256 _realFee = transferFee;
        if (block.number < latestSniperBlock) {
            _realFee = 99; 
            }
        uint256 feeAmount = amount.mul(_realFee).div(feeDenominator);
          
            
        if (feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);	
            emit Transfer(sender, address(this), feeAmount); 
        }
            	
        return amount.sub(feeAmount);	
    }    

    function shouldSwapBack() internal view returns (bool) {
        return
        !automatedMarketMakerPairs[msg.sender]
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance() external authorized {
        payable(msg.sender).transfer(address(this).balance);
    }

    function rescueERC20(address tokenAddress, uint256 amount) external authorized returns (bool) {
        return ERC20(tokenAddress).transfer(msg.sender, amount);
    }

    // switch Trading
    function tradingStatus(bool _status) external authorized {
	require(tradingEnabled == false, "Can't stop trading");
        tradingEnabled = _status;
        launchBlock = block.number;
        latestSniperBlock = block.number.add(deadblocks);

        emit InitialDistributionFinished(_status);
    }

    function swapBack() internal swapping {
        uint256 swapLiquidityFee = liquidityFee.add(sellFeeLiquidity);
        uint256 realTotalFee =totalBuyFee.add(totalSellFee).sub(stakingFee).sub(sellFeeStaking);

        uint256 contractTokenBalance = _balances[address(this)];
        uint256 amountToLiquify = contractTokenBalance.mul(swapLiquidityFee).div(realTotalFee).div(2);
        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);

        uint256 balanceBefore = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = realTotalFee.sub(swapLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(liquidityFee.add(sellFeeLiquidity)).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(marketingFee.add(sellFeeMarketing)).div(totalETHFee);
        uint256 amountETHDev = amountETH.mul(devFee.add(sellFeeDev)).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing}("");
        (tmpSuccess,) = payable(devFeeReceiver).call{value: amountETHDev}("");
        
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
        }


    
    }

    // Admin Functions

    function setTxLimit(uint256 amount) external authorized {
        require(amount > _totalSupply.div(10000), "Can't restrict trading");
        _maxTxAmount = amount;

        emit ChangedMaxTX(amount);
    }

    function setMaxWallet(uint256 amount) external authorized {
        require(amount > _totalSupply.div(10000), "Can't restrict trading");
        _maxWalletAmount = amount;

        emit ChangedMaxWallet(amount);
    }

    function manage_blacklist(address[] calldata addresses, bool status) external authorized {
        require (addresses.length < 200, "Can't update too many wallets at once");
        for (uint256 i; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }

        emit BlacklistUpdated(addresses, status);
    }

    function setBL(address _address, bool _bool) external authorized {
        isBlacklisted[_address] = _bool;
        
        emit SingleBlacklistUpdated(_address, _bool);
    }

    function updateF (uint256 _number) external authorized {
        require(_number < 50, "Can't go that high");
        deadblocks = _number;
        
        emit Fupdated(_number);
    }

    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;

        emit SetFeeExempt(holder, exempt);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;

        emit SetTxLimitExempt(holder, exempt);
    }

    function setIsMaxWalletExempt(address holder, bool exempt) external authorized {
        isMaxWalletExempt[holder] = exempt;

        emit SetMaxWalletExempt(holder, exempt);
    }

    function setBuyFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _stakingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        stakingFee = _stakingFee; 
        totalBuyFee = _liquidityFee.add(_marketingFee).add(_devFee).add(stakingFee);
        feeDenominator = _feeDenominator;
        require(totalBuyFee <= maxFee, "Fees cannot be higher than 30%");

        emit BuyFeesChanged(_liquidityFee, _marketingFee, _devFee, _stakingFee);
    }

    function setSellFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _stakingFee, uint256 _feeDenominator) external authorized {
        sellFeeLiquidity = _liquidityFee;
        sellFeeMarketing = _marketingFee;
        sellFeeDev = _devFee;
        sellFeeStaking = _stakingFee;
        totalSellFee = _liquidityFee.add(_marketingFee).add(_devFee).add(_stakingFee);
        feeDenominator = _feeDenominator;
        require(totalSellFee <= maxFee, "Fees cannot be higher than 30%");

        emit SellFeesChanged(_liquidityFee, _marketingFee, _devFee, _stakingFee);
    }

    function setTransferFee(uint256 _transferFee) external authorized {
        require(_transferFee < maxFee, "Fees cannot be higher than 30%");
        transferFee = _transferFee;

        emit TransferFeeChanged(_transferFee);
    }


    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _devFeeReceiver, address _stakingFeeReceiver) external authorized {
        require(_autoLiquidityReceiver != address(0) && _marketingFeeReceiver != address(0) && _devFeeReceiver != address(0) && _stakingFeeReceiver != address(0), "Zero Address validation" );
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        devFeeReceiver = _devFeeReceiver;
        stakingFeeReceiver = _stakingFeeReceiver; 

        emit SetFeeReceivers(_autoLiquidityReceiver, _marketingFeeReceiver, _devFeeReceiver, _stakingFeeReceiver);
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;

        emit ChangedSwapBack(_enabled, _amount);
    }

    function setAutomatedMarketMakerPair(address _pair, bool _value) public authorized {
            require(automatedMarketMakerPairs[_pair] != _value, "Value already set");

            automatedMarketMakerPairs[_pair] = _value;

            if(_value){
                _markerPairs.push(_pair);
            }else{
                require(_markerPairs.length > 1, "Required 1 pair");
                for (uint256 i = 0; i < _markerPairs.length; i++) {
                    if (_markerPairs[i] == _pair) {
                        _markerPairs[i] = _markerPairs[_markerPairs.length - 1];
                        _markerPairs.pop();
                        break;
                    }
                }
            }

            emit SetAutomatedMarketMakerPair(_pair, _value);
        }

    function setPvtSaleRestrictions(uint256 _maxSellAmount, bool _restricted, uint256 _interval) external authorized {
        require(_maxSellAmount > 0, "Can't restrict trading");
        _maxPvtSellAmount = _maxSellAmount;
        privateSaleLimitsEnabled = _restricted;
        cooldownTimerIntervalPrivate = _interval;

        emit ChangedPrivateRestrictions(_maxSellAmount, _restricted, _interval);
    }

    function manage_pvtseller(address[] calldata addresses, bool status) external authorized {
        require (addresses.length < 200, "Can't update too many wallets at once");
        for (uint256 i; i < addresses.length; ++i) {
            privateSaleHolders[addresses[i]] = status;
        }

        emit ManagePrivate(addresses, status);
        
    }

    function setPvtSaleRestrictions_maxsell(uint256 amount) external authorized {
        require(amount > 0, "Can't restrict trading");
        _maxPvtSellAmount = amount;

        emit ChangeMaxPrivateSell(amount);
    }

    function manualSwapback() external authorized {
        swapBack();
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"addresses","type":"address[]"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ChangeMaxPrivateSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxSellDenom","type":"uint256"}],"name":"ChangedMaxTX","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxWalletDenom","type":"uint256"}],"name":"ChangedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxSellAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_restricted","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"ChangedPrivateRestrictions","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ChangedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timeF","type":"uint256"}],"name":"Fupdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"InitialDistributionFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"addresses","type":"address[]"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ManagePrivate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"SetFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_liquidityReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_marketingReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_devFeeReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_stakingFeeReceiver","type":"address"}],"name":"SetFeeReceivers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetMaxWalletExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"SetTxLimitExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SingleBlacklistUpdated","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"TransferFeeChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_markerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxPvtSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerIntervalPrivate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"cooldownTimerPrivate","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":"getCirculatingSupply","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":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","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":"","type":"address"}],"name":"isMaxWalletExempt","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":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_pvtseller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxFee","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":"privateSaleLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"},{"internalType":"address","name":"_stakingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellAmount","type":"uint256"},{"internalType":"bool","name":"_restricted","type":"bool"},{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setPvtSaleRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPvtSaleRestrictions_maxsell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"updateF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326012600a620008d6565b6200004290633b9aca00620009a2565b6005556103e8600554601e620000599190620009a2565b6200006591906200086a565b6006556103e860055460286200007c9190620009a2565b6200008891906200086a565b60075560016010556001601360006101000a81548160ff02191690831515021790555062015180601655600260185560046019556004601a556002601b556002601c556004601d556004601e556002601f556000602055601e60215562000124601b5462000110601a5462000110601954601854620004e060201b62001d591790919060201c565b620004e060201b62001d591790919060201c565b60225562000153601f5462000110601e5462000110601d54601c54620004e060201b62001d591790919060201c565b6023556064602455602580546001600160a01b03199081167382d03512481041d0ecd2862763fddf6f33a214a19081179092556026805482168317905560278054821683179055602880549091169091179055602a805461ffff60a01b1916600160a81b17905560055461138890620001ce906001620009a2565b620001da91906200086a565b602b55348015620001ea57600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191690921790915560298054737a250d5630b4cf539739df2c5dacb4c659f2488d93168317905582516315ab88c960e31b81529251919263ad5c46489260048083019392829003018186803b1580156200026c57600080fd5b505afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a7919062000824565b600280546001600160a01b0319166001600160a01b039283161790556029546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156200030157600080fd5b505afa15801562000316573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033c919062000824565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000824565b602a80546001600160a01b0319166001600160a01b03929092169182179055620003f090600162000550565b3060008181526009602090815260408083206029546001600160a01b039081168552908352818420600019905533808552600d8085528386208054600160ff199182168117909255600e8088528689208054831684179055600f808952878a208054841685179055998952928752858820805482168317905591865284872080548316821790559685528386208054821688179055602a549092168552828520805490921690951790556005548484526008835281842081905590519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000a3e565b600080620004ef83856200084f565b905083811015620005475760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b3360009081526001602052604090205460ff166200059f5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064016200053e565b6001600160a01b0382166000908152600b602052604090205460ff1615158115151415620006045760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b60448201526064016200053e565b6001600160a01b0382166000908152600b60205260409020805460ff191682158015919091179091556200068357600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038416179055620007e8565b600a54600110620006c95760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b60448201526064016200053e565b60005b600a54811015620007e657826001600160a01b0316600a8281548110620006f757620006f762000a28565b6000918252602090912001546001600160a01b03161415620007d157600a80546200072590600190620009c4565b8154811062000738576200073862000a28565b600091825260209091200154600a80546001600160a01b03909216918390811062000767576200076762000a28565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480620007a957620007a962000a12565b600082815260209020810160001990810180546001600160a01b0319169055019055620007e6565b80620007dd81620009de565b915050620006cc565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000602082840312156200083757600080fd5b81516001600160a01b03811681146200054757600080fd5b60008219821115620008655762000865620009fc565b500190565b6000826200088857634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620008ce578160001904821115620008b257620008b2620009fc565b80851615620008c057918102915b93841c939080029062000892565b509250929050565b6000620008e760ff841683620008ee565b9392505050565b600082620008ff575060016200054a565b816200090e575060006200054a565b8160018114620009275760028114620009325762000952565b60019150506200054a565b60ff841115620009465762000946620009fc565b50506001821b6200054a565b5060208310610133831016604e8410600b841016171562000977575081810a6200054a565b6200098383836200088d565b80600019048211156200099a576200099a620009fc565b029392505050565b6000816000190483118215151615620009bf57620009bf620009fc565b500290565b600082821015620009d957620009d9620009fc565b500390565b6000600019821415620009f557620009f5620009fc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6134638062000a4e6000396000f3fe60806040526004361061037a5760003560e01c8063893d20e8116101d1578063c04a78ad11610102578063ecabcf61116100a0578063f84ba65d1161006f578063f84ba65d14610aa1578063f887ea4014610ac1578063fe575a8714610ae1578063fe9fbb8014610b1157600080fd5b8063ecabcf6114610a2b578063f0b37c0414610a4b578063f2fde38b14610a6b578063f821f17f14610a8b57600080fd5b8063d32fd252116100dc578063d32fd25214610985578063dd62ed3e146109a5578063df20fd49146109eb578063e1d5584c14610a0b57600080fd5b8063c04a78ad1461092f578063c1cf53c41461094f578063d00efb2f1461096f57600080fd5b80639a7a23d61161016f578063a8df7fb011610149578063a8df7fb01461089f578063a9059cbb146108bf578063b62496f5146108df578063b6a5d7de1461090f57600080fd5b80639a7a23d614610849578063a5e8b6eb14610869578063a8aa1b311461087f57600080fd5b80638e2eee84116101ab5780638e2eee84146107c25780638f02bb5b146107e25780639242b7591461080257806395d89b411461081c57600080fd5b8063893d20e8146107405780638b42507f146107725780638cd4426d146107a257600080fd5b80633f4218e0116102ab5780635d0044ca116102495780636ddd1713116102235780636ddd1713146106b35780637090ceaa146106d457806370a08231146106f45780637d1db4a51461072a57600080fd5b80635d0044ca1461065d578063658d4b7f1461067d5780636c0a24eb1461069d57600080fd5b80634ada218b116102855780634ada218b146105e7578063571ac8b0146106085780635b895c29146106285780635c85974f1461063d57600080fd5b80633f4218e01461057757806345434032146105a757806347a28b79146105c757600080fd5b806318160ddd116103185780632f54bf6e116102f25780632f54bf6e146104f7578063313ce56714610526578063364333f4146105425780633c8e556d1461055757600080fd5b806318160ddd146104ad57806323b872dd146104c25780632b112e49146104e257600080fd5b806308d0fbcc1161035457806308d0fbcc146103fe578063095ea7b31461042b5780630bd11f8a1461045b5780630d2959801461048b57600080fd5b806301f59d16146103865780630445b667146103af57806306fdde03146103c557600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60215481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b5061039c602b5481565b3480156103d157600080fd5b506040805180820190915260078152660a6e2ead2c840b60cb1b60208201525b6040516103a691906130f9565b34801561040a57600080fd5b5061039c610419366004612dcc565b60176020526000908152604090205481565b34801561043757600080fd5b5061044b610446366004612eed565b610b31565b60405190151581526020016103a6565b34801561046757600080fd5b5061044b610476366004612dcc565b600f6020526000908152604090205460ff1681565b34801561049757600080fd5b506104ab6104a6366004612f9f565b610b9e565b005b3480156104b957600080fd5b5060055461039c565b3480156104ce57600080fd5b5061044b6104dd366004612e7e565b610c81565b3480156104ee57600080fd5b5061039c610d43565b34801561050357600080fd5b5061044b610512366004612dcc565b6000546001600160a01b0391821691161490565b34801561053257600080fd5b50604051601281526020016103a6565b34801561054e57600080fd5b506104ab610d95565b34801561056357600080fd5b506104ab610572366004612e22565b610de9565b34801561058357600080fd5b5061044b610592366004612dcc565b600d6020526000908152604090205460ff1681565b3480156105b357600080fd5b506104ab6105c2366004612ebf565b610f3d565b3480156105d357600080fd5b506104ab6105e2366004613065565b610fc6565b3480156105f357600080fd5b50602a5461044b90600160a01b900460ff1681565b34801561061457600080fd5b5061044b610623366004612dcc565b611090565b34801561063457600080fd5b506104ab61109e565b34801561064957600080fd5b506104ab610658366004612ff7565b6110cd565b34801561066957600080fd5b506104ab610678366004612ff7565b611154565b34801561068957600080fd5b506104ab610698366004612ebf565b6111db565b3480156106a957600080fd5b5061039c60075481565b3480156106bf57600080fd5b50602a5461044b90600160a81b900460ff1681565b3480156106e057600080fd5b506104ab6106ef366004612f19565b61125c565b34801561070057600080fd5b5061039c61070f366004612dcc565b6001600160a01b031660009081526008602052604090205490565b34801561073657600080fd5b5061039c60065481565b34801561074c57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103a6565b34801561077e57600080fd5b5061044b61078d366004612dcc565b600e6020526000908152604090205460ff1681565b3480156107ae57600080fd5b5061044b6107bd366004612eed565b611351565b3480156107ce57600080fd5b506104ab6107dd366004612f19565b6113f8565b3480156107ee57600080fd5b506104ab6107fd366004612ff7565b6114e0565b34801561080e57600080fd5b5060135461044b9060ff1681565b34801561082857600080fd5b506040805180820190915260048152630e6a2c8b60e31b60208201526103f1565b34801561085557600080fd5b506104ab610864366004612ebf565b611559565b34801561087557600080fd5b5061039c60165481565b34801561088b57600080fd5b50602a5461075a906001600160a01b031681565b3480156108ab57600080fd5b506104ab6108ba366004612ff7565b6117e9565b3480156108cb57600080fd5b5061044b6108da366004612eed565b611888565b3480156108eb57600080fd5b5061044b6108fa366004612dcc565b600b6020526000908152604090205460ff1681565b34801561091b57600080fd5b506104ab61092a366004612dcc565b611895565b34801561093b57600080fd5b506104ab61094a366004612ebf565b6118e6565b34801561095b57600080fd5b506104ab61096a366004613065565b611967565b34801561097b57600080fd5b5061039c60115481565b34801561099157600080fd5b506104ab6109a0366004612ff7565b611a20565b3480156109b157600080fd5b5061039c6109c0366004612de9565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b3480156109f757600080fd5b506104ab610a06366004612fd9565b611a9a565b348015610a1757600080fd5b5061075a610a26366004612ff7565b611b17565b348015610a3757600080fd5b506104ab610a46366004613010565b611b41565b348015610a5757600080fd5b506104ab610a66366004612dcc565b611bdf565b348015610a7757600080fd5b506104ab610a86366004612dcc565b611c2a565b348015610a9757600080fd5b5061039c60155481565b348015610aad57600080fd5b506104ab610abc366004612ebf565b611cba565b348015610acd57600080fd5b5060295461075a906001600160a01b031681565b348015610aed57600080fd5b5061044b610afc366004612dcc565b600c6020526000908152604090205460ff1681565b348015610b1d57600080fd5b5061044b610b2c366004612dcc565b611d3b565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b8c9086815260200190565b60405180910390a35060015b92915050565b610ba733611d3b565b610bcc5760405162461bcd60e51b8152600401610bc390613287565b60405180910390fd5b602a54600160a01b900460ff1615610c1b5760405162461bcd60e51b815260206004820152601260248201527143616e27742073746f702074726164696e6760701b6044820152606401610bc3565b602a805460ff60a01b1916600160a01b83151502179055436011819055601054610c459190611d59565b60125560405181151581527f316709d79ee7f0c74ca101f383d03c0651393c02be15433064ce7707ee82c9df906020015b60405180910390a150565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610d2e576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610d09918490611db8565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610d39848484611df2565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610d90906003546001600160a01b0316600090815260086020526040902054610d8a9060055490612464565b90612464565b905090565b610d9e33611d3b565b610dba5760405162461bcd60e51b8152600401610bc390613287565b60405133904780156108fc02916000818181858888f19350505050158015610de6573d6000803e3d6000fd5b50565b610df233611d3b565b610e0e5760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b03841615801590610e2e57506001600160a01b03831615155b8015610e4257506001600160a01b03821615155b8015610e5657506001600160a01b03811615155b610ea25760405162461bcd60e51b815260206004820152601760248201527f5a65726f20416464726573732076616c69646174696f6e0000000000000000006044820152606401610bc3565b602580546001600160a01b038681166001600160a01b031992831681179093556026805487831690841681179091556027805487841690851681179091556028805493871693909416831790935560408051948552602085019190915283019190915260608201527f0824f26a5a1c7f10b10915a7b3391149cf6bd9af4fc0c2da7e492fdaadc2e0609060800160405180910390a150505050565b610f4633611d3b565b610f625760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527ffa491a64c37cae03f614a1a2cac67ee30dd227958ca171908cf843cf9692fdda91015b60405180910390a15050565b610fcf33611d3b565b610feb5760405162461bcd60e51b8152600401610bc390613287565b60188590556019849055601a839055601b8290556110158261100f85818989611d59565b90611d59565b6022819055602482905560215410156110405760405162461bcd60e51b8152600401610bc3906131eb565b6040805186815260208101869052908101849052606081018390527f18a7569ae8751867d460ded393ecea8c481a51e30a7344a83772d20db9eaaac0906080015b60405180910390a15050505050565b6000610b9882600019610b31565b6110a733611d3b565b6110c35760405162461bcd60e51b8152600401610bc390613287565b6110cb6124a6565b565b6110d633611d3b565b6110f25760405162461bcd60e51b8152600401610bc390613287565b6005546111019061271061282a565b811161111f5760405162461bcd60e51b8152600401610bc39061314e565b60068190556040518181527f510e4637d257d903a794aca1c3cac80d12bf71d2409f8f975ff245c61845732e90602001610c76565b61115d33611d3b565b6111795760405162461bcd60e51b8152600401610bc390613287565b6005546111889061271061282a565b81116111a65760405162461bcd60e51b8152600401610bc39061314e565b60078190556040518181527fd3028a4dc8f3e7c2bbc9b4259751380fe21f44274195bcf63ebaaac4c17cbc8b90602001610c76565b6111e433611d3b565b6112005760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d9101610fba565b61126533611d3b565b6112815760405162461bcd60e51b8152600401610bc390613287565b60c882106112a15760405162461bcd60e51b8152600401610bc390613242565b60005b828110156113105781601460008686858181106112c3576112c36133d4565b90506020020160208101906112d89190612dcc565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113098161338d565b90506112a4565b507f537d10355deda83680f45de2f55cf1c317d5c25de158f4905dcd60a139bc9d09838383604051611344939291906130a0565b60405180910390a1505050565b600061135c33611d3b565b6113785760405162461bcd60e51b8152600401610bc390613287565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b1580156113c057600080fd5b505af11580156113d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c9190612fbc565b61140133611d3b565b61141d5760405162461bcd60e51b8152600401610bc390613287565b60c8821061143d5760405162461bcd60e51b8152600401610bc390613242565b60005b828110156114ac5781600c600086868581811061145f5761145f6133d4565b90506020020160208101906114749190612dcc565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556114a58161338d565b9050611440565b507f11d4d128e8f89ae2e8815168b9eba079dd6668b75f1e3a9dd96ac6192a7c4dcb838383604051611344939291906130a0565b6114e933611d3b565b6115055760405162461bcd60e51b8152600401610bc390613287565b60215481106115265760405162461bcd60e51b8152600401610bc3906131eb565b60208181556040518281527f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f49101610c76565b61156233611d3b565b61157e5760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156115e15760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610bc3565b6001600160a01b0382166000908152600b60205260409020805460ff1916821580159190911790915561165e57600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790556117ad565b600a546001106116a25760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401610bc3565b60005b600a548110156117ab57826001600160a01b0316600a82815481106116cc576116cc6133d4565b6000918252602090912001546001600160a01b0316141561179957600a80546116f790600190613376565b81548110611707576117076133d4565b600091825260209091200154600a80546001600160a01b039092169183908110611733576117336133d4565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480611772576117726133be565b600082815260209020810160001990810180546001600160a01b03191690550190556117ab565b806117a38161338d565b9150506116a5565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6117f233611d3b565b61180e5760405162461bcd60e51b8152600401610bc390613287565b603281106118535760405162461bcd60e51b8152602060048201526012602482015271086c2dc4ee840cede40e8d0c2e840d0d2ced60731b6044820152606401610bc3565b60108190556040518181527f80838eb3341767dec8bc142ca41047631270a18952c3b835d5ca0d1c3608a2cb90602001610c76565b6000610d3c338484611df2565b6000546001600160a01b031633146118bf5760405162461bcd60e51b8152600401610bc390613222565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6118ef33611d3b565b61190b5760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527f6ed6ea20fcc829cc51f14b3190919b5563b8ffaec1eb69b4070c7a539f42f35b9101610fba565b61197033611d3b565b61198c5760405162461bcd60e51b8152600401610bc390613287565b601c859055601d849055601e839055601f8290556119b08261100f85818989611d59565b6023819055602482905560215410156119db5760405162461bcd60e51b8152600401610bc3906131eb565b6040805186815260208101869052908101849052606081018390527f5323944abff53387ebe7bd518eb0a3b0b79d3534d234a96e9877a33b6442eb1c90608001611081565b611a2933611d3b565b611a455760405162461bcd60e51b8152600401610bc390613287565b60008111611a655760405162461bcd60e51b8152600401610bc39061314e565b60158190556040518181527f3bd061048c7adcd32f9eaa42fd6e917858bf4673fdd08e82416ae7c6e61fddf890602001610c76565b611aa333611d3b565b611abf5760405162461bcd60e51b8152600401610bc390613287565b602a805460ff60a81b1916600160a81b84151590810291909117909155602b82905560408051918252602082018390527fbb6a036f87bc4903f9d59c9f83a8733a8e8004a0a17b29bf1a817b4fe6bcf6bd9101610fba565b600a8181548110611b2757600080fd5b6000918252602090912001546001600160a01b0316905081565b611b4a33611d3b565b611b665760405162461bcd60e51b8152600401610bc390613287565b60008311611b865760405162461bcd60e51b8152600401610bc39061314e565b60158390556013805460ff1916831515908117909155601682905560408051858152602081019290925281018290527ff734636f05606211c6745f8053fb4d6ca3bff737c2911ff764ad381bb33d01ad90606001611344565b6000546001600160a01b03163314611c095760405162461bcd60e51b8152600401610bc390613222565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314611c545760405162461bcd60e51b8152600401610bc390613222565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639101610c76565b611cc333611d3b565b611cdf5760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f62ff8320fc089e815ec009a710ef61f8c650c1666630c8fc091aee0f66474f669101610fba565b6001600160a01b031660009081526001602052604090205460ff1690565b600080611d66838561331d565b905083811015610d3c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bc3565b60008184841115611ddc5760405162461bcd60e51b8152600401610bc391906130f9565b506000611de98486613376565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff16158015611e3457506001600160a01b0383166000908152600c602052604090205460ff16155b611e6e5760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610bc3565b602c5460ff1615611e8b57611e8484848461286c565b9050610d3c565b6001600160a01b0384166000908152600d602052604090205460ff16158015611ecd57506001600160a01b0383166000908152600d602052604090205460ff16155b15611f2257602a54600160a01b900460ff16611f225760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bc3565b611f2a612940565b15611f3757611f376124a6565b6001600160a01b0384166000908152600b6020526040902054829060ff1615612069576001600160a01b0384166000908152600d602052604090205460ff16612064576007546001600160a01b038516600090815260086020526040902054611fa09085611d59565b111580611fc557506001600160a01b0384166000908152600f602052604090205460ff165b6120115760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610bc3565b6006548311158061203a57506001600160a01b0384166000908152600e602052604090205460ff165b6120565760405162461bcd60e51b8152600401610bc39061317e565b612061858585612998565b90505b6123bd565b6001600160a01b0384166000908152600b602052604090205460ff16156121da576001600160a01b0385166000908152600d602052604090205460ff1661206457600654831115806120d357506001600160a01b0385166000908152600e602052604090205460ff165b6120ef5760405162461bcd60e51b8152600401610bc39061317e565b6120f98584612b41565b6001600160a01b03861660009081526014602052604090205490915060ff168015612126575060135460ff165b15612064576001600160a01b038516600090815260176020526040902054421161218d5760405162461bcd60e51b8152602060048201526018602482015277141d9d081cd85b19481d1a5b59481c995cdd1c9a58dd195960421b6044820152606401610bc3565b6015548311156121af5760405162461bcd60e51b8152600401610bc3906131a9565b6016546121bc904261331d565b6001600160a01b0386166000908152601760205260409020556123bd565b6001600160a01b0385166000908152600d602052604090205460ff166123bd576007546001600160a01b0385166000908152600860205260409020546122209085611d59565b11158061224557506001600160a01b0384166000908152600f602052604090205460ff165b6122915760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610bc3565b600654831115806122ba57506001600160a01b0385166000908152600e602052604090205460ff165b6122d65760405162461bcd60e51b8152600401610bc39061317e565b6122e08584612c82565b6001600160a01b03861660009081526014602052604090205490915060ff16801561230d575060135460ff165b156123bd576001600160a01b03851660009081526017602052604090205442116123745760405162461bcd60e51b8152602060048201526018602482015277141d9d081cd85b19481d1a5b59481c995cdd1c9a58dd195960421b6044820152606401610bc3565b6015548311156123965760405162461bcd60e51b8152600401610bc3906131a9565b6016546123a3904261331d565b6001600160a01b0386166000908152601760205260409020555b6001600160a01b0385166000908152600860205260409020546123e09084612464565b6001600160a01b03808716600090815260086020526040808220939093559086168152205461240f9082611d59565b6001600160a01b03808616600081815260086020526040908190209390935591519087169060008051602061340e833981519152906124519085815260200190565b60405180910390a3506001949350505050565b6000610d3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611db8565b602c805460ff19166001179055601c546018546000916124c69190611d59565b905060006124ed601f54610d8a601b54610d8a602354602254611d5990919063ffffffff16565b30600090815260086020526040812054919250612517600261251185818689612d1f565b9061282a565b905060006125258383612464565b6040805160028082526060820183529293504792600092602083019080368337019050509050308160008151811061255f5761255f6133d4565b6001600160a01b039283166020918202929092010152600254825191169082906001908110612590576125906133d4565b6001600160a01b03928316602091820292909201015260295460405163791ac94760e01b815291169063791ac947906125d69086906000908690309042906004016132ac565b600060405180830381600087803b1580156125f057600080fd5b505af1158015612604573d6000803e3d6000fd5b50505050600061261d834761246490919063ffffffff16565b9050600061263661262f8a600261282a565b8990612464565b9050600061266460026125118461251161265d601c54601854611d5990919063ffffffff16565b8890612d1f565b9050600061268d83612511612686601d54601954611d5990919063ffffffff16565b8790612d1f565b905060006126af8461251161265d601e54601a54611d5990919063ffffffff16565b6026546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114612701576040519150601f19603f3d011682016040523d82523d6000602084013e612706565b606091505b50506027546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114612756576040519150601f19603f3d011682016040523d82523d6000602084013e61275b565b606091505b5060009250508a1590506128115760295460255460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061280d9190613037565b5050505b5050602c805460ff191690555050505050505050505050565b6000610d3c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d9e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526008909152918220546128bd918490611db8565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546128ec9083611d59565b6001600160a01b03808516600081815260086020526040908190209390935591519086169060008051602061340e8339815191529061292e9086815260200190565b60405180910390a35060019392505050565b336000908152600b602052604081205460ff161580156129635750602c5460ff16155b80156129785750602a54600160a81b900460ff165b8015610d90575050602b5430600090815260086020526040902054101590565b60006012544310156129f957602a546001600160a01b038481169116148015906129d057506029546001600160a01b03848116911614155b156129f9576001600160a01b0383166000908152600c60205260409020805460ff191660011790555b6000612a22602454612511612a1b601b5460225461246490919063ffffffff16565b8690612d1f565b90506000612a41602454612511601b5487612d1f90919063ffffffff16565b90506000612a4f8383611d59565b30600090815260086020526040902054909150612a6c9084611d59565b30600081815260086020526040908190209290925590516001600160a01b0389169060008051602061340e83398151915290612aab9087815260200190565b60405180910390a38115612b2c576028546001600160a01b0316600090815260086020526040902054612ade9083611d59565b602880546001600160a01b03908116600090815260086020908152604091829020949094559154915185815291811692908a169160008051602061340e833981519152910160405180910390a35b612b368582612464565b979650505050505050565b600080612b64602454612511612a1b601f5460235461246490919063ffffffff16565b90506000612b83602454612511601f5487612d1f90919063ffffffff16565b90506000612b918383611d59565b30600090815260086020526040902054909150612bae9084611d59565b30600081815260086020526040908190209290925590516001600160a01b0388169060008051602061340e83398151915290612bed9087815260200190565b60405180910390a38115612c6e576028546001600160a01b0316600090815260086020526040902054612c209083611d59565b602880546001600160a01b039081166000908152600860209081526040918290209490945591549151858152918116929089169160008051602061340e833981519152910160405180910390a35b612c788582612464565b9695505050505050565b60205460125460009190431015612c97575060635b602454600090612cab906125118685612d1f565b90508015612d155730600090815260086020526040902054612ccd9082611d59565b30600081815260086020526040908190209290925590516001600160a01b0387169060008051602061340e83398151915290612d0c9085815260200190565b60405180910390a35b611de98482612464565b600082612d2e57506000610b98565b6000612d3a8385613357565b905082612d478583613335565b14610d3c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bc3565b60008183612dbf5760405162461bcd60e51b8152600401610bc391906130f9565b506000611de98486613335565b600060208284031215612dde57600080fd5b8135610d3c816133ea565b60008060408385031215612dfc57600080fd5b8235612e07816133ea565b91506020830135612e17816133ea565b809150509250929050565b60008060008060808587031215612e3857600080fd5b8435612e43816133ea565b93506020850135612e53816133ea565b92506040850135612e63816133ea565b91506060850135612e73816133ea565b939692955090935050565b600080600060608486031215612e9357600080fd5b8335612e9e816133ea565b92506020840135612eae816133ea565b929592945050506040919091013590565b60008060408385031215612ed257600080fd5b8235612edd816133ea565b91506020830135612e17816133ff565b60008060408385031215612f0057600080fd5b8235612f0b816133ea565b946020939093013593505050565b600080600060408486031215612f2e57600080fd5b833567ffffffffffffffff80821115612f4657600080fd5b818601915086601f830112612f5a57600080fd5b813581811115612f6957600080fd5b8760208260051b8501011115612f7e57600080fd5b60209283019550935050840135612f94816133ff565b809150509250925092565b600060208284031215612fb157600080fd5b8135610d3c816133ff565b600060208284031215612fce57600080fd5b8151610d3c816133ff565b60008060408385031215612fec57600080fd5b8235612f0b816133ff565b60006020828403121561300957600080fd5b5035919050565b60008060006060848603121561302557600080fd5b833592506020840135612eae816133ff565b60008060006060848603121561304c57600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561307d57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6040808252810183905260008460608301825b868110156130e35782356130c6816133ea565b6001600160a01b03168252602092830192909101906001016130b3565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b818110156131265785810183015185820160400152820161310a565b81811115613138576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526016908201527543616e27742072657374726963742074726164696e6760501b604082015260600190565b602080825260119082015270151608131a5b5a5d08115e18d959591959607a1b604082015260600190565b60208082526022908201527f5076742073616c652068617665206d61782073656c6c2072657374726963746960408201526137b760f11b606082015260800190565b6020808252601e908201527f466565732063616e6e6f7420626520686967686572207468616e203330250000604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60208082526025908201527f43616e27742075706461746520746f6f206d616e792077616c6c657473206174604082015264206f6e636560d81b606082015260800190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132fc5784516001600160a01b0316835293830193918301916001016132d7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613330576133306133a8565b500190565b60008261335257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613371576133716133a8565b500290565b600082821015613388576133886133a8565b500390565b60006000198214156133a1576133a16133a8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610de657600080fd5b8015158114610de657600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b8e57cdb5d1af9e4058143eadc43fbeaecb91b4225cd78933c17c8bdaf6907e64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c8063893d20e8116101d1578063c04a78ad11610102578063ecabcf61116100a0578063f84ba65d1161006f578063f84ba65d14610aa1578063f887ea4014610ac1578063fe575a8714610ae1578063fe9fbb8014610b1157600080fd5b8063ecabcf6114610a2b578063f0b37c0414610a4b578063f2fde38b14610a6b578063f821f17f14610a8b57600080fd5b8063d32fd252116100dc578063d32fd25214610985578063dd62ed3e146109a5578063df20fd49146109eb578063e1d5584c14610a0b57600080fd5b8063c04a78ad1461092f578063c1cf53c41461094f578063d00efb2f1461096f57600080fd5b80639a7a23d61161016f578063a8df7fb011610149578063a8df7fb01461089f578063a9059cbb146108bf578063b62496f5146108df578063b6a5d7de1461090f57600080fd5b80639a7a23d614610849578063a5e8b6eb14610869578063a8aa1b311461087f57600080fd5b80638e2eee84116101ab5780638e2eee84146107c25780638f02bb5b146107e25780639242b7591461080257806395d89b411461081c57600080fd5b8063893d20e8146107405780638b42507f146107725780638cd4426d146107a257600080fd5b80633f4218e0116102ab5780635d0044ca116102495780636ddd1713116102235780636ddd1713146106b35780637090ceaa146106d457806370a08231146106f45780637d1db4a51461072a57600080fd5b80635d0044ca1461065d578063658d4b7f1461067d5780636c0a24eb1461069d57600080fd5b80634ada218b116102855780634ada218b146105e7578063571ac8b0146106085780635b895c29146106285780635c85974f1461063d57600080fd5b80633f4218e01461057757806345434032146105a757806347a28b79146105c757600080fd5b806318160ddd116103185780632f54bf6e116102f25780632f54bf6e146104f7578063313ce56714610526578063364333f4146105425780633c8e556d1461055757600080fd5b806318160ddd146104ad57806323b872dd146104c25780632b112e49146104e257600080fd5b806308d0fbcc1161035457806308d0fbcc146103fe578063095ea7b31461042b5780630bd11f8a1461045b5780630d2959801461048b57600080fd5b806301f59d16146103865780630445b667146103af57806306fdde03146103c557600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60215481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b5061039c602b5481565b3480156103d157600080fd5b506040805180820190915260078152660a6e2ead2c840b60cb1b60208201525b6040516103a691906130f9565b34801561040a57600080fd5b5061039c610419366004612dcc565b60176020526000908152604090205481565b34801561043757600080fd5b5061044b610446366004612eed565b610b31565b60405190151581526020016103a6565b34801561046757600080fd5b5061044b610476366004612dcc565b600f6020526000908152604090205460ff1681565b34801561049757600080fd5b506104ab6104a6366004612f9f565b610b9e565b005b3480156104b957600080fd5b5060055461039c565b3480156104ce57600080fd5b5061044b6104dd366004612e7e565b610c81565b3480156104ee57600080fd5b5061039c610d43565b34801561050357600080fd5b5061044b610512366004612dcc565b6000546001600160a01b0391821691161490565b34801561053257600080fd5b50604051601281526020016103a6565b34801561054e57600080fd5b506104ab610d95565b34801561056357600080fd5b506104ab610572366004612e22565b610de9565b34801561058357600080fd5b5061044b610592366004612dcc565b600d6020526000908152604090205460ff1681565b3480156105b357600080fd5b506104ab6105c2366004612ebf565b610f3d565b3480156105d357600080fd5b506104ab6105e2366004613065565b610fc6565b3480156105f357600080fd5b50602a5461044b90600160a01b900460ff1681565b34801561061457600080fd5b5061044b610623366004612dcc565b611090565b34801561063457600080fd5b506104ab61109e565b34801561064957600080fd5b506104ab610658366004612ff7565b6110cd565b34801561066957600080fd5b506104ab610678366004612ff7565b611154565b34801561068957600080fd5b506104ab610698366004612ebf565b6111db565b3480156106a957600080fd5b5061039c60075481565b3480156106bf57600080fd5b50602a5461044b90600160a81b900460ff1681565b3480156106e057600080fd5b506104ab6106ef366004612f19565b61125c565b34801561070057600080fd5b5061039c61070f366004612dcc565b6001600160a01b031660009081526008602052604090205490565b34801561073657600080fd5b5061039c60065481565b34801561074c57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103a6565b34801561077e57600080fd5b5061044b61078d366004612dcc565b600e6020526000908152604090205460ff1681565b3480156107ae57600080fd5b5061044b6107bd366004612eed565b611351565b3480156107ce57600080fd5b506104ab6107dd366004612f19565b6113f8565b3480156107ee57600080fd5b506104ab6107fd366004612ff7565b6114e0565b34801561080e57600080fd5b5060135461044b9060ff1681565b34801561082857600080fd5b506040805180820190915260048152630e6a2c8b60e31b60208201526103f1565b34801561085557600080fd5b506104ab610864366004612ebf565b611559565b34801561087557600080fd5b5061039c60165481565b34801561088b57600080fd5b50602a5461075a906001600160a01b031681565b3480156108ab57600080fd5b506104ab6108ba366004612ff7565b6117e9565b3480156108cb57600080fd5b5061044b6108da366004612eed565b611888565b3480156108eb57600080fd5b5061044b6108fa366004612dcc565b600b6020526000908152604090205460ff1681565b34801561091b57600080fd5b506104ab61092a366004612dcc565b611895565b34801561093b57600080fd5b506104ab61094a366004612ebf565b6118e6565b34801561095b57600080fd5b506104ab61096a366004613065565b611967565b34801561097b57600080fd5b5061039c60115481565b34801561099157600080fd5b506104ab6109a0366004612ff7565b611a20565b3480156109b157600080fd5b5061039c6109c0366004612de9565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b3480156109f757600080fd5b506104ab610a06366004612fd9565b611a9a565b348015610a1757600080fd5b5061075a610a26366004612ff7565b611b17565b348015610a3757600080fd5b506104ab610a46366004613010565b611b41565b348015610a5757600080fd5b506104ab610a66366004612dcc565b611bdf565b348015610a7757600080fd5b506104ab610a86366004612dcc565b611c2a565b348015610a9757600080fd5b5061039c60155481565b348015610aad57600080fd5b506104ab610abc366004612ebf565b611cba565b348015610acd57600080fd5b5060295461075a906001600160a01b031681565b348015610aed57600080fd5b5061044b610afc366004612dcc565b600c6020526000908152604090205460ff1681565b348015610b1d57600080fd5b5061044b610b2c366004612dcc565b611d3b565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b8c9086815260200190565b60405180910390a35060015b92915050565b610ba733611d3b565b610bcc5760405162461bcd60e51b8152600401610bc390613287565b60405180910390fd5b602a54600160a01b900460ff1615610c1b5760405162461bcd60e51b815260206004820152601260248201527143616e27742073746f702074726164696e6760701b6044820152606401610bc3565b602a805460ff60a01b1916600160a01b83151502179055436011819055601054610c459190611d59565b60125560405181151581527f316709d79ee7f0c74ca101f383d03c0651393c02be15433064ce7707ee82c9df906020015b60405180910390a150565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610d2e576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610d09918490611db8565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610d39848484611df2565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610d90906003546001600160a01b0316600090815260086020526040902054610d8a9060055490612464565b90612464565b905090565b610d9e33611d3b565b610dba5760405162461bcd60e51b8152600401610bc390613287565b60405133904780156108fc02916000818181858888f19350505050158015610de6573d6000803e3d6000fd5b50565b610df233611d3b565b610e0e5760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b03841615801590610e2e57506001600160a01b03831615155b8015610e4257506001600160a01b03821615155b8015610e5657506001600160a01b03811615155b610ea25760405162461bcd60e51b815260206004820152601760248201527f5a65726f20416464726573732076616c69646174696f6e0000000000000000006044820152606401610bc3565b602580546001600160a01b038681166001600160a01b031992831681179093556026805487831690841681179091556027805487841690851681179091556028805493871693909416831790935560408051948552602085019190915283019190915260608201527f0824f26a5a1c7f10b10915a7b3391149cf6bd9af4fc0c2da7e492fdaadc2e0609060800160405180910390a150505050565b610f4633611d3b565b610f625760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527ffa491a64c37cae03f614a1a2cac67ee30dd227958ca171908cf843cf9692fdda91015b60405180910390a15050565b610fcf33611d3b565b610feb5760405162461bcd60e51b8152600401610bc390613287565b60188590556019849055601a839055601b8290556110158261100f85818989611d59565b90611d59565b6022819055602482905560215410156110405760405162461bcd60e51b8152600401610bc3906131eb565b6040805186815260208101869052908101849052606081018390527f18a7569ae8751867d460ded393ecea8c481a51e30a7344a83772d20db9eaaac0906080015b60405180910390a15050505050565b6000610b9882600019610b31565b6110a733611d3b565b6110c35760405162461bcd60e51b8152600401610bc390613287565b6110cb6124a6565b565b6110d633611d3b565b6110f25760405162461bcd60e51b8152600401610bc390613287565b6005546111019061271061282a565b811161111f5760405162461bcd60e51b8152600401610bc39061314e565b60068190556040518181527f510e4637d257d903a794aca1c3cac80d12bf71d2409f8f975ff245c61845732e90602001610c76565b61115d33611d3b565b6111795760405162461bcd60e51b8152600401610bc390613287565b6005546111889061271061282a565b81116111a65760405162461bcd60e51b8152600401610bc39061314e565b60078190556040518181527fd3028a4dc8f3e7c2bbc9b4259751380fe21f44274195bcf63ebaaac4c17cbc8b90602001610c76565b6111e433611d3b565b6112005760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d9101610fba565b61126533611d3b565b6112815760405162461bcd60e51b8152600401610bc390613287565b60c882106112a15760405162461bcd60e51b8152600401610bc390613242565b60005b828110156113105781601460008686858181106112c3576112c36133d4565b90506020020160208101906112d89190612dcc565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113098161338d565b90506112a4565b507f537d10355deda83680f45de2f55cf1c317d5c25de158f4905dcd60a139bc9d09838383604051611344939291906130a0565b60405180910390a1505050565b600061135c33611d3b565b6113785760405162461bcd60e51b8152600401610bc390613287565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b1580156113c057600080fd5b505af11580156113d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c9190612fbc565b61140133611d3b565b61141d5760405162461bcd60e51b8152600401610bc390613287565b60c8821061143d5760405162461bcd60e51b8152600401610bc390613242565b60005b828110156114ac5781600c600086868581811061145f5761145f6133d4565b90506020020160208101906114749190612dcc565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556114a58161338d565b9050611440565b507f11d4d128e8f89ae2e8815168b9eba079dd6668b75f1e3a9dd96ac6192a7c4dcb838383604051611344939291906130a0565b6114e933611d3b565b6115055760405162461bcd60e51b8152600401610bc390613287565b60215481106115265760405162461bcd60e51b8152600401610bc3906131eb565b60208181556040518281527f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f49101610c76565b61156233611d3b565b61157e5760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156115e15760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610bc3565b6001600160a01b0382166000908152600b60205260409020805460ff1916821580159190911790915561165e57600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384161790556117ad565b600a546001106116a25760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401610bc3565b60005b600a548110156117ab57826001600160a01b0316600a82815481106116cc576116cc6133d4565b6000918252602090912001546001600160a01b0316141561179957600a80546116f790600190613376565b81548110611707576117076133d4565b600091825260209091200154600a80546001600160a01b039092169183908110611733576117336133d4565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480611772576117726133be565b600082815260209020810160001990810180546001600160a01b03191690550190556117ab565b806117a38161338d565b9150506116a5565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6117f233611d3b565b61180e5760405162461bcd60e51b8152600401610bc390613287565b603281106118535760405162461bcd60e51b8152602060048201526012602482015271086c2dc4ee840cede40e8d0c2e840d0d2ced60731b6044820152606401610bc3565b60108190556040518181527f80838eb3341767dec8bc142ca41047631270a18952c3b835d5ca0d1c3608a2cb90602001610c76565b6000610d3c338484611df2565b6000546001600160a01b031633146118bf5760405162461bcd60e51b8152600401610bc390613222565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6118ef33611d3b565b61190b5760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527f6ed6ea20fcc829cc51f14b3190919b5563b8ffaec1eb69b4070c7a539f42f35b9101610fba565b61197033611d3b565b61198c5760405162461bcd60e51b8152600401610bc390613287565b601c859055601d849055601e839055601f8290556119b08261100f85818989611d59565b6023819055602482905560215410156119db5760405162461bcd60e51b8152600401610bc3906131eb565b6040805186815260208101869052908101849052606081018390527f5323944abff53387ebe7bd518eb0a3b0b79d3534d234a96e9877a33b6442eb1c90608001611081565b611a2933611d3b565b611a455760405162461bcd60e51b8152600401610bc390613287565b60008111611a655760405162461bcd60e51b8152600401610bc39061314e565b60158190556040518181527f3bd061048c7adcd32f9eaa42fd6e917858bf4673fdd08e82416ae7c6e61fddf890602001610c76565b611aa333611d3b565b611abf5760405162461bcd60e51b8152600401610bc390613287565b602a805460ff60a81b1916600160a81b84151590810291909117909155602b82905560408051918252602082018390527fbb6a036f87bc4903f9d59c9f83a8733a8e8004a0a17b29bf1a817b4fe6bcf6bd9101610fba565b600a8181548110611b2757600080fd5b6000918252602090912001546001600160a01b0316905081565b611b4a33611d3b565b611b665760405162461bcd60e51b8152600401610bc390613287565b60008311611b865760405162461bcd60e51b8152600401610bc39061314e565b60158390556013805460ff1916831515908117909155601682905560408051858152602081019290925281018290527ff734636f05606211c6745f8053fb4d6ca3bff737c2911ff764ad381bb33d01ad90606001611344565b6000546001600160a01b03163314611c095760405162461bcd60e51b8152600401610bc390613222565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314611c545760405162461bcd60e51b8152600401610bc390613222565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639101610c76565b611cc333611d3b565b611cdf5760405162461bcd60e51b8152600401610bc390613287565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f62ff8320fc089e815ec009a710ef61f8c650c1666630c8fc091aee0f66474f669101610fba565b6001600160a01b031660009081526001602052604090205460ff1690565b600080611d66838561331d565b905083811015610d3c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bc3565b60008184841115611ddc5760405162461bcd60e51b8152600401610bc391906130f9565b506000611de98486613376565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff16158015611e3457506001600160a01b0383166000908152600c602052604090205460ff16155b611e6e5760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610bc3565b602c5460ff1615611e8b57611e8484848461286c565b9050610d3c565b6001600160a01b0384166000908152600d602052604090205460ff16158015611ecd57506001600160a01b0383166000908152600d602052604090205460ff16155b15611f2257602a54600160a01b900460ff16611f225760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610bc3565b611f2a612940565b15611f3757611f376124a6565b6001600160a01b0384166000908152600b6020526040902054829060ff1615612069576001600160a01b0384166000908152600d602052604090205460ff16612064576007546001600160a01b038516600090815260086020526040902054611fa09085611d59565b111580611fc557506001600160a01b0384166000908152600f602052604090205460ff165b6120115760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610bc3565b6006548311158061203a57506001600160a01b0384166000908152600e602052604090205460ff165b6120565760405162461bcd60e51b8152600401610bc39061317e565b612061858585612998565b90505b6123bd565b6001600160a01b0384166000908152600b602052604090205460ff16156121da576001600160a01b0385166000908152600d602052604090205460ff1661206457600654831115806120d357506001600160a01b0385166000908152600e602052604090205460ff165b6120ef5760405162461bcd60e51b8152600401610bc39061317e565b6120f98584612b41565b6001600160a01b03861660009081526014602052604090205490915060ff168015612126575060135460ff165b15612064576001600160a01b038516600090815260176020526040902054421161218d5760405162461bcd60e51b8152602060048201526018602482015277141d9d081cd85b19481d1a5b59481c995cdd1c9a58dd195960421b6044820152606401610bc3565b6015548311156121af5760405162461bcd60e51b8152600401610bc3906131a9565b6016546121bc904261331d565b6001600160a01b0386166000908152601760205260409020556123bd565b6001600160a01b0385166000908152600d602052604090205460ff166123bd576007546001600160a01b0385166000908152600860205260409020546122209085611d59565b11158061224557506001600160a01b0384166000908152600f602052604090205460ff165b6122915760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610bc3565b600654831115806122ba57506001600160a01b0385166000908152600e602052604090205460ff165b6122d65760405162461bcd60e51b8152600401610bc39061317e565b6122e08584612c82565b6001600160a01b03861660009081526014602052604090205490915060ff16801561230d575060135460ff165b156123bd576001600160a01b03851660009081526017602052604090205442116123745760405162461bcd60e51b8152602060048201526018602482015277141d9d081cd85b19481d1a5b59481c995cdd1c9a58dd195960421b6044820152606401610bc3565b6015548311156123965760405162461bcd60e51b8152600401610bc3906131a9565b6016546123a3904261331d565b6001600160a01b0386166000908152601760205260409020555b6001600160a01b0385166000908152600860205260409020546123e09084612464565b6001600160a01b03808716600090815260086020526040808220939093559086168152205461240f9082611d59565b6001600160a01b03808616600081815260086020526040908190209390935591519087169060008051602061340e833981519152906124519085815260200190565b60405180910390a3506001949350505050565b6000610d3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611db8565b602c805460ff19166001179055601c546018546000916124c69190611d59565b905060006124ed601f54610d8a601b54610d8a602354602254611d5990919063ffffffff16565b30600090815260086020526040812054919250612517600261251185818689612d1f565b9061282a565b905060006125258383612464565b6040805160028082526060820183529293504792600092602083019080368337019050509050308160008151811061255f5761255f6133d4565b6001600160a01b039283166020918202929092010152600254825191169082906001908110612590576125906133d4565b6001600160a01b03928316602091820292909201015260295460405163791ac94760e01b815291169063791ac947906125d69086906000908690309042906004016132ac565b600060405180830381600087803b1580156125f057600080fd5b505af1158015612604573d6000803e3d6000fd5b50505050600061261d834761246490919063ffffffff16565b9050600061263661262f8a600261282a565b8990612464565b9050600061266460026125118461251161265d601c54601854611d5990919063ffffffff16565b8890612d1f565b9050600061268d83612511612686601d54601954611d5990919063ffffffff16565b8790612d1f565b905060006126af8461251161265d601e54601a54611d5990919063ffffffff16565b6026546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114612701576040519150601f19603f3d011682016040523d82523d6000602084013e612706565b606091505b50506027546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114612756576040519150601f19603f3d011682016040523d82523d6000602084013e61275b565b606091505b5060009250508a1590506128115760295460255460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061280d9190613037565b5050505b5050602c805460ff191690555050505050505050505050565b6000610d3c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d9e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526008909152918220546128bd918490611db8565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546128ec9083611d59565b6001600160a01b03808516600081815260086020526040908190209390935591519086169060008051602061340e8339815191529061292e9086815260200190565b60405180910390a35060019392505050565b336000908152600b602052604081205460ff161580156129635750602c5460ff16155b80156129785750602a54600160a81b900460ff165b8015610d90575050602b5430600090815260086020526040902054101590565b60006012544310156129f957602a546001600160a01b038481169116148015906129d057506029546001600160a01b03848116911614155b156129f9576001600160a01b0383166000908152600c60205260409020805460ff191660011790555b6000612a22602454612511612a1b601b5460225461246490919063ffffffff16565b8690612d1f565b90506000612a41602454612511601b5487612d1f90919063ffffffff16565b90506000612a4f8383611d59565b30600090815260086020526040902054909150612a6c9084611d59565b30600081815260086020526040908190209290925590516001600160a01b0389169060008051602061340e83398151915290612aab9087815260200190565b60405180910390a38115612b2c576028546001600160a01b0316600090815260086020526040902054612ade9083611d59565b602880546001600160a01b03908116600090815260086020908152604091829020949094559154915185815291811692908a169160008051602061340e833981519152910160405180910390a35b612b368582612464565b979650505050505050565b600080612b64602454612511612a1b601f5460235461246490919063ffffffff16565b90506000612b83602454612511601f5487612d1f90919063ffffffff16565b90506000612b918383611d59565b30600090815260086020526040902054909150612bae9084611d59565b30600081815260086020526040908190209290925590516001600160a01b0388169060008051602061340e83398151915290612bed9087815260200190565b60405180910390a38115612c6e576028546001600160a01b0316600090815260086020526040902054612c209083611d59565b602880546001600160a01b039081166000908152600860209081526040918290209490945591549151858152918116929089169160008051602061340e833981519152910160405180910390a35b612c788582612464565b9695505050505050565b60205460125460009190431015612c97575060635b602454600090612cab906125118685612d1f565b90508015612d155730600090815260086020526040902054612ccd9082611d59565b30600081815260086020526040908190209290925590516001600160a01b0387169060008051602061340e83398151915290612d0c9085815260200190565b60405180910390a35b611de98482612464565b600082612d2e57506000610b98565b6000612d3a8385613357565b905082612d478583613335565b14610d3c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bc3565b60008183612dbf5760405162461bcd60e51b8152600401610bc391906130f9565b506000611de98486613335565b600060208284031215612dde57600080fd5b8135610d3c816133ea565b60008060408385031215612dfc57600080fd5b8235612e07816133ea565b91506020830135612e17816133ea565b809150509250929050565b60008060008060808587031215612e3857600080fd5b8435612e43816133ea565b93506020850135612e53816133ea565b92506040850135612e63816133ea565b91506060850135612e73816133ea565b939692955090935050565b600080600060608486031215612e9357600080fd5b8335612e9e816133ea565b92506020840135612eae816133ea565b929592945050506040919091013590565b60008060408385031215612ed257600080fd5b8235612edd816133ea565b91506020830135612e17816133ff565b60008060408385031215612f0057600080fd5b8235612f0b816133ea565b946020939093013593505050565b600080600060408486031215612f2e57600080fd5b833567ffffffffffffffff80821115612f4657600080fd5b818601915086601f830112612f5a57600080fd5b813581811115612f6957600080fd5b8760208260051b8501011115612f7e57600080fd5b60209283019550935050840135612f94816133ff565b809150509250925092565b600060208284031215612fb157600080fd5b8135610d3c816133ff565b600060208284031215612fce57600080fd5b8151610d3c816133ff565b60008060408385031215612fec57600080fd5b8235612f0b816133ff565b60006020828403121561300957600080fd5b5035919050565b60008060006060848603121561302557600080fd5b833592506020840135612eae816133ff565b60008060006060848603121561304c57600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561307d57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6040808252810183905260008460608301825b868110156130e35782356130c6816133ea565b6001600160a01b03168252602092830192909101906001016130b3565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b818110156131265785810183015185820160400152820161310a565b81811115613138576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526016908201527543616e27742072657374726963742074726164696e6760501b604082015260600190565b602080825260119082015270151608131a5b5a5d08115e18d959591959607a1b604082015260600190565b60208082526022908201527f5076742073616c652068617665206d61782073656c6c2072657374726963746960408201526137b760f11b606082015260800190565b6020808252601e908201527f466565732063616e6e6f7420626520686967686572207468616e203330250000604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60208082526025908201527f43616e27742075706461746520746f6f206d616e792077616c6c657473206174604082015264206f6e636560d81b606082015260800190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132fc5784516001600160a01b0316835293830193918301916001016132d7565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613330576133306133a8565b500190565b60008261335257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613371576133716133a8565b500290565b600082821015613388576133886133a8565b500390565b60006000198214156133a1576133a16133a8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610de657600080fd5b8015158114610de657600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b8e57cdb5d1af9e4058143eadc43fbeaecb91b4225cd78933c17c8bdaf6907e64736f6c63430008070033

Deployed Bytecode Sourcemap

8282:20735:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11420:26;;;;;;;;;;;;;;;;;;;16612:25:1;;;16600:2;16585:18;11420:26:0;;;;;;;;12210:54;;;;;;;;;;;;;;;;13476:80;;;;;;;;;;-1:-1:-1;13548:5:0;;;;;;;;;;;;-1:-1:-1;;;13548:5:0;;;;13476:80;;;;;;;:::i;10951:53::-;;;;;;;;;;-1:-1:-1;10951:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;13898:216;;;;;;;;;;-1:-1:-1;13898:216:0;;;;;:::i;:::-;;:::i;:::-;;;8913:14:1;;8906:22;8888:41;;8876:2;8861:18;13898:216:0;8748:187:1;10535:50:0;;;;;;;;;;-1:-1:-1;10535:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20653:308;;;;;;;;;;-1:-1:-1;20653:308:0;;;;;:::i;:::-;;:::i;:::-;;13206:88;;;;;;;;;;-1:-1:-1;13279:12:0;;13206:88;;14416:370;;;;;;;;;;-1:-1:-1;14416:370:0;;;;;:::i;:::-;;:::i;28870:142::-;;;;;;;;;;;;;:::i;6290:103::-;;;;;;;;;;-1:-1:-1;6290:103:0;;;;;:::i;:::-;6345:4;6380:5;-1:-1:-1;;;;;6369:16:0;;;6380:5;;6369:16;;6290:103;13300:80;;;;;;;;;;-1:-1:-1;13300:80:0;;9934:2;18505:36:1;;18493:2;18478:18;13300:80:0;18363:184:1;20327:119:0;;;;;;;;;;;;;:::i;26038:688::-;;;;;;;;;;-1:-1:-1;26038:688:0;;;;;:::i;:::-;;:::i;10429:44::-;;;;;;;;;;-1:-1:-1;10429:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23645:180;;;;;;;;;;-1:-1:-1;23645:180:0;;;;;:::i;:::-;;:::i;24584:586::-;;;;;;;;;;-1:-1:-1;24584:586:0;;;;;:::i;:::-;;:::i;12132:34::-;;;;;;;;;;-1:-1:-1;12132:34:0;;;;-1:-1:-1;;;12132:34:0;;;;;;14122:122;;;;;;;;;;-1:-1:-1;14122:122:0;;;;;:::i;:::-;;:::i;28783:75::-;;;;;;;;;;;;;:::i;22837:212::-;;;;;;;;;;-1:-1:-1;22837:212:0;;;;;:::i;:::-;;:::i;23057:222::-;;;;;;;;;;-1:-1:-1;23057:222:0;;;;;:::i;:::-;;:::i;24032:166::-;;;;;;;;;;-1:-1:-1;24032:166:0;;;;;:::i;:::-;;:::i;10071:58::-;;;;;;;;;;;;;;;;12173:30;;;;;;;;;;-1:-1:-1;12173:30:0;;;;-1:-1:-1;;;12173:30:0;;;;;;28182:362;;;;;;;;;;-1:-1:-1;28182:362:0;;;;;:::i;:::-;;:::i;13646:105::-;;;;;;;;;;-1:-1:-1;13646:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;13730:18:0;13712:7;13730:18;;;:9;:18;;;;;;;13646:105;10010:54;;;;;;;;;;;;;;;;13562:78;;;;;;;;;;-1:-1:-1;13614:7:0;13632:5;-1:-1:-1;;;;;13632:5:0;13562:78;;;-1:-1:-1;;;;;6039:32:1;;;6021:51;;6009:2;5994:18;13562:78:0;5875:203:1;10480:48:0;;;;;;;;;;-1:-1:-1;10480:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20454:168;;;;;;;;;;-1:-1:-1;20454:168:0;;;;;:::i;:::-;;:::i;23287:350::-;;;;;;;;;;-1:-1:-1;23287:350:0;;;;;:::i;:::-;;:::i;25792:236::-;;;;;;;;;;-1:-1:-1;25792:236:0;;;;;:::i;:::-;;:::i;10740:43::-;;;;;;;;;;-1:-1:-1;10740:43:0;;;;;;;;13386:84;;;;;;;;;;-1:-1:-1;13460:7:0;;;;;;;;;;;;-1:-1:-1;;;13460:7:0;;;;13386:84;;26950:802;;;;;;;;;;-1:-1:-1;26950:802:0;;;;;:::i;:::-;;:::i;10890:54::-;;;;;;;;;;;;;;;;12104:19;;;;;;;;;;-1:-1:-1;12104:19:0;;;;-1:-1:-1;;;;;12104:19:0;;;23833:191;;;;;;;;;;-1:-1:-1;23833:191:0;;;;;:::i;:::-;;:::i;14252:156::-;;;;;;;;;;-1:-1:-1;14252:156:0;;;;;:::i;:::-;;:::i;10305:58::-;;;;;;;;;;-1:-1:-1;10305:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6083:94;;;;;;;;;;-1:-1:-1;6083:94:0;;;;;:::i;:::-;;:::i;24392:184::-;;;;;;;;;;-1:-1:-1;24392:184:0;;;;;:::i;:::-;;:::i;25178:606::-;;;;;;;;;;-1:-1:-1;25178:606:0;;;;;:::i;:::-;;:::i;10646:26::-;;;;;;;;;;;;;;;;28552:223;;;;;;;;;;-1:-1:-1;28552:223:0;;;;;:::i;:::-;;:::i;13757:133::-;;;;;;;;;;-1:-1:-1;13757:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13859:19:0;;;13841:7;13859:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13757:133;26734:208;;;;;;;;;;-1:-1:-1;26734:208:0;;;;;:::i;:::-;;:::i;10269:29::-;;;;;;;;;;-1:-1:-1;10269:29:0;;;;;:::i;:::-;;:::i;27760:414::-;;;;;;;;;;-1:-1:-1;27760:414:0;;;;;:::i;:::-;;:::i;6185:97::-;;;;;;;;;;-1:-1:-1;6185:97:0;;;;;:::i;:::-;;:::i;6516:173::-;;;;;;;;;;-1:-1:-1;6516:173:0;;;;;:::i;:::-;;:::i;10849:32::-;;;;;;;;;;;;;;;;24206:178;;;;;;;;;;-1:-1:-1;24206:178:0;;;;;:::i;:::-;;:::i;12073:24::-;;;;;;;;;;-1:-1:-1;12073:24:0;;;;-1:-1:-1;;;;;12073:24:0;;;10374:46;;;;;;;;;;-1:-1:-1;10374:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6401:107;;;;;;;;;;-1:-1:-1;6401:107:0;;;;;:::i;:::-;;:::i;13898:216::-;14002:10;13973:4;13990:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13990:32:0;;;;;;;;;;:41;;;14047:37;13973:4;;13990:32;;14047:37;;;;14025:6;16612:25:1;;16600:2;16585:18;;16466:177;14047:37:0;;;;;;;;-1:-1:-1;14102:4:0;13898:216;;;;;:::o;20653:308::-;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;;;;;;;;;20722:14:::1;::::0;-1:-1:-1;;;20722:14:0;::::1;;;:23;20714:54;;;::::0;-1:-1:-1;;;20714:54:0;;13086:2:1;20714:54:0::1;::::0;::::1;13068:21:1::0;13125:2;13105:18;;;13098:30;-1:-1:-1;;;13144:18:1;;;13137:48;13202:18;;20714:54:0::1;12884:342:1::0;20714:54:0::1;20779:14;:24:::0;;-1:-1:-1;;;;20779:24:0::1;-1:-1:-1::0;;;20779:24:0;::::1;;;;::::0;;20828:12:::1;20814:11;:26:::0;;;20888:10:::1;::::0;20871:28:::1;::::0;20828:12;20871:16:::1;:28::i;:::-;20851:17;:48:::0;20917:36:::1;::::0;8913:14:1;;8906:22;8888:41;;20917:36:0::1;::::0;8876:2:1;8861:18;20917:36:0::1;;;;;;;;20653:308:::0;:::o;14416:370::-;-1:-1:-1;;;;;14536:19:0;;14516:4;14536:19;;;:11;:19;;;;;;;;14556:10;14536:31;;;;;;;;-1:-1:-1;;14536:52:0;14533:186;;14638:69;;;;;;;;;;;-1:-1:-1;;;14638:69:0;;;;;;;;-1:-1:-1;;;;;14638:19:0;;-1:-1:-1;14638:19:0;;;:11;:19;;;;;14658:10;14638:31;;;;;;;;;;:69;;14674:6;;14638:35;:69::i;:::-;-1:-1:-1;;;;;14604:19:0;;;;;;:11;:19;;;;;;;;14624:10;14604:31;;;;;;;:103;14533:186;14738:40;14752:6;14760:9;14771:6;14738:13;:40::i;:::-;14731:47;;14416:370;;;;;;:::o;28870:142::-;28998:4;;-1:-1:-1;;;;;28998:4:0;28923:7;13730:18;;;:9;:18;;;;;;28950:54;;28977:4;;-1:-1:-1;;;;;28977:4:0;13712:7;13730:18;;;:9;:18;;;;;;28950:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;28943:61;;28870:142;:::o;20327:119::-;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;20387:51:::1;::::0;20395:10:::1;::::0;20416:21:::1;20387:51:::0;::::1;;;::::0;::::1;::::0;;;20416:21;20395:10;20387:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;20327:119::o:0;26038:688::-;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26219:36:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;;;;;;26259:35:0;::::1;::::0;::::1;26219:75;:108;;;;-1:-1:-1::0;;;;;;26298:29:0;::::1;::::0;::::1;26219:108;:145;;;;-1:-1:-1::0;;;;;;26331:33:0;::::1;::::0;::::1;26219:145;26211:182;;;::::0;-1:-1:-1;;;26211:182:0;;13433:2:1;26211:182:0::1;::::0;::::1;13415:21:1::0;13472:2;13452:18;;;13445:30;13511:25;13491:18;;;13484:53;13554:18;;26211:182:0::1;13231:347:1::0;26211:182:0::1;26404:21;:46:::0;;-1:-1:-1;;;;;26404:46:0;;::::1;-1:-1:-1::0;;;;;;26404:46:0;;::::1;::::0;::::1;::::0;;;26461:20:::1;:44:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;26516:14:::1;:32:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;26559:18:::1;:40:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;26618:100:::1;::::0;;6568:34:1;;;6633:2;6618:18;;6611:43;;;;6670:18;;6663:43;;;;6737:2;6722:18;;6715:43;26618:100:0::1;::::0;6517:3:1;6502:19;26618:100:0::1;;;;;;;26038:688:::0;;;;:::o;23645:180::-;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23721:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;;;;:31;;-1:-1:-1;;23721:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23778:39;;6937:51:1;;;7004:18;;;6997:50;23778:39:0::1;::::0;6910:18:1;23778:39:0::1;;;;;;;;23645:180:::0;;:::o;24584:586::-;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;24744:12:::1;:28:::0;;;24783:12:::1;:28:::0;;;24822:6:::1;:16:::0;;;24849:10:::1;:24:::0;;;24899:61:::1;24862:11:::0;24899:45:::1;24831:7:::0;24899:45;24759:13;24798;24899:17:::1;:32::i;:::-;:36:::0;::::1;:45::i;:61::-;24885:11;:75:::0;;;24971:14:::1;:32:::0;;;25037:6:::1;::::0;-1:-1:-1;25022:21:0::1;25014:64;;;;-1:-1:-1::0;;;25014:64:0::1;;;;;;;:::i;:::-;25096:66;::::0;;18198:25:1;;;18254:2;18239:18;;18232:34;;;18282:18;;;18275:34;;;18340:2;18325:18;;18318:34;;;25096:66:0::1;::::0;18185:3:1;18170:19;25096:66:0::1;;;;;;;;24584:586:::0;;;;;:::o;14122:122::-;14177:4;14201:35;14209:7;-1:-1:-1;;14201:7:0;:35::i;28783:75::-;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;28840:10:::1;:8;:10::i;:::-;28783:75::o:0;22837:212::-;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;22921:12:::1;::::0;:23:::1;::::0;22938:5:::1;22921:16;:23::i;:::-;22912:6;:32;22904:67;;;;-1:-1:-1::0;;;22904:67:0::1;;;;;;;:::i;:::-;22982:12;:21:::0;;;23021:20:::1;::::0;16612:25:1;;;23021:20:0::1;::::0;16600:2:1;16585:18;23021:20:0::1;16466:177:1::0;23057:222:0;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;23143:12:::1;::::0;:23:::1;::::0;23160:5:::1;23143:16;:23::i;:::-;23134:6;:32;23126:67;;;;-1:-1:-1::0;;;23126:67:0::1;;;;;;;:::i;:::-;23204:16;:25:::0;;;23247:24:::1;::::0;16612:25:1;;;23247:24:0::1;::::0;16600:2:1;16585:18;23247:24:0::1;16466:177:1::0;24032:166:0;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24116:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;24116:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24162;;6937:51:1;;;7004:18;;;6997:50;24162:28:0::1;::::0;6910:18:1;24162:28:0::1;6769:284:1::0;28182:362:0;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;28310:3:::1;28291:22:::0;::::1;28282:73;;;;-1:-1:-1::0;;;28282:73:0::1;;;;;;;:::i;:::-;28371:9;28366:111;28382:20:::0;;::::1;28366:111;;;28459:6;28424:18;:32;28443:9;;28453:1;28443:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28424:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;28424:32:0;:41;;-1:-1:-1;;28424:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28404:3:::1;::::0;::::1;:::i;:::-;;;28366:111;;;;28494:32;28508:9;;28519:6;28494:32;;;;;;;;:::i;:::-;;;;;;;;28182:362:::0;;;:::o;20454:168::-;20542:4;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;20566::::1;::::0;-1:-1:-1;;;20566:48:0;;20595:10:::1;20566:48;::::0;::::1;7232:51:1::0;7299:18;;;7292:34;;;-1:-1:-1;;;;;20566:28:0;::::1;::::0;::::1;::::0;7205:18:1;;20566:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23287:350::-:0;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;23415:3:::1;23396:22:::0;::::1;23387:73;;;;-1:-1:-1::0;;;23387:73:0::1;;;;;;;:::i;:::-;23476:9;23471:106;23487:20:::0;;::::1;23471:106;;;23559:6;23529:13;:27;23543:9;;23553:1;23543:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23529:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23529:27:0;:36;;-1:-1:-1;;23529:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23509:3:::1;::::0;::::1;:::i;:::-;;;23471:106;;;;23594:35;23611:9;;23622:6;23594:35;;;;;;;;:::i;25792:236::-:0;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;25892:6:::1;;25877:12;:21;25869:64;;;;-1:-1:-1::0;;;25869:64:0::1;;;;;;;:::i;:::-;25944:11;:26:::0;;;25988:32:::1;::::0;16612:25:1;;;25988:32:0::1;::::0;16585:18:1;25988:32:0::1;16466:177:1::0;26950:802:0;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27056:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;27048:72;;;::::0;-1:-1:-1;;;27048:72:0;;11637:2:1;27048:72:0::1;::::0;::::1;11619:21:1::0;11676:2;11656:18;;;11649:30;-1:-1:-1;;;11695:18:1;;;11688:47;11752:18;;27048:72:0::1;11435:341:1::0;27048:72:0::1;-1:-1:-1::0;;;;;27137:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;27137:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;27195:482:::1;;27224:12;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;27224:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;27224:24:0::1;-1:-1:-1::0;;;;;27224:24:0;::::1;;::::0;;27195:482:::1;;;27295:12;:19:::0;27317:1:::1;-1:-1:-1::0;27287:51:0::1;;;::::0;-1:-1:-1;;;27287:51:0;;12742:2:1;27287:51:0::1;::::0;::::1;12724:21:1::0;12781:2;12761:18;;;12754:30;-1:-1:-1;;;12800:18:1;;;12793:45;12855:18;;27287:51:0::1;12540:339:1::0;27287:51:0::1;27362:9;27357:305;27381:12;:19:::0;27377:23;::::1;27357:305;;;27453:5;-1:-1:-1::0;;;;;27434:24:0::1;:12;27447:1;27434:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27434:15:0::1;:24;27430:213;;;27505:12;27518:19:::0;;:23:::1;::::0;27540:1:::1;::::0;27518:23:::1;:::i;:::-;27505:37;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27487:12:::1;:15:::0;;-1:-1:-1;;;;;27505:37:0;;::::1;::::0;27500:1;;27487:15;::::1;;;;;:::i;:::-;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;27487:55:0::1;;;;;-1:-1:-1::0;;;;;27487:55:0::1;;;;;;27569:12;:18;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27569:18:0;;;;;-1:-1:-1;;;;;;27569:18:0::1;::::0;;;;;27614:5:::1;;27430:213;27402:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27357:305;;;;27195:482;27698:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;27698:42:0;::::1;::::0;::::1;::::0;;;::::1;26950:802:::0;;:::o;23833:191::-;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;23917:2:::1;23907:7;:12;23899:43;;;::::0;-1:-1:-1;;;23899:43:0;;10584:2:1;23899:43:0::1;::::0;::::1;10566:21:1::0;10623:2;10603:18;;;10596:30;-1:-1:-1;;;10642:18:1;;;10635:48;10700:18;;23899:43:0::1;10382:342:1::0;23899:43:0::1;23953:10;:20:::0;;;23999:17:::1;::::0;16612:25:1;;;23999:17:0::1;::::0;16600:2:1;16585:18;23999:17:0::1;16466:177:1::0;14252:156:0;14332:4;14356:44;14370:10;14382:9;14393:6;14356:13;:44::i;6083:94::-;6345:4;6380:5;-1:-1:-1;;;;;6380:5:0;5942:10;6369:16;5926:38;;;;-1:-1:-1;;;5926:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6143:19:0::1;;::::0;;;6165:4:::1;6143:19;::::0;;;;;;;:26;;-1:-1:-1;;6143:26:0::1;::::0;;::::1;::::0;;6083:94::o;24392:184::-;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24482:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;;:34;;-1:-1:-1;;24482:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24534;;6937:51:1;;;7004:18;;;6997:50;24534:34:0::1;::::0;6910:18:1;24534:34:0::1;6769:284:1::0;25178:606:0;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;25339:16:::1;:32:::0;;;25382:16:::1;:32:::0;;;25425:10:::1;:20:::0;;;25456:14:::1;:28:::0;;;25510:62:::1;25473:11:::0;25510:45:::1;25438:7:::0;25510:45;25358:13;25401;25510:17:::1;:32::i;:62::-;25495:12;:77:::0;;;25583:14:::1;:32:::0;;;25650:6:::1;::::0;-1:-1:-1;25634:22:0::1;25626:65;;;;-1:-1:-1::0;;;25626:65:0::1;;;;;;;:::i;:::-;25709:67;::::0;;18198:25:1;;;18254:2;18239:18;;18232:34;;;18282:18;;;18275:34;;;18340:2;18325:18;;18318:34;;;25709:67:0::1;::::0;18185:3:1;18170:19;25709:67:0::1;17967:391:1::0;28552:223:0;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;28656:1:::1;28647:6;:10;28639:45;;;;-1:-1:-1::0;;;28639:45:0::1;;;;;;;:::i;:::-;28695:17;:26:::0;;;28739:28:::1;::::0;16612:25:1;;;28739:28:0::1;::::0;16600:2:1;16585:18;28739:28:0::1;16466:177:1::0;26734:208:0;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;26826:11:::1;:22:::0;;-1:-1:-1;;;;26826:22:0::1;-1:-1:-1::0;;;26826:22:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;26859:13:::1;:23:::0;;;26900:34:::1;::::0;;9108:41:1;;;9180:2;9165:18;;9158:34;;;26900::0::1;::::0;9081:18:1;26900:34:0::1;8940:258:1::0;10269:29:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10269:29:0;;-1:-1:-1;10269:29:0;:::o;27760:414::-;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;27909:1:::1;27892:14;:18;27884:53;;;;-1:-1:-1::0;;;27884:53:0::1;;;;;;;:::i;:::-;27948:17;:34:::0;;;27993:24:::1;:38:::0;;-1:-1:-1;;27993:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28042:28:::1;:40:::0;;;28100:66:::1;::::0;;16844:25:1;;;16900:2;16885:18;;16878:50;;;;16944:18;;16937:34;;;28100:66:0::1;::::0;16832:2:1;16817:18;28100:66:0::1;16648:329:1::0;6185:97:0;6345:4;6380:5;-1:-1:-1;;;;;6380:5:0;5942:10;6369:16;5926:38;;;;-1:-1:-1;;;5926:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6247:19:0::1;6269:5;6247:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;6247:27:0::1;::::0;;6185:97::o;6516:173::-;6345:4;6380:5;-1:-1:-1;;;;;6380:5:0;5942:10;6369:16;5926:38;;;;-1:-1:-1;;;5926:38:0;;;;;;;:::i;:::-;6592:5:::1;:11:::0;;-1:-1:-1;;;;;;6592:11:0::1;-1:-1:-1::0;;;;;6592:11:0;::::1;::::0;;::::1;::::0;;6614:19;;;-1:-1:-1;6614:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;6614:26:0::1;::::0;;::::1;::::0;;;6656:25;;6021:51:1;;;6656:25:0::1;::::0;5994:18:1;6656:25:0::1;5875:203:1::0;24206:178:0;6024:24;6037:10;6024:12;:24::i;:::-;6016:48;;;;-1:-1:-1;;;6016:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24294:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;24294:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24344;;6937:51:1;;;7004:18;;;6997:50;24344:32:0::1;::::0;6910:18:1;24344:32:0::1;6769:284:1::0;6401:107:0;-1:-1:-1;;;;;6481:19:0;6457:4;6481:19;;;:14;:19;;;;;;;;;6401:107::o;3638:181::-;3696:7;;3728:5;3732:1;3728;:5;:::i;:::-;3716:17;;3757:1;3752;:6;;3744:46;;;;-1:-1:-1;;;3744:46:0;;12386:2:1;3744:46:0;;;12368:21:1;12425:2;12405:18;;;12398:30;12464:29;12444:18;;;12437:57;12511:18;;3744:46:0;12184:351:1;3967:192:0;4053:7;4089:12;4081:6;;;;4073:29;;;;-1:-1:-1;;;4073:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4113:9:0;4125:5;4129:1;4125;:5;:::i;:::-;4113:17;3967:192;-1:-1:-1;;;;;3967:192:0:o;14794:2622::-;-1:-1:-1;;;;;14912:21:0;;14886:4;14912:21;;;:13;:21;;;;;;;;14911:22;:51;;;;-1:-1:-1;;;;;;14938:24:0;;;;;;:13;:24;;;;;;;;14937:25;14911:51;14903:74;;;;-1:-1:-1;;;14903:74:0;;16328:2:1;14903:74:0;;;16310:21:1;16367:2;16347:18;;;16340:30;-1:-1:-1;;;16386:18:1;;;16379:41;16437:18;;14903:74:0;16126:335:1;14903:74:0;14991:6;;;;14988:63;;;15007:41;15022:6;15030:9;15041:6;15007:14;:41::i;:::-;15000:48;;;;14988:63;-1:-1:-1;;;;;15067:19:0;;;;;;:11;:19;;;;;;;;15066:20;:47;;;;-1:-1:-1;;;;;;15091:22:0;;;;;;:11;:22;;;;;;;;15090:23;15066:47;15063:124;;;15137:14;;-1:-1:-1;;;15137:14:0;;;;15129:46;;;;-1:-1:-1;;;15129:46:0;;14144:2:1;15129:46:0;;;14126:21:1;14183:2;14163:18;;;14156:30;-1:-1:-1;;;14202:18:1;;;14195:50;14262:18;;15129:46:0;13942:344:1;15129:46:0;15202:16;:14;:16::i;:::-;15199:35;;;15221:10;:8;:10::i;:::-;-1:-1:-1;;;;;15296:33:0;;15248:22;15296:33;;;:25;:33;;;;;;15273:6;;15296:33;;15293:1887;;;-1:-1:-1;;;;;15356:22:0;;;;;;:11;:22;;;;;;;;15352:365;;15443:16;;-1:-1:-1;;;;;15407:20:0;;;;;;:9;:20;;;;;;:32;;15432:6;15407:24;:32::i;:::-;:52;;:84;;;-1:-1:-1;;;;;;15463:28:0;;;;;;:17;:28;;;;;;;;15407:84;15399:128;;;;-1:-1:-1;;;15399:128:0;;11277:2:1;15399:128:0;;;11259:21:1;11316:2;11296:18;;;11289:30;11355:33;11335:18;;;11328:61;11406:18;;15399:128:0;11075:355:1;15399:128:0;15564:12;;15554:6;:22;;:52;;;-1:-1:-1;;;;;;15580:26:0;;;;;;:15;:26;;;;;;;;15554:52;15546:82;;;;-1:-1:-1;;;15546:82:0;;;;;;;:::i;:::-;15664:37;15675:6;15683:9;15694:6;15664:10;:37::i;:::-;15647:54;;15352:365;15293:1887;;;-1:-1:-1;;;;;15739:36:0;;;;;;:25;:36;;;;;;;;15736:1444;;;-1:-1:-1;;;;;15803:19:0;;;;;;:11;:19;;;;;;;;15799:592;;15861:12;;15851:6;:22;;:49;;;-1:-1:-1;;;;;;15877:23:0;;;;;;:15;:23;;;;;;;;15851:49;15843:79;;;;-1:-1:-1;;;15843:79:0;;;;;;;:::i;:::-;15958:27;15970:6;15978;15958:11;:27::i;:::-;-1:-1:-1;;;;;16010:26:0;;;;;;:18;:26;;;;;;15941:44;;-1:-1:-1;16010:26:0;;:55;;;;-1:-1:-1;16041:24:0;;;;16010:55;16006:370;;;-1:-1:-1;;;;;16094:28:0;;;;;;:20;:28;;;;;;16125:15;-1:-1:-1;16086:82:0;;;;-1:-1:-1;;;16086:82:0;;14895:2:1;16086:82:0;;;14877:21:1;14934:2;14914:18;;;14907:30;-1:-1:-1;;;14953:18:1;;;14946:54;15017:18;;16086:82:0;14693:348:1;16086:82:0;16205:17;;16195:6;:27;;16187:73;;;;-1:-1:-1;;;16187:73:0;;;;;;;:::i;:::-;16328:28;;16310:46;;:15;:46;:::i;:::-;-1:-1:-1;;;;;16279:28:0;;;;;;:20;:28;;;;;:77;15736:1444;;;-1:-1:-1;;;;;16429:19:0;;;;;;:11;:19;;;;;;;;16424:745;;16514:16;;-1:-1:-1;;;;;16478:20:0;;;;;;:9;:20;;;;;;:32;;16503:6;16478:24;:32::i;:::-;:52;;:84;;;-1:-1:-1;;;;;;16534:28:0;;;;;;:17;:28;;;;;;;;16478:84;16470:128;;;;-1:-1:-1;;;16470:128:0;;11277:2:1;16470:128:0;;;11259:21:1;11316:2;11296:18;;;11289:30;11355:33;11335:18;;;11328:61;11406:18;;16470:128:0;11075:355:1;16470:128:0;16635:12;;16625:6;:22;;:49;;;-1:-1:-1;;;;;;16651:23:0;;;;;;:15;:23;;;;;;;;16625:49;16617:79;;;;-1:-1:-1;;;16617:79:0;;;;;;;:::i;:::-;16732:31;16748:6;16756;16732:15;:31::i;:::-;-1:-1:-1;;;;;16788:26:0;;;;;;:18;:26;;;;;;16715:48;;-1:-1:-1;16788:26:0;;:55;;;;-1:-1:-1;16819:24:0;;;;16788:55;16784:370;;;-1:-1:-1;;;;;16872:28:0;;;;;;:20;:28;;;;;;16903:15;-1:-1:-1;16864:82:0;;;;-1:-1:-1;;;16864:82:0;;14895:2:1;16864:82:0;;;14877:21:1;14934:2;14914:18;;;14907:30;-1:-1:-1;;;14953:18:1;;;14946:54;15017:18;;16864:82:0;14693:348:1;16864:82:0;16983:17;;16973:6;:27;;16965:73;;;;-1:-1:-1;;;16965:73:0;;;;;;;:::i;:::-;17106:28;;17088:46;;:15;:46;:::i;:::-;-1:-1:-1;;;;;17057:28:0;;;;;;:20;:28;;;;;:77;16784:370;-1:-1:-1;;;;;17212:17:0;;;;;;:9;:17;;;;;;:29;;17234:6;17212:21;:29::i;:::-;-1:-1:-1;;;;;17192:17:0;;;;;;;:9;:17;;;;;;:49;;;;17275:20;;;;;;;:40;;17300:14;17275:24;:40::i;:::-;-1:-1:-1;;;;;17252:20:0;;;;;;;:9;:20;;;;;;;:63;;;;17343:43;;;;;;-1:-1:-1;;;;;;;;;;;17343:43:0;;;17371:14;16612:25:1;;16600:2;16585:18;;16466:177;17343:43:0;;;;;;;;-1:-1:-1;17404:4:0;;14794:2622;-1:-1:-1;;;;14794:2622:0:o;3825:136::-;3883:7;3910:43;3914:1;3917;3910:43;;;;;;;;;;;;;;;;;:3;:43::i;20969:1834::-;12321:6;:13;;-1:-1:-1;;12321:13:0;12330:4;12321:13;;;21062:16:::1;::::0;21045:12:::1;::::0;12321:6;;21045:34:::1;::::0;:12;:16:::1;:34::i;:::-;21018:61;;21090:20;21112:65;21162:14;;21112:45;21146:10;;21112:29;21128:12;;21112:11;;:15;;:29;;;;:::i;:65::-;21239:4;21190:28;21221:24:::0;;;:9:::1;:24;::::0;;;;;21090:87;;-1:-1:-1;21282:67:0::1;21347:1;21282:60;21090:87:::0;21282:60;21221:24;21307:16;21282:24:::1;:42::i;:::-;:46:::0;::::1;:60::i;:67::-;21256:93:::0;-1:-1:-1;21360:20:0::1;21383:41;:20:::0;21256:93;21383:24:::1;:41::i;:::-;21519:16;::::0;;21533:1:::1;21519:16:::0;;;;;::::1;::::0;;21360:64;;-1:-1:-1;21461:21:0::1;::::0;21437::::1;::::0;21519:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21519:16:0::1;21495:40;;21564:4;21546;21551:1;21546:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21546:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;21590:4:::1;::::0;21580:7;;21590:4;::::1;::::0;21580;;21590;;21580:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;21580:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;21607:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;21607:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;21679:12;;21607:6:::1;::::0;21722:4;;21749::::1;::::0;21769:15:::1;::::0;21607:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21808:17;21828:40;21854:13;21828:21;:25;;:40;;;;:::i;:::-;21808:60:::0;-1:-1:-1;21881:19:0::1;21903:41;21920:23;:16:::0;21941:1:::1;21920:20;:23::i;:::-;21903:12:::0;;:16:::1;:41::i;:::-;21881:63;;21965:26;21994:73;22065:1;21994:66;22048:11;21994:49;22008:34;22025:16;;22008:12;;:16;;:34;;;;:::i;:::-;21994:9:::0;;:13:::1;:49::i;:73::-;21965:102;;22078:26;22107:66;22161:11;22107:49;22121:34;22138:16;;22121:12;;:16;;:34;;;;:::i;:::-;22107:9:::0;;:13:::1;:49::i;:66::-;22078:95;;22184:20;22207:54;22249:11;22207:37;22221:22;22232:10;;22221:6;;:10;;:22;;;;:::i;22207:54::-;22303:20;::::0;22295:65:::1;::::0;22184:77;;-1:-1:-1;22275:15:0::1;::::0;-1:-1:-1;;;;;22303:20:0;;::::1;::::0;22337:18;;22275:15;22295:65;22275:15;22295:65;22337:18;22303:20;22295:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22395:14:0::1;::::0;22387:53:::1;::::0;22274:86;;-1:-1:-1;;;;;;22395:14:0::1;::::0;22423:12;;22387:53:::1;::::0;;;22423:12;22395:14;22387:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22474:5:0::1;::::0;-1:-1:-1;;22495:19:0;;;-1:-1:-1;22492:294:0::1;;22530:6;::::0;22704:21:::1;::::0;22530:244:::1;::::0;-1:-1:-1;;;22530:244:0;;22606:4:::1;22530:244;::::0;::::1;7678:34:1::0;7728:18;;;7721:34;;;22530:6:0::1;7771:18:1::0;;;7764:34;;;7814:18;;;7807:34;-1:-1:-1;;;;;22704:21:0;;::::1;7857:19:1::0;;;7850:44;22744:15:0::1;7910:19:1::0;;;7903:35;22530:6:0;::::1;::::0;:22:::1;::::0;22560:18;;7612:19:1;;22530:244:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22492:294;-1:-1:-1::0;;12339:6:0;:14;;-1:-1:-1;;12339:14:0;;;-1:-1:-1;;;;;;;;;;;20969:1834:0:o;4421:132::-;4479:7;4506:39;4510:1;4513;4506:39;;;;;;;;;;;;;;;;;:3;:39::i;17428:330::-;17558:53;;;;;;;;;;;-1:-1:-1;;;17558:53:0;;;;;;;;-1:-1:-1;;;;;17558:17:0;;17521:4;17558:17;;;:9;:17;;;;;;;:53;;17580:6;;17558:21;:53::i;:::-;-1:-1:-1;;;;;17538:17:0;;;;;;;:9;:17;;;;;;:73;;;;17645:20;;;;;;;:32;;17670:6;17645:24;:32::i;:::-;-1:-1:-1;;;;;17622:20:0;;;;;;;:9;:20;;;;;;;:55;;;;17693:35;;;;;;-1:-1:-1;;;;;;;;;;;17693:35:0;;;17721:6;16612:25:1;;16600:2;16585:18;;16466:177;17693:35:0;;;;;;;;-1:-1:-1;17746:4:0;17428:330;;;;;:::o;20093:226::-;20202:10;20142:4;20176:37;;;:25;:37;;;;;;;;20175:38;:58;;;;-1:-1:-1;20227:6:0;;;;20226:7;20175:58;:82;;;;-1:-1:-1;20246:11:0;;-1:-1:-1;;;20246:11:0;;;;20175:82;:136;;;;-1:-1:-1;;20298:13:0;;20288:4;20270:24;;;;:9;:24;;;;;;:41;;;20093:226::o;17779:970::-;17868:7;17921:17;;17906:12;:32;17902:189;;;17972:4;;-1:-1:-1;;;;;17959:17:0;;;17972:4;;17959:17;;;;:49;;-1:-1:-1;18001:6:0;;-1:-1:-1;;;;;17980:28:0;;;18001:6;;17980:28;;17959:49;17955:121;;;-1:-1:-1;;;;;18029:24:0;;;;;;:13;:24;;;;;:31;;-1:-1:-1;;18029:31:0;18056:4;18029:31;;;17955:121;18111:17;18131:59;18175:14;;18131:39;18142:27;18158:10;;18142:11;;:15;;:27;;;;:::i;:::-;18131:6;;:10;:39::i;:59::-;18111:79;;18201:24;18228:42;18255:14;;18228:22;18239:10;;18228:6;:10;;:22;;;;:::i;:42::-;18201:69;-1:-1:-1;18281:22:0;18306:31;:9;18201:69;18306:13;:31::i;:::-;18395:4;18377:24;;;;:9;:24;;;;;;18281:56;;-1:-1:-1;18377:39:0;;18406:9;18377:28;:39::i;:::-;18368:4;18350:24;;;;:9;:24;;;;;;;:66;;;;18432:42;;-1:-1:-1;;;;;18432:42:0;;;-1:-1:-1;;;;;;;;;;;18432:42:0;;;18464:9;16612:25:1;;16600:2;16585:18;;16466:177;18432:42:0;;;;;;;;18490:20;;18487:209;;18569:18;;-1:-1:-1;;;;;18569:18:0;18559:29;;;;:9;:29;;;;;;:51;;18593:16;18559:33;:51::i;:::-;18537:18;;;-1:-1:-1;;;;;18537:18:0;;;18527:29;;;;:9;:29;;;;;;;;;:83;;;;18647:18;;18630:54;;16612:25:1;;;18647:18:0;;;;18630:54;;;;-1:-1:-1;;;;;;;;;;;18630:54:0;16585:18:1;18630:54:0;;;;;;;18487:209;18715:26;:6;18726:14;18715:10;:26::i;:::-;18708:33;17779:970;-1:-1:-1;;;;;;;17779:970:0:o;18757:753::-;18828:7;18849:17;18869:64;18918:14;;18869:44;18880:32;18897:14;;18880:12;;:16;;:32;;;;:::i;18869:64::-;18849:84;;18944:24;18971:46;19002:14;;18971:26;18982:14;;18971:6;:10;;:26;;;;:::i;:46::-;18944:73;-1:-1:-1;19028:22:0;19053:31;:9;18944:73;19053:13;:31::i;:::-;19142:4;19124:24;;;;:9;:24;;;;;;19028:56;;-1:-1:-1;19124:39:0;;19153:9;19124:28;:39::i;:::-;19115:4;19097:24;;;;:9;:24;;;;;;;:66;;;;19179:42;;-1:-1:-1;;;;;19179:42:0;;;-1:-1:-1;;;;;;;;;;;19179:42:0;;;19211:9;16612:25:1;;16600:2;16585:18;;16466:177;19179:42:0;;;;;;;;19237:20;;19234:209;;19316:18;;-1:-1:-1;;;;;19316:18:0;19306:29;;;;:9;:29;;;;;;:51;;19340:16;19306:33;:51::i;:::-;19284:18;;;-1:-1:-1;;;;;19284:18:0;;;19274:29;;;;:9;:29;;;;;;;;;:83;;;;19394:18;;19377:54;;16612:25:1;;;19394:18:0;;;;19377:54;;;;-1:-1:-1;;;;;;;;;;;19377:54:0;16585:18:1;19377:54:0;;;;;;;19234:209;19462:26;:6;19473:14;19462:10;:26::i;:::-;19455:33;18757:753;-1:-1:-1;;;;;;18757:753:0:o;19518:563::-;19631:11;;19672:17;;19593:7;;19631:11;19657:12;:32;19653:83;;;-1:-1:-1;19717:2:0;19653:83;19791:14;;19746:17;;19766:40;;:20;:6;19777:8;19766:10;:20::i;:40::-;19746:60;-1:-1:-1;19847:13:0;;19843:176;;19922:4;19904:24;;;;:9;:24;;;;;;:39;;19933:9;19904:28;:39::i;:::-;19895:4;19877:24;;;;:9;:24;;;;;;;:66;;;;19964:42;;-1:-1:-1;;;;;19964:42:0;;;-1:-1:-1;;;;;;;;;;;19964:42:0;;;19996:9;16612:25:1;;16600:2;16585:18;;16466:177;19964:42:0;;;;;;;;19843:176;20051:21;:6;20062:9;20051:10;:21::i;4165:250::-;4223:7;4247:6;4243:47;;-1:-1:-1;4277:1:0;4270:8;;4243:47;4302:9;4314:5;4318:1;4314;:5;:::i;:::-;4302:17;-1:-1:-1;4347:1:0;4338:5;4342:1;4302:17;4338:5;:::i;:::-;:10;4330:56;;;;-1:-1:-1;;;4330:56:0;;14493:2:1;4330:56:0;;;14475:21:1;14532:2;14512:18;;;14505:30;14571:34;14551:18;;;14544:62;-1:-1:-1;;;14622:18:1;;;14615:31;14663:19;;4330:56:0;14291:397:1;4559:189:0;4645:7;4680:12;4673:5;4665:28;;;;-1:-1:-1;;;4665:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4704:9:0;4716:5;4720:1;4716;:5;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;526:388::-;594:6;602;655:2;643:9;634:7;630:23;626:32;623:52;;;671:1;668;661:12;623:52;710:9;697:23;729:31;754:5;729:31;:::i;:::-;779:5;-1:-1:-1;836:2:1;821:18;;808:32;849:33;808:32;849:33;:::i;:::-;901:7;891:17;;;526:388;;;;;:::o;919:671::-;1005:6;1013;1021;1029;1082:3;1070:9;1061:7;1057:23;1053:33;1050:53;;;1099:1;1096;1089:12;1050:53;1138:9;1125:23;1157:31;1182:5;1157:31;:::i;:::-;1207:5;-1:-1:-1;1264:2:1;1249:18;;1236:32;1277:33;1236:32;1277:33;:::i;:::-;1329:7;-1:-1:-1;1388:2:1;1373:18;;1360:32;1401:33;1360:32;1401:33;:::i;:::-;1453:7;-1:-1:-1;1512:2:1;1497:18;;1484:32;1525:33;1484:32;1525:33;:::i;:::-;919:671;;;;-1:-1:-1;919:671:1;;-1:-1:-1;;919:671:1:o;1595:456::-;1672:6;1680;1688;1741:2;1729:9;1720:7;1716:23;1712:32;1709:52;;;1757:1;1754;1747:12;1709:52;1796:9;1783:23;1815:31;1840:5;1815:31;:::i;:::-;1865:5;-1:-1:-1;1922:2:1;1907:18;;1894:32;1935:33;1894:32;1935:33;:::i;:::-;1595:456;;1987:7;;-1:-1:-1;;;2041:2:1;2026:18;;;;2013:32;;1595:456::o;2056:382::-;2121:6;2129;2182:2;2170:9;2161:7;2157:23;2153:32;2150:52;;;2198:1;2195;2188:12;2150:52;2237:9;2224:23;2256:31;2281:5;2256:31;:::i;:::-;2306:5;-1:-1:-1;2363:2:1;2348:18;;2335:32;2376:30;2335:32;2376:30;:::i;2443:315::-;2511:6;2519;2572:2;2560:9;2551:7;2547:23;2543:32;2540:52;;;2588:1;2585;2578:12;2540:52;2627:9;2614:23;2646:31;2671:5;2646:31;:::i;:::-;2696:5;2748:2;2733:18;;;;2720:32;;-1:-1:-1;;;2443:315:1:o;2763:750::-;2855:6;2863;2871;2924:2;2912:9;2903:7;2899:23;2895:32;2892:52;;;2940:1;2937;2930:12;2892:52;2980:9;2967:23;3009:18;3050:2;3042:6;3039:14;3036:34;;;3066:1;3063;3056:12;3036:34;3104:6;3093:9;3089:22;3079:32;;3149:7;3142:4;3138:2;3134:13;3130:27;3120:55;;3171:1;3168;3161:12;3120:55;3211:2;3198:16;3237:2;3229:6;3226:14;3223:34;;;3253:1;3250;3243:12;3223:34;3308:7;3301:4;3291:6;3288:1;3284:14;3280:2;3276:23;3272:34;3269:47;3266:67;;;3329:1;3326;3319:12;3266:67;3360:4;3352:13;;;;-1:-1:-1;3384:6:1;-1:-1:-1;;3425:20:1;;3412:34;3455:28;3412:34;3455:28;:::i;:::-;3502:5;3492:15;;;2763:750;;;;;:::o;3518:241::-;3574:6;3627:2;3615:9;3606:7;3602:23;3598:32;3595:52;;;3643:1;3640;3633:12;3595:52;3682:9;3669:23;3701:28;3723:5;3701:28;:::i;3764:245::-;3831:6;3884:2;3872:9;3863:7;3859:23;3855:32;3852:52;;;3900:1;3897;3890:12;3852:52;3932:9;3926:16;3951:28;3973:5;3951:28;:::i;4014:309::-;4079:6;4087;4140:2;4128:9;4119:7;4115:23;4111:32;4108:52;;;4156:1;4153;4146:12;4108:52;4195:9;4182:23;4214:28;4236:5;4214:28;:::i;4328:180::-;4387:6;4440:2;4428:9;4419:7;4415:23;4411:32;4408:52;;;4456:1;4453;4446:12;4408:52;-1:-1:-1;4479:23:1;;4328:180;-1:-1:-1;4328:180:1:o;4513:377::-;4587:6;4595;4603;4656:2;4644:9;4635:7;4631:23;4627:32;4624:52;;;4672:1;4669;4662:12;4624:52;4708:9;4695:23;4685:33;;4768:2;4757:9;4753:18;4740:32;4781:28;4803:5;4781:28;:::i;4895:306::-;4983:6;4991;4999;5052:2;5040:9;5031:7;5027:23;5023:32;5020:52;;;5068:1;5065;5058:12;5020:52;5097:9;5091:16;5081:26;;5147:2;5136:9;5132:18;5126:25;5116:35;;5191:2;5180:9;5176:18;5170:25;5160:35;;4895:306;;;;;:::o;5206:454::-;5301:6;5309;5317;5325;5333;5386:3;5374:9;5365:7;5361:23;5357:33;5354:53;;;5403:1;5400;5393:12;5354:53;-1:-1:-1;;5426:23:1;;;5496:2;5481:18;;5468:32;;-1:-1:-1;5547:2:1;5532:18;;5519:32;;5598:2;5583:18;;5570:32;;-1:-1:-1;5649:3:1;5634:19;5621:33;;-1:-1:-1;5206:454:1;-1:-1:-1;5206:454:1:o;7949:794::-;8171:2;8183:21;;;8156:18;;8239:22;;;8123:4;8318:6;8292:2;8277:18;;8123:4;8352:304;8366:6;8363:1;8360:13;8352:304;;;8441:6;8428:20;8461:31;8486:5;8461:31;:::i;:::-;-1:-1:-1;;;;;8517:31:1;8505:44;;8572:4;8631:15;;;;8596:12;;;;8545:1;8381:9;8352:304;;;8356:3;8673;8665:11;;;;8728:6;8721:14;8714:22;8707:4;8696:9;8692:20;8685:52;7949:794;;;;;;:::o;9429:597::-;9541:4;9570:2;9599;9588:9;9581:21;9631:6;9625:13;9674:6;9669:2;9658:9;9654:18;9647:34;9699:1;9709:140;9723:6;9720:1;9717:13;9709:140;;;9818:14;;;9814:23;;9808:30;9784:17;;;9803:2;9780:26;9773:66;9738:10;;9709:140;;;9867:6;9864:1;9861:13;9858:91;;;9937:1;9932:2;9923:6;9912:9;9908:22;9904:31;9897:42;9858:91;-1:-1:-1;10010:2:1;9989:15;-1:-1:-1;;9985:29:1;9970:45;;;;10017:2;9966:54;;9429:597;-1:-1:-1;;;9429:597:1:o;10031:346::-;10233:2;10215:21;;;10272:2;10252:18;;;10245:30;-1:-1:-1;;;10306:2:1;10291:18;;10284:52;10368:2;10353:18;;10031:346::o;10729:341::-;10931:2;10913:21;;;10970:2;10950:18;;;10943:30;-1:-1:-1;;;11004:2:1;10989:18;;10982:47;11061:2;11046:18;;10729:341::o;11781:398::-;11983:2;11965:21;;;12022:2;12002:18;;;11995:30;12061:34;12056:2;12041:18;;12034:62;-1:-1:-1;;;12127:2:1;12112:18;;12105:32;12169:3;12154:19;;11781:398::o;13583:354::-;13785:2;13767:21;;;13824:2;13804:18;;;13797:30;13863:32;13858:2;13843:18;;13836:60;13928:2;13913:18;;13583:354::o;15046:329::-;15248:2;15230:21;;;15287:1;15267:18;;;15260:29;-1:-1:-1;;;15320:2:1;15305:18;;15298:36;15366:2;15351:18;;15046:329::o;15380:401::-;15582:2;15564:21;;;15621:2;15601:18;;;15594:30;15660:34;15655:2;15640:18;;15633:62;-1:-1:-1;;;15726:2:1;15711:18;;15704:35;15771:3;15756:19;;15380:401::o;15786:335::-;15988:2;15970:21;;;16027:2;16007:18;;;16000:30;-1:-1:-1;;;16061:2:1;16046:18;;16039:41;16112:2;16097:18;;15786:335::o;16982:980::-;17244:4;17292:3;17281:9;17277:19;17323:6;17312:9;17305:25;17349:2;17387:6;17382:2;17371:9;17367:18;17360:34;17430:3;17425:2;17414:9;17410:18;17403:31;17454:6;17489;17483:13;17520:6;17512;17505:22;17558:3;17547:9;17543:19;17536:26;;17597:2;17589:6;17585:15;17571:29;;17618:1;17628:195;17642:6;17639:1;17636:13;17628:195;;;17707:13;;-1:-1:-1;;;;;17703:39:1;17691:52;;17798:15;;;;17763:12;;;;17739:1;17657:9;17628:195;;;-1:-1:-1;;;;;;;17879:32:1;;;;17874:2;17859:18;;17852:60;-1:-1:-1;;;17943:3:1;17928:19;17921:35;17840:3;16982:980;-1:-1:-1;;;16982:980:1:o;18552:128::-;18592:3;18623:1;18619:6;18616:1;18613:13;18610:39;;;18629:18;;:::i;:::-;-1:-1:-1;18665:9:1;;18552:128::o;18685:217::-;18725:1;18751;18741:132;;18795:10;18790:3;18786:20;18783:1;18776:31;18830:4;18827:1;18820:15;18858:4;18855:1;18848:15;18741:132;-1:-1:-1;18887:9:1;;18685:217::o;18907:168::-;18947:7;19013:1;19009;19005:6;19001:14;18998:1;18995:21;18990:1;18983:9;18976:17;18972:45;18969:71;;;19020:18;;:::i;:::-;-1:-1:-1;19060:9:1;;18907:168::o;19080:125::-;19120:4;19148:1;19145;19142:8;19139:34;;;19153:18;;:::i;:::-;-1:-1:-1;19190:9:1;;19080:125::o;19210:135::-;19249:3;-1:-1:-1;;19270:17:1;;19267:43;;;19290:18;;:::i;:::-;-1:-1:-1;19337:1:1;19326:13;;19210:135::o;19350:127::-;19411:10;19406:3;19402:20;19399:1;19392:31;19442:4;19439:1;19432:15;19466:4;19463:1;19456:15;19482:127;19543:10;19538:3;19534:20;19531:1;19524:31;19574:4;19571:1;19564:15;19598:4;19595:1;19588:15;19614:127;19675:10;19670:3;19666:20;19663:1;19656:31;19706:4;19703:1;19696:15;19730:4;19727:1;19720:15;19878:131;-1:-1:-1;;;;;19953:31:1;;19943:42;;19933:70;;19999:1;19996;19989:12;20014:118;20100:5;20093:13;20086:21;20079:5;20076:32;20066:60;;20122:1;20119;20112:12

Swarm Source

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