ETH Price: $3,046.59 (+4.66%)
 

Overview

Max Total Supply

10,000,000 SBANK

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: SBANK 3
Balance
0.000000000001428151 SBANK

Value
$0.00
0xb23755466ec145c08ef54ab6f5d1426cde3372eb
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:
Shibank

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 
Bank of Shibarium

https://t.me/OfficialShibank
 
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.16;

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 IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function 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);
}

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 IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

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

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;
    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;  
        uint256 totalRealised;
    }

    IDEXRouter router;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    IERC20 RewardToken = IERC20(0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE);

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 60 minutes;
    uint256 public minDistribution = 1 * (10 ** 24);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token || Auth(_token).isAuthorized(msg.sender)); _;
    }

    constructor (address _router) {
        router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(routerAddress);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {

        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {

        uint256 balanceBefore = RewardToken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(RewardToken);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while(gasUsed < gas && iterations < shareholderCount) {

            if(currentIndex >= shareholderCount){ currentIndex = 0; }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RewardToken.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }

    }
    
    function claimDividend(address shareholder) external onlyToken{
        distributeDividend(shareholder);
    }
    
    function rescueDividends(address to) external onlyToken {
        RewardToken.transfer(to, RewardToken.balanceOf(address(this)));
    }
    
    function setRewardToken(address _rewardToken) external onlyToken{
        RewardToken = IERC20(_rewardToken);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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



contract Shibank is IERC20, Auth {
    
    using SafeMath for uint256;

    string public constant _name = "Shibank";
    string public constant _symbol = "SBANK";
    uint8 public constant _decimals = 18;

    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = 0x0000000000000000000000000000000000000000;
    address private routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public RewardToken = 0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE;

    uint256 public _totalSupply = 10000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply * 1 / 100;
    uint256 public _walletMax = _totalSupply * 1 / 100;
    
    bool public restrictWhales = true;

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

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

    uint256 public liquidityFee = 0;
    uint256 public marketingFee = 1;
    uint256 public rewardsFee = 3;
    uint256 public devFee = 1;

    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    address public autoLiquidityReceiver;
    address public marketingWallet;
    address public devWallet;

    IDEXRouter public router;
    address public pair;
    address public pairWeth;

    bool public tradingOpen = false;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 750000;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    uint256 public swapThreshold = _totalSupply * 5 / 2000;

    bool public takeBuyFee = true;
    bool public takeSellFee = true;
    bool public takeTransferFee = true;

    event maxWalletChanged(uint256 amountBase1000);
    event maxTxChanged(uint256 amountBase1000);
    event tradingOpened();
    event feeExemptStatusChanged(address target, bool status);
    event limitExemptStatusChanged(address target, bool status);
    event dividendExemptStatusChanged(address target, bool status);
    event feesChanged(uint256 newBuy, uint256 newSell, uint256 newLP, uint256 newMkt, uint256 newDev, uint256 newReward);
    event feeReceiversChanged(address lpReceiver, address marketingReceiver, address devReceiver);
    event swapBackSettingChanged(bool enabled, uint256 limit, bool byLimitOnly);
    event distributionCriteriaChanged(uint256 newPeriod, uint256 newAmount);
    event rewardTokenAddressChanged(address newRewardToken);
    event AutoLiquify(uint256 amountSHIB, uint256 amountTok);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () Auth(msg.sender) {
        
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        dividendDistributor = new DividendDistributor(address(router));

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

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[pairWeth] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[pairWeth] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;

        autoLiquidityReceiver = msg.sender;
        marketingWallet = 0x7Dfe3A4Fa2bb349C127524b043d15bC704231422; 
        devWallet = 0x7Dfe3A4Fa2bb349C127524b043d15bC704231422; 

        isFeeExempt[marketingWallet] = true;
        isTxLimitExempt[marketingWallet] = true;
        
        totalFee = (liquidityFee.add(marketingFee).add(rewardsFee).add(devFee));
        totalFeeIfSelling = totalFee;

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

    receive() external payable { }

    function name() external pure override returns (string memory) { return _name; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function getOwner() external view override returns (address) { return owner; }

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

    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 claimDividend() external {
        dividendDistributor.claimDividend(msg.sender);
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    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) {
        
        if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); }

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

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");

        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){
             swapBack(); 
        }
        
        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax);
        }

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try dividendDistributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try dividendDistributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, finalAmount);
        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;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint feeApplicable = 0;
        if (recipient == pair && takeSellFee) {
            feeApplicable = totalFeeIfSelling;        
        }
        if (sender == pair && takeBuyFee) {
            feeApplicable = totalFee;        
        }
        if (sender != pair && recipient != pair){
            if (takeTransferFee){
                feeApplicable = totalFeeIfSelling; 
            }
            else{
                feeApplicable = 0;
            }
        }
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

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

        return amount.sub(feeAmount);
    }

    function openTrading() public onlyOwner {
        tradingOpen = true;
        emit tradingOpened();
    }

    function swapBack() internal lockTheSwap {
        
        uint256 tokensToLiquify = _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

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

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

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(liquidityFee).div(totalETHFee).div(2);
        uint256 amountETHReflection = amountETH.mul(rewardsFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);
        uint256 amountETHDev = amountETH.mul(devFee).div(totalETHFee);

        try dividendDistributor.deposit{value: amountETHReflection}() {} catch {}

        (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}("");
        (bool tmpSuccess1,) = payable(devWallet).call{value: amountETHDev, gas: 30000}("");
        
        // only to supress warning msg
        tmpSuccess = false;
        tmpSuccess1 = false;

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

    // Owner Functions
    function changeTxLimit(uint256 newLimit) external authorized {
        require( newLimit >= 5, "Max tx cant be bellow 0.5%");
        _maxTxAmount = newLimit.mul(_totalSupply).div(1000);
        emit maxTxChanged(newLimit);
    }

    function changeWalletLimit(uint256 newLimit) external authorized {
        require( newLimit >= 5, "Max wallet cant be bellow 0.5%");
        _walletMax  = newLimit.mul(_totalSupply).div(1000);
        emit maxWalletChanged(newLimit);
    }

    function changeRestrictWhales(bool newValue) external authorized {
       restrictWhales = newValue;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
        emit feeExemptStatusChanged(holder, exempt);
    }

    function changeIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
        emit limitExemptStatusChanged(holder, exempt);
    }
    

    function changeIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        
        if(exempt){
            dividendDistributor.setShare(holder, 0);
        }else{
            dividendDistributor.setShare(holder, _balances[holder]);
        }
        emit dividendExemptStatusChanged(holder, exempt);
    }

    function fullWhitelist(address _address) public onlyOwner{
        isFeeExempt[_address] = true;
        isTxLimitExempt[_address] = true;
        authorizations[_address] = true;
        isDividendExempt[_address] = true;
        dividendDistributor.setShare(_address, 0);
    }

    function changeFees(uint256 newLiqFee, uint256 newRewardFee, uint256 newMarketingFee, uint256 newDevFee, uint256 extraSellFee) external authorized {
        liquidityFee = newLiqFee;
        rewardsFee = newRewardFee;
        marketingFee = newMarketingFee;
        devFee = newDevFee;
        
        totalFee = liquidityFee.add(marketingFee).add(rewardsFee).add(devFee);
        
        totalFeeIfSelling = totalFee + extraSellFee;
        require(totalFeeIfSelling <= 25);
        emit feesChanged(totalFee, totalFeeIfSelling, liquidityFee, marketingFee, devFee, rewardsFee);
    }

    function changeFeeReceivers(address newLiquidityReceiver, address newMarketingWallet, address newDevWallet) external authorized {
        autoLiquidityReceiver = newLiquidityReceiver;
        marketingWallet = newMarketingWallet;
        devWallet = newDevWallet;
        emit feeReceiversChanged(autoLiquidityReceiver, marketingWallet, devWallet);
    }

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit, bool swapByLimitOnly) external authorized {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
        emit swapBackSettingChanged(swapAndLiquifyEnabled, swapThreshold, swapAndLiquifyByLimitOnly);
    }

    function changeDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external authorized {
        dividendDistributor.setDistributionCriteria(newMinPeriod, newMinDistribution);
        emit distributionCriteriaChanged(newMinPeriod, newMinDistribution);
    }

    function changeDistributorSettings(uint256 newgas) external authorized {
        require(newgas < 750000);
        distributorGas = newgas;
    }
    
    function setRewardToken(address _rewardToken) external authorized {
        dividendDistributor.setRewardToken(_rewardToken);
        emit rewardTokenAddressChanged(_rewardToken);
    }

    function manualSwapBack() external authorized{
        swapBack();
    }

    function ChangeTakeFees(bool takeBuy, bool takeSell, bool takeTransfer) external authorized{
        takeBuyFee = takeBuy;
        takeSellFee = takeSell;
        takeTransferFee = takeTransfer;
    }
}

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":"uint256","name":"amountSHIB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTok","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"distributionCriteriaChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"dividendExemptStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"feeExemptStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lpReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"marketingReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"devReceiver","type":"address"}],"name":"feeReceiversChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLP","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMkt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDev","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReward","type":"uint256"}],"name":"feesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"limitExemptStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBase1000","type":"uint256"}],"name":"maxTxChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBase1000","type":"uint256"}],"name":"maxWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRewardToken","type":"address"}],"name":"rewardTokenAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"},{"indexed":false,"internalType":"bool","name":"byLimitOnly","type":"bool"}],"name":"swapBackSettingChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"tradingOpened","type":"event"},{"inputs":[{"internalType":"bool","name":"takeBuy","type":"bool"},{"internalType":"bool","name":"takeSell","type":"bool"},{"internalType":"bool","name":"takeTransfer","type":"bool"}],"name":"ChangeTakeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","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":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newgas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"},{"internalType":"uint256","name":"extraSellFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"fullWhitelist","outputs":[],"stateMutability":"nonpayable","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":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairWeth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"takeBuyFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeSellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeTransferFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d17909155600380549091167395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce1790556200005a6012600a62000765565b6200006990629896806200077d565b600455606460045460016200007f91906200077d565b6200008b91906200079f565b60055560646004546001620000a191906200077d565b620000ad91906200079f565b6006556007805460ff191660019081179091556000600d819055600e8290556003600f5560109190915560118190556012556018805460ff60a01b19169055620b71b0601a55601b805462ffff0019166101001790556004546107d090620001179060056200077d565b6200012391906200079f565b601c55601d805462ffffff1916620101011790553480156200014457600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155600254601680546001600160a01b03909216919093168117909255825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa158015620001c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ed9190620007c2565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002759190620007c2565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e89190620007c2565b601780546001600160a01b0319166001600160a01b03928316179055306000908152600960209081526040808320601680548616855292529182902060001990555490519116906200033a9062000644565b6001600160a01b039091168152602001604051809103906000f08015801562000367573d6000803e3d6000fd5b50601980546001600160a01b039283166001600160a01b031991821617909155336000818152600a60209081526040808320805460ff1990811660019081179092553080865283862080548316841790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb8054831684179055868652600b8086528487208054841685179055601780548b1688528588208054851686179055601880548c168952868920805486168717905590548b168852600c8752858820805485168617905554909916865283862080548316841790558686528386208054831684179055855291842080548316821790557f45117a726ea4f344045dc210793664a28d2d320b7e03f6bffdae553d24c3586c80548316821790557f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e88054831682179055601380548716909517909455601480548616737dfe3a4fa2bb349c127524b043d15bc704231422908117909155601580549096168117909555939091527f539e66d60e8b44c7ac7f636bff747dc740f11ae891d10413fc123bfc4dfe30fe80548416831790559283527fd3e6c96f90c1d1682b78458c0724c124cd24df759bcec53b187d5620ad1511078054909216179055601054600f54600e54600d546200057c9462000568939284929162001a6f620005d5821b17901c565b620005d560201b62001a6f1790919060201c565b601181905560125560045433600081815260086020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000803565b600080620005e48385620007ed565b9050838110156200063b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b61155480620033f283390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006a95781600019048211156200068d576200068d62000652565b808516156200069b57918102915b93841c93908002906200066d565b509250929050565b600082620006c2575060016200063e565b81620006d1575060006200063e565b8160018114620006ea5760028114620006f55762000715565b60019150506200063e565b60ff84111562000709576200070962000652565b50506001821b6200063e565b5060208310610133831016604e8410600b84101617156200073a575081810a6200063e565b62000746838362000668565b80600019048211156200075d576200075d62000652565b029392505050565b60006200077660ff841683620006b1565b9392505050565b60008160001904831182151516156200079a576200079a62000652565b500290565b600082620007bd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620007d557600080fd5b81516001600160a01b03811681146200063b57600080fd5b808201808211156200063e576200063e62000652565b612bdf80620008136000396000f3fe6080604052600436106103e85760003560e01c8063893d20e811610208578063ca33e64c11610118578063f0b37c04116100ab578063f2fde38b1161007a578063f2fde38b14610c28578063f887ea4014610c48578063fabe628314610c68578063fe9fbb8014610c88578063ffb54a9914610ca857600080fd5b8063f0b37c0414610bb9578063f0ef821f14610bd9578063f0fc6bca14610bf3578063f1e9f1e514610c0857600080fd5b8063d920334e116100e7578063d920334e14610b13578063da00097d14610b33578063dd62ed3e14610b53578063e66b1d1e14610b9957600080fd5b8063ca33e64c14610a8a578063ca987b0e14610aaa578063d28d885214610ac0578063d3dddd6214610af357600080fd5b8063a3a2e89e1161019b578063a9f7864b1161016a578063a9f7864b146109e4578063b09f126614610a04578063b6a5d7de14610a35578063bad3ea6a14610a55578063c9567bf914610a7557600080fd5b8063a3a2e89e14610964578063a535598914610984578063a8aa1b31146109a4578063a9059cbb146109c457600080fd5b80639153eb6c116101d75780639153eb6c146108e057806395d89b411461090057806398118cb41461092e5780639e1211171461094457600080fd5b8063893d20e8146108525780638aee8127146108705780638b42507f146108905780638ea5220f146108c057600080fd5b80633f4218e0116103035780636b67c4df1161029657806375f0a8741161026557806375f0a874146107c6578063773fcb5c146107e65780637d1db4a5146108065780637db1342c1461081c578063807c2d9c1461083c57600080fd5b80636b67c4df1461072e5780636ebcf60714610744578063705409331461077157806370a082311461079057600080fd5b80634a74bb02116102d25780634a74bb02146106c4578063571ac8b0146106e357806366eb3785146107035780636827e7641461071857600080fd5b80633f4218e01461062a5780634355855a1461065a57806344de2e4c1461068a578063479f66d8146106a457600080fd5b80632b112e491161037b578063315dca291161034a578063315dca29146105bd57806332424aa3146105df57806334c70889146105f45780633eaaf86b1461061457600080fd5b80632b112e49146105415780632bb14e1d146105565780632f54bf6e1461056c578063313ce5671461059b57600080fd5b80630ca1b8ae116103b75780630ca1b8ae146104be57806318160ddd146104f65780631df4ccfc1461050b57806323b872dd1461052157600080fd5b8063024c2ddd146103f45780630445b6671461043f57806306fdde0314610455578063095ea7b31461048e57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b5061042c61040f366004612768565b600960209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561044b57600080fd5b5061042c601c5481565b34801561046157600080fd5b5060408051808201909152600781526653686962616e6b60c81b60208201525b60405161043691906127a1565b34801561049a57600080fd5b506104ae6104a93660046127ef565b610cc9565b6040519015158152602001610436565b3480156104ca57600080fd5b506018546104de906001600160a01b031681565b6040516001600160a01b039091168152602001610436565b34801561050257600080fd5b5060045461042c565b34801561051757600080fd5b5061042c60115481565b34801561052d57600080fd5b506104ae61053c36600461281b565b610d36565b34801561054d57600080fd5b5061042c610df8565b34801561056257600080fd5b5061042c600f5481565b34801561057857600080fd5b506104ae61058736600461285c565b6000546001600160a01b0391821691161490565b3480156105a757600080fd5b5060125b60405160ff9091168152602001610436565b3480156105c957600080fd5b506105dd6105d8366004612879565b610e69565b005b3480156105eb57600080fd5b506105ab601281565b34801561060057600080fd5b506105dd61060f3660046128d9565b610f1c565b34801561062057600080fd5b5061042c60045481565b34801561063657600080fd5b506104ae61064536600461285c565b600a6020526000908152604090205460ff1681565b34801561066657600080fd5b506104ae61067536600461285c565b600c6020526000908152604090205460ff1681565b34801561069657600080fd5b506007546104ae9060ff1681565b3480156106b057600080fd5b506105dd6106bf366004612915565b610fc3565b3480156106d057600080fd5b50601b546104ae90610100900460ff1681565b3480156106ef57600080fd5b506104ae6106fe36600461285c565b610ffc565b34801561070f57600080fd5b506105dd61100a565b34801561072457600080fd5b5061042c60105481565b34801561073a57600080fd5b5061042c600e5481565b34801561075057600080fd5b5061042c61075f36600461285c565b60086020526000908152604090205481565b34801561077d57600080fd5b50601d546104ae90610100900460ff1681565b34801561079c57600080fd5b5061042c6107ab36600461285c565b6001600160a01b031660009081526008602052604090205490565b3480156107d257600080fd5b506014546104de906001600160a01b031681565b3480156107f257600080fd5b506105dd61080136600461292e565b611039565b34801561081257600080fd5b5061042c60055481565b34801561082857600080fd5b506105dd610837366004612915565b6111e5565b34801561084857600080fd5b5061042c60065481565b34801561085e57600080fd5b506000546001600160a01b03166104de565b34801561087c57600080fd5b506105dd61088b36600461285c565b6112b6565b34801561089c57600080fd5b506104ae6108ab36600461285c565b600b6020526000908152604090205460ff1681565b3480156108cc57600080fd5b506015546104de906001600160a01b031681565b3480156108ec57600080fd5b506105dd6108fb36600461285c565b611374565b34801561090c57600080fd5b506040805180820190915260058152645342414e4b60d81b6020820152610481565b34801561093a57600080fd5b5061042c600d5481565b34801561095057600080fd5b506105dd61095f366004612963565b611458565b34801561097057600080fd5b506105dd61097f36600461292e565b611534565b34801561099057600080fd5b50601d546104ae9062010000900460ff1681565b3480156109b057600080fd5b506017546104de906001600160a01b031681565b3480156109d057600080fd5b506104ae6109df3660046127ef565b6115b5565b3480156109f057600080fd5b506105dd6109ff36600461299e565b6115c2565b348015610a1057600080fd5b50610481604051806040016040528060058152602001645342414e4b60d81b81525081565b348015610a4157600080fd5b506105dd610a5036600461285c565b611683565b348015610a6157600080fd5b506019546104de906001600160a01b031681565b348015610a8157600080fd5b506105dd6116d4565b348015610a9657600080fd5b506013546104de906001600160a01b031681565b348015610ab657600080fd5b5061042c60125481565b348015610acc57600080fd5b506104816040518060400160405280600781526020016653686962616e6b60c81b81525081565b348015610aff57600080fd5b506105dd610b0e3660046129c0565b61173c565b348015610b1f57600080fd5b506105dd610b2e366004612915565b61179a565b348015610b3f57600080fd5b50601b546104ae9062010000900460ff1681565b348015610b5f57600080fd5b5061042c610b6e366004612768565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610ba557600080fd5b506105dd610bb43660046129fa565b61185e565b348015610bc557600080fd5b506105dd610bd436600461285c565b611896565b348015610be557600080fd5b50601d546104ae9060ff1681565b348015610bff57600080fd5b506105dd6118e1565b348015610c1457600080fd5b506003546104de906001600160a01b031681565b348015610c3457600080fd5b506105dd610c4336600461285c565b611940565b348015610c5457600080fd5b506016546104de906001600160a01b031681565b348015610c7457600080fd5b506105dd610c8336600461292e565b6119d0565b348015610c9457600080fd5b506104ae610ca336600461285c565b611a51565b348015610cb457600080fd5b506018546104ae90600160a01b900460ff1681565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d249086815260200190565b60405180910390a35060015b92915050565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610de3576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610dbe918490611ace565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610dee848484611b08565b90505b9392505050565b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75461dead60009081527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299546004549192610e64929091610e5e9190611fb7565b90611fb7565b905090565b610e7233611a51565b610e975760405162461bcd60e51b8152600401610e8e90612a15565b60405180910390fd5b601380546001600160a01b038581166001600160a01b0319928316811790935560148054868316908416811790915560158054928616929093168217909255604080519384526020840192909252908201527f83b1d7530afd2dd88ac9a9c8d68e2d3e41bfd561f1bd84a8e74f8a2be46c4971906060015b60405180910390a1505050565b610f2533611a51565b610f415760405162461bcd60e51b8152600401610e8e90612a15565b601b8054601c84905562ffff001916610100851515810262ff000019169190911762010000841515810291909117928390556040805160ff93850484161515815260208101879052919093049091161515918101919091527f29da3af0f7717d80e16e71407c74f5f3da05c53091f6b4f9555a4c474a5ebbba90606001610f0f565b610fcc33611a51565b610fe85760405162461bcd60e51b8152600401610e8e90612a15565b620b71b08110610ff757600080fd5b601a55565b6000610d3082600019610cc9565b61101333611a51565b61102f5760405162461bcd60e51b8152600401610e8e90612a15565b611037611ff9565b565b61104233611a51565b61105e5760405162461bcd60e51b8152600401610e8e90612a15565b6001600160a01b038216301480159061108557506017546001600160a01b03838116911614155b61108e57600080fd5b6001600160a01b0382166000908152600c60205260409020805460ff1916821580159190911790915561112657601954604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401600060405180830381600087803b15801561110957600080fd5b505af115801561111d573d6000803e3d6000fd5b5050505061119d565b6019546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561118457600080fd5b505af1158015611198573d6000803e3d6000fd5b505050505b604080516001600160a01b038416815282151560208201527f636e0c505e9a45e9a70bef0de9dd97977764a8002ef38eb98b3e3fbf4aa9328291015b60405180910390a15050565b6111ee33611a51565b61120a5760405162461bcd60e51b8152600401610e8e90612a15565b600581101561125b5760405162461bcd60e51b815260206004820152601e60248201527f4d61782077616c6c65742063616e742062652062656c6c6f7720302e352500006044820152606401610e8e565b61127c6103e86112766004548461243290919063ffffffff16565b906124b4565b6006556040518181527fc0a9477d41ca2e8e49c699845d9f8da33dfd85d6708c1ac8099b79d480689e24906020015b60405180910390a150565b6112bf33611a51565b6112db5760405162461bcd60e51b8152600401610e8e90612a15565b601954604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561132257600080fd5b505af1158015611336573d6000803e3d6000fd5b50506040516001600160a01b03841681527f13454ec85b90cd97159337d696d7b95e7cba393910f22195e5dd9883bcbd5f77925060200190506112ab565b6000546001600160a01b0316331461139e5760405162461bcd60e51b8152600401610e8e90612a3a565b6001600160a01b038181166000818152600a602090815260408083208054600160ff199182168117909255600b845282852080548216831790558184528285208054821683179055600c9093528184208054909316179091556019549051630a5b654b60e11b815260048101939093526024830191909152909116906314b6ca9690604401600060405180830381600087803b15801561143d57600080fd5b505af1158015611451573d6000803e3d6000fd5b5050505050565b61146133611a51565b61147d5760405162461bcd60e51b8152600401610e8e90612a15565b600d859055600f849055600e83905560108290556114a7826114a186818988611a6f565b90611a6f565b60118190556114b7908290612a70565b6012819055601910156114c957600080fd5b601154601254600d54600e54601054600f54604080519687526020870195909552938501929092526060840152608083015260a08201527f05893a0fcea57168a1ee91841362deeb0e3410fe59540dcd49696356ab83dc719060c00160405180910390a15050505050565b61153d33611a51565b6115595760405162461bcd60e51b8152600401610e8e90612a15565b6001600160a01b0382166000818152600a6020908152604091829020805460ff19168515159081179091558251938452908301527f707c1ef7782d18657971e66fb16cff6074aa43aab4a6c95e3db8d14fdd41f28b91016111d9565b6000610df1338484611b08565b6115cb33611a51565b6115e75760405162461bcd60e51b8152600401610e8e90612a15565b6019546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b15801561163457600080fd5b505af1158015611648573d6000803e3d6000fd5b505060408051858152602081018590527f208084c3515fa779b1c91135c7bf27c160b4298611fa25bd2bb546bee38548f493500190506111d9565b6000546001600160a01b031633146116ad5760405162461bcd60e51b8152600401610e8e90612a3a565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146116fe5760405162461bcd60e51b8152600401610e8e90612a3a565b6018805460ff60a01b1916600160a01b1790556040517f7daa930aca5c53a2827bdf549077944e93c54de2de816d0bfa59b38afa9cd5d990600090a1565b61174533611a51565b6117615760405162461bcd60e51b8152600401610e8e90612a15565b601d805461ffff191693151561ff00191693909317610100921515929092029190911762ff000019166201000091151591909102179055565b6117a333611a51565b6117bf5760405162461bcd60e51b8152600401610e8e90612a15565b60058110156118105760405162461bcd60e51b815260206004820152601a60248201527f4d61782074782063616e742062652062656c6c6f7720302e35250000000000006044820152606401610e8e565b61182b6103e86112766004548461243290919063ffffffff16565b6005556040518181527fa199c1b026a3c3b96ba0b6b5c4a919734b15efa438afd7e9b75d41cd93e6ebfe906020016112ab565b61186733611a51565b6118835760405162461bcd60e51b8152600401610e8e90612a15565b6007805460ff1916911515919091179055565b6000546001600160a01b031633146118c05760405162461bcd60e51b8152600401610e8e90612a3a565b6001600160a01b03166000908152600160205260409020805460ff19169055565b601954604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561192657600080fd5b505af115801561193a573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461196a5760405162461bcd60e51b8152600401610e8e90612a3a565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616391016112ab565b6119d933611a51565b6119f55760405162461bcd60e51b8152600401610e8e90612a15565b6001600160a01b0382166000818152600b6020908152604091829020805460ff19168515159081179091558251938452908301527fcfa4e8aaef2a90ee58ccff485acff966f7f85f47669e27f2461162029155408591016111d9565b6001600160a01b031660009081526001602052604090205460ff1690565b600080611a7c8385612a70565b905083811015610df15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e8e565b60008184841115611af25760405162461bcd60e51b8152600401610e8e91906127a1565b506000611aff8486612a83565b95945050505050565b601b5460009060ff1615611b2857611b218484846124f6565b9050610df1565b6001600160a01b03841660009081526001602052604090205460ff16158015611b6a57506001600160a01b03831660009081526001602052604090205460ff16155b15611bbf57601854600160a01b900460ff16611bbf5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610e8e565b60055482111580611be857506001600160a01b0384166000908152600b602052604090205460ff165b611c285760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e8e565b6017546001600160a01b03163314801590611c465750601b5460ff16155b8015611c595750601b54610100900460ff165b8015611c765750601c543060009081526008602052604090205410155b15611c8357611c83611ff9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611cd5918490611ace565b6001600160a01b038086166000908152600860209081526040808320949094559186168152600b909152205460ff16158015611d13575060075460ff165b15611d49576006546001600160a01b038416600090815260086020526040902054611d3e9084611a6f565b1115611d4957600080fd5b6001600160a01b0384166000908152600a602052604081205460ff16158015611d8b57506001600160a01b0384166000908152600a602052604090205460ff16155b611d955782611da0565b611da08585856125dc565b6001600160a01b038516600090815260086020526040902054909150611dc69082611a6f565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600c909152205460ff16611e6a576019546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e5757600080fd5b505af1925050508015611e68575060015b505b6001600160a01b0384166000908152600c602052604090205460ff16611efb576019546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611ee857600080fd5b505af1925050508015611ef9575060015b505b601954601a546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611f339160040190815260200190565b600060405180830381600087803b158015611f4d57600080fd5b505af1925050508015611f5e575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fa491815260200190565b60405180910390a3506001949350505050565b6000610df183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ace565b601b805460ff1916600117905530600090815260086020526040812054601154600d5491929161203491600291611276919082908790612432565b905060006120428383611fb7565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061207c5761207c612a96565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156120d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f99190612aac565b8160018151811061210c5761210c612a96565b6001600160a01b03928316602091820292909201015260165460405163791ac94760e01b815291169063791ac94790612152908590600090869030904290600401612ac9565b600060405180830381600087803b15801561216c57600080fd5b505af1158015612180573d6000803e3d6000fd5b5050600d54479250600091506121a49061219b9060026124b4565b60115490611fb7565b905060006121c6600261127684611276600d548861243290919063ffffffff16565b905060006121e383611276600f548761243290919063ffffffff16565b9050600061220084611276600e548861243290919063ffffffff16565b9050600061221d856112766010548961243290919063ffffffff16565b9050601960009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226f57600080fd5b505af193505050508015612281575060015b506014546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146122d4576040519150601f19603f3d011682016040523d82523d6000602084013e6122d9565b606091505b50506015546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612332576040519150601f19603f3d011682016040523d82523d6000602084013e612337565b606091505b5060009350839250508b15905061241a5760165460135460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af11580156123b8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123dd9190612b3a565b505060408051888152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601b805460ff1916905550505050505050505050565b60008260000361244457506000610d30565b60006124508385612b68565b90508261245d8583612b87565b14610df15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e8e565b6000610df183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612722565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054612547918490611ace565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546125769083611a6f565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906125ca9086815260200190565b60405180910390a35060019392505050565b60175460009081906001600160a01b0385811691161480156126055750601d54610100900460ff165b1561260f57506012545b6017546001600160a01b03868116911614801561262e5750601d5460ff165b1561263857506011545b6017546001600160a01b0386811691161480159061266457506017546001600160a01b03858116911614155b1561268757601d5462010000900460ff16156126835750601254612687565b5060005b600061269860646112768685612432565b306000908152600860205260409020549091506126b59082611a6f565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127069085815260200190565b60405180910390a36127188482611fb7565b9695505050505050565b600081836127435760405162461bcd60e51b8152600401610e8e91906127a1565b506000611aff8486612b87565b6001600160a01b038116811461276557600080fd5b50565b6000806040838503121561277b57600080fd5b823561278681612750565b9150602083013561279681612750565b809150509250929050565b600060208083528351808285015260005b818110156127ce578581018301518582016040015282016127b2565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561280257600080fd5b823561280d81612750565b946020939093013593505050565b60008060006060848603121561283057600080fd5b833561283b81612750565b9250602084013561284b81612750565b929592945050506040919091013590565b60006020828403121561286e57600080fd5b8135610df181612750565b60008060006060848603121561288e57600080fd5b833561289981612750565b925060208401356128a981612750565b915060408401356128b981612750565b809150509250925092565b803580151581146128d457600080fd5b919050565b6000806000606084860312156128ee57600080fd5b6128f7846128c4565b92506020840135915061290c604085016128c4565b90509250925092565b60006020828403121561292757600080fd5b5035919050565b6000806040838503121561294157600080fd5b823561294c81612750565b915061295a602084016128c4565b90509250929050565b600080600080600060a0868803121561297b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156129b157600080fd5b50508035926020909101359150565b6000806000606084860312156129d557600080fd5b6129de846128c4565b92506129ec602085016128c4565b915061290c604085016128c4565b600060208284031215612a0c57600080fd5b610df1826128c4565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610d3057610d30612a5a565b81810381811115610d3057610d30612a5a565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612abe57600080fd5b8151610df181612750565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b195784516001600160a01b031683529383019391830191600101612af4565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b4f57600080fd5b8351925060208401519150604084015190509250925092565b6000816000190483118215151615612b8257612b82612a5a565b500290565b600082612ba457634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220b97a2c9914265c81e0c7d0b9772beec0ec219b676143f939b9f178d23cfc63ec64736f6c634300081000336080604052600280546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d17909155600380549091167395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce1790556ec097ce7bc90715b34b9f1000000000600c55610e10600d5569d3c21bcecceda1000000600e5534801561007f57600080fd5b5060405161155438038061155483398101604081905261009e916100ef565b6001600160a01b0381166100bd576002546001600160a01b03166100bf565b805b600180546001600160a01b03929092166001600160a01b031992831617905560008054909116331790555061011f565b60006020828403121561010157600080fd5b81516001600160a01b038116811461011857600080fd5b9392505050565b6114268061012e6000396000f3fe6080604052600436106100f35760003560e01c80638aee81271161008a578063e2d2e21911610059578063e2d2e21914610284578063efca2eed1461029a578063ffb2c479146102b0578063ffd49c84146102d057600080fd5b80638aee8127146101ef578063997664d71461020f578063ce7c2ac214610225578063d0e30db01461027c57600080fd5b80632d48e896116100c65780632d48e896146101835780633a98ef39146101a35780634339a815146101b95780634fab0ae8146101d957600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806328fd319814610163575b600080fd5b34801561010457600080fd5b5061010e600c5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c36600461119a565b6102e6565b005b34801561014f57600080fd5b5061014161015e3660046111c6565b6104d0565b34801561016f57600080fd5b5061010e61017e3660046111c6565b610565565b34801561018f57600080fd5b5061014161019e3660046111e3565b6105f0565b3480156101af57600080fd5b5061010e60085481565b3480156101c557600080fd5b506101416101d43660046111c6565b610684565b3480156101e557600080fd5b5061010e600e5481565b3480156101fb57600080fd5b5061014161020a3660046111c6565b6107f6565b34801561021b57600080fd5b5061010e60095481565b34801561023157600080fd5b506102616102403660046111c6565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b6101416108a1565b34801561029057600080fd5b5061010e600b5481565b3480156102a657600080fd5b5061010e600a5481565b3480156102bc57600080fd5b506101416102cb366004611205565b610ba3565b3480156102dc57600080fd5b5061010e600d5481565b6000546001600160a01b031633148061036657506000546040516301fd3f7760e71b81523360048201526001600160a01b039091169063fe9fbb8090602401602060405180830381865afa158015610342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610366919061121e565b61036f57600080fd5b6001600160a01b038216600090815260076020526040902054156103965761039682610d19565b6000811180156103bc57506001600160a01b038216600090815260076020526040902054155b1561042257600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610455565b8015801561044757506001600160a01b03821660009081526007602052604090205415155b156104555761045582610e33565b6001600160a01b03821660009081526007602052604090205460085461048691839161048091610f48565b90610f93565b6008556001600160a01b03821660009081526007602052604090208190556104ad81610ff7565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b031633148061055057506000546040516301fd3f7760e71b81523360048201526001600160a01b039091169063fe9fbb8090602401602060405180830381865afa15801561052c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610550919061121e565b61055957600080fd5b61056281610d19565b50565b6001600160a01b038116600090815260076020526040812054810361058c57506000919050565b6001600160a01b0382166000908152600760205260408120546105ae90610ff7565b6001600160a01b0384166000908152600760205260409020600101549091508082116105de575060009392505050565b6105e88282610f48565b949350505050565b6000546001600160a01b031633148061067057506000546040516301fd3f7760e71b81523360048201526001600160a01b039091169063fe9fbb8090602401602060405180830381865afa15801561064c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610670919061121e565b61067957600080fd5b600d91909155600e55565b6000546001600160a01b031633148061070457506000546040516301fd3f7760e71b81523360048201526001600160a01b039091169063fe9fbb8090602401602060405180830381865afa1580156106e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610704919061121e565b61070d57600080fd5b6003546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb90839083906370a0823190602401602060405180830381865afa15801561075f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107839190611240565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f2919061121e565b5050565b6000546001600160a01b031633148061087657506000546040516301fd3f7760e71b81523360048201526001600160a01b039091169063fe9fbb8090602401602060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610876919061121e565b61087f57600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633148061092157506000546040516301fd3f7760e71b81523360048201526001600160a01b039091169063fe9fbb8090602401602060405180830381865afa1580156108fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610921919061121e565b61092a57600080fd5b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109979190611240565b60408051600280825260608201835292935060009290916020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2a9190611259565b81600081518110610a3d57610a3d611276565b6001600160a01b039283166020918202929092010152600354825191169082906001908110610a6e57610a6e611276565b6001600160a01b03928316602091820292909201015260015460405163b6f9de9560e01b815291169063b6f9de95903490610ab49060009086903090429060040161128c565b6000604051808303818588803b158015610acd57600080fd5b505af1158015610ae1573d6000803e3d6000fd5b50506003546040516370a0823160e01b815230600482015260009450610b6193508692506001600160a01b03909116906370a0823190602401602060405180830381865afa158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b9190611240565b90610f48565b600954909150610b719082610f93565b600955600854600c54610b9b91610b9291610b8c9085611014565b90611096565b600b5490610f93565b600b55505050565b6000546001600160a01b0316331480610c2357506000546040516301fd3f7760e71b81523360048201526001600160a01b039091169063fe9fbb8090602401602060405180830381865afa158015610bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c23919061121e565b610c2c57600080fd5b6004546000819003610c3c575050565b60008060005a90505b8482108015610c5357508383105b15610d125783600f5410610c67576000600f555b610c996004600f5481548110610c7f57610c7f611276565b6000918252602090912001546001600160a01b03166110d8565b15610cd057610cd06004600f5481548110610cb657610cb6611276565b6000918252602090912001546001600160a01b0316610d19565b610ce5610cde5a8390610f48565b8390610f93565b91505a600f80549192506000610cfa8361130c565b91905055508280610d0a9061130c565b935050610c45565b5050505050565b6001600160a01b0381166000908152600760205260408120549003610d3b5750565b6000610d4682610565565b905080156107f257600a54610d5b9082610f93565b600a5560035460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd5919061121e565b506001600160a01b03821660009081526006602090815260408083204290556007909152902060020154610e099082610f93565b6001600160a01b03831660009081526007602052604090206002810191909155546104ad90610ff7565b60048054610e4390600190611325565b81548110610e5357610e53611276565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610e9157610e91611276565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610edd90600190611325565b81548110610eed57610eed611276565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610f2357610f23611338565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610f8a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061111d565b90505b92915050565b600080610fa0838561134e565b905083811015610f8a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610f8d600c54610b8c600b548561101490919063ffffffff16565b60008260000361102657506000610f8d565b60006110328385611361565b90508261103f8583611380565b14610f8a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610fee565b6000610f8a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611157565b600d546001600160a01b03821660009081526006602052604081205490914291611102919061134e565b108015610f8d5750600e5461111683610565565b1192915050565b600081848411156111415760405162461bcd60e51b8152600401610fee91906113a2565b50600061114e8486611325565b95945050505050565b600081836111785760405162461bcd60e51b8152600401610fee91906113a2565b50600061114e8486611380565b6001600160a01b038116811461056257600080fd5b600080604083850312156111ad57600080fd5b82356111b881611185565b946020939093013593505050565b6000602082840312156111d857600080fd5b8135610f8a81611185565b600080604083850312156111f657600080fd5b50508035926020909101359150565b60006020828403121561121757600080fd5b5035919050565b60006020828403121561123057600080fd5b81518015158114610f8a57600080fd5b60006020828403121561125257600080fd5b5051919050565b60006020828403121561126b57600080fd5b8151610f8a81611185565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156112d65784516001600160a01b0316835293830193918301916001016112b1565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b60006001820161131e5761131e6112f6565b5060010190565b81810381811115610f8d57610f8d6112f6565b634e487b7160e01b600052603160045260246000fd5b80820180821115610f8d57610f8d6112f6565b600081600019048311821515161561137b5761137b6112f6565b500290565b60008261139d57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b818110156113cf578581018301518582016040015282016113b3565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220487a62a7b01da7f6196b6e5ac1b6b31c9b3b3730aeea8dab7266db7deb2a1cbc64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106103e85760003560e01c8063893d20e811610208578063ca33e64c11610118578063f0b37c04116100ab578063f2fde38b1161007a578063f2fde38b14610c28578063f887ea4014610c48578063fabe628314610c68578063fe9fbb8014610c88578063ffb54a9914610ca857600080fd5b8063f0b37c0414610bb9578063f0ef821f14610bd9578063f0fc6bca14610bf3578063f1e9f1e514610c0857600080fd5b8063d920334e116100e7578063d920334e14610b13578063da00097d14610b33578063dd62ed3e14610b53578063e66b1d1e14610b9957600080fd5b8063ca33e64c14610a8a578063ca987b0e14610aaa578063d28d885214610ac0578063d3dddd6214610af357600080fd5b8063a3a2e89e1161019b578063a9f7864b1161016a578063a9f7864b146109e4578063b09f126614610a04578063b6a5d7de14610a35578063bad3ea6a14610a55578063c9567bf914610a7557600080fd5b8063a3a2e89e14610964578063a535598914610984578063a8aa1b31146109a4578063a9059cbb146109c457600080fd5b80639153eb6c116101d75780639153eb6c146108e057806395d89b411461090057806398118cb41461092e5780639e1211171461094457600080fd5b8063893d20e8146108525780638aee8127146108705780638b42507f146108905780638ea5220f146108c057600080fd5b80633f4218e0116103035780636b67c4df1161029657806375f0a8741161026557806375f0a874146107c6578063773fcb5c146107e65780637d1db4a5146108065780637db1342c1461081c578063807c2d9c1461083c57600080fd5b80636b67c4df1461072e5780636ebcf60714610744578063705409331461077157806370a082311461079057600080fd5b80634a74bb02116102d25780634a74bb02146106c4578063571ac8b0146106e357806366eb3785146107035780636827e7641461071857600080fd5b80633f4218e01461062a5780634355855a1461065a57806344de2e4c1461068a578063479f66d8146106a457600080fd5b80632b112e491161037b578063315dca291161034a578063315dca29146105bd57806332424aa3146105df57806334c70889146105f45780633eaaf86b1461061457600080fd5b80632b112e49146105415780632bb14e1d146105565780632f54bf6e1461056c578063313ce5671461059b57600080fd5b80630ca1b8ae116103b75780630ca1b8ae146104be57806318160ddd146104f65780631df4ccfc1461050b57806323b872dd1461052157600080fd5b8063024c2ddd146103f45780630445b6671461043f57806306fdde0314610455578063095ea7b31461048e57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b5061042c61040f366004612768565b600960209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561044b57600080fd5b5061042c601c5481565b34801561046157600080fd5b5060408051808201909152600781526653686962616e6b60c81b60208201525b60405161043691906127a1565b34801561049a57600080fd5b506104ae6104a93660046127ef565b610cc9565b6040519015158152602001610436565b3480156104ca57600080fd5b506018546104de906001600160a01b031681565b6040516001600160a01b039091168152602001610436565b34801561050257600080fd5b5060045461042c565b34801561051757600080fd5b5061042c60115481565b34801561052d57600080fd5b506104ae61053c36600461281b565b610d36565b34801561054d57600080fd5b5061042c610df8565b34801561056257600080fd5b5061042c600f5481565b34801561057857600080fd5b506104ae61058736600461285c565b6000546001600160a01b0391821691161490565b3480156105a757600080fd5b5060125b60405160ff9091168152602001610436565b3480156105c957600080fd5b506105dd6105d8366004612879565b610e69565b005b3480156105eb57600080fd5b506105ab601281565b34801561060057600080fd5b506105dd61060f3660046128d9565b610f1c565b34801561062057600080fd5b5061042c60045481565b34801561063657600080fd5b506104ae61064536600461285c565b600a6020526000908152604090205460ff1681565b34801561066657600080fd5b506104ae61067536600461285c565b600c6020526000908152604090205460ff1681565b34801561069657600080fd5b506007546104ae9060ff1681565b3480156106b057600080fd5b506105dd6106bf366004612915565b610fc3565b3480156106d057600080fd5b50601b546104ae90610100900460ff1681565b3480156106ef57600080fd5b506104ae6106fe36600461285c565b610ffc565b34801561070f57600080fd5b506105dd61100a565b34801561072457600080fd5b5061042c60105481565b34801561073a57600080fd5b5061042c600e5481565b34801561075057600080fd5b5061042c61075f36600461285c565b60086020526000908152604090205481565b34801561077d57600080fd5b50601d546104ae90610100900460ff1681565b34801561079c57600080fd5b5061042c6107ab36600461285c565b6001600160a01b031660009081526008602052604090205490565b3480156107d257600080fd5b506014546104de906001600160a01b031681565b3480156107f257600080fd5b506105dd61080136600461292e565b611039565b34801561081257600080fd5b5061042c60055481565b34801561082857600080fd5b506105dd610837366004612915565b6111e5565b34801561084857600080fd5b5061042c60065481565b34801561085e57600080fd5b506000546001600160a01b03166104de565b34801561087c57600080fd5b506105dd61088b36600461285c565b6112b6565b34801561089c57600080fd5b506104ae6108ab36600461285c565b600b6020526000908152604090205460ff1681565b3480156108cc57600080fd5b506015546104de906001600160a01b031681565b3480156108ec57600080fd5b506105dd6108fb36600461285c565b611374565b34801561090c57600080fd5b506040805180820190915260058152645342414e4b60d81b6020820152610481565b34801561093a57600080fd5b5061042c600d5481565b34801561095057600080fd5b506105dd61095f366004612963565b611458565b34801561097057600080fd5b506105dd61097f36600461292e565b611534565b34801561099057600080fd5b50601d546104ae9062010000900460ff1681565b3480156109b057600080fd5b506017546104de906001600160a01b031681565b3480156109d057600080fd5b506104ae6109df3660046127ef565b6115b5565b3480156109f057600080fd5b506105dd6109ff36600461299e565b6115c2565b348015610a1057600080fd5b50610481604051806040016040528060058152602001645342414e4b60d81b81525081565b348015610a4157600080fd5b506105dd610a5036600461285c565b611683565b348015610a6157600080fd5b506019546104de906001600160a01b031681565b348015610a8157600080fd5b506105dd6116d4565b348015610a9657600080fd5b506013546104de906001600160a01b031681565b348015610ab657600080fd5b5061042c60125481565b348015610acc57600080fd5b506104816040518060400160405280600781526020016653686962616e6b60c81b81525081565b348015610aff57600080fd5b506105dd610b0e3660046129c0565b61173c565b348015610b1f57600080fd5b506105dd610b2e366004612915565b61179a565b348015610b3f57600080fd5b50601b546104ae9062010000900460ff1681565b348015610b5f57600080fd5b5061042c610b6e366004612768565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610ba557600080fd5b506105dd610bb43660046129fa565b61185e565b348015610bc557600080fd5b506105dd610bd436600461285c565b611896565b348015610be557600080fd5b50601d546104ae9060ff1681565b348015610bff57600080fd5b506105dd6118e1565b348015610c1457600080fd5b506003546104de906001600160a01b031681565b348015610c3457600080fd5b506105dd610c4336600461285c565b611940565b348015610c5457600080fd5b506016546104de906001600160a01b031681565b348015610c7457600080fd5b506105dd610c8336600461292e565b6119d0565b348015610c9457600080fd5b506104ae610ca336600461285c565b611a51565b348015610cb457600080fd5b506018546104ae90600160a01b900460ff1681565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d249086815260200190565b60405180910390a35060015b92915050565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610de3576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610dbe918490611ace565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610dee848484611b08565b90505b9392505050565b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75461dead60009081527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299546004549192610e64929091610e5e9190611fb7565b90611fb7565b905090565b610e7233611a51565b610e975760405162461bcd60e51b8152600401610e8e90612a15565b60405180910390fd5b601380546001600160a01b038581166001600160a01b0319928316811790935560148054868316908416811790915560158054928616929093168217909255604080519384526020840192909252908201527f83b1d7530afd2dd88ac9a9c8d68e2d3e41bfd561f1bd84a8e74f8a2be46c4971906060015b60405180910390a1505050565b610f2533611a51565b610f415760405162461bcd60e51b8152600401610e8e90612a15565b601b8054601c84905562ffff001916610100851515810262ff000019169190911762010000841515810291909117928390556040805160ff93850484161515815260208101879052919093049091161515918101919091527f29da3af0f7717d80e16e71407c74f5f3da05c53091f6b4f9555a4c474a5ebbba90606001610f0f565b610fcc33611a51565b610fe85760405162461bcd60e51b8152600401610e8e90612a15565b620b71b08110610ff757600080fd5b601a55565b6000610d3082600019610cc9565b61101333611a51565b61102f5760405162461bcd60e51b8152600401610e8e90612a15565b611037611ff9565b565b61104233611a51565b61105e5760405162461bcd60e51b8152600401610e8e90612a15565b6001600160a01b038216301480159061108557506017546001600160a01b03838116911614155b61108e57600080fd5b6001600160a01b0382166000908152600c60205260409020805460ff1916821580159190911790915561112657601954604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401600060405180830381600087803b15801561110957600080fd5b505af115801561111d573d6000803e3d6000fd5b5050505061119d565b6019546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561118457600080fd5b505af1158015611198573d6000803e3d6000fd5b505050505b604080516001600160a01b038416815282151560208201527f636e0c505e9a45e9a70bef0de9dd97977764a8002ef38eb98b3e3fbf4aa9328291015b60405180910390a15050565b6111ee33611a51565b61120a5760405162461bcd60e51b8152600401610e8e90612a15565b600581101561125b5760405162461bcd60e51b815260206004820152601e60248201527f4d61782077616c6c65742063616e742062652062656c6c6f7720302e352500006044820152606401610e8e565b61127c6103e86112766004548461243290919063ffffffff16565b906124b4565b6006556040518181527fc0a9477d41ca2e8e49c699845d9f8da33dfd85d6708c1ac8099b79d480689e24906020015b60405180910390a150565b6112bf33611a51565b6112db5760405162461bcd60e51b8152600401610e8e90612a15565b601954604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561132257600080fd5b505af1158015611336573d6000803e3d6000fd5b50506040516001600160a01b03841681527f13454ec85b90cd97159337d696d7b95e7cba393910f22195e5dd9883bcbd5f77925060200190506112ab565b6000546001600160a01b0316331461139e5760405162461bcd60e51b8152600401610e8e90612a3a565b6001600160a01b038181166000818152600a602090815260408083208054600160ff199182168117909255600b845282852080548216831790558184528285208054821683179055600c9093528184208054909316179091556019549051630a5b654b60e11b815260048101939093526024830191909152909116906314b6ca9690604401600060405180830381600087803b15801561143d57600080fd5b505af1158015611451573d6000803e3d6000fd5b5050505050565b61146133611a51565b61147d5760405162461bcd60e51b8152600401610e8e90612a15565b600d859055600f849055600e83905560108290556114a7826114a186818988611a6f565b90611a6f565b60118190556114b7908290612a70565b6012819055601910156114c957600080fd5b601154601254600d54600e54601054600f54604080519687526020870195909552938501929092526060840152608083015260a08201527f05893a0fcea57168a1ee91841362deeb0e3410fe59540dcd49696356ab83dc719060c00160405180910390a15050505050565b61153d33611a51565b6115595760405162461bcd60e51b8152600401610e8e90612a15565b6001600160a01b0382166000818152600a6020908152604091829020805460ff19168515159081179091558251938452908301527f707c1ef7782d18657971e66fb16cff6074aa43aab4a6c95e3db8d14fdd41f28b91016111d9565b6000610df1338484611b08565b6115cb33611a51565b6115e75760405162461bcd60e51b8152600401610e8e90612a15565b6019546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b15801561163457600080fd5b505af1158015611648573d6000803e3d6000fd5b505060408051858152602081018590527f208084c3515fa779b1c91135c7bf27c160b4298611fa25bd2bb546bee38548f493500190506111d9565b6000546001600160a01b031633146116ad5760405162461bcd60e51b8152600401610e8e90612a3a565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146116fe5760405162461bcd60e51b8152600401610e8e90612a3a565b6018805460ff60a01b1916600160a01b1790556040517f7daa930aca5c53a2827bdf549077944e93c54de2de816d0bfa59b38afa9cd5d990600090a1565b61174533611a51565b6117615760405162461bcd60e51b8152600401610e8e90612a15565b601d805461ffff191693151561ff00191693909317610100921515929092029190911762ff000019166201000091151591909102179055565b6117a333611a51565b6117bf5760405162461bcd60e51b8152600401610e8e90612a15565b60058110156118105760405162461bcd60e51b815260206004820152601a60248201527f4d61782074782063616e742062652062656c6c6f7720302e35250000000000006044820152606401610e8e565b61182b6103e86112766004548461243290919063ffffffff16565b6005556040518181527fa199c1b026a3c3b96ba0b6b5c4a919734b15efa438afd7e9b75d41cd93e6ebfe906020016112ab565b61186733611a51565b6118835760405162461bcd60e51b8152600401610e8e90612a15565b6007805460ff1916911515919091179055565b6000546001600160a01b031633146118c05760405162461bcd60e51b8152600401610e8e90612a3a565b6001600160a01b03166000908152600160205260409020805460ff19169055565b601954604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561192657600080fd5b505af115801561193a573d6000803e3d6000fd5b50505050565b6000546001600160a01b0316331461196a5760405162461bcd60e51b8152600401610e8e90612a3a565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616391016112ab565b6119d933611a51565b6119f55760405162461bcd60e51b8152600401610e8e90612a15565b6001600160a01b0382166000818152600b6020908152604091829020805460ff19168515159081179091558251938452908301527fcfa4e8aaef2a90ee58ccff485acff966f7f85f47669e27f2461162029155408591016111d9565b6001600160a01b031660009081526001602052604090205460ff1690565b600080611a7c8385612a70565b905083811015610df15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e8e565b60008184841115611af25760405162461bcd60e51b8152600401610e8e91906127a1565b506000611aff8486612a83565b95945050505050565b601b5460009060ff1615611b2857611b218484846124f6565b9050610df1565b6001600160a01b03841660009081526001602052604090205460ff16158015611b6a57506001600160a01b03831660009081526001602052604090205460ff16155b15611bbf57601854600160a01b900460ff16611bbf5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610e8e565b60055482111580611be857506001600160a01b0384166000908152600b602052604090205460ff165b611c285760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e8e565b6017546001600160a01b03163314801590611c465750601b5460ff16155b8015611c595750601b54610100900460ff165b8015611c765750601c543060009081526008602052604090205410155b15611c8357611c83611ff9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611cd5918490611ace565b6001600160a01b038086166000908152600860209081526040808320949094559186168152600b909152205460ff16158015611d13575060075460ff165b15611d49576006546001600160a01b038416600090815260086020526040902054611d3e9084611a6f565b1115611d4957600080fd5b6001600160a01b0384166000908152600a602052604081205460ff16158015611d8b57506001600160a01b0384166000908152600a602052604090205460ff16155b611d955782611da0565b611da08585856125dc565b6001600160a01b038516600090815260086020526040902054909150611dc69082611a6f565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600c909152205460ff16611e6a576019546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e5757600080fd5b505af1925050508015611e68575060015b505b6001600160a01b0384166000908152600c602052604090205460ff16611efb576019546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611ee857600080fd5b505af1925050508015611ef9575060015b505b601954601a546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611f339160040190815260200190565b600060405180830381600087803b158015611f4d57600080fd5b505af1925050508015611f5e575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fa491815260200190565b60405180910390a3506001949350505050565b6000610df183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ace565b601b805460ff1916600117905530600090815260086020526040812054601154600d5491929161203491600291611276919082908790612432565b905060006120428383611fb7565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061207c5761207c612a96565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156120d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f99190612aac565b8160018151811061210c5761210c612a96565b6001600160a01b03928316602091820292909201015260165460405163791ac94760e01b815291169063791ac94790612152908590600090869030904290600401612ac9565b600060405180830381600087803b15801561216c57600080fd5b505af1158015612180573d6000803e3d6000fd5b5050600d54479250600091506121a49061219b9060026124b4565b60115490611fb7565b905060006121c6600261127684611276600d548861243290919063ffffffff16565b905060006121e383611276600f548761243290919063ffffffff16565b9050600061220084611276600e548861243290919063ffffffff16565b9050600061221d856112766010548961243290919063ffffffff16565b9050601960009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226f57600080fd5b505af193505050508015612281575060015b506014546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146122d4576040519150601f19603f3d011682016040523d82523d6000602084013e6122d9565b606091505b50506015546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612332576040519150601f19603f3d011682016040523d82523d6000602084013e612337565b606091505b5060009350839250508b15905061241a5760165460135460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af11580156123b8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123dd9190612b3a565b505060408051888152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601b805460ff1916905550505050505050505050565b60008260000361244457506000610d30565b60006124508385612b68565b90508261245d8583612b87565b14610df15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e8e565b6000610df183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612722565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054612547918490611ace565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546125769083611a6f565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906125ca9086815260200190565b60405180910390a35060019392505050565b60175460009081906001600160a01b0385811691161480156126055750601d54610100900460ff165b1561260f57506012545b6017546001600160a01b03868116911614801561262e5750601d5460ff165b1561263857506011545b6017546001600160a01b0386811691161480159061266457506017546001600160a01b03858116911614155b1561268757601d5462010000900460ff16156126835750601254612687565b5060005b600061269860646112768685612432565b306000908152600860205260409020549091506126b59082611a6f565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127069085815260200190565b60405180910390a36127188482611fb7565b9695505050505050565b600081836127435760405162461bcd60e51b8152600401610e8e91906127a1565b506000611aff8486612b87565b6001600160a01b038116811461276557600080fd5b50565b6000806040838503121561277b57600080fd5b823561278681612750565b9150602083013561279681612750565b809150509250929050565b600060208083528351808285015260005b818110156127ce578581018301518582016040015282016127b2565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561280257600080fd5b823561280d81612750565b946020939093013593505050565b60008060006060848603121561283057600080fd5b833561283b81612750565b9250602084013561284b81612750565b929592945050506040919091013590565b60006020828403121561286e57600080fd5b8135610df181612750565b60008060006060848603121561288e57600080fd5b833561289981612750565b925060208401356128a981612750565b915060408401356128b981612750565b809150509250925092565b803580151581146128d457600080fd5b919050565b6000806000606084860312156128ee57600080fd5b6128f7846128c4565b92506020840135915061290c604085016128c4565b90509250925092565b60006020828403121561292757600080fd5b5035919050565b6000806040838503121561294157600080fd5b823561294c81612750565b915061295a602084016128c4565b90509250929050565b600080600080600060a0868803121561297b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156129b157600080fd5b50508035926020909101359150565b6000806000606084860312156129d557600080fd5b6129de846128c4565b92506129ec602085016128c4565b915061290c604085016128c4565b600060208284031215612a0c57600080fd5b610df1826128c4565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610d3057610d30612a5a565b81810381811115610d3057610d30612a5a565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612abe57600080fd5b8151610df181612750565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b195784516001600160a01b031683529383019391830191600101612af4565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b4f57600080fd5b8351925060208401519150604084015190509250925092565b6000816000190483118215151615612b8257612b82612a5a565b500290565b600082612ba457634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220b97a2c9914265c81e0c7d0b9772beec0ec219b676143f939b9f178d23cfc63ec64736f6c63430008100033

Deployed Bytecode Sourcemap

11571:15090:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12395:68;;;;;;;;;;-1:-1:-1;12395:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;689:25:1;;;677:2;662:18;12395:68:0;;;;;;;;13333:54;;;;;;;;;;;;;;;;15888:80;;;;;;;;;;-1:-1:-1;15960:5:0;;;;;;;;;;;;-1:-1:-1;;;15960:5:0;;;;15888:80;;;;;;;:::i;16732:216::-;;;;;;;;;;-1:-1:-1;16732:216:0;;;;;:::i;:::-;;:::i;:::-;;;1763:14:1;;1756:22;1738:41;;1726:2;1711:18;16732:216:0;1598:187:1;13031:23:0;;;;;;;;;;-1:-1:-1;13031:23:0;;;;-1:-1:-1;;;;;13031:23:0;;;;;;-1:-1:-1;;;;;1954:32:1;;;1936:51;;1924:2;1909:18;13031:23:0;1790:203:1;16150:88:0;;;;;;;;;;-1:-1:-1;16223:12:0;;16150:88;;12782:27;;;;;;;;;;;;;;;;17534:378;;;;;;;;;;-1:-1:-1;17534:378:0;;;;;:::i;:::-;;:::i;16330:142::-;;;;;;;;;;;;;:::i;12712:29::-;;;;;;;;;;;;;;;;4892:103;;;;;;;;;;-1:-1:-1;4892:103:0;;;;;:::i;:::-;4947:4;4982:5;-1:-1:-1;;;;;4971:16:0;;;4982:5;;4971:16;;4892:103;16064:80;;;;;;;;;;-1:-1:-1;11780:2:0;16064:80;;;2883:4:1;2871:17;;;2853:36;;2841:2;2826:18;16064:80:0;2711:184:1;24975:359:0;;;;;;;;;;-1:-1:-1;24975:359:0;;;;;:::i;:::-;;:::i;:::-;;11746:36;;;;;;;;;;;;11780:2;11746:36;;25342:379;;;;;;;;;;-1:-1:-1;25342:379:0;;;;;:::i;:::-;;:::i;12114:58::-;;;;;;;;;;;;;;;;12472:44;;;;;;;;;;-1:-1:-1;12472:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12578:49;;;;;;;;;;-1:-1:-1;12578:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12301:33;;;;;;;;;;-1:-1:-1;12301:33:0;;;;;;;;26016:148;;;;;;;;;;-1:-1:-1;26016:148:0;;;;;:::i;:::-;;:::i;13232:40::-;;;;;;;;;;-1:-1:-1;13232:40:0;;;;;;;;;;;16956:122;;;;;;;;;;-1:-1:-1;16956:122:0;;;;;:::i;:::-;;:::i;26372:74::-;;;;;;;;;;;;;:::i;12748:25::-;;;;;;;;;;;;;;;;12674:31;;;;;;;;;;;;;;;;12343:45;;;;;;;;;;-1:-1:-1;12343:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;13432:30;;;;;;;;;;-1:-1:-1;13432:30:0;;;;;;;;;;;16480:105;;;;;;;;;;-1:-1:-1;16480:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;16564:18:0;16546:7;16564:18;;;:9;:18;;;;;;;16480:105;12904:30;;;;;;;;;;-1:-1:-1;12904:30:0;;;;-1:-1:-1;;;;;12904:30:0;;;23634:435;;;;;;;;;;-1:-1:-1;23634:435:0;;;;;:::i;:::-;;:::i;12179:52::-;;;;;;;;;;;;;;;;22876:244;;;;;;;;;;-1:-1:-1;22876:244:0;;;;;:::i;:::-;;:::i;12238:50::-;;;;;;;;;;;;;;;;16244:78;;;;;;;;;;-1:-1:-1;16296:7:0;16314:5;-1:-1:-1;;;;;16314:5:0;16244:78;;26176:188;;;;;;;;;;-1:-1:-1;26176:188:0;;;;;:::i;:::-;;:::i;12523:48::-;;;;;;;;;;-1:-1:-1;12523:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12941:24;;;;;;;;;;-1:-1:-1;12941:24:0;;;;-1:-1:-1;;;;;12941:24:0;;;24077:285;;;;;;;;;;-1:-1:-1;24077:285:0;;;;;:::i;:::-;;:::i;15974:84::-;;;;;;;;;;-1:-1:-1;16048:7:0;;;;;;;;;;;;-1:-1:-1;;;16048:7:0;;;;15974:84;;12636:31;;;;;;;;;;;;;;;;24370:597;;;;;;;;;;-1:-1:-1;24370:597:0;;;;;:::i;:::-;;:::i;23248:177::-;;;;;;;;;;-1:-1:-1;23248:177:0;;;;;:::i;:::-;;:::i;13469:34::-;;;;;;;;;;-1:-1:-1;13469:34:0;;;;;;;;;;;13005:19;;;;;;;;;;-1:-1:-1;13005:19:0;;;;-1:-1:-1;;;;;13005:19:0;;;17370:156;;;;;;;;;;-1:-1:-1;17370:156:0;;;;;:::i;:::-;;:::i;25729:279::-;;;;;;;;;;-1:-1:-1;25729:279:0;;;;;:::i;:::-;;:::i;11699:40::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11699:40:0;;;;;4565:94;;;;;;;;;;-1:-1:-1;4565:94:0;;;;;:::i;:::-;;:::i;13103:46::-;;;;;;;;;;-1:-1:-1;13103:46:0;;;;-1:-1:-1;;;;;13103:46:0;;;20655:108;;;;;;;;;;;;;:::i;12861:36::-;;;;;;;;;;-1:-1:-1;12861:36:0;;;;-1:-1:-1;;;;;12861:36:0;;;12816;;;;;;;;;;;;;;;;11652:40;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11652:40:0;;;;;26454:204;;;;;;;;;;-1:-1:-1;26454:204:0;;;;;:::i;:::-;;:::i;22635:233::-;;;;;;;;;;-1:-1:-1;22635:233:0;;;;;:::i;:::-;;:::i;13279:45::-;;;;;;;;;;-1:-1:-1;13279:45:0;;;;;;;;;;;16591:133;;;;;;;;;;-1:-1:-1;16591:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16693:19:0;;;16675:7;16693:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16591:133;23128:108;;;;;;;;;;-1:-1:-1;23128:108:0;;;;;:::i;:::-;;:::i;4735:97::-;;;;;;;;;;-1:-1:-1;4735:97:0;;;;;:::i;:::-;;:::i;13396:29::-;;;;;;;;;;-1:-1:-1;13396:29:0;;;;;;;;17090:98;;;;;;;;;;;;;:::i;12034:71::-;;;;;;;;;;-1:-1:-1;12034:71:0;;;;-1:-1:-1;;;;;12034:71:0;;;5264:173;;;;;;;;;;-1:-1:-1;5264:173:0;;;;;:::i;:::-;;:::i;12974:24::-;;;;;;;;;;-1:-1:-1;12974:24:0;;;;-1:-1:-1;;;;;12974:24:0;;;23433:187;;;;;;;;;;-1:-1:-1;23433:187:0;;;;;:::i;:::-;;:::i;5066:107::-;;;;;;;;;;-1:-1:-1;5066:107:0;;;;;:::i;:::-;;:::i;13063:31::-;;;;;;;;;;-1:-1:-1;13063:31:0;;;;-1:-1:-1;;;13063:31:0;;;;;;16732:216;16836:10;16807:4;16824:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16824:32:0;;;;;;;;;;:41;;;16881:37;16807:4;;16824:32;;16881:37;;;;16859:6;689:25:1;;677:2;662:18;;543:177;16881:37:0;;;;;;;;-1:-1:-1;16936:4:0;16732:216;;;;;:::o;17534:378::-;-1:-1:-1;;;;;17664:19:0;;17634:4;17664:19;;;:11;:19;;;;;;;;17684:10;17664:31;;;;;;;;-1:-1:-1;;17664:52:0;17661:186;;17766:69;;;;;;;;;;;-1:-1:-1;;;17766:69:0;;;;;;;;-1:-1:-1;;;;;17766:19:0;;-1:-1:-1;17766:19:0;;;:11;:19;;;;;17786:10;17766:31;;;;;;;;;;:69;;17802:6;;17766:35;:69::i;:::-;-1:-1:-1;;;;;17732:19:0;;;;;;:11;:19;;;;;;;;17752:10;17732:31;;;;;;;:103;17661:186;17864:40;17878:6;17886:9;17897:6;17864:13;:40::i;:::-;17857:47;;17534:378;;;;;;:::o;16330:142::-;16564:9;:18;;;;11823:42;16383:7;16564:18;;;;;16410:12;;16383:7;;16410:54;;16564:18;;16410:33;;:12;:16;:33::i;:::-;:37;;:54::i;:::-;16403:61;;16330:142;:::o;24975:359::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;;;;;;;;;25114:21:::1;:44:::0;;-1:-1:-1;;;;;25114:44:0;;::::1;-1:-1:-1::0;;;;;;25114:44:0;;::::1;::::0;::::1;::::0;;;25169:15:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;25216:9:::1;:24:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;25256:70:::1;::::0;;6945:34:1;;;7010:2;6995:18;;6988:43;;;;7047:18;;;7040:43;25256:70:0::1;::::0;6895:2:1;6880:18;25256:70:0::1;;;;;;;;24975:359:::0;;;:::o;25342:379::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;25474:21:::1;:39:::0;;25524:13:::1;:32:::0;;;-1:-1:-1;;25567:43:0;25474:39:::1;::::0;::::1;;::::0;::::1;-1:-1:-1::0;;25567:43:0;;;;;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;25626:87:::1;::::0;;25474:39:::1;25649:21:::0;;::::1;::::0;::::1;7309:14:1::0;7302:22;7284:41;;7356:2;7341:18;;7334:34;;;25687:25:0;;;::::1;::::0;;::::1;7411:14:1::0;7404:22;7384:18;;;7377:50;;;;25626:87:0::1;::::0;7272:2:1;7257:18;25626:87:0::1;7094:339:1::0;26016:148:0;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;26115:6:::1;26106;:15;26098:24;;;::::0;::::1;;26133:14;:23:::0;26016:148::o;16956:122::-;17011:4;17035:35;17043:7;-1:-1:-1;;17035:7:0;:35::i;26372:74::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;26428:10:::1;:8;:10::i;:::-;26372:74::o:0;23634:435::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23734:23:0;::::1;23752:4;23734:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;23771:4:0::1;::::0;-1:-1:-1;;;;;23761:14:0;;::::1;23771:4:::0;::::1;23761:14;;23734:41;23726:50;;;::::0;::::1;;-1:-1:-1::0;;;;;23787:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;23787:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23841:162:::1;;23866:19;::::0;:39:::1;::::0;-1:-1:-1;;;23866:39:0;;-1:-1:-1;;;;;7638:32:1;;;23866:39:0::1;::::0;::::1;7620:51:1::0;23866:19:0::1;7687:18:1::0;;;7680:34;23866:19:0;;::::1;::::0;:28:::1;::::0;7593:18:1;;23866:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23841:162;;;23936:19;::::0;-1:-1:-1;;;;;23973:17:0;;::::1;23936:19;23973:17:::0;;;:9:::1;:17;::::0;;;;;;;23936:55;;-1:-1:-1;;;23936:55:0;;::::1;::::0;::::1;7620:51:1::0;;;;7687:18;;;7680:34;23936:19:0;::::1;::::0;:28:::1;::::0;7593:18:1;;23936:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23841:162;24018:43;::::0;;-1:-1:-1;;;;;8190:32:1;;8172:51;;8266:14;;8259:22;8254:2;8239:18;;8232:50;24018:43:0::1;::::0;8145:18:1;24018:43:0::1;;;;;;;;23634:435:::0;;:::o;22876:244::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;22973:1:::1;22961:8;:13;;22952:57;;;::::0;-1:-1:-1;;;22952:57:0;;8495:2:1;22952:57:0::1;::::0;::::1;8477:21:1::0;8534:2;8514:18;;;8507:30;8573:32;8553:18;;;8546:60;8623:18;;22952:57:0::1;8293:354:1::0;22952:57:0::1;23034:36;23065:4;23034:26;23047:12;;23034:8;:12;;:26;;;;:::i;:::-;:30:::0;::::1;:36::i;:::-;23020:10;:50:::0;23086:26:::1;::::0;689:25:1;;;23086:26:0::1;::::0;677:2:1;662:18;23086:26:0::1;;;;;;;;22876:244:::0;:::o;26176:188::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;26253:19:::1;::::0;:48:::1;::::0;-1:-1:-1;;;26253:48:0;;-1:-1:-1;;;;;1954:32:1;;;26253:48:0::1;::::0;::::1;1936:51:1::0;26253:19:0;;::::1;::::0;:34:::1;::::0;1909:18:1;;26253:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26317:39:0::1;::::0;-1:-1:-1;;;;;1954:32:1;;1936:51;;26317:39:0::1;::::0;-1:-1:-1;1924:2:1;1909:18;;-1:-1:-1;26317:39:0::1;1790:203:1::0;24077:285:0;4947:4;4982:5;-1:-1:-1;;;;;4982:5:0;4289:10;4971:16;4273:38;;;;-1:-1:-1;;;4273:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24145:21:0;;::::1;;::::0;;;:11:::1;:21;::::0;;;;;;;:28;;24169:4:::1;-1:-1:-1::0;;24145:28:0;;::::1;::::0;::::1;::::0;;;24184:15:::1;:25:::0;;;;;:32;;;::::1;::::0;::::1;::::0;;24227:24;;;;;;:31;;;::::1;::::0;::::1;::::0;;24269:16:::1;:26:::0;;;;;;:33;;;;::::1;;::::0;;;24313:19:::1;::::0;:41;;-1:-1:-1;;;24313:41:0;;::::1;::::0;::::1;7620:51:1::0;;;;7687:18;;;7680:34;;;;24313:19:0;;::::1;::::0;:28:::1;::::0;7593:18:1;;24313:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24077:285:::0;:::o;24370:597::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;24528:12:::1;:24:::0;;;24563:10:::1;:25:::0;;;24599:12:::1;:30:::0;;;24640:6:::1;:18:::0;;;24690:58:::1;24649:9:::0;24690:46:::1;24576:12:::0;24690:46;24543:9;24614:15;24690:16:::1;:30::i;:::-;:34:::0;::::1;:46::i;:58::-;24679:8;:69:::0;;;24789:23:::1;::::0;24800:12;;24789:23:::1;:::i;:::-;24769:17;:43:::0;;;24852:2:::1;-1:-1:-1::0;24831:23:0::1;24823:32;;;::::0;::::1;;24883:8;::::0;24893:17:::1;::::0;24912:12:::1;::::0;24926::::1;::::0;24940:6:::1;::::0;24948:10:::1;::::0;24871:88:::1;::::0;;9535:25:1;;;9591:2;9576:18;;9569:34;;;;9619:18;;;9612:34;;;;9677:2;9662:18;;9655:34;9720:3;9705:19;;9698:35;9764:3;9749:19;;9742:35;24871:88:0::1;::::0;9522:3:1;9507:19;24871:88:0::1;;;;;;;24370:597:::0;;;;;:::o;23248:177::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23335:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;23335:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23379:38;;8172:51:1;;;8239:18;;;8232:50;23379:38:0::1;::::0;8145:18:1;23379:38:0::1;8004:284:1::0;17370:156:0;17450:4;17474:44;17488:10;17500:9;17511:6;17474:13;:44::i;25729:279::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;25846:19:::1;::::0;:77:::1;::::0;-1:-1:-1;;;25846:77:0;;::::1;::::0;::::1;9962:25:1::0;;;10003:18;;;9996:34;;;-1:-1:-1;;;;;25846:19:0;;::::1;::::0;:43:::1;::::0;9935:18:1;;25846:77:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25939:61:0::1;::::0;;9962:25:1;;;10018:2;10003:18;;9996:34;;;25939:61:0::1;::::0;-1:-1:-1;9935:18:1;;-1:-1:-1;25939:61:0::1;9788:248:1::0;4565:94:0;4947:4;4982:5;-1:-1:-1;;;;;4982:5:0;4289:10;4971:16;4273:38;;;;-1:-1:-1;;;4273:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4625:19:0::1;;::::0;;;4647:4:::1;4625:19;::::0;;;;;;;:26;;-1:-1:-1;;4625:26:0::1;::::0;;::::1;::::0;;4565:94::o;20655:108::-;4947:4;4982:5;-1:-1:-1;;;;;4982:5:0;4289:10;4971:16;4273:38;;;;-1:-1:-1;;;4273:38:0;;;;;;;:::i;:::-;20706:11:::1;:18:::0;;-1:-1:-1;;;;20706:18:0::1;-1:-1:-1::0;;;20706:18:0::1;::::0;;20740:15:::1;::::0;::::1;::::0;20706:18;;20740:15:::1;20655:108::o:0;26454:204::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;26556:10:::1;:20:::0;;-1:-1:-1;;26587:22:0;26556:20;::::1;;-1:-1:-1::0;;26587:22:0;;;;;26556:20:::1;26587:22:::0;::::1;;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;26620:30:0::1;::::0;;::::1;;::::0;;;::::1;;::::0;;26454:204::o;22635:233::-;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;22728:1:::1;22716:8;:13;;22707:53;;;::::0;-1:-1:-1;;;22707:53:0;;10243:2:1;22707:53:0::1;::::0;::::1;10225:21:1::0;10282:2;10262:18;;;10255:30;10321:28;10301:18;;;10294:56;10367:18;;22707:53:0::1;10041:350:1::0;22707:53:0::1;22786:36;22817:4;22786:26;22799:12;;22786:8;:12;;:26;;;;:::i;:36::-;22771:12;:51:::0;22838:22:::1;::::0;689:25:1;;;22838:22:0::1;::::0;677:2:1;662:18;22838:22:0::1;543:177:1::0;23128:108:0;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;23203:14:::1;:25:::0;;-1:-1:-1;;23203:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23128:108::o;4735:97::-;4947:4;4982:5;-1:-1:-1;;;;;4982:5:0;4289:10;4971:16;4273:38;;;;-1:-1:-1;;;4273:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4797:19:0::1;4819:5;4797:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;4797:27:0::1;::::0;;4735:97::o;17090:98::-;17135:19;;:45;;-1:-1:-1;;;17135:45:0;;17169:10;17135:45;;;1936:51:1;-1:-1:-1;;;;;17135:19:0;;;;:33;;1909:18:1;;17135:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17090:98::o;5264:173::-;4947:4;4982:5;-1:-1:-1;;;;;4982:5:0;4289:10;4971:16;4273:38;;;;-1:-1:-1;;;4273:38:0;;;;;;;:::i;:::-;5340:5:::1;:11:::0;;-1:-1:-1;;;;;;5340:11:0::1;-1:-1:-1::0;;;;;5340:11:0;::::1;::::0;;::::1;::::0;;5362:19;;;-1:-1:-1;5362:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;5362:26:0::1;::::0;;::::1;::::0;;;5404:25;;1936:51:1;;;5404:25:0::1;::::0;1909:18:1;5404:25:0::1;1790:203:1::0;23433:187:0;4450:24;4463:10;4450:12;:24::i;:::-;4442:48;;;;-1:-1:-1;;;4442:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23524:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;23524:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23572:40;;8172:51:1;;;8239:18;;;8232:50;23572:40:0::1;::::0;8145:18:1;23572:40:0::1;8004:284:1::0;5066:107:0;-1:-1:-1;;;;;5146:19:0;5122:4;5146:19;;;:14;:19;;;;;;;;;5066:107::o;156:179::-;214:7;;246:5;250:1;246;:5;:::i;:::-;234:17;;275:1;270;:6;;262:46;;;;-1:-1:-1;;;262:46:0;;10814:2:1;262:46:0;;;10796:21:1;10853:2;10833:18;;;10826:30;10892:29;10872:18;;;10865:57;10939:18;;262:46:0;10612:351:1;487:190:0;573:7;609:12;601:6;;;;593:29;;;;-1:-1:-1;;;593:29:0;;;;;;;;:::i;:::-;-1:-1:-1;633:9:0;645:5;649:1;645;:5;:::i;:::-;633:17;487:190;-1:-1:-1;;;;;487:190:0:o;17920:1544::-;18042:16;;18012:4;;18042:16;;18039:73;;;18068:41;18083:6;18091:9;18102:6;18068:14;:41::i;:::-;18061:48;;;;18039:73;-1:-1:-1;;;;;18128:22:0;;;;;;:14;:22;;;;;;;;18127:23;:53;;;;-1:-1:-1;;;;;;18155:25:0;;;;;;:14;:25;;;;;;;;18154:26;18127:53;18124:128;;;18204:11;;-1:-1:-1;;;18204:11:0;;;;18196:44;;;;-1:-1:-1;;;18196:44:0;;11303:2:1;18196:44:0;;;11285:21:1;11342:2;11322:18;;;11315:30;-1:-1:-1;;;11361:18:1;;;11354:50;11421:18;;18196:44:0;11101:344:1;18196:44:0;18282:12;;18272:6;:22;;:49;;;-1:-1:-1;;;;;;18298:23:0;;;;;;:15;:23;;;;;;;;18272:49;18264:79;;;;-1:-1:-1;;;18264:79:0;;11652:2:1;18264:79:0;;;11634:21:1;11691:2;11671:18;;;11664:30;-1:-1:-1;;;11710:18:1;;;11703:47;11767:18;;18264:79:0;11450:341:1;18264:79:0;18373:4;;-1:-1:-1;;;;;18373:4:0;18359:10;:18;;;;:39;;-1:-1:-1;18382:16:0;;;;18381:17;18359:39;:64;;;;-1:-1:-1;18402:21:0;;;;;;;18359:64;:109;;;;-1:-1:-1;18455:13:0;;18445:4;18427:24;;;;:9;:24;;;;;;:41;;18359:109;18356:152;;;18485:10;:8;:10::i;:::-;18575:53;;;;;;;;;;;-1:-1:-1;;;18575:53:0;;;;;;;;-1:-1:-1;;;;;18575:17:0;;-1:-1:-1;18575:17:0;;;:9;:17;;;;;;;;:53;;18597:6;;18575:21;:53::i;:::-;-1:-1:-1;;;;;18555:17:0;;;;;;;:9;:17;;;;;;;;:73;;;;18653:26;;;;;:15;:26;;;;;;;18652:27;:45;;;;-1:-1:-1;18683:14:0;;;;18652:45;18649:141;;;18767:10;;-1:-1:-1;;;;;18731:20:0;;;;;;:9;:20;;;;;;:32;;18756:6;18731:24;:32::i;:::-;:46;;18723:55;;;;;;-1:-1:-1;;;;;18825:19:0;;18802;18825;;;:11;:19;;;;;;;;18824:20;:47;;;;-1:-1:-1;;;;;;18849:22:0;;;;;;:11;:22;;;;;;;;18848:23;18824:47;:93;;18911:6;18824:93;;;18874:34;18882:6;18890:9;18901:6;18874:7;:34::i;:::-;-1:-1:-1;;;;;18951:20:0;;;;;;:9;:20;;;;;;18802:115;;-1:-1:-1;18951:37:0;;18802:115;18951:24;:37::i;:::-;-1:-1:-1;;;;;18928:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;19034:24;;;;;:16;:24;;;;;;;19030:127;;19079:19;;-1:-1:-1;;;;;19116:17:0;;;19079:19;19116:17;;;:9;:17;;;;;;;;19079:55;;-1:-1:-1;;;19079:55:0;;;;;7620:51:1;;;;7687:18;;;7680:34;19079:19:0;;;:28;;7593:18:1;;19079:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19075:71;;-1:-1:-1;;;;;19173:27:0;;;;;;:16;:27;;;;;;;;19169:137;;19221:19;;-1:-1:-1;;;;;19261:20:0;;;19221:19;19261:20;;;:9;:20;;;;;;;;19221:61;;-1:-1:-1;;;19221:61:0;;;;;7620:51:1;;;;7687:18;;;7680:34;19221:19:0;;;:28;;7593:18:1;;19221:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19217:77;;19322:19;;19350:14;;19322:43;;-1:-1:-1;;;;;;19322:43:0;;-1:-1:-1;;;;;19322:19:0;;;;:27;;:43;;;;689:25:1;;;677:2;662:18;;543:177;19322:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19318:59;19411:9;-1:-1:-1;;;;;19394:40:0;19403:6;-1:-1:-1;;;;;19394:40:0;;19422:11;19394:40;;;;689:25:1;;677:2;662:18;;543:177;19394:40:0;;;;;;;;-1:-1:-1;19452:4:0;;17920:1544;-1:-1:-1;;;;17920:1544:0:o;343:136::-;401:7;428:43;432:1;435;428:43;;;;;;;;;;;;;;;;;:3;:43::i;20771:1832::-;14387:16;:23;;-1:-1:-1;;14387:23:0;14406:4;14387:23;;;20877:4:::1;14387:16:::0;20859:24;;;:9:::1;:24;::::0;;;;;20958:8:::1;::::0;20940:12:::1;::::0;20859:24;;14387:16;20920:54:::1;::::0;20972:1:::1;::::0;20920:47:::1;::::0;20958:8;20920:47;;20859:24;;20920:19:::1;:33::i;:54::-;20894:80:::0;-1:-1:-1;20985:20:0::1;21008:36;:15:::0;20894:80;21008:19:::1;:36::i;:::-;21081:16;::::0;;21095:1:::1;21081:16:::0;;;;;::::1;::::0;;20985:59;;-1:-1:-1;21057:21:0::1;::::0;21081:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21081:16:0::1;21057:40;;21126:4;21108;21113:1;21108:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21108:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;21152:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;21152:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;21108:7;;21152:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21142:4;21147:1;21142:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21142:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;21178:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;21178:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;21250:12;;21178:6:::1;::::0;21293:4;;21320::::1;::::0;21340:15:::1;::::0;21178:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;21468:12:0::1;::::0;21399:21:::1;::::0;-1:-1:-1;21379:17:0::1;::::0;-1:-1:-1;21455:33:0::1;::::0;21468:19:::1;::::0;21485:1:::1;21468:16;:19::i;:::-;21455:8;::::0;;:12:::1;:33::i;:::-;21433:55;;21509:26;21538:51;21587:1;21538:44;21570:11;21538:27;21552:12;;21538:9;:13;;:27;;;;:::i;:51::-;21509:80;;21600:27;21630:42;21660:11;21630:25;21644:10;;21630:9;:13;;:25;;;;:::i;:42::-;21600:72;;21683:26;21712:44;21744:11;21712:27;21726:12;;21712:9;:13;;:27;;;;:::i;:44::-;21683:73;;21767:20;21790:38;21816:11;21790:21;21804:6;;21790:9;:13;;:21;;;;:::i;:38::-;21767:61;;21845:19;;;;;;;;;-1:-1:-1::0;;;;;21845:19:0::1;-1:-1:-1::0;;;;;21845:27:0::1;;21880:19;21845:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;21955:15:0::1;::::0;21947:72:::1;::::0;21927:15:::1;::::0;-1:-1:-1;;;;;21955:15:0::1;::::0;22009:5:::1;::::0;21984:18;;21927:15;21947:72;21927:15;21947:72;21984:18;21955:15;22009:5;21947:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;22060:9:0::1;::::0;22052:60:::1;::::0;21926:93;;-1:-1:-1;22031:16:0::1;::::0;-1:-1:-1;;;;;22060:9:0;;::::1;::::0;22102:5:::1;::::0;22083:12;;22031:16;22052:60;22031:16;22052:60;22083:12;22060:9;22102:5;22052:60:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;22186:5:0::1;::::0;-1:-1:-1;22186:5:0;;-1:-1:-1;;22237:19:0;;;-1:-1:-1;22234:362:0::1;;22272:6;::::0;22446:21:::1;::::0;22272:244:::1;::::0;-1:-1:-1;;;22272:244:0;;22348:4:::1;22272:244;::::0;::::1;13852:34:1::0;13902:18;;;13895:34;;;22272:6:0::1;13945:18:1::0;;;13938:34;;;13988:18;;;13981:34;-1:-1:-1;;;;;22446:21:0;;::::1;14031:19:1::0;;;14024:44;22486:15:0::1;14084:19:1::0;;;14077:35;22272:6:0;::::1;::::0;:22:::1;::::0;22302:18;;13786:19:1;;22272:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;22536:48:0::1;::::0;;9962:25:1;;;10018:2;10003:18;;9996:34;;;22536:48:0::1;::::0;-1:-1:-1;9935:18:1;22536:48:0::1;;;;;;;22234:362;-1:-1:-1::0;;14433:16:0;:24;;-1:-1:-1;;14433:24:0;;;-1:-1:-1;;;;;;;;;;20771:1832:0:o;685:224::-;743:7;767:1;772;767:6;763:25;;-1:-1:-1;784:1:0;777:8;;763:25;798:9;810:5;814:1;810;:5;:::i;:::-;798:17;-1:-1:-1;843:1:0;834:5;838:1;798:17;834:5;:::i;:::-;:10;826:56;;;;-1:-1:-1;;;826:56:0;;15031:2:1;826:56:0;;;15013:21:1;15070:2;15050:18;;;15043:30;15109:34;15089:18;;;15082:62;-1:-1:-1;;;15160:18:1;;;15153:31;15201:19;;826:56:0;14829:397:1;917:132:0;975:7;1002:39;1006:1;1009;1002:39;;;;;;;;;;;;;;;;;:3;:39::i;19476:330::-;19606:53;;;;;;;;;;;-1:-1:-1;;;19606:53:0;;;;;;;;-1:-1:-1;;;;;19606:17:0;;19569:4;19606:17;;;:9;:17;;;;;;;:53;;19628:6;;19606:21;:53::i;:::-;-1:-1:-1;;;;;19586:17:0;;;;;;;:9;:17;;;;;;:73;;;;19693:20;;;;;;;:32;;19718:6;19693:24;:32::i;:::-;-1:-1:-1;;;;;19670:20:0;;;;;;;:9;:20;;;;;;;:55;;;;19741:35;;;;;;;;;;19769:6;689:25:1;;677:2;662:18;;543:177;19741:35:0;;;;;;;;-1:-1:-1;19794:4:0;19476:330;;;;;:::o;19814:833::-;19970:4;;19900:7;;;;-1:-1:-1;;;;;19957:17:0;;;19970:4;;19957:17;:32;;;;-1:-1:-1;19978:11:0;;;;;;;19957:32;19953:106;;;-1:-1:-1;20022:17:0;;19953:106;20083:4;;-1:-1:-1;;;;;20073:14:0;;;20083:4;;20073:14;:28;;;;-1:-1:-1;20091:10:0;;;;20073:28;20069:93;;;-1:-1:-1;20134:8:0;;20069:93;20186:4;;-1:-1:-1;;;;;20176:14:0;;;20186:4;;20176:14;;;;:35;;-1:-1:-1;20207:4:0;;-1:-1:-1;;;;;20194:17:0;;;20207:4;;20194:17;;20176:35;20172:225;;;20231:15;;;;;;;20227:159;;;-1:-1:-1;20282:17:0;;20227:159;;;-1:-1:-1;20369:1:0;20227:159;20407:17;20427:34;20457:3;20427:25;:6;20438:13;20427:10;:25::i;:34::-;20519:4;20501:24;;;;:9;:24;;;;;;20407:54;;-1:-1:-1;20501:39:0;;20407:54;20501:28;:39::i;:::-;20492:4;20474:24;;;;:9;:24;;;;;;;:66;;;;20556:42;;-1:-1:-1;;;;;20556:42:0;;;;;;;20588:9;689:25:1;;677:2;662:18;;543:177;20556:42:0;;;;;;;;20618:21;:6;20629:9;20618:10;:21::i;:::-;20611:28;19814:833;-1:-1:-1;;;;;;19814:833:0:o;1057:189::-;1143:7;1178:12;1171:5;1163:28;;;;-1:-1:-1;;;1163:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1202:9:0;1214:5;1218:1;1214;:5;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:388::-;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;-1:-1:-1;460:2:1;445:18;;432:32;473:33;432:32;473:33;:::i;:::-;525:7;515:17;;;150:388;;;;;:::o;725:548::-;837:4;866:2;895;884:9;877:21;927:6;921:13;970:6;965:2;954:9;950:18;943:34;995:1;1005:140;1019:6;1016:1;1013:13;1005:140;;;1114:14;;;1110:23;;1104:30;1080:17;;;1099:2;1076:26;1069:66;1034:10;;1005:140;;;1009:3;1194:1;1189:2;1180:6;1169:9;1165:22;1161:31;1154:42;1264:2;1257;1253:7;1248:2;1240:6;1236:15;1232:29;1221:9;1217:45;1213:54;1205:62;;;;725:548;;;;:::o;1278:315::-;1346:6;1354;1407:2;1395:9;1386:7;1382:23;1378:32;1375:52;;;1423:1;1420;1413:12;1375:52;1462:9;1449:23;1481:31;1506:5;1481:31;:::i;:::-;1531:5;1583:2;1568:18;;;;1555:32;;-1:-1:-1;;;1278:315:1:o;1998:456::-;2075:6;2083;2091;2144:2;2132:9;2123:7;2119:23;2115:32;2112:52;;;2160:1;2157;2150:12;2112:52;2199:9;2186:23;2218:31;2243:5;2218:31;:::i;:::-;2268:5;-1:-1:-1;2325:2:1;2310:18;;2297:32;2338:33;2297:32;2338:33;:::i;:::-;1998:456;;2390:7;;-1:-1:-1;;;2444:2:1;2429:18;;;;2416:32;;1998:456::o;2459:247::-;2518:6;2571:2;2559:9;2550:7;2546:23;2542:32;2539:52;;;2587:1;2584;2577:12;2539:52;2626:9;2613:23;2645:31;2670:5;2645:31;:::i;2900:529::-;2977:6;2985;2993;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;3101:9;3088:23;3120:31;3145:5;3120:31;:::i;:::-;3170:5;-1:-1:-1;3227:2:1;3212:18;;3199:32;3240:33;3199:32;3240:33;:::i;:::-;3292:7;-1:-1:-1;3351:2:1;3336:18;;3323:32;3364:33;3323:32;3364:33;:::i;:::-;3416:7;3406:17;;;2900:529;;;;;:::o;3434:160::-;3499:20;;3555:13;;3548:21;3538:32;;3528:60;;3584:1;3581;3574:12;3528:60;3434:160;;;:::o;3599:316::-;3670:6;3678;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3778:26;3794:9;3778:26;:::i;:::-;3768:36;;3851:2;3840:9;3836:18;3823:32;3813:42;;3874:35;3905:2;3894:9;3890:18;3874:35;:::i;:::-;3864:45;;3599:316;;;;;:::o;3920:180::-;3979:6;4032:2;4020:9;4011:7;4007:23;4003:32;4000:52;;;4048:1;4045;4038:12;4000:52;-1:-1:-1;4071:23:1;;3920:180;-1:-1:-1;3920:180:1:o;4105:315::-;4170:6;4178;4231:2;4219:9;4210:7;4206:23;4202:32;4199:52;;;4247:1;4244;4237:12;4199:52;4286:9;4273:23;4305:31;4330:5;4305:31;:::i;:::-;4355:5;-1:-1:-1;4379:35:1;4410:2;4395:18;;4379:35;:::i;:::-;4369:45;;4105:315;;;;;:::o;4425:454::-;4520:6;4528;4536;4544;4552;4605:3;4593:9;4584:7;4580:23;4576:33;4573:53;;;4622:1;4619;4612:12;4573:53;-1:-1:-1;;4645:23:1;;;4715:2;4700:18;;4687:32;;-1:-1:-1;4766:2:1;4751:18;;4738:32;;4817:2;4802:18;;4789:32;;-1:-1:-1;4868:3:1;4853:19;4840:33;;-1:-1:-1;4425:454:1;-1:-1:-1;4425:454:1:o;4884:248::-;4952:6;4960;5013:2;5001:9;4992:7;4988:23;4984:32;4981:52;;;5029:1;5026;5019:12;4981:52;-1:-1:-1;;5052:23:1;;;5122:2;5107:18;;;5094:32;;-1:-1:-1;4884:248:1:o;5373:316::-;5441:6;5449;5457;5510:2;5498:9;5489:7;5485:23;5481:32;5478:52;;;5526:1;5523;5516:12;5478:52;5549:26;5565:9;5549:26;:::i;:::-;5539:36;;5594:35;5625:2;5614:9;5610:18;5594:35;:::i;:::-;5584:45;;5648:35;5679:2;5668:9;5664:18;5648:35;:::i;5694:180::-;5750:6;5803:2;5791:9;5782:7;5778:23;5774:32;5771:52;;;5819:1;5816;5809:12;5771:52;5842:26;5858:9;5842:26;:::i;6365:335::-;6567:2;6549:21;;;6606:2;6586:18;;;6579:30;-1:-1:-1;;;6640:2:1;6625:18;;6618:41;6691:2;6676:18;;6365:335::o;8652:329::-;8854:2;8836:21;;;8893:1;8873:18;;;8866:29;-1:-1:-1;;;8926:2:1;8911:18;;8904:36;8972:2;8957:18;;8652:329::o;8986:127::-;9047:10;9042:3;9038:20;9035:1;9028:31;9078:4;9075:1;9068:15;9102:4;9099:1;9092:15;9118:125;9183:9;;;9204:10;;;9201:36;;;9217:18;;:::i;10968:128::-;11035:9;;;11056:11;;;11053:37;;;11070:18;;:::i;11928:127::-;11989:10;11984:3;11980:20;11977:1;11970:31;12020:4;12017:1;12010:15;12044:4;12041:1;12034:15;12060:251;12130:6;12183:2;12171:9;12162:7;12158:23;12154:32;12151:52;;;12199:1;12196;12189:12;12151:52;12231:9;12225:16;12250:31;12275:5;12250:31;:::i;12316:980::-;12578:4;12626:3;12615:9;12611:19;12657:6;12646:9;12639:25;12683:2;12721:6;12716:2;12705:9;12701:18;12694:34;12764:3;12759:2;12748:9;12744:18;12737:31;12788:6;12823;12817:13;12854:6;12846;12839:22;12892:3;12881:9;12877:19;12870:26;;12931:2;12923:6;12919:15;12905:29;;12952:1;12962:195;12976:6;12973:1;12970:13;12962:195;;;13041:13;;-1:-1:-1;;;;;13037:39:1;13025:52;;13132:15;;;;13097:12;;;;13073:1;12991:9;12962:195;;;-1:-1:-1;;;;;;;13213:32:1;;;;13208:2;13193:18;;13186:60;-1:-1:-1;;;13277:3:1;13262:19;13255:35;13174:3;12316:980;-1:-1:-1;;;12316:980:1:o;14123:306::-;14211:6;14219;14227;14280:2;14268:9;14259:7;14255:23;14251:32;14248:52;;;14296:1;14293;14286:12;14248:52;14325:9;14319:16;14309:26;;14375:2;14364:9;14360:18;14354:25;14344:35;;14419:2;14408:9;14404:18;14398:25;14388:35;;14123:306;;;;;:::o;14434:168::-;14474:7;14540:1;14536;14532:6;14528:14;14525:1;14522:21;14517:1;14510:9;14503:17;14499:45;14496:71;;;14547:18;;:::i;:::-;-1:-1:-1;14587:9:1;;14434:168::o;14607:217::-;14647:1;14673;14663:132;;14717:10;14712:3;14708:20;14705:1;14698:31;14752:4;14749:1;14742:15;14780:4;14777:1;14770:15;14663:132;-1:-1:-1;14809:9:1;;14607:217::o

Swarm Source

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