BNB Price: $695.44 (-2.04%)
Gas: 1 GWei
 

Overview

Max Total Supply

1,000,000AI.COM

Holders

7

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
BSC: Validator Set
Balance
450,000 AI.COM

Value
$0.00
0x0000000000000000000000000000000000001000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
AIDOTCOM

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2023-08-05
*/

/**
 *Submitted for verification at BscScan.com on 2023-08-03
*/

//TELEGRAM: https://t.me/aidotcombscportal

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

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

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

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

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

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


        return c;
    }
}

interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    IBEP20  BUSD = IBEP20(0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56);
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    IDEXRouter router;

    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 = 30 * 60;
    uint256 public minDistribution = 1 * (10 ** 12);

    uint256 currentIndex;

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

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

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

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    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 = BUSD .balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(BUSD);

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

        uint256 amount = BUSD.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 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

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

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function 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);
            BUSD.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 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 AIDOTCOM is IBEP20, Auth {
    using SafeMath for uint256;

    address BUSD = 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56; 
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEV =  0xc41475Eb3967Dc3DDFe474de171e7238D1b4fb23;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    string constant _name = "Ai.com";
    string constant _symbol = "AI.COM";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1000000 * 10**0 * (10 ** _decimals);

    uint256 public _maxBuyTxAmount = _totalSupply * 200 / 10000; 
    uint256 public _maxSellTxAmount = _totalSupply * 200 / 10000; 
    uint256 public _maxWalletToken = ( _totalSupply * 300 ) / 10000;  

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) public isBlacklisted;
    
    uint256 public liquidityFeeBuy = 0; 
    uint256 public buybackFeeBuy = 0;
    uint256 public reflectionFeeBuy = 0;
    uint256 public marketingFeeBuy = 7;
    uint256 public devFeeBuy = 0;
    uint256 public totalFeeBuy = 7;

    uint256 public liquidityFeeSell = 0;
    uint256 public buybackFeeSell = 0;
    uint256 public reflectionFeeSell = 0;
    uint256 public marketingFeeSell = 7;
    uint256 public devFeeSell = 0;
    uint256 public totalFeeSell = 7;

    uint256 liquidityFee;
    uint256 buybackFee;
    uint256 reflectionFee;
    uint256 marketingFee;
    uint256 devFee;
    uint256 totalFee;
    uint256 feeDenominator = 100;

    uint256 GREEDTriggeredAt;
    uint256 GREEDDuration = 3600;
    
    uint256 deadBlocks = 3;

    uint256 public swapThreshold = _totalSupply * 200 / 10000; 

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    uint256 buybackMultiplierNumerator = 200;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public autoBuybackEnabled = false;
    bool public autoBuybackMultiplier = false;
    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    bool public buyCooldownEnabled = false;
    uint8 public cooldownTimerInterval = 30;
    mapping (address => uint) private cooldownTimer;

    IDEXRouter public router;
    address public pair;
    uint256 public launchedAt;
    bool public tradingOpen = true;
    bool public swapEnabled = true;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {

        router = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        pair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));
        
        address _presaler = msg.sender;
        isFeeExempt[_presaler] = true;
        isTxLimitExempt[_presaler] = true;
        
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;
        isTimelockExempt[DEV] = true;
        
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver =0xc41475Eb3967Dc3DDFe474de171e7238D1b4fb23;

        _balances[_presaler] = _totalSupply;
        emit Transfer(address(0), _presaler, _totalSupply);
    }

    receive() external payable { }

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

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

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

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

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

     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = _totalSupply.mul(maxWallPercent).div(10000);

    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

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

        require(!isBlacklisted[recipient] && !isBlacklisted[sender], 'Address is blacklisted');

        bool isSell = recipient == pair; 

        setCorrectFees(isSell);

        checkMaxWallet(sender, recipient, amount);
   
        checkBuyCooldown(sender, recipient);

        checkTxLimit(sender, amount, recipient, isSell);

        bool GREEDMode = inGREEDTime();

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

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, isSell, GREEDMode) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        if(!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }

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

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

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

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

    function setCorrectFees(bool isSell) internal {
        if(isSell){
            liquidityFee = liquidityFeeSell;
            buybackFee = buybackFeeSell;
            reflectionFee = reflectionFeeSell;
            marketingFee = marketingFeeSell;
            devFee = devFeeSell;
            totalFee = totalFeeSell;
        } else {
            liquidityFee = liquidityFeeBuy;
            buybackFee = buybackFeeBuy;
            reflectionFee = reflectionFeeBuy;
            marketingFee = marketingFeeBuy;
            devFee = devFeeBuy;
            totalFee = totalFeeBuy;
        }
    }

    function inGREEDTime() public view returns (bool){
        if(GREEDTriggeredAt.add(GREEDDuration) > block.timestamp){
            return true;
        } else {
            return false;
        }
    }

    function checkTxLimit(address sender, uint256 amount, address recipient, bool isSell) internal view {
        if (recipient != owner){
            if(isSell){
                require(amount <= _maxSellTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            } else {
                require(amount <= _maxBuyTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            }
        }
    }

    function checkBuyCooldown(address sender, address recipient) internal {
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }
    }

    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if (!authorizations[sender] && recipient != owner && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver && recipient != DEV){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
        }
    }

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

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks >= block.number){ return feeDenominator.sub(1); }
        if(selling && buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp){ return getMultipliedFee(); }
        return totalFee;
    }

    function getMultipliedFee() public view returns (uint256) {
        uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp);
        uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee);
        return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength));
    }

    function takeFee(address sender, uint256 amount, bool isSell, bool GREEDMode) internal returns (uint256) {
        uint256 feeAmount;

        if (GREEDMode){
            if(isSell){
                feeAmount = amount.mul(totalFee).mul(3).div(2).div(feeDenominator);
            } else {
                feeAmount = amount.mul(totalFee).div(2).div(feeDenominator);
            }
        } else {
            feeAmount = amount.mul(totalFee).div(feeDenominator);
        }

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

        return amount.sub(feeAmount);
    }

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

    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
        launch();
    }

    function enableGREED(uint256 _seconds) public authorized {
        GREEDTriggeredAt = block.timestamp;
        GREEDDuration = _seconds;
    }

    function disableGREED() external authorized {
        GREEDTriggeredAt = 0;
    }

    function cooldownEnabled(bool _status, uint8 _interval) public authorized {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    function blacklistAddress(address _address, bool _value) public authorized{
        isBlacklisted[_address] = _value;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 amountBNB = address(this).balance.sub(balanceBefore);
        uint256 totalBNBFee = totalFee.sub(dynamicLiquidityFee.div(2));
        uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);
        uint256 amountBNBDev = amountBNB.mul(devFee).div(totalBNBFee); 


        try distributor.deposit{value: amountBNBReflection}() {} catch {}
        (bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");
        (bool successDev, /* bytes memory data */) = payable(DEV).call{value: amountBNBDev, gas: 30000}(""); 
        require(successMarketing, "marketing receiver rejected ETH transfer");
        require(successDev, "dev receiver rejected ETH transfer");

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

    function shouldAutoBuyback() internal view returns (bool) {
        return msg.sender != pair
            && !inSwap
            && autoBuybackEnabled
            && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number
            && address(this).balance >= autoBuybackAmount;
    }

    function triggerManualBuyback(uint256 amount, bool triggerBuybackMultiplier) external authorized {
        uint256 amountWithDecimals = amount * (10 ** 18);
        uint256 amountToBuy = amountWithDecimals.div(100);
        buyTokens(amountToBuy, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }
 
    function clearBuybackMultiplier() external authorized {
        buybackMultiplierTriggeredAt = 0;
    }

    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        if(autoBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
        if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; }
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }

    function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period, bool _autoBuybackMultiplier) external authorized {
        autoBuybackEnabled = _enabled;
        autoBuybackCap = _cap;
        autoBuybackAccumulator = 0;
        autoBuybackAmount = _amount;
        autoBuybackBlockPeriod = _period;
        autoBuybackBlockLast = block.number;
        autoBuybackMultiplier = _autoBuybackMultiplier;
    }

    function setBuybackMultiplierSettings(uint256 numerator, uint256 denominator, uint256 length) external authorized {
        require(numerator / denominator <= 2 && numerator > denominator);
        buybackMultiplierNumerator = numerator;
        buybackMultiplierDenominator = denominator;
        buybackMultiplierLength = length;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
    }

    function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external authorized {
        _maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000);
    }

    function setSellTxLimitInPercent(uint256 maxSellTxPercent) external authorized {
        _maxSellTxAmount = _totalSupply.mul(maxSellTxPercent).div(10000);
    }

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

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

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

    function setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    function setBuyFees(uint256 _liquidityFeeBuy, uint256 _buybackFeeBuy, uint256 _reflectionFeeBuy, uint256 _marketingFeeBuy, uint256 _devFeeBuy, uint256 _feeDenominator) external authorized {
        liquidityFeeBuy = _liquidityFeeBuy;
        buybackFeeBuy = _buybackFeeBuy;
        reflectionFeeBuy = _reflectionFeeBuy;
        marketingFeeBuy = _marketingFeeBuy;
        devFeeBuy = _devFeeBuy;
        totalFeeBuy = _liquidityFeeBuy.add(_buybackFeeBuy).add(_reflectionFeeBuy).add(_marketingFeeBuy).add(_devFeeBuy);
        feeDenominator = _feeDenominator;
    }

    function setSellFees(uint256 _liquidityFeeSell, uint256 _buybackFeeSell, uint256 _reflectionFeeSell, uint256 _marketingFeeSell, uint256 _devFeeSell, uint256 _feeDenominator) external authorized {
        liquidityFeeSell = _liquidityFeeSell;
        buybackFeeSell = _buybackFeeSell;
        reflectionFeeSell = _reflectionFeeSell;
        marketingFeeSell = _marketingFeeSell;
        devFeeSell = _devFeeSell;
        totalFeeSell = _liquidityFeeSell.add(_buybackFeeSell).add(_reflectionFeeSell).add(_marketingFeeSell).add(_devFeeSell);
        feeDenominator = _feeDenominator;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _totalSupply * _amount / 10000; 
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function manualSend() external authorized {
        uint256 contractETHBalance = address(this).balance;
        payable(marketingFeeReceiver).transfer(contractETHBalance);
    }
    
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function claimDividend() external {
        distributor.claimDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        return distributor.getUnpaidEarnings(shareholder);
    } 

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
    
    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
}

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":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackMultiplier","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableGREED","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"enableGREED","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultipliedFee","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":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inGREEDTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeSell","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":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"bool","name":"_autoBuybackMultiplier","type":"bool"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_buybackFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_devFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setBuybackMultiplierSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_buybackFeeSell","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_devFeeSell","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxPercent","type":"uint256"}],"name":"setSellTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeSell","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":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerManualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811673e9e7cea3dedca5984780bafc599bd69add087d561790915560038054821673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c17905560048054821661dead17905560058054821690556006805490911673c41475eb3967dc3ddfe474de171e7238d1b4fb231790556200008c6009600a6200057a565b6200009b90620f42406200063b565b60095561271060095460c8620000b291906200063b565b620000be91906200050e565b600a5561271060095460c8620000d591906200063b565b620000e191906200050e565b600b5561271060095461012c620000f991906200063b565b6200010591906200050e565b600c556000601455600060155560006016556007601755600060185560076019556000601a556000601b556000601c556007601d556000601e556007601f556064602655610e10602855600360295561271060095460c86200016891906200063b565b6200017491906200050e565b602a556014602b556064602c81905560c8602d55602e556107086030556031805461ffff199081169091556207a120603855603980548216611e00179055603e8054909116610101179055348015620001cc57600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155603b80547310ed43c718714eb63d5aa57b78b54704e256024e931683179055825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b1580156200024e57600080fd5b505afa15801562000263573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002899190620004dc565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620002d657600080fd5b505af1158015620002eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003119190620004dc565b603c80546001600160a01b0319166001600160a01b03928316179055306000908152600e60209081526040808320603b80548616855292529182902060001990555490519116906200036390620004ce565b6001600160a01b039091168152602001604051809103906000f08015801562000390573d6000803e3d6000fd5b50603780546001600160a01b039283166001600160a01b031991821617909155336000818152600f60209081526040808320805460ff199081166001908117909255601084528285208054821683179055601184528285208054821683179055600480548916865283862080548316841790553080875284872080548416851790556006548a1687528487208054841685179055603c548a16875260128652848720805484168517905586528386208054831684179055549097168452818420805490971617909555600780548516841790556008805490941673c41475eb3967dc3ddfe474de171e7238d1b4fb2317909355600954828252600d84528482208190559351938452909283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000673565b611068806200389c83390190565b600060208284031215620004ef57600080fd5b81516001600160a01b03811681146200050757600080fd5b9392505050565b6000826200052c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005725781600019048211156200055657620005566200065d565b808516156200056457918102915b93841c939080029062000536565b509250929050565b60006200050760ff841683600082620005965750600162000635565b81620005a55750600062000635565b8160018114620005be5760028114620005c957620005e9565b600191505062000635565b60ff841115620005dd57620005dd6200065d565b50506001821b62000635565b5060208310610133831016604e8410600b84101617156200060e575081810a62000635565b6200061a838362000531565b80600019048211156200063157620006316200065d565b0290505b92915050565b60008160001904831182151516156200065857620006586200065d565b500290565b634e487b7160e01b600052601160045260246000fd5b61321980620006836000396000f3fe60806040526004361061044b5760003560e01c806382334b9411610234578063dd62ed3e1161012e578063f2fde38b116100b6578063f887ea401161007a578063f887ea4014610cdb578063fb5f27fb14610cfb578063fe575a8714610d11578063fe9fbb8014610d41578063ffb54a9914610d6157600080fd5b8063f2fde38b14610c46578063f429389014610c66578063f708a64f14610c7b578063f74c9f4714610c9b578063f84ba65d14610cbb57600080fd5b8063e3aa51bc116100fd578063e3aa51bc14610bb1578063e96fada214610bd1578063f0b37c0414610bf1578063f0fc6bca14610c11578063f1f3bca314610c2657600080fd5b8063dd62ed3e14610b0c578063df20fd4914610b52578063df4a76c514610b72578063e1dcc71f14610b9257600080fd5b8063ac45ed1c116101bc578063ca33e64c11610180578063ca33e64c14610a8b578063cdba31fd14610aab578063cf4be39414610ac1578063d51ed1c814610ad7578063d806d12f14610af757600080fd5b8063ac45ed1c14610a0a578063b210b06d14610a20578063b6a5d7de14610a35578063ba876bb914610a55578063bf56b37114610a7557600080fd5b806395d89b411161020357806395d89b411461095b5780639d1944f51461098a578063a4b45c00146109aa578063a8aa1b31146109ca578063a9059cbb146109ea57600080fd5b806382334b94146108d357806382bf293c146108f357806382d2011614610913578063893d20e81461092957600080fd5b80632f5620d11161034557806350db71fb116102cd5780636ddd1713116102915780636ddd17131461082957806370a0823114610848578063722b62ad1461087e57806378109e541461089d5780637affa29b146108b357600080fd5b806350db71fb1461079957806353148416146107b9578063571ac8b0146107cf578063617fe0ed146107ef578063658d4b7f1461080957600080fd5b80633bb8a8d4116103145780633bb8a8d41461071f578063409d056614610739578063455a43961461074f5780634dfc855a1461076f5780634f7b4d491461078457600080fd5b80632f5620d1146106b1578063313ce567146106d157806333477327146106f357806337bc957e1461070957600080fd5b806318160ddd116103d35780632b112e49116103975780632b112e49146106175780632d48e8961461062c5780632d5945671461064c5780632e4a9bd71461066c5780632f54bf6e1461068257600080fd5b806318160ddd14610582578063201e7991146105975780632375ce40146105b757806323b872dd146105d757806328fd3198146105f757600080fd5b806310075a691161041a57806310075a691461050a5780631107b3a5146105205780631161ae391461053657806312835c5e1461055657806313374e7a1461056c57600080fd5b80630445b6671461045757806306fdde0314610480578063095ea7b3146104b85780630d295980146104e857600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046d602a5481565b6040519081526020015b60405180910390f35b34801561048c57600080fd5b5060408051808201909152600681526541692e636f6d60d01b60208201525b604051610477919061305c565b3480156104c457600080fd5b506104d86104d3366004612dea565b610d7b565b6040519015158152602001610477565b3480156104f457600080fd5b50610508610503366004612e16565b610de8565b005b34801561051657600080fd5b5061046d60175481565b34801561052c57600080fd5b5061046d601a5481565b34801561054257600080fd5b506104d8610551366004612f24565b610e33565b34801561056257600080fd5b5061046d601e5481565b34801561057857600080fd5b5061046d601d5481565b34801561058e57600080fd5b5060095461046d565b3480156105a357600080fd5b506105086105b2366004612f24565b610e47565b3480156105c357600080fd5b506105086105d2366004612f46565b610e77565b3480156105e357600080fd5b506104d86105f2366004612d74565b610ecc565b34801561060357600080fd5b5061046d610612366004612d1e565b610f8e565b34801561062357600080fd5b5061046d61100c565b34801561063857600080fd5b50610508610647366004612f24565b61105e565b34801561065857600080fd5b50610508610667366004612e9d565b6110ed565b34801561067857600080fd5b5061046d60155481565b34801561068e57600080fd5b506104d861069d366004612d1e565b6000546001600160a01b0391821691161490565b3480156106bd57600080fd5b506105086106cc366004612e4d565b611139565b3480156106dd57600080fd5b5060095b60405160ff9091168152602001610477565b3480156106ff57600080fd5b5061046d600a5481565b34801561071557600080fd5b5061046d601b5481565b34801561072b57600080fd5b506031546104d89060ff1681565b34801561074557600080fd5b5061046d60165481565b34801561075b57600080fd5b5061050861076a366004612db5565b61119f565b34801561077b57600080fd5b506104d86111ef565b34801561079057600080fd5b5061050861121b565b3480156107a557600080fd5b506105086107b4366004612db5565b611247565b3480156107c557600080fd5b5061046d601f5481565b3480156107db57600080fd5b506104d86107ea366004612d1e565b611297565b3480156107fb57600080fd5b506039546104d89060ff1681565b34801561081557600080fd5b50610508610824366004612db5565b6112a5565b34801561083557600080fd5b50603e546104d890610100900460ff1681565b34801561085457600080fd5b5061046d610863366004612d1e565b6001600160a01b03166000908152600d602052604090205490565b34801561088a57600080fd5b506039546106e190610100900460ff1681565b3480156108a957600080fd5b5061046d600c5481565b3480156108bf57600080fd5b506105086108ce366004612ecf565b6112f5565b3480156108df57600080fd5b506105086108ee366004612f01565b611341565b3480156108ff57600080fd5b5061050861090e366004612ecf565b6113ea565b34801561091f57600080fd5b5061046d60145481565b34801561093557600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610477565b34801561096757600080fd5b5060408051808201909152600681526541492e434f4d60d01b60208201526104ab565b34801561099657600080fd5b506105086109a5366004612ecf565b611435565b3480156109b657600080fd5b506105086109c5366004612d3b565b61146e565b3480156109d657600080fd5b50603c54610943906001600160a01b031681565b3480156109f657600080fd5b506104d8610a05366004612dea565b6114c1565b348015610a1657600080fd5b5061046d601c5481565b348015610a2c57600080fd5b506105086114ce565b348015610a4157600080fd5b50610508610a50366004612d1e565b6114fa565b348015610a6157600080fd5b50610508610a70366004612fa0565b61154b565b348015610a8157600080fd5b5061046d603d5481565b348015610a9757600080fd5b50600754610943906001600160a01b031681565b348015610ab757600080fd5b5061046d60185481565b348015610acd57600080fd5b5061046d600b5481565b348015610ae357600080fd5b5061046d610af2366004612ecf565b6115ae565b348015610b0357600080fd5b5061046d6115ef565b348015610b1857600080fd5b5061046d610b27366004612d3b565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b348015610b5e57600080fd5b50610508610b6d366004612e31565b611662565b348015610b7e57600080fd5b50610508610b8d366004612ecf565b6116bd565b348015610b9e57600080fd5b506031546104d890610100900460ff1681565b348015610bbd57600080fd5b50610508610bcc366004612ecf565b611703565b348015610bdd57600080fd5b50600854610943906001600160a01b031681565b348015610bfd57600080fd5b50610508610c0c366004612d1e565b611731565b348015610c1d57600080fd5b5061050861177c565b348015610c3257600080fd5b5061046d610c41366004612e16565b6117d5565b348015610c5257600080fd5b50610508610c61366004612d1e565b611832565b348015610c7257600080fd5b506105086118c8565b348015610c8757600080fd5b50610508610c96366004612db5565b61192b565b348015610ca757600080fd5b50610508610cb6366004612fa0565b611a2f565b348015610cc757600080fd5b50610508610cd6366004612db5565b611a8c565b348015610ce757600080fd5b50603b54610943906001600160a01b031681565b348015610d0757600080fd5b5061046d60195481565b348015610d1d57600080fd5b506104d8610d2c366004612d1e565b60136020526000908152604090205460ff1681565b348015610d4d57600080fd5b506104d8610d5c366004612d1e565b611adc565b348015610d6d57600080fd5b50603e546104d89060ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610dd69086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610e1b5760405162461bcd60e51b8152600401610e12906130b1565b60405180910390fd5b603e805460ff191682151517905543603d5550565b50565b600082610e3f836115ae565b119392505050565b610e5033611adc565b610e6c5760405162461bcd60e51b8152600401610e12906130d1565b602b91909155602c55565b610e8033611adc565b610e9c5760405162461bcd60e51b8152600401610e12906130d1565b6002610ea8838561314a565b11158015610eb557508183115b610ebe57600080fd5b602d92909255602e55603055565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610f79576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610f54918490611afa565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610f84848484611b34565b90505b9392505050565b60375460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd31989060240160206040518083038186803b158015610fd457600080fd5b505afa158015610fe8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de29190612ee8565b6005546001600160a01b03166000908152600d6020526040812054611059906004546001600160a01b03166000908152600d60205260409020546110539060095490611f82565b90611f82565b905090565b61106733611adc565b6110835760405162461bcd60e51b8152600401610e12906130d1565b6037546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b505050505050565b6110f633611adc565b6111125760405162461bcd60e51b8152600401610e12906130d1565b6039805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b61114233611adc565b61115e5760405162461bcd60e51b8152600401610e12906130d1565b6031805460329590955560006033556034939093556035919091554360365561ffff1990921692151561ff0019169290921761010091151591909102179055565b6111a833611adc565b6111c45760405162461bcd60e51b8152600401610e12906130d1565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600042611209602854602754611fc490919063ffffffff16565b11156112155750600190565b50600090565b61122433611adc565b6112405760405162461bcd60e51b8152600401610e12906130d1565b6000602755565b61125033611adc565b61126c5760405162461bcd60e51b8152600401610e12906130d1565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000610de282600019610d7b565b6112ae33611adc565b6112ca5760405162461bcd60e51b8152600401610e12906130d1565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6112fe33611adc565b61131a5760405162461bcd60e51b8152600401610e12906130d1565b61133b6127106113358360095461202390919063ffffffff16565b906120a2565b600a5550565b61134a33611adc565b6113665760405162461bcd60e51b8152600401610e12906130d1565b600061137a83670de0b6b3a764000061316c565b905060006113898260646120a2565b6004549091506113a39082906001600160a01b03166120e4565b82156113e45742602f556030546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b50505050565b6000546001600160a01b031633146114145760405162461bcd60e51b8152600401610e12906130b1565b61142f6127106113358360095461202390919063ffffffff16565b600c5550565b61143e33611adc565b61145a5760405162461bcd60e51b8152600401610e12906130d1565b620b71b0811061146957600080fd5b603855565b61147733611adc565b6114935760405162461bcd60e51b8152600401610e12906130d1565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6000610f87338484611b34565b6114d733611adc565b6114f35760405162461bcd60e51b8152600401610e12906130d1565b6000602f55565b6000546001600160a01b031633146115245760405162461bcd60e51b8152600401610e12906130b1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61155433611adc565b6115705760405162461bcd60e51b8152600401610e12906130d1565b601a869055601b859055601c849055601d839055601e8290556115a18261159b858188818c8c611fc4565b90611fc4565b601f556026555050505050565b6000610de26115bb61100c565b603c546001600160a01b03166000908152600d6020526040902054611335906115e8906002905b90612023565b8590612023565b60008061160d42611053603054602f54611fc490919063ffffffff16565b90506000611634602554611053602e54611335602d5460255461202390919063ffffffff16565b905061165b611652603054611335858561202390919063ffffffff16565b60255490611fc4565b9250505090565b61166b33611adc565b6116875760405162461bcd60e51b8152600401610e12906130d1565b603e805461ff00191661010084151502179055600954612710906116ac90839061316c565b6116b6919061314a565b602a555050565b6116c633611adc565b6116e25760405162461bcd60e51b8152600401610e12906130d1565b6116fd6127106113358360095461202390919063ffffffff16565b600b5550565b61170c33611adc565b6117285760405162461bcd60e51b8152600401610e12906130d1565b42602755602855565b6000546001600160a01b0316331461175b5760405162461bcd60e51b8152600401610e12906130b1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b603754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156117c157600080fd5b505af11580156113e4573d6000803e3d6000fd5b600043602954603d546117e89190613132565b106117fb57602654610de2906001611f82565b81801561181d57504261181b603054602f54611fc490919063ffffffff16565b115b1561182a57610de26115ef565b505060255490565b6000546001600160a01b0316331461185c5760405162461bcd60e51b8152600401610e12906130b1565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6118d133611adc565b6118ed5760405162461bcd60e51b8152600401610e12906130d1565b60085460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611927573d6000803e3d6000fd5b5050565b61193433611adc565b6119505760405162461bcd60e51b8152600401610e12906130d1565b6001600160a01b03821630148015906119775750603c546001600160a01b03838116911614155b61198057600080fd5b6001600160a01b0382166000908152601260205260409020805460ff191682158015919091179091556119e657603754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044016110b7565b6037546001600160a01b038381166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044016110b7565b611a3833611adc565b611a545760405162461bcd60e51b8152600401610e12906130d1565b60148690556015859055601684905560178390556018829055611a7f8261159b858188818c8c611fc4565b6019556026555050505050565b611a9533611adc565b611ab15760405162461bcd60e51b8152600401610e12906130d1565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115611b1e5760405162461bcd60e51b8152600401610e12919061305c565b506000611b2b848661318b565b95945050505050565b603e5460009062010000900460ff1615611b5a57611b538484846121f3565b9050610f87565b6001600160a01b03841660009081526001602052604090205460ff16158015611b9c57506001600160a01b03831660009081526001602052604090205460ff16155b15611bf357603e5460ff16611bf35760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610e12565b6001600160a01b03831660009081526013602052604090205460ff16158015611c3557506001600160a01b03841660009081526013602052604090205460ff16155b611c7a5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610e12565b603c546001600160a01b03848116911614611c94816122d9565b611c9f85858561232d565b611ca9858561249f565b611cb585848684612581565b6000611cbf6111ef565b9050611cc96126b9565b15611cd657611cd6612713565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d9091529190912054611d28918690611afa565b6001600160a01b0387166000908152600d6020908152604080832093909355600f90529081205460ff1615611d5d5784611d69565b611d6987868585612bdb565b6001600160a01b0387166000908152600d6020526040902054909150611d8f9082611fc4565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526012909152205460ff16611e33576037546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e2057600080fd5b505af1925050508015611e31575060015b505b6001600160a01b03861660009081526012602052604090205460ff16611ec4576037546001600160a01b038781166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611eb157600080fd5b505af1925050508015611ec2575060015b505b6037546038546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611efc9160040190815260200190565b600060405180830381600087803b158015611f1657600080fd5b505af1925050508015611f27575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f6d91815260200190565b60405180910390a35060019695505050505050565b6000610f8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611afa565b600080611fd18385613132565b905083811015610f875760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e12565b60008261203257506000610de2565b600061203e838561316c565b90508261204b858361314a565b14610f875760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e12565b6000610f8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612cdb565b603e805462ff0000191662010000179055604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b031691839150600090612136576121366131b8565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061216a5761216a6131b8565b6001600160a01b039283166020918202929092010152603b5460405163b6f9de9560e01b815291169063b6f9de959085906121b090600090869088904290600401613027565b6000604051808303818588803b1580156121c957600080fd5b505af11580156121dd573d6000803e3d6000fd5b5050603e805462ff000019169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d90915291822054612244918490611afa565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546122739083611fc4565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122c79086815260200190565b60405180910390a35060019392505050565b801561230657601a54602055601b54602155601c54602255601d54602355601e54602455601f5460255550565b60145460205560155460215560165460225560175460235560185460245560195460255550565b6001600160a01b03831660009081526001602052604090205460ff1615801561236457506000546001600160a01b03838116911614155b801561237957506001600160a01b0382163014155b801561239357506004546001600160a01b03838116911614155b80156123ad5750603c546001600160a01b03838116911614155b80156123c757506008546001600160a01b03838116911614155b80156123e157506007546001600160a01b03838116911614155b80156123fb57506006546001600160a01b03838116911614155b1561249a576001600160a01b0382166000908152600d6020526040902054600c546124268383613132565b11156113e45760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610e12565b505050565b603c546001600160a01b0383811691161480156124be575060395460ff165b80156124e357506001600160a01b03811660009081526011602052604090205460ff16155b15611927576001600160a01b0381166000908152603a6020526040902054421161254f5760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610e12565b60395461256490610100900460ff1642613132565b6001600160a01b0382166000908152603a60205260409020555050565b6000546001600160a01b038381169116146113e457801561262d57600b54831115806125c557506001600160a01b03841660009081526010602052604090205460ff165b806125e857506001600160a01b03821660009081526010602052604090205460ff165b6126285760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e12565b6113e4565b600a548311158061265657506001600160a01b03841660009081526010602052604090205460ff165b8061267957506001600160a01b03821660009081526010602052604090205460ff165b6113e45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e12565b603c546000906001600160a01b031633148015906126e05750603e5462010000900460ff16155b80156126f35750603e54610100900460ff165b8015611059575050602a54306000908152600d6020526040902054101590565b603e805462ff0000191662010000179055602b54602c5460009161273691610e33565b61274257602054612745565b60005b90506000612769600261133560255461133586602a5461202390919063ffffffff16565b9050600061278282602a54611f8290919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106127bc576127bc6131b8565b6001600160a01b0392831660209182029290920101526003548251911690829060019081106127ed576127ed6131b8565b6001600160a01b039283166020918202929092010152603b5460405163791ac94760e01b81524792919091169063791ac947906128379086906000908790309042906004016130f6565b600060405180830381600087803b15801561285157600080fd5b505af1158015612865573d6000803e3d6000fd5b50505050600061287e8247611f8290919063ffffffff16565b905060006128996128908860026120a2565b60255490611f82565b905060006128ae60026113358481878d612023565b905060006128cb836113356022548761202390919063ffffffff16565b905060006128e8846113356023548861202390919063ffffffff16565b90506000612905856113356024548961202390919063ffffffff16565b9050603760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561295757600080fd5b505af193505050508015612969575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146129bc576040519150601f19603f3d011682016040523d82523d6000602084013e6129c1565b606091505b50506006546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612a1a576040519150601f19603f3d011682016040523d82523d6000602084013e612a1f565b606091505b5050905081612a815760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610e12565b80612ad95760405162461bcd60e51b815260206004820152602260248201527f6465762072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610e12565b8b15612bc057603b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c4016060604051808303818588803b158015612b4a57600080fd5b505af1158015612b5e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b839190612f72565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050603e805462ff0000191690555050505050505050505050565b6000808215612c36578315612c1657612c0f602654611335600261133560036115e26025548c61202390919063ffffffff16565b9050612c54565b612c0f60265461133560026113356025548a61202390919063ffffffff16565b612c516026546113356025548861202390919063ffffffff16565b90505b306000908152600d6020526040902054612c6e9082611fc4565b306000818152600d6020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cbf9085815260200190565b60405180910390a3612cd18582611f82565b9695505050505050565b60008183612cfc5760405162461bcd60e51b8152600401610e12919061305c565b506000611b2b848661314a565b80358015158114612d1957600080fd5b919050565b600060208284031215612d3057600080fd5b8135610f87816131ce565b60008060408385031215612d4e57600080fd5b8235612d59816131ce565b91506020830135612d69816131ce565b809150509250929050565b600080600060608486031215612d8957600080fd5b8335612d94816131ce565b92506020840135612da4816131ce565b929592945050506040919091013590565b60008060408385031215612dc857600080fd5b8235612dd3816131ce565b9150612de160208401612d09565b90509250929050565b60008060408385031215612dfd57600080fd5b8235612e08816131ce565b946020939093013593505050565b600060208284031215612e2857600080fd5b610f8782612d09565b60008060408385031215612e4457600080fd5b612e0883612d09565b600080600080600060a08688031215612e6557600080fd5b612e6e86612d09565b9450602086013593506040860135925060608601359150612e9160808701612d09565b90509295509295909350565b60008060408385031215612eb057600080fd5b612eb983612d09565b9150602083013560ff81168114612d6957600080fd5b600060208284031215612ee157600080fd5b5035919050565b600060208284031215612efa57600080fd5b5051919050565b60008060408385031215612f1457600080fd5b82359150612de160208401612d09565b60008060408385031215612f3757600080fd5b50508035926020909101359150565b600080600060608486031215612f5b57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f8757600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215612fb957600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b8381101561301c5781516001600160a01b031687529582019590820190600101612ff7565b509495945050505050565b8481526080602082015260006130406080830186612fe3565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b818110156130895785810183015185820160400152820161306d565b8181111561309b576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b85815284602082015260a06040820152600061311560a0830186612fe3565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613145576131456131a2565b500190565b60008261316757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613186576131866131a2565b500290565b60008282101561319d5761319d6131a2565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610e3057600080fdfea26469706673582212209b22ee1a5d7e0ec169866ad686378ca297a5c761781e5be0139ccb4700ae817264736f6c634300080700336080604052600180546001600160a01b031990811673e9e7cea3dedca5984780bafc599bd69add087d56179091556002805490911673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1790556ec097ce7bc90715b34b9f1000000000600c55610708600d5564e8d4a51000600e5534801561007a57600080fd5b50604051611068380380611068833981016040819052610099916100f3565b6001600160a01b0381166100c1577310ed43c718714eb63d5aa57b78b54704e256024e6100c3565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610123565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b610f36806101326000396000f3fe6080604052600436106100dd5760003560e01c8063997664d71161007f578063e2d2e21911610059578063e2d2e2191461022e578063efca2eed14610244578063ffb2c4791461025a578063ffd49c841461027a57600080fd5b8063997664d7146101b9578063ce7c2ac2146101cf578063d0e30db01461022657600080fd5b806328fd3198116100bb57806328fd31981461014d5780632d48e8961461016d5780633a98ef391461018d5780634fab0ae8146101a357600080fd5b806311ce023d146100e257806314b6ca961461010b57806315f7e05e1461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610cd4565b610290565b005b34801561013957600080fd5b5061012b610148366004610cb9565b610408565b34801561015957600080fd5b506100f8610168366004610cb9565b61042b565b34801561017957600080fd5b5061012b610188366004610d52565b6104b4565b34801561019957600080fd5b506100f860085481565b3480156101af57600080fd5b506100f8600e5481565b3480156101c557600080fd5b506100f860095481565b3480156101db57600080fd5b5061020b6101ea366004610cb9565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104d6565b34801561023a57600080fd5b506100f8600b5481565b34801561025057600080fd5b506100f8600a5481565b34801561026657600080fd5b5061012b610275366004610d20565b610723565b34801561028657600080fd5b506100f8600d5481565b6000546001600160a01b031633146102a757600080fd5b6001600160a01b038216600090815260076020526040902054156102ce576102ce82610823565b6000811180156102f457506001600160a01b038216600090815260076020526040902054155b1561035a57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b031916909117905561038d565b8015801561037f57506001600160a01b03821660009081526007602052604090205415155b1561038d5761038d8261094e565b6001600160a01b0382166000908152600760205260409020546008546103be9183916103b891610a63565b90610aae565b6008556001600160a01b03821660009081526007602052604090208190556103e581610b12565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b0316331461041f57600080fd5b61042881610823565b50565b6001600160a01b03811660009081526007602052604081205461045057506000919050565b6001600160a01b03821660009081526007602052604081205461047290610b12565b6001600160a01b0384166000908152600760205260409020600101549091508082116104a2575060009392505050565b6104ac8282610a63565b949350505050565b6000546001600160a01b031633146104cb57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104ed57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561053157600080fd5b505afa158015610545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105699190610d39565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b0316918391506000906105af576105af610eea565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105df576105df610eea565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de9590349061062590600090869030904290600401610d74565b6000604051808303818588803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600094506106e193508692506001600160a01b03909116906370a082319060240160206040518083038186803b1580156106a357600080fd5b505afa1580156106b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106db9190610d39565b90610a63565b6009549091506106f19082610aae565b600955600854600c5461071b916107129161070c9085610b2f565b90610bae565b600b5490610aae565b600b55505050565b6000546001600160a01b0316331461073a57600080fd5b60045480610746575050565b6000805a905060005b848310801561075d57508381105b1561081c5783600f5410610771576000600f555b6107a36004600f548154811061078957610789610eea565b6000918252602090912001546001600160a01b0316610bf0565b156107da576107da6004600f54815481106107c0576107c0610eea565b6000918252602090912001546001600160a01b0316610823565b6107ef6107e85a8490610a63565b8490610aae565b92505a600f8054919350600061080483610ea3565b9190505550808061081490610ea3565b91505061074f565b5050505050565b6001600160a01b0381166000908152600760205260409020546108435750565b600061084e8261042b565b9050801561094a57600a546108639082610aae565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156108b457600080fd5b505af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec9190610cfe565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109209082610aae565b6001600160a01b03831660009081526007602052604090206002810191909155546103e590610b12565b5050565b6004805461095e90600190610e8c565b8154811061096e5761096e610eea565b60009182526020808320909101546001600160a01b03848116845260059092526040909220546004805492909316929181106109ac576109ac610eea565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916109f890600190610e8c565b81548110610a0857610a08610eea565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a3e57610a3e610ed4565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610aa583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c35565b90505b92915050565b600080610abb8385610e33565b905083811015610aa55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610aa8600c5461070c600b5485610b2f90919063ffffffff16565b600082610b3e57506000610aa8565b6000610b4a8385610e6d565b905082610b578583610e4b565b14610aa55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b09565b6000610aa583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610c6f565b600d546001600160a01b03821660009081526006602052604081205490914291610c1a9190610e33565b108015610aa85750600e54610c2e8361042b565b1192915050565b60008184841115610c595760405162461bcd60e51b8152600401610b099190610dde565b506000610c668486610e8c565b95945050505050565b60008183610c905760405162461bcd60e51b8152600401610b099190610dde565b506000610c668486610e4b565b80356001600160a01b0381168114610cb457600080fd5b919050565b600060208284031215610ccb57600080fd5b610aa582610c9d565b60008060408385031215610ce757600080fd5b610cf083610c9d565b946020939093013593505050565b600060208284031215610d1057600080fd5b81518015158114610aa557600080fd5b600060208284031215610d3257600080fd5b5035919050565b600060208284031215610d4b57600080fd5b5051919050565b60008060408385031215610d6557600080fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610dbe5784516001600160a01b031683529383019391830191600101610d99565b50506001600160a01b039690961660408501525050506060015292915050565b600060208083528351808285015260005b81811015610e0b57858101830151858201604001528201610def565b81811115610e1d576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610e4657610e46610ebe565b500190565b600082610e6857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610e8757610e87610ebe565b500290565b600082821015610e9e57610e9e610ebe565b500390565b6000600019821415610eb757610eb7610ebe565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220841bb403d1fc0c7d30368e537dc4f4d86c3012c91e26c0797b98bfc5d1ec265264736f6c63430008070033

Deployed Bytecode

0x60806040526004361061044b5760003560e01c806382334b9411610234578063dd62ed3e1161012e578063f2fde38b116100b6578063f887ea401161007a578063f887ea4014610cdb578063fb5f27fb14610cfb578063fe575a8714610d11578063fe9fbb8014610d41578063ffb54a9914610d6157600080fd5b8063f2fde38b14610c46578063f429389014610c66578063f708a64f14610c7b578063f74c9f4714610c9b578063f84ba65d14610cbb57600080fd5b8063e3aa51bc116100fd578063e3aa51bc14610bb1578063e96fada214610bd1578063f0b37c0414610bf1578063f0fc6bca14610c11578063f1f3bca314610c2657600080fd5b8063dd62ed3e14610b0c578063df20fd4914610b52578063df4a76c514610b72578063e1dcc71f14610b9257600080fd5b8063ac45ed1c116101bc578063ca33e64c11610180578063ca33e64c14610a8b578063cdba31fd14610aab578063cf4be39414610ac1578063d51ed1c814610ad7578063d806d12f14610af757600080fd5b8063ac45ed1c14610a0a578063b210b06d14610a20578063b6a5d7de14610a35578063ba876bb914610a55578063bf56b37114610a7557600080fd5b806395d89b411161020357806395d89b411461095b5780639d1944f51461098a578063a4b45c00146109aa578063a8aa1b31146109ca578063a9059cbb146109ea57600080fd5b806382334b94146108d357806382bf293c146108f357806382d2011614610913578063893d20e81461092957600080fd5b80632f5620d11161034557806350db71fb116102cd5780636ddd1713116102915780636ddd17131461082957806370a0823114610848578063722b62ad1461087e57806378109e541461089d5780637affa29b146108b357600080fd5b806350db71fb1461079957806353148416146107b9578063571ac8b0146107cf578063617fe0ed146107ef578063658d4b7f1461080957600080fd5b80633bb8a8d4116103145780633bb8a8d41461071f578063409d056614610739578063455a43961461074f5780634dfc855a1461076f5780634f7b4d491461078457600080fd5b80632f5620d1146106b1578063313ce567146106d157806333477327146106f357806337bc957e1461070957600080fd5b806318160ddd116103d35780632b112e49116103975780632b112e49146106175780632d48e8961461062c5780632d5945671461064c5780632e4a9bd71461066c5780632f54bf6e1461068257600080fd5b806318160ddd14610582578063201e7991146105975780632375ce40146105b757806323b872dd146105d757806328fd3198146105f757600080fd5b806310075a691161041a57806310075a691461050a5780631107b3a5146105205780631161ae391461053657806312835c5e1461055657806313374e7a1461056c57600080fd5b80630445b6671461045757806306fdde0314610480578063095ea7b3146104b85780630d295980146104e857600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046d602a5481565b6040519081526020015b60405180910390f35b34801561048c57600080fd5b5060408051808201909152600681526541692e636f6d60d01b60208201525b604051610477919061305c565b3480156104c457600080fd5b506104d86104d3366004612dea565b610d7b565b6040519015158152602001610477565b3480156104f457600080fd5b50610508610503366004612e16565b610de8565b005b34801561051657600080fd5b5061046d60175481565b34801561052c57600080fd5b5061046d601a5481565b34801561054257600080fd5b506104d8610551366004612f24565b610e33565b34801561056257600080fd5b5061046d601e5481565b34801561057857600080fd5b5061046d601d5481565b34801561058e57600080fd5b5060095461046d565b3480156105a357600080fd5b506105086105b2366004612f24565b610e47565b3480156105c357600080fd5b506105086105d2366004612f46565b610e77565b3480156105e357600080fd5b506104d86105f2366004612d74565b610ecc565b34801561060357600080fd5b5061046d610612366004612d1e565b610f8e565b34801561062357600080fd5b5061046d61100c565b34801561063857600080fd5b50610508610647366004612f24565b61105e565b34801561065857600080fd5b50610508610667366004612e9d565b6110ed565b34801561067857600080fd5b5061046d60155481565b34801561068e57600080fd5b506104d861069d366004612d1e565b6000546001600160a01b0391821691161490565b3480156106bd57600080fd5b506105086106cc366004612e4d565b611139565b3480156106dd57600080fd5b5060095b60405160ff9091168152602001610477565b3480156106ff57600080fd5b5061046d600a5481565b34801561071557600080fd5b5061046d601b5481565b34801561072b57600080fd5b506031546104d89060ff1681565b34801561074557600080fd5b5061046d60165481565b34801561075b57600080fd5b5061050861076a366004612db5565b61119f565b34801561077b57600080fd5b506104d86111ef565b34801561079057600080fd5b5061050861121b565b3480156107a557600080fd5b506105086107b4366004612db5565b611247565b3480156107c557600080fd5b5061046d601f5481565b3480156107db57600080fd5b506104d86107ea366004612d1e565b611297565b3480156107fb57600080fd5b506039546104d89060ff1681565b34801561081557600080fd5b50610508610824366004612db5565b6112a5565b34801561083557600080fd5b50603e546104d890610100900460ff1681565b34801561085457600080fd5b5061046d610863366004612d1e565b6001600160a01b03166000908152600d602052604090205490565b34801561088a57600080fd5b506039546106e190610100900460ff1681565b3480156108a957600080fd5b5061046d600c5481565b3480156108bf57600080fd5b506105086108ce366004612ecf565b6112f5565b3480156108df57600080fd5b506105086108ee366004612f01565b611341565b3480156108ff57600080fd5b5061050861090e366004612ecf565b6113ea565b34801561091f57600080fd5b5061046d60145481565b34801561093557600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610477565b34801561096757600080fd5b5060408051808201909152600681526541492e434f4d60d01b60208201526104ab565b34801561099657600080fd5b506105086109a5366004612ecf565b611435565b3480156109b657600080fd5b506105086109c5366004612d3b565b61146e565b3480156109d657600080fd5b50603c54610943906001600160a01b031681565b3480156109f657600080fd5b506104d8610a05366004612dea565b6114c1565b348015610a1657600080fd5b5061046d601c5481565b348015610a2c57600080fd5b506105086114ce565b348015610a4157600080fd5b50610508610a50366004612d1e565b6114fa565b348015610a6157600080fd5b50610508610a70366004612fa0565b61154b565b348015610a8157600080fd5b5061046d603d5481565b348015610a9757600080fd5b50600754610943906001600160a01b031681565b348015610ab757600080fd5b5061046d60185481565b348015610acd57600080fd5b5061046d600b5481565b348015610ae357600080fd5b5061046d610af2366004612ecf565b6115ae565b348015610b0357600080fd5b5061046d6115ef565b348015610b1857600080fd5b5061046d610b27366004612d3b565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b348015610b5e57600080fd5b50610508610b6d366004612e31565b611662565b348015610b7e57600080fd5b50610508610b8d366004612ecf565b6116bd565b348015610b9e57600080fd5b506031546104d890610100900460ff1681565b348015610bbd57600080fd5b50610508610bcc366004612ecf565b611703565b348015610bdd57600080fd5b50600854610943906001600160a01b031681565b348015610bfd57600080fd5b50610508610c0c366004612d1e565b611731565b348015610c1d57600080fd5b5061050861177c565b348015610c3257600080fd5b5061046d610c41366004612e16565b6117d5565b348015610c5257600080fd5b50610508610c61366004612d1e565b611832565b348015610c7257600080fd5b506105086118c8565b348015610c8757600080fd5b50610508610c96366004612db5565b61192b565b348015610ca757600080fd5b50610508610cb6366004612fa0565b611a2f565b348015610cc757600080fd5b50610508610cd6366004612db5565b611a8c565b348015610ce757600080fd5b50603b54610943906001600160a01b031681565b348015610d0757600080fd5b5061046d60195481565b348015610d1d57600080fd5b506104d8610d2c366004612d1e565b60136020526000908152604090205460ff1681565b348015610d4d57600080fd5b506104d8610d5c366004612d1e565b611adc565b348015610d6d57600080fd5b50603e546104d89060ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610dd69086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610e1b5760405162461bcd60e51b8152600401610e12906130b1565b60405180910390fd5b603e805460ff191682151517905543603d5550565b50565b600082610e3f836115ae565b119392505050565b610e5033611adc565b610e6c5760405162461bcd60e51b8152600401610e12906130d1565b602b91909155602c55565b610e8033611adc565b610e9c5760405162461bcd60e51b8152600401610e12906130d1565b6002610ea8838561314a565b11158015610eb557508183115b610ebe57600080fd5b602d92909255602e55603055565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610f79576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610f54918490611afa565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610f84848484611b34565b90505b9392505050565b60375460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd31989060240160206040518083038186803b158015610fd457600080fd5b505afa158015610fe8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de29190612ee8565b6005546001600160a01b03166000908152600d6020526040812054611059906004546001600160a01b03166000908152600d60205260409020546110539060095490611f82565b90611f82565b905090565b61106733611adc565b6110835760405162461bcd60e51b8152600401610e12906130d1565b6037546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b505050505050565b6110f633611adc565b6111125760405162461bcd60e51b8152600401610e12906130d1565b6039805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b61114233611adc565b61115e5760405162461bcd60e51b8152600401610e12906130d1565b6031805460329590955560006033556034939093556035919091554360365561ffff1990921692151561ff0019169290921761010091151591909102179055565b6111a833611adc565b6111c45760405162461bcd60e51b8152600401610e12906130d1565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600042611209602854602754611fc490919063ffffffff16565b11156112155750600190565b50600090565b61122433611adc565b6112405760405162461bcd60e51b8152600401610e12906130d1565b6000602755565b61125033611adc565b61126c5760405162461bcd60e51b8152600401610e12906130d1565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000610de282600019610d7b565b6112ae33611adc565b6112ca5760405162461bcd60e51b8152600401610e12906130d1565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6112fe33611adc565b61131a5760405162461bcd60e51b8152600401610e12906130d1565b61133b6127106113358360095461202390919063ffffffff16565b906120a2565b600a5550565b61134a33611adc565b6113665760405162461bcd60e51b8152600401610e12906130d1565b600061137a83670de0b6b3a764000061316c565b905060006113898260646120a2565b6004549091506113a39082906001600160a01b03166120e4565b82156113e45742602f556030546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b50505050565b6000546001600160a01b031633146114145760405162461bcd60e51b8152600401610e12906130b1565b61142f6127106113358360095461202390919063ffffffff16565b600c5550565b61143e33611adc565b61145a5760405162461bcd60e51b8152600401610e12906130d1565b620b71b0811061146957600080fd5b603855565b61147733611adc565b6114935760405162461bcd60e51b8152600401610e12906130d1565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6000610f87338484611b34565b6114d733611adc565b6114f35760405162461bcd60e51b8152600401610e12906130d1565b6000602f55565b6000546001600160a01b031633146115245760405162461bcd60e51b8152600401610e12906130b1565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61155433611adc565b6115705760405162461bcd60e51b8152600401610e12906130d1565b601a869055601b859055601c849055601d839055601e8290556115a18261159b858188818c8c611fc4565b90611fc4565b601f556026555050505050565b6000610de26115bb61100c565b603c546001600160a01b03166000908152600d6020526040902054611335906115e8906002905b90612023565b8590612023565b60008061160d42611053603054602f54611fc490919063ffffffff16565b90506000611634602554611053602e54611335602d5460255461202390919063ffffffff16565b905061165b611652603054611335858561202390919063ffffffff16565b60255490611fc4565b9250505090565b61166b33611adc565b6116875760405162461bcd60e51b8152600401610e12906130d1565b603e805461ff00191661010084151502179055600954612710906116ac90839061316c565b6116b6919061314a565b602a555050565b6116c633611adc565b6116e25760405162461bcd60e51b8152600401610e12906130d1565b6116fd6127106113358360095461202390919063ffffffff16565b600b5550565b61170c33611adc565b6117285760405162461bcd60e51b8152600401610e12906130d1565b42602755602855565b6000546001600160a01b0316331461175b5760405162461bcd60e51b8152600401610e12906130b1565b6001600160a01b03166000908152600160205260409020805460ff19169055565b603754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b1580156117c157600080fd5b505af11580156113e4573d6000803e3d6000fd5b600043602954603d546117e89190613132565b106117fb57602654610de2906001611f82565b81801561181d57504261181b603054602f54611fc490919063ffffffff16565b115b1561182a57610de26115ef565b505060255490565b6000546001600160a01b0316331461185c5760405162461bcd60e51b8152600401610e12906130b1565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6118d133611adc565b6118ed5760405162461bcd60e51b8152600401610e12906130d1565b60085460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611927573d6000803e3d6000fd5b5050565b61193433611adc565b6119505760405162461bcd60e51b8152600401610e12906130d1565b6001600160a01b03821630148015906119775750603c546001600160a01b03838116911614155b61198057600080fd5b6001600160a01b0382166000908152601260205260409020805460ff191682158015919091179091556119e657603754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044016110b7565b6037546001600160a01b038381166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044016110b7565b611a3833611adc565b611a545760405162461bcd60e51b8152600401610e12906130d1565b60148690556015859055601684905560178390556018829055611a7f8261159b858188818c8c611fc4565b6019556026555050505050565b611a9533611adc565b611ab15760405162461bcd60e51b8152600401610e12906130d1565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115611b1e5760405162461bcd60e51b8152600401610e12919061305c565b506000611b2b848661318b565b95945050505050565b603e5460009062010000900460ff1615611b5a57611b538484846121f3565b9050610f87565b6001600160a01b03841660009081526001602052604090205460ff16158015611b9c57506001600160a01b03831660009081526001602052604090205460ff16155b15611bf357603e5460ff16611bf35760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610e12565b6001600160a01b03831660009081526013602052604090205460ff16158015611c3557506001600160a01b03841660009081526013602052604090205460ff16155b611c7a5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610e12565b603c546001600160a01b03848116911614611c94816122d9565b611c9f85858561232d565b611ca9858561249f565b611cb585848684612581565b6000611cbf6111ef565b9050611cc96126b9565b15611cd657611cd6612713565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d9091529190912054611d28918690611afa565b6001600160a01b0387166000908152600d6020908152604080832093909355600f90529081205460ff1615611d5d5784611d69565b611d6987868585612bdb565b6001600160a01b0387166000908152600d6020526040902054909150611d8f9082611fc4565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526012909152205460ff16611e33576037546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e2057600080fd5b505af1925050508015611e31575060015b505b6001600160a01b03861660009081526012602052604090205460ff16611ec4576037546001600160a01b038781166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611eb157600080fd5b505af1925050508015611ec2575060015b505b6037546038546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611efc9160040190815260200190565b600060405180830381600087803b158015611f1657600080fd5b505af1925050508015611f27575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f6d91815260200190565b60405180910390a35060019695505050505050565b6000610f8783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611afa565b600080611fd18385613132565b905083811015610f875760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e12565b60008261203257506000610de2565b600061203e838561316c565b90508261204b858361314a565b14610f875760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e12565b6000610f8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612cdb565b603e805462ff0000191662010000179055604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b031691839150600090612136576121366131b8565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061216a5761216a6131b8565b6001600160a01b039283166020918202929092010152603b5460405163b6f9de9560e01b815291169063b6f9de959085906121b090600090869088904290600401613027565b6000604051808303818588803b1580156121c957600080fd5b505af11580156121dd573d6000803e3d6000fd5b5050603e805462ff000019169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d90915291822054612244918490611afa565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546122739083611fc4565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122c79086815260200190565b60405180910390a35060019392505050565b801561230657601a54602055601b54602155601c54602255601d54602355601e54602455601f5460255550565b60145460205560155460215560165460225560175460235560185460245560195460255550565b6001600160a01b03831660009081526001602052604090205460ff1615801561236457506000546001600160a01b03838116911614155b801561237957506001600160a01b0382163014155b801561239357506004546001600160a01b03838116911614155b80156123ad5750603c546001600160a01b03838116911614155b80156123c757506008546001600160a01b03838116911614155b80156123e157506007546001600160a01b03838116911614155b80156123fb57506006546001600160a01b03838116911614155b1561249a576001600160a01b0382166000908152600d6020526040902054600c546124268383613132565b11156113e45760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610e12565b505050565b603c546001600160a01b0383811691161480156124be575060395460ff165b80156124e357506001600160a01b03811660009081526011602052604090205460ff16155b15611927576001600160a01b0381166000908152603a6020526040902054421161254f5760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610e12565b60395461256490610100900460ff1642613132565b6001600160a01b0382166000908152603a60205260409020555050565b6000546001600160a01b038381169116146113e457801561262d57600b54831115806125c557506001600160a01b03841660009081526010602052604090205460ff165b806125e857506001600160a01b03821660009081526010602052604090205460ff165b6126285760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e12565b6113e4565b600a548311158061265657506001600160a01b03841660009081526010602052604090205460ff165b8061267957506001600160a01b03821660009081526010602052604090205460ff165b6113e45760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610e12565b603c546000906001600160a01b031633148015906126e05750603e5462010000900460ff16155b80156126f35750603e54610100900460ff165b8015611059575050602a54306000908152600d6020526040902054101590565b603e805462ff0000191662010000179055602b54602c5460009161273691610e33565b61274257602054612745565b60005b90506000612769600261133560255461133586602a5461202390919063ffffffff16565b9050600061278282602a54611f8290919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106127bc576127bc6131b8565b6001600160a01b0392831660209182029290920101526003548251911690829060019081106127ed576127ed6131b8565b6001600160a01b039283166020918202929092010152603b5460405163791ac94760e01b81524792919091169063791ac947906128379086906000908790309042906004016130f6565b600060405180830381600087803b15801561285157600080fd5b505af1158015612865573d6000803e3d6000fd5b50505050600061287e8247611f8290919063ffffffff16565b905060006128996128908860026120a2565b60255490611f82565b905060006128ae60026113358481878d612023565b905060006128cb836113356022548761202390919063ffffffff16565b905060006128e8846113356023548861202390919063ffffffff16565b90506000612905856113356024548961202390919063ffffffff16565b9050603760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561295757600080fd5b505af193505050508015612969575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146129bc576040519150601f19603f3d011682016040523d82523d6000602084013e6129c1565b606091505b50506006546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612a1a576040519150601f19603f3d011682016040523d82523d6000602084013e612a1f565b606091505b5050905081612a815760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610e12565b80612ad95760405162461bcd60e51b815260206004820152602260248201527f6465762072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610e12565b8b15612bc057603b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c4016060604051808303818588803b158015612b4a57600080fd5b505af1158015612b5e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b839190612f72565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050603e805462ff0000191690555050505050505050505050565b6000808215612c36578315612c1657612c0f602654611335600261133560036115e26025548c61202390919063ffffffff16565b9050612c54565b612c0f60265461133560026113356025548a61202390919063ffffffff16565b612c516026546113356025548861202390919063ffffffff16565b90505b306000908152600d6020526040902054612c6e9082611fc4565b306000818152600d6020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612cbf9085815260200190565b60405180910390a3612cd18582611f82565b9695505050505050565b60008183612cfc5760405162461bcd60e51b8152600401610e12919061305c565b506000611b2b848661314a565b80358015158114612d1957600080fd5b919050565b600060208284031215612d3057600080fd5b8135610f87816131ce565b60008060408385031215612d4e57600080fd5b8235612d59816131ce565b91506020830135612d69816131ce565b809150509250929050565b600080600060608486031215612d8957600080fd5b8335612d94816131ce565b92506020840135612da4816131ce565b929592945050506040919091013590565b60008060408385031215612dc857600080fd5b8235612dd3816131ce565b9150612de160208401612d09565b90509250929050565b60008060408385031215612dfd57600080fd5b8235612e08816131ce565b946020939093013593505050565b600060208284031215612e2857600080fd5b610f8782612d09565b60008060408385031215612e4457600080fd5b612e0883612d09565b600080600080600060a08688031215612e6557600080fd5b612e6e86612d09565b9450602086013593506040860135925060608601359150612e9160808701612d09565b90509295509295909350565b60008060408385031215612eb057600080fd5b612eb983612d09565b9150602083013560ff81168114612d6957600080fd5b600060208284031215612ee157600080fd5b5035919050565b600060208284031215612efa57600080fd5b5051919050565b60008060408385031215612f1457600080fd5b82359150612de160208401612d09565b60008060408385031215612f3757600080fd5b50508035926020909101359150565b600080600060608486031215612f5b57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612f8757600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215612fb957600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600081518084526020808501945080840160005b8381101561301c5781516001600160a01b031687529582019590820190600101612ff7565b509495945050505050565b8481526080602082015260006130406080830186612fe3565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b818110156130895785810183015185820160400152820161306d565b8181111561309b576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b85815284602082015260a06040820152600061311560a0830186612fe3565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613145576131456131a2565b500190565b60008261316757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613186576131866131a2565b500290565b60008282101561319d5761319d6131a2565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610e3057600080fdfea26469706673582212209b22ee1a5d7e0ec169866ad686378ca297a5c761781e5be0139ccb4700ae817264736f6c63430008070033

Deployed Bytecode Sourcemap

10882:21366:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12895:57;;;;;;;;;;;;;;;;;;;13504:25:1;;;13492:2;13477:18;12895:57:0;;;;;;;;15315:80;;;;;;;;;;-1:-1:-1;15387:5:0;;;;;;;;;;;;-1:-1:-1;;;15387:5:0;;;;15315:80;;;;;;;:::i;15737:216::-;;;;;;;;;;-1:-1:-1;15737:216:0;;;;;:::i;:::-;;:::i;:::-;;;7907:14:1;;7900:22;7882:41;;7870:2;7855:18;15737:216:0;7742:187:1;22552:113:0;;;;;;;;;;-1:-1:-1;22552:113:0;;;;;:::i;:::-;;:::i;:::-;;12246:34;;;;;;;;;;;;;;;;12361:35;;;;;;;;;;;;;;;;31973:150;;;;;;;;;;-1:-1:-1;31973:150:0;;;;;:::i;:::-;;:::i;12528:29::-;;;;;;;;;;;;;;;;12486:35;;;;;;;;;;;;;;;;15045:88;;;;;;;;;;-1:-1:-1;15118:12:0;;15045:88;;30673:183;;;;;;;;;;-1:-1:-1;30673:183:0;;;;;:::i;:::-;;:::i;27447:342::-;;;;;;;;;;-1:-1:-1;27447:342:0;;;;;:::i;:::-;;:::i;16255:368::-;;;;;;;;;;-1:-1:-1;16255:368:0;;;;;:::i;:::-;;:::i;31345:146::-;;;;;;;;;;-1:-1:-1;31345:146:0;;;;;:::i;:::-;;:::i;31648:142::-;;;;;;;;;;;;;:::i;31056:183::-;;;;;;;;;;-1:-1:-1;31056:183:0;;;;;:::i;:::-;;:::i;22917:165::-;;;;;;;;;;-1:-1:-1;22917:165:0;;;;;:::i;:::-;;:::i;12165:32::-;;;;;;;;;;;;;;;;2873:103;;;;;;;;;;-1:-1:-1;2873:103:0;;;;;:::i;:::-;2928:4;2963:5;-1:-1:-1;;;;;2952:16:0;;;2963:5;;2952:16;;2873:103;26994:445;;;;;;;;;;-1:-1:-1;26994:445:0;;;;;:::i;:::-;;:::i;15139:80::-;;;;;;;;;;-1:-1:-1;11475:1:0;15139:80;;;14552:4:1;14540:17;;;14522:36;;14510:2;14495:18;15139:80:0;14380:184:1;11552:59:0;;;;;;;;;;;;;;;;12403:33;;;;;;;;;;;;;;;;13238:38;;;;;;;;;;-1:-1:-1;13238:38:0;;;;;;;;12204:35;;;;;;;;;;;;;;;;23090:125;;;;;;;;;;-1:-1:-1;23090:125:0;;;;;:::i;:::-;;:::i;19202:207::-;;;;;;;;;;;;;:::i;22826:83::-;;;;;;;;;;;;;:::i;28929:130::-;;;;;;;;;;-1:-1:-1;28929:130:0;;;;;:::i;:::-;;:::i;12564:31::-;;;;;;;;;;;;;;;;15961:122;;;;;;;;;;-1:-1:-1;15961:122:0;;;;;:::i;:::-;;:::i;13581:38::-;;;;;;;;;;-1:-1:-1;13581:38:0;;;;;;;;28665:120;;;;;;;;;;-1:-1:-1;28665:120:0;;;;;:::i;:::-;;:::i;13854:30::-;;;;;;;;;;-1:-1:-1;13854:30:0;;;;;;;;;;;15485:105;;;;;;;;;;-1:-1:-1;15485:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;15569:18:0;15551:7;15569:18;;;:9;:18;;;;;;;15485:105;13626:39;;;;;;;;;;-1:-1:-1;13626:39:0;;;;;;;;;;;11687:63;;;;;;;;;;;;;;;;27974:158;;;;;;;;;;-1:-1:-1;27974:158:0;;;;;:::i;:::-;;:::i;25574:442::-;;;;;;;;;;-1:-1:-1;25574:442:0;;;;;:::i;:::-;;:::i;16632:156::-;;;;;;;;;;-1:-1:-1;16632:156:0;;;;;:::i;:::-;;:::i;12123:34::-;;;;;;;;;;;;;;;;15401:78;;;;;;;;;;-1:-1:-1;15453:7:0;15471:5;-1:-1:-1;;;;;15471:5:0;15401:78;;;-1:-1:-1;;;;;6304:32:1;;;6286:51;;6274:2;6259:18;15401:78:0;6140:203:1;15225:84:0;;;;;;;;;;-1:-1:-1;15299:7:0;;;;;;;;;;;;-1:-1:-1;;;15299:7:0;;;;15225:84;;31500:136;;;;;;;;;;-1:-1:-1;31500:136:0;;;;;:::i;:::-;;:::i;30249:228::-;;;;;;;;;;-1:-1:-1;30249:228:0;;;;;:::i;:::-;;:::i;13759:19::-;;;;;;;;;;-1:-1:-1;13759:19:0;;;;-1:-1:-1;;;;;13759:19:0;;;16091:156;;;;;;;;;;-1:-1:-1;16091:156:0;;;;;:::i;:::-;;:::i;12443:36::-;;;;;;;;;;;;;;;;26025:105;;;;;;;;;;;;;:::i;2650:102::-;;;;;;;;;;-1:-1:-1;2650:102:0;;;;;:::i;:::-;;:::i;29647:594::-;;;;;;;;;;-1:-1:-1;29647:594:0;;;;;:::i;:::-;;:::i;13785:25::-;;;;;;;;;;;;;;;;11281:36;;;;;;;;;;-1:-1:-1;11281:36:0;;;;-1:-1:-1;;;;;11281:36:0;;;12287:28;;;;;;;;;;;;;;;;11619:60;;;;;;;;;;;;;;;;31798:167;;;;;;;;;;-1:-1:-1;31798:167:0;;;;;:::i;:::-;;:::i;21273:391::-;;;;;;;;;;;;;:::i;15596:133::-;;;;;;;;;;-1:-1:-1;15596:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15698:19:0;;;15680:7;15698:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15596:133;30485:180;;;;;;;;;;-1:-1:-1;30485:180:0;;;;;:::i;:::-;;:::i;28140:162::-;;;;;;;;;;-1:-1:-1;28140:162:0;;;;;:::i;:::-;;:::i;13283:41::-;;;;;;;;;;-1:-1:-1;13283:41:0;;;;;;;;;;;22673:145;;;;;;;;;;-1:-1:-1;22673:145:0;;;;;:::i;:::-;;:::i;11324:35::-;;;;;;;;;;-1:-1:-1;11324:35:0;;;;-1:-1:-1;;;;;11324:35:0;;;2760:105;;;;;;;;;;-1:-1:-1;2760:105:0;;;;;:::i;:::-;;:::i;31247:90::-;;;;;;;;;;;;;:::i;20950:315::-;;;;;;;;;;-1:-1:-1;20950:315:0;;;;;:::i;:::-;;:::i;3107:189::-;;;;;;;;;;-1:-1:-1;3107:189:0;;;;;:::i;:::-;;:::i;30864:180::-;;;;;;;;;;;;;:::i;28310:347::-;;;;;;;;;;-1:-1:-1;28310:347:0;;;;;:::i;:::-;;:::i;29067:572::-;;;;;;;;;;-1:-1:-1;29067:572:0;;;;;:::i;:::-;;:::i;28793:128::-;;;;;;;;;;-1:-1:-1;28793:128:0;;;;;:::i;:::-;;:::i;13728:24::-;;;;;;;;;;-1:-1:-1;13728:24:0;;;;-1:-1:-1;;;;;13728:24:0;;;12322:30;;;;;;;;;;;;;;;;12064:46;;;;;;;;;;-1:-1:-1;12064:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2984:115;;;;;;;;;;-1:-1:-1;2984:115:0;;;;;:::i;:::-;;:::i;13817:30::-;;;;;;;;;;-1:-1:-1;13817:30:0;;;;;;;;15737:216;15841:10;15812:4;15829:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15829:32:0;;;;;;;;;;:41;;;15886:37;15812:4;;15829:32;;15886:37;;;;15864:6;13504:25:1;;13492:2;13477:18;;13358:177;15886:37:0;;;;;;;;-1:-1:-1;15941:4:0;15737:216;;;;;:::o;22552:113::-;2928:4;2963:5;-1:-1:-1;;;;;2963:5:0;2509:10;2952:16;2493:38;;;;-1:-1:-1;;;2493:38:0;;;;;;;:::i;:::-;;;;;;;;;22617:11:::1;:21:::0;;-1:-1:-1;;22617:21:0::1;::::0;::::1;;;::::0;;27946:12;27933:10;:25;22552:113;:::o;22649:8::-:1;22552:113:::0;:::o;31973:150::-;32053:4;32109:6;32077:29;32097:8;32077:19;:29::i;:::-;:38;;31973:150;-1:-1:-1;;;31973:150:0:o;30673:183::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;30771:15:::1;:25:::0;;;;30807:26:::1;:41:::0;30673:183::o;27447:342::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;27607:1:::1;27580:23;27592:11:::0;27580:9;:23:::1;:::i;:::-;:28;;:55;;;;;27624:11;27612:9;:23;27580:55;27572:64;;;::::0;::::1;;27647:26;:38:::0;;;;27696:28:::1;:42:::0;27749:23:::1;:32:::0;27447:342::o;16255:368::-;-1:-1:-1;;;;;16375:19:0;;16355:4;16375:19;;;:11;:19;;;;;;;;16395:10;16375:31;;;;;;;;-1:-1:-1;;16375:52:0;16372:186;;16477:69;;;;;;;;;;;-1:-1:-1;;;16477:69:0;;;;;;;;-1:-1:-1;;;;;16477:19:0;;-1:-1:-1;16477:19:0;;;:11;:19;;;;;16497:10;16477:31;;;;;;;;;;:69;;16513:6;;16477:35;:69::i;:::-;-1:-1:-1;;;;;16443:19:0;;;;;;:11;:19;;;;;;;;16463:10;16443:31;;;;;;;:103;16372:186;16575:40;16589:6;16597:9;16608:6;16575:13;:40::i;:::-;16568:47;;16255:368;;;;;;:::o;31345:146::-;31441:11;;:42;;-1:-1:-1;;;31441:42:0;;-1:-1:-1;;;;;6304:32:1;;;31441:42:0;;;6286:51:1;31414:7:0;;31441:11;;:29;;6259:18:1;;31441:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31648:142::-;31776:4;;-1:-1:-1;;;;;31776:4:0;31701:7;15569:18;;;:9;:18;;;;;;31728:54;;31755:4;;-1:-1:-1;;;;;31755:4:0;15551:7;15569:18;;;:9;:18;;;;;;31728:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;31721:61;;31648:142;:::o;31056:183::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;31166:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;31166:65:0;;::::1;::::0;::::1;14301:25:1::0;;;14342:18;;;14335:34;;;-1:-1:-1;;;;;31166:11:0;;::::1;::::0;:35:::1;::::0;14274:18:1;;31166:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31056:183:::0;;:::o;22917:165::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;23002:18:::1;:28:::0;;-1:-1:-1;;23041:33:0;23002:28;::::1;;-1:-1:-1::0;;23041:33:0;;;;;23002:28:::1;;23041:33:::0;;;::::1;::::0;;;::::1;;::::0;;22917:165::o;26994:445::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;27149:18:::1;:29:::0;;27189:14:::1;:21:::0;;;;-1:-1:-1;27221:22:0::1;:26:::0;27258:17:::1;:27:::0;;;;27296:22:::1;:32:::0;;;;27362:12:::1;27339:20;:35:::0;-1:-1:-1;;27385:46:0;;;27149:29;::::1;;-1:-1:-1::0;;27385:46:0;;;;;27149:29:::1;27385:46:::0;::::1;;::::0;;;::::1;;::::0;;26994:445::o;23090:125::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23175:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:32;;-1:-1:-1;;23175:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23090:125::o;19202:207::-;19246:4;19303:15;19265:35;19286:13;;19265:16;;:20;;:35;;;;:::i;:::-;:53;19262:140;;;-1:-1:-1;19341:4:0;;19202:207::o;19262:140::-;-1:-1:-1;19385:5:0;;19202:207::o;22826:83::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;22900:1:::1;22881:16;:20:::0;22826:83::o;28929:130::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29018:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29018:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28929:130::o;15961:122::-;16016:4;16040:35;16048:7;-1:-1:-1;;16040:7:0;:35::i;28665:120::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28749:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;28749:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28665:120::o;27974:158::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;28080:44:::1;28118:5;28080:33;28097:15;28080:12;;:16;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;:::-;28062:15;:62:::0;-1:-1:-1;27974:158:0:o;25574:442::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;25682:26:::1;25711:19;:6:::0;25721:8:::1;25711:19;:::i;:::-;25682:48:::0;-1:-1:-1;25741:19:0::1;25763:27;25682:48:::0;25786:3:::1;25763:22;:27::i;:::-;25824:4;::::0;25741:49;;-1:-1:-1;25801:28:0::1;::::0;25741:49;;-1:-1:-1;;;;;25824:4:0::1;25801:9;:28::i;:::-;25843:24;25840:169;;;25914:15;25883:28;:46:::0;25973:23:::1;::::0;25949:48:::1;::::0;13504:25:1;;;25949:48:0::1;::::0;13492:2:1;13477:18;25949:48:0::1;;;;;;;25840:169;25671:345;;25574:442:::0;;:::o;16632:156::-;2928:4;2963:5;-1:-1:-1;;;;;2963:5:0;2509:10;2952:16;2493:38;;;;-1:-1:-1;;;2493:38:0;;;;;;;:::i;:::-;16735:43:::1;16772:5;16735:32;16752:14;16735:12;;:16;;:32;;;;:::i;:43::-;16717:15;:61:::0;-1:-1:-1;16632:156:0:o;31500:136::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;31590:6:::1;31584:3;:12;31576:21;;;::::0;::::1;;31608:14;:20:::0;31500:136::o;30249:228::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;30368:21:::1;:46:::0;;-1:-1:-1;;;;;30368:46:0;;::::1;-1:-1:-1::0;;;;;;30368:46:0;;::::1;;::::0;;;30425:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;30249:228::o;16091:156::-;16171:4;16195:44;16209:10;16221:9;16232:6;16195:13;:44::i;26025:105::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;26121:1:::1;26090:28;:32:::0;26025:105::o;2650:102::-;2928:4;2963:5;-1:-1:-1;;;;;2963:5:0;2509:10;2952:16;2493:38;;;;-1:-1:-1;;;2493:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2714:23:0::1;;::::0;;;2740:4:::1;2714:23;::::0;;;;;;;:30;;-1:-1:-1;;2714:30:0::1;::::0;;::::1;::::0;;2650:102::o;29647:594::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;29852:16:::1;:36:::0;;;29899:14:::1;:32:::0;;;29942:17:::1;:38:::0;;;29991:16:::1;:36:::0;;;30038:10:::1;:24:::0;;;30088:102:::1;30051:11:::0;30088:85:::1;30010:17:::0;30088:85;29962:18;30088:85;29871:17;29916:15;30088:21:::1;:38::i;:::-;:42:::0;::::1;:62::i;:102::-;30073:12;:117:::0;30201:14:::1;:32:::0;-1:-1:-1;;;;;29647:594:0:o;31798:167::-;31866:7;31893:64;31934:22;:20;:22::i;:::-;31916:4;;-1:-1:-1;;;;;31916:4:0;15551:7;15569:18;;;:9;:18;;;;;;31893:36;;31906:22;;31926:1;;31906:15;:19;;:22::i;:::-;31893:8;;:12;:36::i;21273:391::-;21322:7;21342:21;21366:78;21428:15;21366:57;21399:23;;21366:28;;:32;;:57;;;;:::i;:78::-;21342:102;;21455:19;21477:88;21556:8;;21477:74;21522:28;;21477:40;21490:26;;21477:8;;:12;;:40;;;;:::i;:88::-;21455:110;;21583:73;21596:59;21631:23;;21596:30;21612:13;21596:11;:15;;:30;;;;:::i;:59::-;21583:8;;;:12;:73::i;:::-;21576:80;;;;21273:391;:::o;30485:180::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;30577:11:::1;:22:::0;;-1:-1:-1;;30577:22:0::1;;::::0;::::1;;;;::::0;;30626:12:::1;::::0;30651:5:::1;::::0;30626:22:::1;::::0;30641:7;;30626:22:::1;:::i;:::-;:30;;;;:::i;:::-;30610:13;:46:::0;-1:-1:-1;;30485:180:0:o;28140:162::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;28249:45:::1;28288:5;28249:34;28266:16;28249:12;;:16;;:34;;;;:::i;:45::-;28230:16;:64:::0;-1:-1:-1;28140:162:0:o;22673:145::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;22760:15:::1;22741:16;:34:::0;22786:13:::1;:24:::0;22673:145::o;2760:105::-;2928:4;2963:5;-1:-1:-1;;;;;2963:5:0;2509:10;2952:16;2493:38;;;;-1:-1:-1;;;2493:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2826:23:0::1;2852:5;2826:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;2826:31:0::1;::::0;;2760:105::o;31247:90::-;31292:11;;:37;;-1:-1:-1;;;31292:37:0;;31318:10;31292:37;;;6286:51:1;-1:-1:-1;;;;;31292:11:0;;;;:25;;6259:18:1;;31292:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20950:315;21006:7;21056:12;21042:10;;21029;;:23;;;;:::i;:::-;:39;21026:76;;21078:14;;:21;;21097:1;21078:18;:21::i;21026:76::-;21115:7;:86;;;;;21186:15;21126:57;21159:23;;21126:28;;:32;;:57;;;;:::i;:::-;:75;21115:86;21112:120;;;21211:18;:16;:18::i;21112:120::-;-1:-1:-1;;21249:8:0;;;20950:315::o;3107:189::-;2928:4;2963:5;-1:-1:-1;;;;;2963:5:0;2509:10;2952:16;2493:38;;;;-1:-1:-1;;;2493:38:0;;;;;;;:::i;:::-;3187:5:::1;:15:::0;;-1:-1:-1;;;;;;3187:15:0::1;-1:-1:-1::0;;;;;3187:15:0;::::1;::::0;;::::1;::::0;;3213:23;;;-1:-1:-1;3213:23:0::1;::::0;;;;;;;;:30;;-1:-1:-1;;3213:30:0::1;::::0;;::::1;::::0;;;3259:29;;6286:51:1;;;3259:29:0::1;::::0;6259:18:1;3259:29:0::1;;;;;;;3107:189:::0;:::o;30864:180::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;30986:20:::1;::::0;30978:58:::1;::::0;30946:21:::1;::::0;-1:-1:-1;;;;;30986:20:0::1;::::0;30978:58;::::1;;;::::0;30946:21;;30917:26:::1;30978:58:::0;30917:26;30978:58;30946:21;30986:20;30978:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30906:138;30864:180::o:0;28310:347::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28407:23:0;::::1;28425:4;28407:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;28444:4:0::1;::::0;-1:-1:-1;;;;;28434:14:0;;::::1;28444:4:::0;::::1;28434:14;;28407:41;28399:50;;;::::0;::::1;;-1:-1:-1::0;;;;;28460:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;28460:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;28504:146:::1;;28529:11;::::0;:31:::1;::::0;-1:-1:-1;;;28529:31:0;;-1:-1:-1;;;;;6764:32:1;;;28529:31:0::1;::::0;::::1;6746:51:1::0;28529:11:0::1;6813:18:1::0;;;6806:34;28529:11:0;;::::1;::::0;:20:::1;::::0;6719:18:1;;28529:31:0::1;6564:282:1::0;28504:146:0::1;28591:11;::::0;-1:-1:-1;;;;;28620:17:0;;::::1;28591:11;28620:17:::0;;;:9:::1;:17;::::0;;;;;;;28591:47;;-1:-1:-1;;;28591:47:0;;::::1;::::0;::::1;6746:51:1::0;;;;6813:18;;;6806:34;28591:11:0;::::1;::::0;:20:::1;::::0;6719:18:1;;28591:47:0::1;6564:282:1::0;29067:572:0;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;29266:15:::1;:34:::0;;;29311:13:::1;:30:::0;;;29352:16:::1;:36:::0;;;29399:15:::1;:34:::0;;;29444:9:::1;:22:::0;;;29491:97:::1;29456:10:::0;29491:81:::1;29417:16:::0;29491:81;29371:17;29491:81;29284:16;29327:14;29491:20:::1;:36::i;:97::-;29477:11;:111:::0;29599:14:::1;:32:::0;-1:-1:-1;;;;;29067:572:0:o;28793:128::-;2591:24;2604:10;2591:12;:24::i;:::-;2583:48;;;;-1:-1:-1;;;2583:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28881:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;28881:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28793:128::o;2984:115::-;-1:-1:-1;;;;;3068:23:0;3044:4;3068:23;;;:14;:23;;;;;;;;;2984:115::o;529:192::-;615:7;651:12;643:6;;;;635:29;;;;-1:-1:-1;;;635:29:0;;;;;;;;:::i;:::-;-1:-1:-1;675:9:0;687:5;691:1;687;:5;:::i;:::-;675:17;529:192;-1:-1:-1;;;;;529:192:0:o;16796:1446::-;16908:6;;16888:4;;16908:6;;;;;16905:63;;;16924:41;16939:6;16947:9;16958:6;16924:14;:41::i;:::-;16917:48;;;;16905:63;-1:-1:-1;;;;;16984:22:0;;;;;;:14;:22;;;;;;;;16983:23;:53;;;;-1:-1:-1;;;;;;17011:25:0;;;;;;:14;:25;;;;;;;;17010:26;16983:53;16980:130;;;17060:11;;;;17052:46;;;;-1:-1:-1;;;17052:46:0;;12517:2:1;17052:46:0;;;12499:21:1;12556:2;12536:18;;;12529:30;12595:25;12575:18;;;12568:53;12638:18;;17052:46:0;12315:347:1;17052:46:0;-1:-1:-1;;;;;17131:24:0;;;;;;:13;:24;;;;;;;;17130:25;:51;;;;-1:-1:-1;;;;;;17160:21:0;;;;;;:13;:21;;;;;;;;17159:22;17130:51;17122:86;;;;-1:-1:-1;;;17122:86:0;;12869:2:1;17122:86:0;;;12851:21:1;12908:2;12888:18;;;12881:30;-1:-1:-1;;;12927:18:1;;;12920:52;12989:18;;17122:86:0;12667:346:1;17122:86:0;17248:4;;-1:-1:-1;;;;;17235:17:0;;;17248:4;;17235:17;17266:22;17235:17;17266:14;:22::i;:::-;17301:41;17316:6;17324:9;17335:6;17301:14;:41::i;:::-;17358:35;17375:6;17383:9;17358:16;:35::i;:::-;17406:47;17419:6;17427;17435:9;17446:6;17406:12;:47::i;:::-;17466:14;17483:13;:11;:13::i;:::-;17466:30;;17512:16;:14;:16::i;:::-;17509:35;;;17531:10;:8;:10::i;:::-;17576:53;;;;;;;;;;;-1:-1:-1;;;17576:53:0;;;;;;;;-1:-1:-1;;;;;17576:17:0;;-1:-1:-1;17576:17:0;;;:9;:17;;;;;;;;:53;;17598:6;;17576:21;:53::i;:::-;-1:-1:-1;;;;;17556:17:0;;;;;;:9;:17;;;;;;;;:73;;;;20915:11;:19;;;;;;;;20914:20;17667:75;;17736:6;17667:75;;;17691:42;17699:6;17707;17715;17723:9;17691:7;:42::i;:::-;-1:-1:-1;;;;;17776:20:0;;;;;;:9;:20;;;;;;17642:100;;-1:-1:-1;17776:40:0;;17642:100;17776:24;:40::i;:::-;-1:-1:-1;;;;;17753:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;17833:24;;;;;:16;:24;;;;;;;17829:119;;17878:11;;-1:-1:-1;;;;;17907:17:0;;;17878:11;17907:17;;;:9;:17;;;;;;;;17878:47;;-1:-1:-1;;;17878:47:0;;;;;6746:51:1;;;;6813:18;;;6806:34;17878:11:0;;;:20;;6719:18:1;;17878:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17874:63;;-1:-1:-1;;;;;17964:27:0;;;;;;:16;:27;;;;;;;;17960:129;;18012:11;;-1:-1:-1;;;;;18044:20:0;;;18012:11;18044:20;;;:9;:20;;;;;;;;18012:53;;-1:-1:-1;;;18012:53:0;;;;;6746:51:1;;;;6813:18;;;6806:34;18012:11:0;;;:20;;6719:18:1;;18012:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18008:69;;18105:11;;18125:14;;18105:35;;-1:-1:-1;;;;;;18105:35:0;;-1:-1:-1;;;;;18105:11:0;;;;:19;;:35;;;;13504:25:1;;;13492:2;13477:18;;13358:177;18105:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18101:51;18186:9;-1:-1:-1;;;;;18169:43:0;18178:6;-1:-1:-1;;;;;18169:43:0;;18197:14;18169:43;;;;13504:25:1;;13492:2;13477:18;;13358:177;18169:43:0;;;;;;;;-1:-1:-1;18230:4:0;;16796:1446;-1:-1:-1;;;;;;16796:1446:0:o;387:136::-;445:7;472:43;476:1;479;472:43;;;;;;;;;;;;;;;;;:3;:43::i;200:181::-;258:7;;290:5;294:1;290;:5;:::i;:::-;278:17;;319:1;314;:6;;306:46;;;;-1:-1:-1;;;306:46:0;;9825:2:1;306:46:0;;;9807:21:1;9864:2;9844:18;;;9837:30;9903:29;9883:18;;;9876:57;9950:18;;306:46:0;9623:351:1;727:250:0;785:7;809:6;805:47;;-1:-1:-1;839:1:0;832:8;;805:47;864:9;876:5;880:1;876;:5;:::i;:::-;864:17;-1:-1:-1;909:1:0;900:5;904:1;864:17;900:5;:::i;:::-;:10;892:56;;;;-1:-1:-1;;;892:56:0;;10947:2:1;892:56:0;;;10929:21:1;10986:2;10966:18;;;10959:30;11025:34;11005:18;;;10998:62;-1:-1:-1;;;11076:18:1;;;11069:31;11117:19;;892:56:0;10745:397:1;983:132:0;1041:7;1068:39;1072:1;1075;1068:39;;;;;;;;;;;;;;;;;:3;:39::i;26625:361::-;13931:6;:13;;-1:-1:-1;;13931:13:0;;;;;26725:16:::1;::::0;;13931:6;26725:16;;;;;::::1;::::0;;-1:-1:-1;;26725:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;26762:4:0::1;::::0;26752:7;;;;-1:-1:-1;;;;;;26762:4:0::1;::::0;26752:7;;-1:-1:-1;26762:4:0::1;::::0;26752:7:::1;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;26752:14:0::1;;;-1:-1:-1::0;;;;;26752:14:0::1;;;::::0;::::1;26795:4;26777;26782:1;26777:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26777:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26813:6:::1;::::0;:165:::1;::::0;-1:-1:-1;;;26813:165:0;;:6;::::1;::::0;:57:::1;::::0;26878:6;;26813:165:::1;::::0;:6:::1;::::0;26916:4;;26935:2;;26952:15:::1;::::0;26813:165:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;13949:6:0;:14;;-1:-1:-1;;13949:14:0;;;-1:-1:-1;;;;;;26625:361:0:o;18250:330::-;18380:53;;;;;;;;;;;-1:-1:-1;;;18380:53:0;;;;;;;;-1:-1:-1;;;;;18380:17:0;;18343:4;18380:17;;;:9;:17;;;;;;;:53;;18402:6;;18380:21;:53::i;:::-;-1:-1:-1;;;;;18360:17:0;;;;;;;:9;:17;;;;;;:73;;;;18467:20;;;;;;;:32;;18492:6;18467:24;:32::i;:::-;-1:-1:-1;;;;;18444:20:0;;;;;;;:9;:20;;;;;;;:55;;;;18515:35;;;;;;;;;;18543:6;13504:25:1;;13492:2;13477:18;;13358:177;18515:35:0;;;;;;;;-1:-1:-1;18568:4:0;18250:330;;;;;:::o;18588:606::-;18648:6;18645:542;;;18685:16;;18670:12;:31;18729:14;;18716:10;:27;18774:17;;18758:13;:33;18821:16;;18806:12;:31;18861:10;;18852:6;:19;18897:12;;18886:8;:23;22552:113;:::o;18645:542::-;18957:15;;18942:12;:30;19000:13;;18987:10;:26;19044:16;;19028:13;:32;19090:15;;19075:12;:30;19129:9;;19120:6;:18;19164:11;;19153:8;:22;18588:606;:::o;20289:531::-;-1:-1:-1;;;;;20394:22:0;;;;;;:14;:22;;;;;;;;20393:23;:45;;;;-1:-1:-1;20433:5:0;;-1:-1:-1;;;;;20420:18:0;;;20433:5;;20420:18;;20393:45;:75;;;;-1:-1:-1;;;;;;20442:26:0;;20463:4;20442:26;;20393:75;:106;;;;-1:-1:-1;20494:4:0;;-1:-1:-1;;;;;20473:26:0;;;20494:4;;20473:26;;20393:106;:127;;;;-1:-1:-1;20516:4:0;;-1:-1:-1;;;;;20503:17:0;;;20516:4;;20503:17;;20393:127;:164;;;;-1:-1:-1;20537:20:0;;-1:-1:-1;;;;;20524:33:0;;;20537:20;;20524:33;;20393:164;:202;;;;-1:-1:-1;20574:21:0;;-1:-1:-1;;;;;20561:34:0;;;20574:21;;20561:34;;20393:202;:222;;;;-1:-1:-1;20612:3:0;;-1:-1:-1;;;;;20599:16:0;;;20612:3;;20599:16;;20393:222;20389:424;;;-1:-1:-1;;;;;15569:18:0;;20631;15569;;;:9;:18;;;;;;20720:15;;20696:19;20709:6;15569:18;20696:19;:::i;:::-;20695:40;;20687:114;;;;-1:-1:-1;;;20687:114:0;;11752:2:1;20687:114:0;;;11734:21:1;11791:2;11771:18;;;11764:30;11830:34;11810:18;;;11803:62;11901:32;11881:18;;;11874:60;11951:19;;20687:114:0;11550:426:1;20389:424:0;20289:531;;;:::o;19903:378::-;19998:4;;-1:-1:-1;;;;;19988:14:0;;;19998:4;;19988:14;:49;;;;-1:-1:-1;20019:18:0;;;;19988:49;:94;;;;-1:-1:-1;;;;;;20055:27:0;;;;;;:16;:27;;;;;;;;20054:28;19988:94;19984:290;;;-1:-1:-1;;;;;20107:24:0;;;;;;:13;:24;;;;;;20134:15;-1:-1:-1;20099:82:0;;;;-1:-1:-1;;;20099:82:0;;10590:2:1;20099:82:0;;;10572:21:1;10629:2;10609:18;;;10602:30;10668;10648:18;;;10641:58;10716:18;;20099:82:0;10388:352:1;20099:82:0;20241:21;;20223:39;;20241:21;;;;;20223:15;:39;:::i;:::-;-1:-1:-1;;;;;20196:24:0;;;;;;:13;:24;;;;;:66;19903:378;;:::o;19417:478::-;19545:5;;-1:-1:-1;;;;;19532:18:0;;;19545:5;;19532:18;19528:360;;19569:6;19566:311;;;19613:16;;19603:6;:26;;:53;;;-1:-1:-1;;;;;;19633:23:0;;;;;;:15;:23;;;;;;;;19603:53;:83;;;-1:-1:-1;;;;;;19660:26:0;;;;;;:15;:26;;;;;;;;19603:83;19595:113;;;;-1:-1:-1;;;19595:113:0;;9479:2:1;19595:113:0;;;9461:21:1;9518:2;9498:18;;;9491:30;-1:-1:-1;;;9537:18:1;;;9530:47;9594:18;;19595:113:0;9277:341:1;19595:113:0;19566:311;;;19767:15;;19757:6;:25;;:52;;;-1:-1:-1;;;;;;19786:23:0;;;;;;:15;:23;;;;;;;;19757:52;:82;;;-1:-1:-1;;;;;;19813:26:0;;;;;;:15;:26;;;;;;;;19757:82;19749:112;;;;-1:-1:-1;;;19749:112:0;;9479:2:1;19749:112:0;;;9461:21:1;9518:2;9498:18;;;9491:30;-1:-1:-1;;;9537:18:1;;;9530:47;9594:18;;19749:112:0;9277:341:1;22347:197:0;22434:4;;22396;;-1:-1:-1;;;;;22434:4:0;22420:10;:18;;;;:38;;-1:-1:-1;22452:6:0;;;;;;;22451:7;22420:38;:62;;;;-1:-1:-1;22471:11:0;;;;;;;22420:62;:116;;;;-1:-1:-1;;22523:13:0;;22513:4;22495:24;;;;:9;:24;;;;;;:41;;;22347:197::o;23223:2037::-;13931:6;:13;;-1:-1:-1;;13931:13:0;;;;;23318:15:::1;::::0;23335:26:::1;::::0;13931:13;;23302:60:::1;::::0;:15:::1;:60::i;:::-;:79;;23369:12;;23302:79;;;23365:1;23302:79;23272:109;;23392:23;23418:59;23475:1;23418:52;23461:8;;23418:38;23436:19;23418:13;;:17;;:38;;;;:::i;:59::-;23392:85;;23488:20;23511:34;23529:15;23511:13;;:17;;:34;;;;:::i;:::-;23582:16;::::0;;23596:1:::1;23582:16:::0;;;;;::::1;::::0;;23488:57;;-1:-1:-1;23558:21:0::1;::::0;23582:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23582:16:0::1;23558:40;;23627:4;23609;23614:1;23609:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23609:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;23653:4:::1;::::0;23643:7;;23653:4;::::1;::::0;23643;;23653;;23643:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;23643:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;23728:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;23728:188:0;;23694:21:::1;::::0;23728:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;23800:12;;23670:21:::1;::::0;23843:4;;23870::::1;::::0;23890:15:::1;::::0;23728:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23927:17;23947:40;23973:13;23947:21;:25;;:40;;;;:::i;:::-;23927:60:::0;-1:-1:-1;23998:19:0::1;24020:40;24033:26;:19:::0;24057:1:::1;24033:23;:26::i;:::-;24020:8;::::0;;:12:::1;:40::i;:::-;23998:62:::0;-1:-1:-1;24071:26:0::1;24100:58;24156:1;24100:51;23998:62:::0;24100:51;:9;24114:19;24100:13:::1;:34::i;:58::-;24071:87;;24169:27;24199:45;24232:11;24199:28;24213:13;;24199:9;:13;;:28;;;;:::i;:45::-;24169:75;;24255:26;24284:44;24316:11;24284:27;24298:12;;24284:9;:13;;:27;;;;:::i;:44::-;24255:73;;24339:20;24362:38;24388:11;24362:21;24376:6;;24362:9;:13;;:21;;;;:::i;:38::-;24339:61;;24420:11;;;;;;;;;-1:-1:-1::0;;;;;24420:11:0::1;-1:-1:-1::0;;;;;24420:19:0::1;;24447;24420:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;24550:20:0::1;::::0;24542:77:::1;::::0;24492:21:::1;::::0;-1:-1:-1;;;;;24550:20:0::1;::::0;24609:5:::1;::::0;24584:18;;24492:21;24542:77;24492:21;24542:77;24584:18;24550:20;24609:5;24542:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;24683:3:0::1;::::0;24675:54:::1;::::0;24491:128;;-1:-1:-1;24631:15:0::1;::::0;-1:-1:-1;;;;;24683:3:0;;::::1;::::0;24719:5:::1;::::0;24700:12;;24631:15;24675:54;24631:15;24675:54;24700:12;24683:3;24719:5;24675:54:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24630:99;;;24749:16;24741:69;;;::::0;-1:-1:-1;;;24741:69:0;;10181:2:1;24741:69:0::1;::::0;::::1;10163:21:1::0;10220:2;10200:18;;;10193:30;10259:34;10239:18;;;10232:62;-1:-1:-1;;;10310:18:1;;;10303:38;10358:19;;24741:69:0::1;9979:404:1::0;24741:69:0::1;24829:10;24821:57;;;::::0;-1:-1:-1;;;24821:57:0;;11349:2:1;24821:57:0::1;::::0;::::1;11331:21:1::0;11388:2;11368:18;;;11361:30;11427:34;11407:18;;;11400:62;-1:-1:-1;;;11478:18:1;;;11471:32;11520:19;;24821:57:0::1;11147:398:1::0;24821:57:0::1;24894:19:::0;;24891:362:::1;;24929:6;::::0;25103:21:::1;::::0;24929:244:::1;::::0;-1:-1:-1;;;24929:244:0;;25005:4:::1;24929:244;::::0;::::1;7471:34:1::0;7521:18;;;7514:34;;;24929:6:0::1;7564:18:1::0;;;7557:34;;;7607:18;;;7600:34;-1:-1:-1;;;;;25103:21:0;;::::1;7650:19:1::0;;;7643:44;25143:15:0::1;7703:19:1::0;;;7696:35;24929:6:0;::::1;::::0;:22:::1;::::0;24959:18;;7405:19:1;;24929:244:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25193:48:0::1;::::0;;14301:25:1;;;14357:2;14342:18;;14335:34;;;25193:48:0::1;::::0;-1:-1:-1;14274:18:1;25193:48:0::1;;;;;;;24891:362;-1:-1:-1::0;;13949:6:0;:14;;-1:-1:-1;;13949:14:0;;;-1:-1:-1;;;;;;;;;;;23223:2037:0:o;21672:667::-;21768:7;21788:17;21822:9;21818:336;;;21850:6;21847:211;;;21888:54;21927:14;;21888:34;21920:1;21888:27;21913:1;21888:20;21899:8;;21888:6;:10;;:20;;;;:::i;:54::-;21876:66;;21818:336;;21847:211;21995:47;22027:14;;21995:27;22020:1;21995:20;22006:8;;21995:6;:10;;:20;;;;:::i;21818:336::-;22102:40;22127:14;;22102:20;22113:8;;22102:6;:10;;:20;;;;:::i;:40::-;22090:52;;21818:336;22211:4;22193:24;;;;:9;:24;;;;;;:39;;22222:9;22193:28;:39::i;:::-;22184:4;22166:24;;;;:9;:24;;;;;;;:66;;;;22248:42;;-1:-1:-1;;;;;22248:42:0;;;;;;;22280:9;13504:25:1;;13492:2;13477:18;;13358:177;22248:42:0;;;;;;;;22310:21;:6;22321:9;22310:10;:21::i;:::-;22303:28;21672:667;-1:-1:-1;;;;;;21672:667:0:o;1121:193::-;1207:7;1242:12;1235:5;1227:28;;;;-1:-1:-1;;;1227:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1266:9:0;1278:5;1282:1;1278;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;691:388::-;759:6;767;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;691:388;;;;;:::o;1084:456::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:52;;;1246:1;1243;1236:12;1198:52;1285:9;1272:23;1304:31;1329:5;1304:31;:::i;:::-;1354:5;-1:-1:-1;1411:2:1;1396:18;;1383:32;1424:33;1383:32;1424:33;:::i;:::-;1084:456;;1476:7;;-1:-1:-1;;;1530:2:1;1515:18;;;;1502:32;;1084:456::o;1545:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;-1:-1:-1;1819:35:1;1850:2;1835:18;;1819:35;:::i;:::-;1809:45;;1545:315;;;;;:::o;1865:::-;1933:6;1941;1994:2;1982:9;1973:7;1969:23;1965:32;1962:52;;;2010:1;2007;2000:12;1962:52;2049:9;2036:23;2068:31;2093:5;2068:31;:::i;:::-;2118:5;2170:2;2155:18;;;;2142:32;;-1:-1:-1;;;1865:315:1:o;2185:180::-;2241:6;2294:2;2282:9;2273:7;2269:23;2265:32;2262:52;;;2310:1;2307;2300:12;2262:52;2333:26;2349:9;2333:26;:::i;2370:248::-;2435:6;2443;2496:2;2484:9;2475:7;2471:23;2467:32;2464:52;;;2512:1;2509;2502:12;2464:52;2535:26;2551:9;2535:26;:::i;2623:454::-;2712:6;2720;2728;2736;2744;2797:3;2785:9;2776:7;2772:23;2768:33;2765:53;;;2814:1;2811;2804:12;2765:53;2837:26;2853:9;2837:26;:::i;:::-;2827:36;;2910:2;2899:9;2895:18;2882:32;2872:42;;2961:2;2950:9;2946:18;2933:32;2923:42;;3012:2;3001:9;2997:18;2984:32;2974:42;;3035:36;3066:3;3055:9;3051:19;3035:36;:::i;:::-;3025:46;;2623:454;;;;;;;;:::o;3082:337::-;3145:6;3153;3206:2;3194:9;3185:7;3181:23;3177:32;3174:52;;;3222:1;3219;3212:12;3174:52;3245:26;3261:9;3245:26;:::i;:::-;3235:36;;3321:2;3310:9;3306:18;3293:32;3365:4;3358:5;3354:16;3347:5;3344:27;3334:55;;3385:1;3382;3375:12;3424:180;3483:6;3536:2;3524:9;3515:7;3511:23;3507:32;3504:52;;;3552:1;3549;3542:12;3504:52;-1:-1:-1;3575:23:1;;3424:180;-1:-1:-1;3424:180:1:o;3609:184::-;3679:6;3732:2;3720:9;3711:7;3707:23;3703:32;3700:52;;;3748:1;3745;3738:12;3700:52;-1:-1:-1;3771:16:1;;3609:184;-1:-1:-1;3609:184:1:o;3798:248::-;3863:6;3871;3924:2;3912:9;3903:7;3899:23;3895:32;3892:52;;;3940:1;3937;3930:12;3892:52;3976:9;3963:23;3953:33;;4005:35;4036:2;4025:9;4021:18;4005:35;:::i;4051:248::-;4119:6;4127;4180:2;4168:9;4159:7;4155:23;4151:32;4148:52;;;4196:1;4193;4186:12;4148:52;-1:-1:-1;;4219:23:1;;;4289:2;4274:18;;;4261:32;;-1:-1:-1;4051:248:1:o;4304:316::-;4381:6;4389;4397;4450:2;4438:9;4429:7;4425:23;4421:32;4418:52;;;4466:1;4463;4456:12;4418:52;-1:-1:-1;;4489:23:1;;;4559:2;4544:18;;4531:32;;-1:-1:-1;4610:2:1;4595:18;;;4582:32;;4304:316;-1:-1:-1;4304:316:1:o;4625:306::-;4713:6;4721;4729;4782:2;4770:9;4761:7;4757:23;4753:32;4750:52;;;4798:1;4795;4788:12;4750:52;4827:9;4821:16;4811:26;;4877:2;4866:9;4862:18;4856:25;4846:35;;4921:2;4910:9;4906:18;4900:25;4890:35;;4625:306;;;;;:::o;4936:523::-;5040:6;5048;5056;5064;5072;5080;5133:3;5121:9;5112:7;5108:23;5104:33;5101:53;;;5150:1;5147;5140:12;5101:53;-1:-1:-1;;5173:23:1;;;5243:2;5228:18;;5215:32;;-1:-1:-1;5294:2:1;5279:18;;5266:32;;5345:2;5330:18;;5317:32;;-1:-1:-1;5396:3:1;5381:19;;5368:33;;-1:-1:-1;5448:3:1;5433:19;5420:33;;-1:-1:-1;4936:523:1;-1:-1:-1;4936:523:1:o;5464:461::-;5517:3;5555:5;5549:12;5582:6;5577:3;5570:19;5608:4;5637:2;5632:3;5628:12;5621:19;;5674:2;5667:5;5663:14;5695:1;5705:195;5719:6;5716:1;5713:13;5705:195;;;5784:13;;-1:-1:-1;;;;;5780:39:1;5768:52;;5840:12;;;;5875:15;;;;5816:1;5734:9;5705:195;;;-1:-1:-1;5916:3:1;;5464:461;-1:-1:-1;;;;;5464:461:1:o;8160:510::-;8431:6;8420:9;8413:25;8474:3;8469:2;8458:9;8454:18;8447:31;8394:4;8495:57;8547:3;8536:9;8532:19;8524:6;8495:57;:::i;:::-;-1:-1:-1;;;;;8588:32:1;;;;8583:2;8568:18;;8561:60;-1:-1:-1;8652:2:1;8637:18;8630:34;8487:65;8160:510;-1:-1:-1;;8160:510:1:o;8675:597::-;8787:4;8816:2;8845;8834:9;8827:21;8877:6;8871:13;8920:6;8915:2;8904:9;8900:18;8893:34;8945:1;8955:140;8969:6;8966:1;8963:13;8955:140;;;9064:14;;;9060:23;;9054:30;9030:17;;;9049:2;9026:26;9019:66;8984:10;;8955:140;;;9113:6;9110:1;9107:13;9104:91;;;9183:1;9178:2;9169:6;9158:9;9154:22;9150:31;9143:42;9104:91;-1:-1:-1;9256:2:1;9235:15;-1:-1:-1;;9231:29:1;9216:45;;;;9263:2;9212:54;;8675:597;-1:-1:-1;;;8675:597:1:o;11981:329::-;12183:2;12165:21;;;12222:1;12202:18;;;12195:29;-1:-1:-1;;;12255:2:1;12240:18;;12233:36;12301:2;12286:18;;11981:329::o;13018:335::-;13220:2;13202:21;;;13259:2;13239:18;;;13232:30;-1:-1:-1;;;13293:2:1;13278:18;;13271:41;13344:2;13329:18;;13018:335::o;13540:582::-;13839:6;13828:9;13821:25;13882:6;13877:2;13866:9;13862:18;13855:34;13925:3;13920:2;13909:9;13905:18;13898:31;13802:4;13946:57;13998:3;13987:9;13983:19;13975:6;13946:57;:::i;:::-;-1:-1:-1;;;;;14039:32:1;;;;14034:2;14019:18;;14012:60;-1:-1:-1;14103:3:1;14088:19;14081:35;13938:65;13540:582;-1:-1:-1;;;13540:582:1:o;14569:128::-;14609:3;14640:1;14636:6;14633:1;14630:13;14627:39;;;14646:18;;:::i;:::-;-1:-1:-1;14682:9:1;;14569:128::o;14702:217::-;14742:1;14768;14758:132;;14812:10;14807:3;14803:20;14800:1;14793:31;14847:4;14844:1;14837:15;14875:4;14872:1;14865:15;14758:132;-1:-1:-1;14904:9:1;;14702:217::o;14924:168::-;14964:7;15030:1;15026;15022:6;15018:14;15015:1;15012:21;15007:1;15000:9;14993:17;14989:45;14986:71;;;15037:18;;:::i;:::-;-1:-1:-1;15077:9:1;;14924:168::o;15097:125::-;15137:4;15165:1;15162;15159:8;15156:34;;;15170:18;;:::i;:::-;-1:-1:-1;15207:9:1;;15097:125::o;15227:127::-;15288:10;15283:3;15279:20;15276:1;15269:31;15319:4;15316:1;15309:15;15343:4;15340:1;15333:15;15359:127;15420:10;15415:3;15411:20;15408:1;15401:31;15451:4;15448:1;15441:15;15475:4;15472:1;15465:15;15623:131;-1:-1:-1;;;;;15698:31:1;;15688:42;;15678:70;;15744:1;15741;15734:12

Swarm Source

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