BNB Price: $641.69 (+1.92%)
 

Overview

Max Total Supply

1,000盘古荣光

Holders

646

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 盘古荣光

Value
$0.00
0x6e5B5294E10D4fF75B3f0fA05bffc6A24506340E
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
PG

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at BscScan.com on 2025-11-17
*/

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

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}


interface IERC20 {
    function decimals() external view returns (uint256);

    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface ISwapRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

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

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

    function feeTo() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
}

abstract contract Ownable {
    address internal _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "!owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "new is 0");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract TokenDistributor {
    constructor(address token) {
        IERC20(token).approve(msg.sender, uint256(~uint256(0)));
    }
}

interface ISwapPair {
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function token0() external view returns (address);

    function balanceOf(address account) external view returns (uint256);

    function totalSupply() external view returns (uint256);
    function kLast() external view returns (uint);
    function sync() external;

}

interface IWBNB {
    function withdraw(uint wad) external; //unwarp WBNB -> BNB
}


contract buyBackConsole{

    bool public enableCheckLp = true;
    function setEnableCheckLp(bool status) public {
        require(msg.sender == admin,"no permission");
        enableCheckLp = status;

    }

    uint256 public onceBuyBackValue;
    function setOnceBuyBackValue(uint256 newValue) public {
        require(msg.sender == admin,"no permission");
        onceBuyBackValue = newValue;
    }

    address public buyBackTo = address(0xDEAD);
    function setBuyBackTo(address newAddr) public {
        require(msg.sender == admin,"no permission");
        buyBackTo = newAddr;
    }

    address public token;
    address public pair;
    address public admin;
    address[] public path;
    ISwapRouter public router;
    address public USDT;
    bool public isINIT;

    function init(
        address _token,
        address _pair,
        address _admin,
        address _router,
        address _usdt,
        bool isTestMode,
        uint256 _onceBuyBackValue
    ) public {
        require(!isINIT,"already INIT");

        token = _token;
        pair = _pair;
        admin = _admin;

        USDT = _usdt;

        path = new address[](2);
        path[0] = USDT;
        path[1] = _token;

        router = ISwapRouter(_router);
        IERC20(USDT).approve(address(router),~uint256(0));

        if (isTestMode){
            enableCheckLp = false;
        }

        onceBuyBackValue = _onceBuyBackValue;
        isINIT = true;

    }

    function getLpValue() public view returns(uint256){
        return IERC20(USDT).balanceOf(pair);
    }

    function checkLpValueIsEnough() public view returns(bool){
        return getLpValue() * 5 / 100 > onceBuyBackValue;
    }

    function enoughToBuyBack() public view returns(bool){
        return IERC20(USDT).balanceOf(address(this)) >= onceBuyBackValue;
    }

    event lpValueTooLess(uint256 lpValue,uint256 buyBack);
    event nowEnough();
    function buyBack() public {
        require(msg.sender == admin || msg.sender == token,"no permission");

        if (!enoughToBuyBack()){
            emit nowEnough();
            return;
        }

        if (!checkLpValueIsEnough() && enableCheckLp){
            emit lpValueTooLess(
                getLpValue(),
                onceBuyBackValue
            );
            return;
        }
        
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            onceBuyBackValue, 0, path, buyBackTo, block.timestamp);

    }

    function setClaims(
        address _token,
        address to,
        uint256 amount
    ) public {
        if (admin == msg.sender){
            if (_token == address(0)){
                payable(to).transfer(amount);
            }else{
                IERC20(_token).transfer(to,amount);
            }
        }
    }

}

contract PG is IERC20, Ownable {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    address payable public fundAddress;
    address payable public fundAddress_2;

    string private _name;
    string private _symbol;
    uint256 private _decimals;
    uint256 public kb;
    uint256 public maxBuyAmount;

    uint256 public maxWalletAmount;
    bool public limitEnable = true;

    mapping(address => bool) public _feeWhiteList;
    mapping(address => bool) public _rewardList;
    mapping(address => bool) public isMaxEatExempt;

    uint256 private _tTotal;

    ISwapRouter public _swapRouter;
    address public currency;
    mapping(address => bool) public _swapPairList;

    bool private inSwap;

    uint256 private constant MAX = ~uint256(0);
    TokenDistributor public _tokenDistributor;
    TokenDistributor public _rewardTokenDistributor;

    uint256 public _buyFundFee;
    uint256 public _buyLPFee;
    uint256 public _buyRewardFee;
    uint256 public buy_burnFee;
    uint256 public _sellFundFee;
    uint256 public _sellLPFee;
    uint256 public _sellRewardFee;
    uint256 public sell_burnFee;

    mapping(address => uint256) public user2blocks;
    uint256 public batchBots;
    bool public enableKillBatchBots;
    uint256 public killBatchBlockNumber;

    bool public currencyIsEth;

    address public usdtAddr;
    address public sonTokenAddr;
    uint256 public startTradeBlock;

    address public _mainPair;

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    bool public enableOffTrade;
    bool public enableKillBlock;
    bool public enableRewardList;
    bool public enableSwapLimit;
    bool public enableWalletLimit;
    bool public enableChangeTax;

    address[] public rewardPath;
    buyBackConsole public buyBackConsoleAddress;

    constructor() {
        _name = unicode"盘古荣光";
        _symbol = unicode"盘古荣光";
        _decimals = 18;
        uint256 total = 1000 * 10 ** _decimals;
        _tTotal = total;

        fundAddress = payable(
            0xF300C7b48c26CAcFc4A8898836D945D3BF7776FF
        );

        fundAddress_2 = payable(
           0xF300C7b48c26CAcFc4A8898836D945D3BF7776FF
        );

        generateLpReceiverAddr = fundAddress;

        currency = block.chainid == 56 ? 0x55d398326f99059fF775485246999027B3197955 : 0xaB1a4d4f1D656d2450692D237fdD6C7f9146e814;
        ISwapRouter swapRouter = ISwapRouter(
            block.chainid == 56 ? 0x10ED43C718714eb63d5aA57B78B54704E256024E : 0xD99D1c33F9fC3444f8101754aBC46c52416550D1
        );

        _swapRouters[address(swapRouter)] = true;
        address ReceiveAddress = msg.sender;
        usdtAddr = currency;

        if (block.chainid == 56) {
            require(currency < address(this));
        }

        // maxBuyAmount = 0;
        // MSA = numberParams[3];

        // maxWalletAmount = 0;

        enableOffTrade = true;
        enableKillBlock = true;
        enableRewardList = true;

        enableSwapLimit = true;
        enableWalletLimit = true;
        enableChangeTax = true;
        currencyIsEth = false;
        enableKillBatchBots = false;
        enableTransferFee = false;
        antiSYNC = false;

        if (currencyIsEth) {
            currency = swapRouter.WETH();
        }

        rewardPath = [currency];
        if (currency != usdtAddr) {
            if (currencyIsEth == false) {
                rewardPath.push(swapRouter.WETH());
            }
            if (usdtAddr != swapRouter.WETH()) rewardPath.push(usdtAddr);
        }

        _swapRouter = swapRouter;
        _allowances[address(this)][address(swapRouter)] = MAX;
        IERC20(currency).approve(address(swapRouter), MAX);

        ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
        address swapPair = swapFactory.createPair(address(this), currency);
        _mainPair = swapPair;

        buyBackConsoleAddress = new buyBackConsole();
        buyBackConsoleAddress.init(
            address(this),
            swapPair,
            msg.sender,
            address(swapRouter),
            currency,
            false,
            1 * 10 ** 18
        );

        _swapPairList[swapPair] = true;

        _buyFundFee = 50;
        _buyLPFee = 100;
        _buyRewardFee = 200;
        buy_burnFee = 30;

        _sellFundFee = 50;
        _sellLPFee = 100;
        _sellRewardFee = 200;
        sell_burnFee = 30;

        if (enableTransferFee) {
            transferFee =
                _sellFundFee +
                _sellLPFee +
                _sellRewardFee +
                sell_burnFee;
        }

        // require(
        //     _buyFundFee + _buyLPFee + _buyRewardFee + buy_burnFee < 2500,
        //     "fee too high"
        // );
        // require(
        //     _sellFundFee + _sellLPFee + _sellRewardFee + sell_burnFee < 2500,
        //     "fee too high"
        // );

        killBatchBlockNumber = 0;
        kb = 0;
        airdropNumbs = 1;
        // require(airdropNumbs <= 3, "airdropNumbs should be <= 3");

        _balances[ReceiveAddress] = total;
        _userInfo[ReceiveAddress].lpAmount = MAX / 10**5;
        emit Transfer(address(0), ReceiveAddress, total);
        _allowances[ReceiveAddress][address(swapRouter)] = MAX;

        _feeWhiteList[fundAddress] = true;
        _feeWhiteList[fundAddress_2] = true;
        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[address(this)] = true;
        // _feeWhiteList[address(swapRouter)] = true;
        _feeWhiteList[msg.sender] = true;
        _feeWhiteList[address(buyBackConsoleAddress)];
        _feeWhiteList[address(0xdead)];

        isMaxEatExempt[msg.sender] = true;
        isMaxEatExempt[fundAddress] = true;
        isMaxEatExempt[fundAddress_2] = true;
        isMaxEatExempt[ReceiveAddress] = true;
        isMaxEatExempt[address(swapRouter)] = true;
        isMaxEatExempt[address(_mainPair)] = true;
        isMaxEatExempt[address(this)] = true;
        isMaxEatExempt[address(0xdead)] = true;

        excludeHolder[address(0)] = true;
        excludeHolder[ReceiveAddress] = true;
        excludeHolder[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        holderRewardCondition = 10 ** IERC20(usdtAddr).decimals() / 10;

        _tokenDistributor = new TokenDistributor(currency);
        // _rewardTokenDistributor = new TokenDistributor(usdtAddr);
    }


    function symbol() external view override returns (string memory) {
        return _symbol;
    }

    function name() external view override returns (string memory) {
        return _name;
    }

    function decimals() external view override returns (uint256) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    bool public antiSYNC;

    function setAntiSYNCEnable(bool s) public onlyOwner {
        antiSYNC = s;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (account == _mainPair && msg.sender == _mainPair && antiSYNC) {
            require(_balances[_mainPair] > 0, "!sync");
        }
        return _balances[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        if (_allowances[sender][msg.sender] != MAX) {
            _allowances[sender][msg.sender] =
                _allowances[sender][msg.sender] -
                amount;
        }
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setisMaxEatExempt(address holder, bool exempt) external onlyOwner {
        isMaxEatExempt[holder] = exempt;
    }

    function setkb(uint256 a) public onlyOwner {
        kb = a;
    }

    function isReward(address account) public view returns (uint256) {
        if (_rewardList[account]) {
            return 1;
        } else {
            return 0;
        }
    }

    bool public airdropEnable = true;

    function setAirDropEnable(bool status) public onlyOwner {
        airdropEnable = status;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    uint256 public airdropNumbs = 0;

    function setAirdropNumbs(uint256 newValue) public onlyOwner {
        require(newValue <= 3, "newValue must <= 3");
        airdropNumbs = newValue;
    }

    bool public enableTransferFee = false;

    function setEnableTransferFee(bool status) public onlyOwner {
        // enableTransferFee = status;
        if (status) {
            transferFee =
                _sellFundFee +
                _sellLPFee +
                _sellRewardFee +
                sell_burnFee;
        } else {
            transferFee = 0;
        }
    }

    uint256 public numTokensSellRate = 100; // 100%

    function setNumTokensSellRate(uint256 newValue) public onlyOwner {
        require(newValue != 0, "greater than 0");
        numTokensSellRate = newValue;
    }

    uint256 public swapAtAmount = 0;

    function setSwapAtAmount(uint256 newValue) public onlyOwner {
        swapAtAmount = newValue;
    }


    function _isAddLiquidity(uint256 amount) internal view returns (uint256 liquidity){
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        uint256 amountOther;
        if (rOther > 0 && rThis > 0) {
            amountOther = amount * rOther / rThis;
        }
        //isAddLP
        if (balanceOther >= rOther + amountOther) {
            (liquidity,) = calLiquidity(balanceOther, amount, rOther, rThis);
        }
    }

    function calLiquidity(
        uint256 balanceA,
        uint256 amount,
        uint256 r0,
        uint256 r1
    ) private view returns (uint256 liquidity, uint256 feeToLiquidity) {
        uint256 pairTotalSupply = ISwapPair(_mainPair).totalSupply();
        address feeTo = ISwapFactory(_swapRouter.factory()).feeTo();
        bool feeOn = feeTo != address(0);
        uint256 _kLast = ISwapPair(_mainPair).kLast();
        if (feeOn) {
            if (_kLast != 0) {
                uint256 rootK = Math.sqrt(r0 * r1);
                uint256 rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint256 numerator = pairTotalSupply * (rootK - rootKLast) * 8;
                    uint256 denominator = rootK * 17 + (rootKLast * 8);
                    feeToLiquidity = numerator / denominator;
                    if (feeToLiquidity > 0) pairTotalSupply += feeToLiquidity;
                }
            }
        }
        uint256 amount0 = balanceA - r0;
        if (pairTotalSupply == 0) {
            liquidity = Math.sqrt(amount0 * amount) - 1000;
        } else {
            liquidity = Math.min(
                (amount0 * pairTotalSupply) / r0,
                (amount * pairTotalSupply) / r1
            );
        }
    }

    struct UserInfo {
        uint256 lpAmount;
        bool preLP;
    }

    mapping(address => UserInfo) private _userInfo;
    function updateLPAmount(address account, uint256 lpAmount) public {
        require(msg.sender == owner() || msg.sender == fundAddress);
        _userInfo[account].lpAmount = lpAmount;
    }

    function getUserInfo(address account) public view returns (
        uint256 lpAmount, uint256 lpBalance, bool excludeLP, bool preLP
    ) {
        lpAmount = _userInfo[account].lpAmount;
        lpBalance = IERC20(_mainPair).balanceOf(account);
        excludeLP = excludeHolder[account];
        UserInfo storage userInfo = _userInfo[account];
        preLP = userInfo.preLP;
    }

    // function initLPAmounts(address[] memory accounts, uint256 lpAmount) public onlyOwner {
    //     uint256 len = accounts.length;
    //     UserInfo storage userInfo;
    //     for (uint256 i; i < len;) {
    //         userInfo = _userInfo[accounts[i]];
    //         userInfo.lpAmount = lpAmount;
    //         userInfo.preLP = true;
    //         addHolder(accounts[i]);
    //     unchecked{
    //         ++i;
    //     }
    //     }
    // }

    function matchInitLPAmounts(address[] memory accounts) public onlyOwner {
        uint256 len = accounts.length;
        ISwapPair mainPair = ISwapPair(_mainPair);

        UserInfo storage userInfo;
        for (uint256 i; i < len;) {
            userInfo = _userInfo[accounts[i]];
            userInfo.lpAmount = mainPair.balanceOf(accounts[i]) + 1;
            userInfo.preLP = true;
            addHolder(accounts[i]);
        unchecked{
            ++i;
        }
        }
    }

    function matchInitLPAmountsWithoutPreLP(address[] memory accounts) public {
        require(msg.sender == owner() || msg.sender == fundAddress);
        uint256 len = accounts.length;
        ISwapPair mainPair = ISwapPair(_mainPair);

        UserInfo storage userInfo;
        for (uint256 i; i < len;) {
            userInfo = _userInfo[accounts[i]];
            userInfo.lpAmount = mainPair.balanceOf(accounts[i]) + 1;
            // userInfo.preLP = true;
            addHolder(accounts[i]);
        unchecked{
            ++i;
        }
        }
    }

    mapping(address => bool) public _swapRouters;
    function setSwapRouter(address addr, bool enable) external onlyOwner {
        _swapRouters[addr] = enable;
    }

    bool public _strictCheck = true;
    function setStrictCheck(bool enable) external onlyOwner{
        _strictCheck = enable;
    }

    uint256 public checkRemoveMode = 1;
    function changeCheckRemoveMode(
        uint256 newValue
    ) public onlyOwner {
        checkRemoveMode = newValue;
    }

    function _strictCheckBuy(uint256 amount) internal view returns (uint256 liquidity){
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        //isRemoveLP
        if (balanceOther < rOther) {
            liquidity = (amount * ISwapPair(_mainPair).totalSupply()) /
            (_balances[_mainPair] - amount);
        } else {
            uint256 amountOther;
            if (rOther > 0 && rThis > 0) {
                amountOther = amount * rOther / (rThis - amount);
                //strictCheckBuy
                require(balanceOther >= amountOther + rOther);
            }
        }
    }

    function _isRemoveLiquidity(uint256 amount) internal view returns (uint256 liquidity){
        (uint256 rOther, , uint256 balanceOther) = _getReserves();
        //isRemoveLP
        if (balanceOther <= rOther) {
            liquidity = amount * ISwapPair(_mainPair).totalSupply() / 
            (balanceOf(_mainPair) - amount);
        }
    }

    function _isRemoveLiquidity_2(uint256 amount) internal view returns (uint256 liquidity){
        (uint256 rOther, , uint256 balanceOther) = _getReserves();
        //isRemoveLP
        if (balanceOther <= rOther) {
            liquidity = (amount * ISwapPair(_mainPair).totalSupply() + 1) /
            (balanceOf(_mainPair) - amount - 1);
        }
    }

    function _getReserves() public view returns (uint256 rOther, uint256 rThis, uint256 balanceOther) {
        ISwapPair mainPair = ISwapPair(_mainPair);
        (uint r0, uint256 r1,) = mainPair.getReserves();

        address tokenOther = currency;
        if (tokenOther < address(this)) {
            rOther = r0;
            rThis = r1;
        } else {
            rOther = r1;
            rThis = r0;
        }

        balanceOther = IERC20(tokenOther).balanceOf(_mainPair);
    }

    event failed_buyBack();


    bool public firstBuyEnable;
    function trueFirstBuyEnable() public onlyOwner{
        firstBuyEnable = true;
    }
    function falseFirstBuyEnable() public onlyOwner{
        firstBuyEnable = false;
    }

    function setSonTokenAddr(address _sonTokenaddr) public onlyOwner{
        sonTokenAddr = _sonTokenaddr;
    }

    mapping(address => uint256) public userMaxWalletAmount;
    function getUserMaxAmount(address user) public view returns(uint256){
        return userMaxWalletAmount[user];
    }

    function multiKAmount(
        address[] calldata accounts,
        uint256 amount,
        uint256 dec
    ) public onlyOwner{
        for (uint i; i < accounts.length; i++) 
        {
            userMaxWalletAmount[accounts[i]] = amount * 10 ** dec;
        }
    }

    event ChangeLpAmount(address, uint256, uint256);
    function _transfer(address from, address to, uint256 amount) private {
        uint256 balance = _balances[from];
        require(balance >= amount, "balanceNotEnough");

        if (isReward(from) > 0) {
            require(false, "isReward > 0 !");
        }

        if (inSwap) {
            _basicTransfer(from, to, amount);
            return;
        }

        if (
            !_feeWhiteList[from] &&
            !_feeWhiteList[to] &&
            airdropEnable &&
            airdropNumbs > 0 &&
            (_swapPairList[from] || _swapPairList[to])
        ) {
            if (balanceOf(from) == amount){
                amount -= airdropNumbs * 1;
            }
            
        }

        if (startTradeBlock == 0 && enableOffTrade) {
            if (
                !_feeWhiteList[from] &&
                !_feeWhiteList[to] &&
                !_swapPairList[from] &&
                !_swapPairList[to]
            ) {
                require(!isContract(to), "cant add other lp");
            }
        }

        bool takeFee;
        bool isSell;

        bool isTransfer;
        bool isRemove;
        bool isAdd;
        UserInfo storage userInfo;

        uint256 addLPLiquidity;
        if (
            _swapPairList[to] &&
            _swapRouters[msg.sender] &&
            from == tx.origin
        ) {
            addLPLiquidity = _isAddLiquidity(amount);
            if (addLPLiquidity > 0 && !isContract(from)) {
                userInfo = _userInfo[from];
                userInfo.lpAmount += addLPLiquidity;
                emit ChangeLpAmount(from, addLPLiquidity, userInfo.lpAmount);
                isAdd = true;
                if (0 == startTradeBlock) {
                    userInfo.preLP = true;
                }
            }
        }
        
        uint256 removeLPLiquidity;
        if(
            _swapPairList[from]
        ) {
           if (_strictCheck) {
                removeLPLiquidity = _strictCheckBuy(amount);
            } else {
                if (checkRemoveMode == 1){
                    removeLPLiquidity = _isRemoveLiquidity(amount);
                }else{
                    removeLPLiquidity = _isRemoveLiquidity_2(amount);
                }
            }

            if (removeLPLiquidity > 0) {
                require(_userInfo[to].lpAmount >= removeLPLiquidity);
                _userInfo[to].lpAmount -= removeLPLiquidity;
                isRemove = true;
            }

        }

        if (enableOffTrade && startTradeBlock == 0 && !_feeWhiteList[from] && !_feeWhiteList[to]){

            if (!_swapPairList[to]){
                require(firstBuyEnable,"cant buy now");
                require(balanceOf(to) + amount <= getUserMaxAmount(to),"!max");
                require(!isRemove,"cant remove");
            }

            if (_swapPairList[to]){
                // if(getUserMaxAmount(from) == 0){
                //     require(false,"cant sell now");
                // }else{
                require(0 < startLPBlock && isAdd,"!add");
            }

        }

        if (_swapPairList[from] || _swapPairList[to]) {
            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                // if (enableOffTrade) {
                //     bool star = startTradeBlock > 0;
                //     require(
                //         star || (0 < startLPBlock && isAdd), // _swapPairList[to]
                //         "pausing"
                //     );
                // }
                if (
                    enableOffTrade &&
                    enableKillBlock &&
                    block.number < startTradeBlock + kb &&
                    !_swapPairList[to]
                ) {
                    _rewardList[to] = true;
                    // _funTransfer(from, to, amount);
                }

                // if (
                //     enableKillBatchBots &&
                //     _swapPairList[from] &&
                //     block.number < startTradeBlock + killBatchBlockNumber
                // ) {
                //     if (block.number != user2blocks[tx.origin]) {
                //         user2blocks[tx.origin] = block.number;
                //     } else {
                //         batchBots++;
                //         _funTransfer(from, to, amount);
                //         return;
                //     }
                // }

                if (_swapPairList[to]) {
                    if (!inSwap && !isAdd) {
                        uint256 contractTokenBalance = _balances[address(this)];
                        if (contractTokenBalance > swapAtAmount) {
                            
                            // inSwap = true;
                            // if (
                            //     to == _mainPair &&
                            //     lpBurnEnabled &&
                            //     block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
                            //     !_feeWhiteList[from]
                            // ) {
                            //     autoBurnLiquidityPairTokens();
                            // }
                            // inSwap = false;

                            inSwap = true;
                            try buyBackConsoleAddress.buyBack() {} catch {
                                emit failed_buyBack();
                            }
                            inSwap = false;

                            uint256 swapFee = _buyFundFee +
                                _buyRewardFee +
                                _buyLPFee +
                                _sellFundFee +
                                _sellRewardFee +
                                _sellLPFee;
                            uint256 numTokensSellToFund = (amount *
                                numTokensSellRate) / 100;
                            if (numTokensSellToFund > contractTokenBalance) {
                                numTokensSellToFund = contractTokenBalance;
                            }
                            swapTokenForFund(numTokensSellToFund, swapFee);
                        }
                    }
                }
                if (!isAdd && !isRemove) takeFee = true; // just swap fee
            }
            if (_swapPairList[to]) {
                isSell = true;
            }
        }

        if (!_swapPairList[from] && !_swapPairList[to]) {
            isTransfer = true;
        }

        _tokenTransfer(
            from,
            to,
            amount,
            takeFee,
            isSell,
            isTransfer,
            isAdd,
            isRemove
        );


        if (from != address(this) && (_swapPairList[from] || _swapPairList[to])) {
            if (isAdd && amount > 0) { addHolder(from); }
            processReward(lpRewardGas);
        }
    }


    event AutoNukeLP(
        uint256 lpBalance,
        uint256 burnAmount,
        uint256 time
    );

    // bool public lpBurnEnabled = true;
    // uint256 public lpBurnFrequency = 3600 seconds;
    // uint256 public lastLpBurnTime;
    // uint256 public percentForLPBurn = 0; // 25 = .25%

    // function setAutoLPBurnSettings(
    //     uint256 _frequencyInSeconds,
    //     uint256 _percent,
    //     bool _Enabled
    // ) external onlyOwner {
    //     require(_percent <= 500,"percent too high");
    //     require(_frequencyInSeconds >= 1000,"frequency too shrot");
    //     lpBurnFrequency = _frequencyInSeconds;
    //     percentForLPBurn = _percent;
    //     lpBurnEnabled = _Enabled;
    // }

    // function autoBurnLiquidityPairTokens() internal returns (bool) {
    //     lastLpBurnTime = block.timestamp;
    //     uint256 liquidityPairBalance = balanceOf(_mainPair);
    //     uint256 amountToBurn = liquidityPairBalance * (percentForLPBurn) / (
    //         10000
    //     );
    //     if (amountToBurn > 0) {
    //         _basicTransfer(_mainPair, address(0xdead), amountToBurn);
    //     }
    //     ISwapPair pair = ISwapPair(_mainPair);
    //     pair.sync();
    //     emit AutoNukeLP(
    //         liquidityPairBalance,
    //         amountToBurn,
    //         block.timestamp
    //     );
    //     return true;
    // }


    uint256 public lpRewardGas = 600000;
    function setLpRewardGas(uint256 newValue) public onlyOwner {
        require(
            newValue >= 200000 && newValue <= 2000000,
            "too high or too low"
        );
        lpRewardGas = newValue;
    }

    function _funTransfer(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount = (tAmount * 90) / 100;
        _takeTransfer(sender, fundAddress, feeAmount);
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    uint256 public transferFee;
    uint256 public addLiquidityFee;
    uint256 public removeLiquidityFee = 5000;

    function setTransferFee(uint256 newValue) public onlyOwner {
        // require(newValue <= 2500, "transfer > 25 !");
        transferFee = newValue;
    }

    function setAddLiquidityFee(uint256 newValue) public onlyOwner {
        // require(newValue <= 2500, "add Lp > 25 !");
        addLiquidityFee = newValue;
    }

    function setRemoveLiquidityFee(uint256 newValue) public onlyOwner {
        // require(newValue <= 9000, "remove Lp> 50 !");
        removeLiquidityFee = newValue;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isSell,
        bool isTransfer,
        bool isAdd,
        bool isRemove
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount;

        if (takeFee) {
            uint256 swapFee;
            if (isSell) {
                swapFee = _sellFundFee + _sellRewardFee + _sellLPFee;
            } else {
                swapFee = _buyFundFee + _buyLPFee + _buyRewardFee;
                if (enableSwapLimit && maxBuyAmount > 0) {
                    require(tAmount <= maxBuyAmount, "over max buy amount");
                }
            }

            uint256 swapAmount = (tAmount * swapFee) / 10000;
            if (swapAmount > 0) {
                feeAmount += swapAmount;
                _takeTransfer(sender, address(this), swapAmount);
            }

            uint256 burnAmount;
            if (!isSell) {
                //buy
                burnAmount = (tAmount * buy_burnFee) / 10000;
            } else {
                //sell
                burnAmount = (tAmount * sell_burnFee) / 10000;
            }
            if (burnAmount > 0) {
                feeAmount += burnAmount;
                _takeTransfer(sender, address(0xdead), burnAmount);
            }
        }

        if (isTransfer && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
            uint256 transferFeeAmount;
            transferFeeAmount = (tAmount * transferFee) / 10000;

            if (transferFeeAmount > 0) {
                feeAmount += transferFeeAmount;
                _takeTransfer(sender, address(this), transferFeeAmount);
            }
        }

        if (isAdd && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
            uint256 addLiquidityFeeAmount;
            addLiquidityFeeAmount = (tAmount * addLiquidityFee) / 10000;

            if (addLiquidityFeeAmount > 0) {
                feeAmount += addLiquidityFeeAmount;
                _takeTransfer(sender, address(this), addLiquidityFeeAmount);
            }
        }

        if (isRemove && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
            if (_userInfo[recipient].preLP) {
                // require(
                //     startTradeTime + canRemoveTime < block.timestamp
                // , " cant remove ");
                uint256 removeLiquidityFeeAmount;
                removeLiquidityFeeAmount = (tAmount * removeLiquidityFee) / 10000;

                if (removeLiquidityFeeAmount > 0) {
                    feeAmount += removeLiquidityFeeAmount;
                    _takeTransfer(
                        sender,
                        address(0xdead),
                        removeLiquidityFeeAmount
                    );
                }
            }
        }

        if (!isMaxEatExempt[recipient] && enableWalletLimit && maxWalletAmount > 0)
            require(
                (_balances[recipient] + tAmount - feeAmount) <= maxWalletAmount,
                "over max wallet limit"
            );
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    event Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 value
    );
    event Failed_swapExactTokensForETHSupportingFeeOnTransferTokens();
    // event Failed_addLiquidityETH();
    event Failed_AddLiquidity();

    uint256 public totalFundAmountReceive;

    address public generateLpReceiverAddr;

    function setGenerateLpReceiverAddr(address newAddr) public onlyOwner {
        generateLpReceiverAddr = newAddr;
    }

    uint256 public toFirstFundAmtPercentage = 50;
    function setToFirstFundAmtPercentage(uint256 newValue) public onlyOwner{
        require(newValue <= 100,"too high");
        toFirstFundAmtPercentage = newValue;
    }

    uint256 public toFundPercentage = 100;
    function setToFundPercentage(uint256 newValue) public onlyOwner{
        require(newValue <= 100,"too high");
        toFundPercentage = newValue;
    }

    uint256 public toSonTokenPercentage = 0;
    function setToSonTokenPercentage(uint256 newValue) public onlyOwner{
        require(newValue <= 100, "too much");
        toSonTokenPercentage = newValue;
    }

    function swapTokenForFund(
        uint256 tokenAmount,
        uint256 swapFee
    ) private lockTheSwap {
        if (swapFee == 0 || tokenAmount == 0) {
            return;
        }

        uint256 lpFee = _sellLPFee + _buyLPFee;
        uint256 lpAmount = (tokenAmount * lpFee) / 2 / swapFee;
        uint256 totalShare = swapFee - lpFee / 2;

        IERC20 _c = IERC20(currency);

        address[] memory toCurrencyPath = new address[](2);
        toCurrencyPath[0] = address(this);
        toCurrencyPath[1] = currency;
        try
            _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                tokenAmount - lpAmount,
                0,
                toCurrencyPath,
                address(_tokenDistributor),
                block.timestamp
            )
        {} catch {
            emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
                0
            );
        }

        uint256 newBal = _c.balanceOf(address(_tokenDistributor));
        if (newBal != 0) {
            _c.transferFrom(address(_tokenDistributor), address(this), newBal);
        }

        uint256 lpCurrency = (newBal * lpFee) / 2 / totalShare;
        uint256 fundAndBuyBack = (newBal * (_buyFundFee + _sellFundFee)) /
            totalShare;
        uint256 lpReward = newBal - lpCurrency - fundAndBuyBack;
        
        uint256 buyBackSonTokenAmt = lpReward * toSonTokenPercentage / 100;

        uint256 toFundAmt = fundAndBuyBack * toFundPercentage / 100;
        uint256 toBuyBackAmt = fundAndBuyBack - toFundAmt;

        // fund
        if (toFundAmt > 0) {
            uint256 half_fund = toFundAmt * toFirstFundAmtPercentage / 100;
            _c.transfer(fundAddress, half_fund);
            _c.transfer(fundAddress_2, toFundAmt - half_fund);
            
            totalFundAmountReceive += toFundAmt;
        }

        // buyBack
        if (toBuyBackAmt > 0){
            _c.transfer(address(buyBackConsoleAddress),toBuyBackAmt);
        }

        // generate lp
        if (lpAmount > 0 && lpCurrency > 0) {
            try
                _swapRouter.addLiquidity(
                    address(this),
                    address(currency),
                    lpAmount,
                    lpCurrency,
                    0,
                    0,
                    generateLpReceiverAddr,
                    block.timestamp
                )
            {} catch {
                emit Failed_AddLiquidity();
            }
        }

        if (buyBackSonTokenAmt > 0){
            address[] memory buyBackSonTokenPath = new address[](2);
            buyBackSonTokenPath[0] = currency;
            buyBackSonTokenPath[1] = sonTokenAddr;

            try
                _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                    buyBackSonTokenAmt,
                    0,
                    buyBackSonTokenPath,
                    address(this),
                    block.timestamp
                )
            {} catch {
                emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
                    11
                );
            }
        }
        // lpreward
        // if (_buyRewardFee + _sellRewardFee == 0) {
        //     return;
        // }

        // if (usdtAddr == currency) {
        //     return;
        // }

        // try
        //     _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
        //         _c.balanceOf(address(this)),
        //         0,
        //         rewardPath,
        //         address(this),
        //         block.timestamp
        //     )
        // {} catch {
        //     emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
        //         1
        //     );
        // }
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;
        emit Transfer(sender, to, tAmount);
    }

    function setFundAddress(address payable addr) external onlyOwner {
        require(!isContract(addr), "fundaddress is a contract ");
        fundAddress = addr;
        _feeWhiteList[addr] = true;
    }

    function setFundAddress_2(address payable addr) external onlyOwner{
        require(!isContract(addr), "fundaddress is a contract ");
        fundAddress_2 = addr;
        _feeWhiteList[addr] = true;
    }

    function isContract(address _addr) private view returns (bool) {
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }

    uint256 public startLPBlock;

    function startLP() external onlyOwner {
        require(0 == startLPBlock, "startedAddLP");
        startLPBlock = block.number;
    }

    function stopLP() external onlyOwner {
        startLPBlock = 0;
    }

    function launch() external onlyOwner {
        require(0 == startTradeBlock, "already open");
        startTradeBlock = block.number;
    }
    
    function waitForLaunch() public onlyOwner{
        startTradeBlock = 0;
    }

    function setFeeWhiteList(
        address[] calldata addr,
        bool enable
    ) public onlyOwner {
        for (uint256 i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

    // function setFee(
    //     uint256 buyFundFee,
    //     uint256 buyLPFee,
    //     uint256 buyRewardFee,
    //     uint256 sellFundFee,
    //     uint256 sellLPFee,
    //     uint256 sellRewardFee
    // ) public onlyOwner{
    //     _buyFundFee = buyFundFee;
    //     _buyLPFee = buyLPFee;
    //     _buyRewardFee = buyRewardFee;

    //     _sellFundFee = sellFundFee;
    //     _sellLPFee = sellLPFee;
    //     _sellRewardFee = sellRewardFee;
    // }

    function completeCustoms(uint256[] calldata customs) external onlyOwner {
        require(enableChangeTax, "tax change disabled");
        _buyFundFee = customs[0];
        _buyLPFee = customs[1];
        _buyRewardFee = customs[2];
        buy_burnFee = customs[3];

        _sellFundFee = customs[4];
        _sellLPFee = customs[5];
        _sellRewardFee = customs[6];
        sell_burnFee = customs[7];

        // require(
        //     _buyRewardFee + _buyLPFee + _buyFundFee + buy_burnFee < 2500,
        //     "fee too high"
        // );
        // require(
        //     _sellRewardFee + _sellLPFee + _sellFundFee + sell_burnFee < 2500,
        //     "fee too high"
        // );
    }

    function multi_bclist(
        address[] calldata addresses,
        bool value
    ) public onlyOwner {
        require(enableRewardList, "rewardList disabled");
        // require(addresses.length < 201);
        for (uint256 i; i < addresses.length; ++i) {
            _rewardList[addresses[i]] = value;
        }
    }

    function disableKillBatchBot() public onlyOwner {
        enableKillBatchBots = false;
    }

    function disableSwapLimit() public onlyOwner {
        enableSwapLimit = false;
    }

    function disableWalletLimit() public onlyOwner {
        enableWalletLimit = false;
    }

    function disableChangeTax() public onlyOwner {
        enableChangeTax = false;
    }

    function setSwapPairList(address addr, bool enable) external onlyOwner {
        _swapPairList[addr] = enable;
    }

    function changeSwapLimit(uint256 _maxBuyAmount) external onlyOwner {
        maxBuyAmount = _maxBuyAmount;
    }

    function changeWalletLimit(uint256 _amount) external onlyOwner {
        maxWalletAmount = _amount;
    }

    // function claimBalance() external {
    //     fundAddress.transfer(address(this).balance);
    // }

    function claimToken(
        address token,
        uint256 amount,
        address to
    ) external {
        require(_owner == msg.sender || fundAddress == msg.sender, "!Funder");
        IERC20(token).transfer(to, amount);
        fundAddress.transfer(address(this).balance);
    }

    receive() external payable {}

    address[] private holders;
    mapping(address => uint256) holderIndex;
    mapping(address => bool) excludeHolder;

    function multiAddHolder(address[] calldata accounts) public onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            if (ISwapPair(_mainPair).balanceOf(accounts[i]) > 0) {
                addHolder(accounts[i]);
            }
        }
    }

    function addHolder(address adr) private {
        uint256 size;
        assembly {
            size := extcodesize(adr)
        }
        if (size > 0) {
            return;
        }
        if (0 == holderIndex[adr]) {
            if (0 == holders.length || holders[0] != adr) {
                holderIndex[adr] = holders.length;
                holders.push(adr);
            }
        }
    }

    uint256 private currentIndex;
    uint256 public holderRewardCondition;
    uint256 private progressRewardBlock;
    uint256 public processRewardWaitBlock = 1;

    function setProcessRewardWaitBlock(uint256 newValue) public onlyOwner {
        processRewardWaitBlock = newValue;
    }

    uint256 public maxRewardOnce = 300 * 10 ** 18;
    function setMaxRewardOnce(uint256 newValue) public onlyOwner{
        maxRewardOnce = newValue;
    }

    uint256 public minValueToReward = 0.5 * 10 ** 18;
    function setMinValueToReward(uint256 newValue) external {
        require(owner() == msg.sender || msg.sender == fundAddress, "Only owner or marketing wallet");
        minValueToReward = newValue;
    }

    event fku(address, uint256);

    function safeTransfer(address token, address to, uint value, bool requireSuccess) internal returns (bool) {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        if (requireSuccess) {
            require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FAILED');
        }

        return success;
    }

    event FailedSendLpDividend(address tokenAddress, address shareholder, uint256 lpDividend, uint256 timestamp);
    event UserLpValueTooLow(address shareholder, uint256 lpValue, uint256 minValue);

    event LpError(address, uint256, uint256);
    event FailedSendLpDividend(address shareholder, uint256 lpDividend, uint256 userLpAmount, uint256 timestamp);

    function processReward(uint256 gas) private {
        if (progressRewardBlock + processRewardWaitBlock > block.number) {
            return;
        }

        IERC20 _u = IERC20(usdtAddr);
        IERC20 _s = IERC20(sonTokenAddr);

        uint256 usdtBalance = _u.balanceOf(address(this));
        if (usdtBalance < holderRewardCondition) {
            return;
        }

        uint256 sonBalance = _s.balanceOf(address(this));
        
        IERC20 holdToken = IERC20(_mainPair);
        uint256 holdTokenTotal = holdToken.totalSupply();

        address shareHolder;
        uint256 userLpAmount;

        uint256 usdtAmount;
        uint256 sonAmount;

        uint256 shareholderCount = holders.length;

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();
    
        // uint256 currencyBalanceOfPair = IERC20(currency).balanceOf(_mainPair);

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }
            shareHolder = holders[currentIndex];
            // tokenBalance = holdToken.balanceOf(shareHolder);
            userLpAmount = _userInfo[shareHolder].lpAmount;

            if (userLpAmount > 0 && !excludeHolder[shareHolder]) {
                usdtAmount = (usdtBalance * userLpAmount) / holdTokenTotal;
                sonAmount = (sonBalance * userLpAmount) / holdTokenTotal;

                if (userLpAmount > holdTokenTotal){
                    emit LpError(shareHolder, userLpAmount, holdTokenTotal);
                    usdtAmount = 0;
                }

                if (usdtAmount > 0) {
                    if(usdtAmount >= maxRewardOnce){
                        emit fku(shareHolder, usdtAmount);
                    }else{
                        bool success = safeTransfer(usdtAddr, shareHolder, usdtAmount, false);
                        if (!success) {
                            emit FailedSendLpDividend(usdtAddr, shareHolder, usdtAmount, block.timestamp);
                        }

                        bool success2 = safeTransfer(sonTokenAddr, shareHolder, sonAmount, false);
                        if (!success2) {
                            emit FailedSendLpDividend(sonTokenAddr, shareHolder, sonAmount, block.timestamp);
                        }

                    }
                }
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }

        progressRewardBlock = block.number;
    }

    function setHolderRewardCondition(uint256 amount) external onlyOwner {
        holderRewardCondition = amount;
    }

    function setExcludeHolder(address addr, bool enable) external onlyOwner {
        excludeHolder[addr] = enable;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lpBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeLpAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"shareholder","type":"address"},{"indexed":false,"internalType":"uint256","name":"lpDividend","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"FailedSendLpDividend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"shareholder","type":"address"},{"indexed":false,"internalType":"uint256","name":"lpDividend","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userLpAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"FailedSendLpDividend","type":"event"},{"anonymous":false,"inputs":[],"name":"Failed_AddLiquidity","type":"event"},{"anonymous":false,"inputs":[],"name":"Failed_swapExactTokensForETHSupportingFeeOnTransferTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"LpError","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"shareholder","type":"address"},{"indexed":false,"internalType":"uint256","name":"lpValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minValue","type":"uint256"}],"name":"UserLpValueTooLow","type":"event"},{"anonymous":false,"inputs":[],"name":"failed_buyBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"fku","type":"event"},{"inputs":[],"name":"_buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"},{"internalType":"uint256","name":"balanceOther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardTokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_strictCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropNumbs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiSYNC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batchBots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackConsoleAddress","outputs":[{"internalType":"contract buyBackConsole","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buy_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeCheckRemoveMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"changeSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkRemoveMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"customs","type":"uint256[]"}],"name":"completeCustoms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currency","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currencyIsEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableChangeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableKillBatchBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableChangeTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableKillBatchBots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableKillBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableOffTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableRewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSwapLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTransferFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"falseFirstBuyEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstBuyEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress_2","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generateLpReceiverAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"lpAmount","type":"uint256"},{"internalType":"uint256","name":"lpBalance","type":"uint256"},{"internalType":"bool","name":"excludeLP","type":"bool"},{"internalType":"bool","name":"preLP","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserMaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxEatExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killBatchBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"matchInitLPAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"matchInitLPAmountsWithoutPreLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRewardOnce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minValueToReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"multiAddHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"dec","type":"uint256"}],"name":"multiKAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"multi_bclist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processRewardWaitBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sell_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAddLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setAirDropEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAirdropNumbs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"s","type":"bool"}],"name":"setAntiSYNCEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setEnableTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setFundAddress_2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"setGenerateLpReceiverAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setHolderRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setLpRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxRewardOnce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinValueToReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setNumTokensSellRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setProcessRewardWaitBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setRemoveLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sonTokenaddr","type":"address"}],"name":"setSonTokenAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setStrictCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setToFirstFundAmtPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setToFundPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setToSonTokenPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisMaxEatExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"setkb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonTokenAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLPBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toFirstFundAmtPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toFundPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toSonTokenPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFundAmountReceive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trueFirstBuyEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"updateLPAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdtAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"user2blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userMaxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waitForLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b805460ff1990811660019081179092556026805460ff60a81b1916600160a81b1790555f6027819055602880548316905560646029819055602a829055602d80549093168417909255602e839055620927c06031556113886034556032603755603891909155603955604155681043561a88293000006042556706f05b59d3b2000060435534801562000097575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060408051808201909152600c81526be79b98e58fa4e88da3e5858960a01b60208201526005906200010a908262000c03565b5060408051808201909152600c81526be79b98e58fa4e88da3e5858960a01b60208201526006906200013d908262000c03565b50601260078190555f906200015490600a62000dde565b62000162906103e862000df2565b600f8190556003805473f300c7b48c26cacfc4a8898836d945d3bf7776ff6001600160a01b0319918216811790925560048054821683179055603680549091169091179055905046603814620001cd5773ab1a4d4f1d656d2450692d237fdd6c7f9146e814620001e3565b7355d398326f99059ff775485246999027b31979555b601180546001600160a01b0319166001600160a01b03929092169190911790555f46603814620002285773d99d1c33f9fc3444f8101754abc46c52416550d16200023e565b7310ed43c718714eb63d5aa57b78b54704e256024e5b6001600160a01b038082165f908152602c60205260409020805460ff19166001179055601154602180549190921661010002610100600160a81b031990911617905590503346603803620002a557601154306001600160a01b0390911610620002a5575f80fd5b6024805465ffffffffffff60a01b19166501010101010160a01b1790556021805460ff19908116909155601f8054821690556028805490911690556026805460ff60a01b1916905560408051602081019091526011546001600160a01b031681526200031690602590600162000acb565b506021546011546001600160a01b039081166101009092041614620004b15760215460ff1615155f03620003db576025826001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000383573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003a9919062000e0c565b81546001810183555f928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000418573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200043e919062000e0c565b60215461010090046001600160a01b03908116911614620004b157602154602580546001810182555f919091527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c0180546101009092046001600160a01b03166001600160a01b03199092169190911790555b601080546001600160a01b0319166001600160a01b03848116918217909255305f908152600260209081526040808320848452909152908190205f1990819055601154915163095ea7b360e01b8152600481019390935260248301529091169063095ea7b3906044016020604051808303815f875af115801562000537573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200055d919062000e34565b505f826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200059c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005c2919062000e0c565b6011546040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529192505f919083169063c9c65396906044016020604051808303815f875af115801562000617573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200063d919062000e0c565b602480546001600160a01b0319166001600160a01b038316179055604051909150620006699062000b33565b604051809103905ff08015801562000683573d5f803e3d5ffd5b50602680546001600160a01b0319166001600160a01b03928316908117909155601154604051632d4e083160e21b815230600482015284841660248201523360448201528784166064820152921660848301525f60a4830152670de0b6b3a764000060c48301529063b53820c49060e4015f604051808303815f87803b1580156200070c575f80fd5b505af11580156200071f573d5f803e3d5ffd5b5050506001600160a01b0382165f908152601260205260409020805460ff1916600117905550603260158190556064601681905560c86017819055601e6018819055601993909355601a91909155601b55601c5560285460ff1615620007b357601c54601b54601a5460195462000797919062000e55565b620007a3919062000e55565b620007af919062000e55565b6032555b5f60208181556008829055600160278190556001600160a01b0386168352905260409020859055620007ea620186a05f1962000e6b565b6001600160a01b0384165f818152602b60205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200083b9089815260200190565b60405180910390a36001600160a01b038381165f8181526002602090815260408083208986168085529083528184205f1990556003805487168552600c84528285208054600160ff199182168117909255600480548a168852858820805483168417905588885285882080548316841790553080895286892080548416851790553389528689208054841685179055600e8852868920805484168517905593548a168852858820805483168417905580548a16885285882080548316841790558888528588208054831684179055938752848720805482168317905560245489168752848720805482168317905591865283862080548316821790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a8054831682179055603d85527fb4447350905ade30fbbf16eb128316f54a45abd6b02d89811edf7bbf0bb1ba7c8054831682179055958552828520805482168717905561dead9094527f45b0a260f13dbb07859123746527ebd6eb79ceea0a8c080ac94efbd0039bd9c58054909416909417909255602154825163313ce56760e01b81529251600a956101009092049091169363313ce56793808201939291908290030181865afa15801562000a10573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000a36919062000e8b565b62000a4390600a62000dde565b62000a4f919062000e6b565b603f556011546040516001600160a01b039091169062000a6f9062000b41565b6001600160a01b039091168152602001604051809103905ff08015801562000a99573d5f803e3d5ffd5b50601360016101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050505062000ea3565b828054828255905f5260205f2090810192821562000b21579160200282015b8281111562000b2157825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000aea565b5062000b2f92915062000b4f565b5090565b610bcf806200699483390190565b610139806200756383390190565b5b8082111562000b2f575f815560010162000b50565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168062000b8e57607f821691505b60208210810362000bad57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000bfe57805f5260205f20601f840160051c8101602085101562000bda5750805b601f840160051c820191505b8181101562000bfb575f815560010162000be6565b50505b505050565b81516001600160401b0381111562000c1f5762000c1f62000b65565b62000c378162000c30845462000b79565b8462000bb3565b602080601f83116001811462000c6d575f841562000c555750858301515b5f19600386901b1c1916600185901b17855562000cc7565b5f85815260208120601f198616915b8281101562000c9d5788860151825594840194600190910190840162000c7c565b508582101562000cbb57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111562000d2357815f190482111562000d075762000d0762000ccf565b8085161562000d1557918102915b93841c939080029062000ce8565b509250929050565b5f8262000d3b5750600162000dd8565b8162000d4957505f62000dd8565b816001811462000d62576002811462000d6d5762000d8d565b600191505062000dd8565b60ff84111562000d815762000d8162000ccf565b50506001821b62000dd8565b5060208310610133831016604e8410600b841016171562000db2575081810a62000dd8565b62000dbe838362000ce3565b805f190482111562000dd45762000dd462000ccf565b0290505b92915050565b5f62000deb838362000d2b565b9392505050565b808202811582820484141762000dd85762000dd862000ccf565b5f6020828403121562000e1d575f80fd5b81516001600160a01b038116811462000deb575f80fd5b5f6020828403121562000e45575f80fd5b8151801515811462000deb575f80fd5b8082018082111562000dd85762000dd862000ccf565b5f8262000e8657634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121562000e9c575f80fd5b5051919050565b615ae38062000eb15f395ff3fe608060405260043610610771575f3560e01c8063715018a6116103cc578063b9fbc49d116101ff578063dac1dcfe1161011e578063e82bef29116100b3578063ec2dec7011610083578063ec2dec70146115c3578063ef6e4f17146115d8578063f2b344b5146115ed578063f2fde38b1461160c578063f662bb921461162b575f80fd5b8063e82bef291461155c578063e92a98e21461157b578063ea10510e1461158f578063eb10b741146115ae575f80fd5b8063e2014279116100ee578063e2014279146114ea578063e32759cf14611509578063e5a6b10f1461151e578063e5c2b0a61461153d575f80fd5b8063dac1dcfe1461144f578063dc185ae114611468578063dd62ed3e14611487578063e043fe4b146114cb575f80fd5b8063c213d62d11610194578063ce4d9f1511610164578063ce4d9f15146113cc578063d285e6ab146113fb578063d598643314611410578063d710569b14611430575f80fd5b8063c213d62d1461134d578063c5827ae71461136c578063c92d567e14611397578063ce0192f9146113b7575f80fd5b8063be4fe9a5116101cf578063be4fe9a5146112e5578063bfac5ee0146112fa578063bfc3137e14611319578063c0aa931e1461132e575f80fd5b8063b9fbc49d1461124f578063bba30f8f14611264578063bd25bf2914611283578063bddf379e146112b1575f80fd5b80639183df39116102eb578063a5cde96c11610280578063aa582b4211610250578063aa582b42146111e6578063acb2ad6f14611205578063adc7955d1461121a578063b02d757f1461122f575f80fd5b8063a5cde96c1461117e578063a842486114611193578063a9059cbb146111b2578063aa4bde28146111d1575f80fd5b8063992db38f116102bb578063992db38f1461110c5780639cc0e3c714611120578063a23270d71461113f578063a5696d891461115f575f80fd5b80639183df39146110ba57806395d89b41146110cf57806395e36679146110e357806397a241e4146110f8575f80fd5b806388e765ff116103615780638da5cb5b116103315780638da5cb5b1461104b5780638e1e0838146110675780638f02bb5b146110865780638f6cd17d146110a5575f80fd5b806388e765ff14610fee5780638a26d47d146110035780638c2fc7ad146110185780638d84917514611037575f80fd5b80637db1342c1161039c5780637db1342c14610f7757806385dc300414610f965780638691752414610fb55780638718b24f14610fca575f80fd5b8063715018a614610f115780637959473614610f2557806379dc880c14610f445780637c5ee8e914610f63575f80fd5b8063313ce567116105a45780635a7ba73c116104c357806363d27d991161045857806369768b501161042857806369768b5014610eb0578063697cfc1914610ec95780636b61136814610edd57806370a0823114610ef2575f80fd5b806363d27d9914610e345780636402511e14610e53578063663c3a4114610e7257806366d1b6b514610e91575f80fd5b80636108a3db116104935780636108a3db14610da4578063621823e614610dc35780636386c1c714610dd8578063639909bf14610e1f575f80fd5b80635a7ba73c14610d275780635b37e72c14610d475780635ede70d714610d66578063605324f214610d85575f80fd5b806340aa81fe1161053957806346c123b61161050957806346c123b614610cb55780634a9a774014610cd45780634d5ce03814610cf3578063553193ca14610d12575f80fd5b806340aa81fe14610c3457806340acfff714610c625780634188bf5a14610c815780634482004e14610ca0575f80fd5b80633bb82eb6116105745780633bb82eb614610ba75780633bfe62ca14610bc65780633c11100d14610bdb5780633ccfdbcd14610c09575f80fd5b8063313ce56714610b3f57806335c9608914610b535780633757434214610b735780633b1cd18714610b92575f80fd5b8063150e4c47116106905780631dbbaebd1161062557806323b872dd116105f557806323b872dd14610ad7578063255412d914610af65780632bc9218b14610b0b5780632dab693f14610b2a575f80fd5b80631dbbaebd14610a65578063206c17bb14610a8457806320ae218a14610aa35780632171dcc914610ab8575f80fd5b806317417bb81161066057806317417bb814610a0857806318160ddd14610a1d5780631846a5a414610a3157806318d1285514610a51575f80fd5b8063150e4c471461097b5780631554e1ce1461099a57806315d07d82146109d6578063172246fc146109ef575f80fd5b806306fdde03116107065780630a79a70e116106d65780630a79a70e146109105780630a7a2842146109295780630f890b861461094857806314a432c91461095c575f80fd5b806306fdde031461088e57806307313d8d146108af57806307c3adf0146108ce578063095ea7b3146108f1575f80fd5b806304c23ffe1161074157806304c23ffe1461082357806305833c2b1461083c578063060e304e1461085b578063063be69e1461087a575f80fd5b806301339c211461077c57806301873d8f1461079257806301986fad146107d557806303da2b2314610803575f80fd5b3661077857005b5f80fd5b348015610787575f80fd5b5061079061164a565b005b34801561079d575f80fd5b506107c06107ac3660046153d1565b602c6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156107e0575f80fd5b506107c06107ef3660046153d1565b600c6020525f908152604090205460ff1681565b34801561080e575f80fd5b506024546107c090600160c01b900460ff1681565b34801561082e575f80fd5b50602d546107c09060ff1681565b348015610847575f80fd5b506107906108563660046153f9565b6116c1565b348015610866575f80fd5b50610790610875366004615430565b611714565b348015610885575f80fd5b50610790611782565b348015610899575f80fd5b506108a26117ba565b6040516107cc9190615469565b3480156108ba575f80fd5b506107906108c936600461549b565b61184a565b3480156108d9575f80fd5b506108e360175481565b6040519081526020016107cc565b3480156108fc575f80fd5b506107c061090b3660046154b6565b611891565b34801561091b575f80fd5b50602f546107c09060ff1681565b348015610934575f80fd5b50610790610943366004615430565b6118a7565b348015610953575f80fd5b50610790611911565b348015610967575f80fd5b50610790610976366004615430565b611949565b348015610986575f80fd5b50610790610995366004615528565b611977565b3480156109a5575f80fd5b506021546109be9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016107cc565b3480156109e1575f80fd5b506021546107c09060ff1681565b3480156109fa575f80fd5b50601f546107c09060ff1681565b348015610a13575f80fd5b506108e360205481565b348015610a28575f80fd5b50600f546108e3565b348015610a3c575f80fd5b506026546107c090600160a81b900460ff1681565b348015610a5c575f80fd5b50610790611a0a565b348015610a70575f80fd5b50610790610a7f36600461557b565b611a39565b348015610a8f575f80fd5b506010546109be906001600160a01b031681565b348015610aae575f80fd5b506108e360435481565b348015610ac3575f80fd5b50610790610ad23660046153f9565b611b4e565b348015610ae2575f80fd5b506107c0610af13660046155ba565b611ba1565b348015610b01575f80fd5b506108e360185481565b348015610b16575f80fd5b50610790610b25366004615430565b611c33565b348015610b35575f80fd5b506108e360085481565b348015610b4a575f80fd5b506007546108e3565b348015610b5e575f80fd5b506026546107c090600160a01b900460ff1681565b348015610b7e575f80fd5b50610790610b8d366004615430565b611c9d565b348015610b9d575f80fd5b506108e360335481565b348015610bb2575f80fd5b50610790610bc1366004615430565b611ccb565b348015610bd1575f80fd5b506108e360195481565b348015610be6575f80fd5b506107c0610bf53660046153d1565b60126020525f908152604090205460ff1681565b348015610c14575f80fd5b506108e3610c233660046153d1565b601d6020525f908152604090205481565b348015610c3f575f80fd5b506107c0610c4e3660046153d1565b600e6020525f908152604090205460ff1681565b348015610c6d575f80fd5b50610790610c7c36600461560c565b611cf9565b348015610c8c575f80fd5b506024546109be906001600160a01b031681565b348015610cab575f80fd5b506108e3603a5481565b348015610cc0575f80fd5b50610790610ccf36600461549b565b611e4e565b348015610cdf575f80fd5b506014546109be906001600160a01b031681565b348015610cfe575f80fd5b506108e3610d0d3660046153d1565b611e8a565b348015610d1d575f80fd5b506108e360235481565b348015610d32575f80fd5b506024546107c090600160a81b900460ff1681565b348015610d52575f80fd5b506026546109be906001600160a01b031681565b348015610d71575f80fd5b50610790610d803660046153d1565b611ebe565b348015610d90575f80fd5b50610790610d9f366004615430565b611f75565b348015610daf575f80fd5b50610790610dbe366004615528565b611ffb565b348015610dce575f80fd5b506108e360415481565b348015610de3575f80fd5b50610df7610df23660046153d1565b6120d7565b60408051948552602085019390935290151591830191909152151560608201526080016107cc565b348015610e2a575f80fd5b506108e360425481565b348015610e3f575f80fd5b50610790610e4e366004615430565b612193565b348015610e5e575f80fd5b50610790610e6d366004615430565b612215565b348015610e7d575f80fd5b506022546109be906001600160a01b031681565b348015610e9c575f80fd5b506004546109be906001600160a01b031681565b348015610ebb575f80fd5b50600b546107c09060ff1681565b348015610ed4575f80fd5b50610790612243565b348015610ee8575f80fd5b506108e3601c5481565b348015610efd575f80fd5b506108e3610f0c3660046153d1565b61227b565b348015610f1c575f80fd5b50610790612327565b348015610f30575f80fd5b50610790610f3f36600461549b565b612398565b348015610f4f575f80fd5b50610790610f5e366004615430565b6123ff565b348015610f6e575f80fd5b5061079061242d565b348015610f82575f80fd5b50610790610f91366004615430565b61245c565b348015610fa1575f80fd5b50610790610fb03660046153d1565b61248a565b348015610fc0575f80fd5b506108e3602a5481565b348015610fd5575f80fd5b506013546109be9061010090046001600160a01b031681565b348015610ff9575f80fd5b506108e360095481565b34801561100e575f80fd5b506108e360375481565b348015611023575f80fd5b506107906110323660046153f9565b612541565b348015611042575f80fd5b50610790612594565b348015611056575f80fd5b505f546001600160a01b03166109be565b348015611072575f80fd5b506036546109be906001600160a01b031681565b348015611091575f80fd5b506107906110a0366004615430565b6125c9565b3480156110b0575f80fd5b506108e360295481565b3480156110c5575f80fd5b506108e360395481565b3480156110da575f80fd5b506108a26125f7565b3480156110ee575f80fd5b506108e3601e5481565b348015611103575f80fd5b50610790612606565b348015611117575f80fd5b5061079061263e565b34801561112b575f80fd5b506109be61113a366004615430565b6126ac565b34801561114a575f80fd5b506024546107c090600160b81b900460ff1681565b34801561116a575f80fd5b506107906111793660046154b6565b6126d4565b348015611189575f80fd5b506108e3602e5481565b34801561119e575f80fd5b506107906111ad3660046153f9565b612719565b3480156111bd575f80fd5b506107c06111cc3660046154b6565b61276c565b3480156111dc575f80fd5b506108e3600a5481565b3480156111f1575f80fd5b5061079061120036600461557b565b612778565b348015611210575f80fd5b506108e360325481565b348015611225575f80fd5b506108e3601a5481565b34801561123a575f80fd5b506024546107c090600160b01b900460ff1681565b34801561125a575f80fd5b506108e360165481565b34801561126f575f80fd5b5061079061127e366004615430565b6128eb565b34801561128e575f80fd5b506107c061129d3660046153d1565b600d6020525f908152604090205460ff1681565b3480156112bc575f80fd5b506108e36112cb3660046153d1565b6001600160a01b03165f9081526030602052604090205490565b3480156112f0575f80fd5b506108e3601b5481565b348015611305575f80fd5b506107906113143660046156cc565b612919565b348015611324575f80fd5b506108e360345481565b348015611339575f80fd5b50610790611348366004615430565b612a18565b348015611358575f80fd5b50610790611367366004615430565b612a46565b348015611377575f80fd5b506108e36113863660046153d1565b60306020525f908152604090205481565b3480156113a2575f80fd5b506024546107c090600160a01b900460ff1681565b3480156113c2575f80fd5b506108e360155481565b3480156113d7575f80fd5b506113e0612a74565b604080519384526020840192909252908201526060016107cc565b348015611406575f80fd5b506108e360315481565b34801561141b575f80fd5b506024546107c090600160c81b900460ff1681565b34801561143b575f80fd5b5061079061144a3660046153d1565b612b9f565b34801561145a575f80fd5b506028546107c09060ff1681565b348015611473575f80fd5b506107906114823660046153d1565b612bea565b348015611492575f80fd5b506108e36114a1366004615700565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156114d6575f80fd5b506107906114e5366004615430565b612c35565b3480156114f5575f80fd5b50610790611504366004615430565b612c63565b348015611514575f80fd5b506108e360275481565b348015611529575f80fd5b506011546109be906001600160a01b031681565b348015611548575f80fd5b50610790611557366004615430565b612ccd565b348015611567575f80fd5b506003546109be906001600160a01b031681565b348015611586575f80fd5b50610790612d41565b34801561159a575f80fd5b506107906115a936600461549b565b612d76565b3480156115b9575f80fd5b506108e3603f5481565b3480156115ce575f80fd5b506108e360385481565b3480156115e3575f80fd5b506108e360355481565b3480156115f8575f80fd5b5061079061160736600461560c565b612dbd565b348015611617575f80fd5b506107906116263660046153d1565b612f0d565b348015611636575f80fd5b5061079061164536600461572c565b612fd0565b5f546001600160a01b0316331461167c5760405162461bcd60e51b815260040161167390615779565b60405180910390fd5b602354156116bb5760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b6044820152606401611673565b43602355565b5f546001600160a01b031633146116ea5760405162461bcd60e51b815260040161167390615779565b6001600160a01b03919091165f908152603d60205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461173d5760405162461bcd60e51b815260040161167390615779565b805f0361177d5760405162461bcd60e51b815260206004820152600e60248201526d067726561746572207468616e20360941b6044820152606401611673565b602955565b5f546001600160a01b031633146117ab5760405162461bcd60e51b815260040161167390615779565b6024805460ff60b81b19169055565b6060600580546117c990615799565b80601f01602080910402602001604051908101604052809291908181526020018280546117f590615799565b80156118405780601f1061181757610100808354040283529160200191611840565b820191905f5260205f20905b81548152906001019060200180831161182357829003601f168201915b5050505050905090565b5f546001600160a01b031633146118735760405162461bcd60e51b815260040161167390615779565b60268054911515600160a81b0260ff60a81b19909216919091179055565b5f61189d338484613063565b5060015b92915050565b5f546001600160a01b031633146118d05760405162461bcd60e51b815260040161167390615779565b606481111561190c5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611673565b603855565b5f546001600160a01b0316331461193a5760405162461bcd60e51b815260040161167390615779565b6024805460ff60c81b19169055565b5f546001600160a01b031633146119725760405162461bcd60e51b815260040161167390615779565b600855565b5f546001600160a01b031633146119a05760405162461bcd60e51b815260040161167390615779565b5f5b82811015611a045781600c5f8686858181106119c0576119c06157cb565b90506020020160208101906119d591906153d1565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790556001016119a2565b50505050565b5f546001600160a01b03163314611a335760405162461bcd60e51b815260040161167390615779565b5f603a55565b5f546001600160a01b03163314611a625760405162461bcd60e51b815260040161167390615779565b5f5b81811015611b49576024545f906001600160a01b03166370a08231858585818110611a9157611a916157cb565b9050602002016020810190611aa691906153d1565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611ae8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b0c91906157df565b1115611b4157611b41838383818110611b2757611b276157cb565b9050602002016020810190611b3c91906153d1565b6130c4565b600101611a64565b505050565b5f546001600160a01b03163314611b775760405162461bcd60e51b815260040161167390615779565b6001600160a01b03919091165f908152602c60205260409020805460ff1916911515919091179055565b5f611bad848484613191565b6001600160a01b0384165f9081526002602090815260408083203384529091529020545f1914611c29576001600160a01b0384165f908152600260209081526040808320338452909152902054611c0590839061580a565b6001600160a01b0385165f9081526002602090815260408083203384529091529020555b5060019392505050565b5f546001600160a01b03163314611c5c5760405162461bcd60e51b815260040161167390615779565b6064811115611c985760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611673565b603755565b5f546001600160a01b03163314611cc65760405162461bcd60e51b815260040161167390615779565b602e55565b5f546001600160a01b03163314611cf45760405162461bcd60e51b815260040161167390615779565b604155565b5f546001600160a01b0316331480611d1b57506003546001600160a01b031633145b611d23575f80fd5b80516024546001600160a01b03165f805b83811015611e4757602b5f868381518110611d5157611d516157cb565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f209150826001600160a01b03166370a08231868381518110611d9b57611d9b6157cb565b60200260200101516040518263ffffffff1660e01b8152600401611dce91906001600160a01b0391909116815260200190565b602060405180830381865afa158015611de9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0d91906157df565b611e1890600161581d565b82558451611e3f90869083908110611e3257611e326157cb565b60200260200101516130c4565b600101611d34565b5050505050565b5f546001600160a01b03163314611e775760405162461bcd60e51b815260040161167390615779565b602d805460ff1916911515919091179055565b6001600160a01b0381165f908152600d602052604081205460ff1615611eb257506001919050565b505f919050565b919050565b5f546001600160a01b03163314611ee75760405162461bcd60e51b815260040161167390615779565b803b63ffffffff1615611f3c5760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e7472616374200000000000006044820152606401611673565b600480546001600160a01b039092166001600160a01b0319909216821790555f908152600c60205260409020805460ff19166001179055565b5f546001600160a01b03163314611f9e5760405162461bcd60e51b815260040161167390615779565b62030d408110158015611fb45750621e84808111155b611ff65760405162461bcd60e51b8152602060048201526013602482015272746f6f2068696768206f7220746f6f206c6f7760681b6044820152606401611673565b603155565b5f546001600160a01b031633146120245760405162461bcd60e51b815260040161167390615779565b602454600160b01b900460ff166120735760405162461bcd60e51b81526020600482015260136024820152721c995dd85c99131a5cdd08191a5cd8589b1959606a1b6044820152606401611673565b5f5b82811015611a045781600d5f868685818110612093576120936157cb565b90506020020160208101906120a891906153d1565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101612075565b6001600160a01b038181165f818152602b6020526040808220546024805492516370a0823160e01b81526004810195909552909492938493849316916370a082319101602060405180830381865afa158015612135573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215991906157df565b6001600160a01b039095165f908152603d6020908152604080832054602b90925290912060010154949660ff918216959091169350915050565b336121a55f546001600160a01b031690565b6001600160a01b031614806121c457506003546001600160a01b031633145b6122105760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79206f776e6572206f72206d61726b6574696e672077616c6c657400006044820152606401611673565b604355565b5f546001600160a01b0316331461223e5760405162461bcd60e51b815260040161167390615779565b602a55565b5f546001600160a01b0316331461226c5760405162461bcd60e51b815260040161167390615779565b6024805460ff60c01b19169055565b6024545f906001600160a01b0383811691161480156122a457506024546001600160a01b031633145b80156122b95750602654600160a01b900460ff165b1561230c576024546001600160a01b03165f9081526001602052604090205461230c5760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b6044820152606401611673565b506001600160a01b03165f9081526001602052604090205490565b5f546001600160a01b031633146123505760405162461bcd60e51b815260040161167390615779565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146123c15760405162461bcd60e51b815260040161167390615779565b80156123f757601c54601b54601a546019546123dd919061581d565b6123e7919061581d565b6123f1919061581d565b60325550565b5f6032555b50565b5f546001600160a01b031633146124285760405162461bcd60e51b815260040161167390615779565b603355565b5f546001600160a01b031633146124565760405162461bcd60e51b815260040161167390615779565b5f602355565b5f546001600160a01b031633146124855760405162461bcd60e51b815260040161167390615779565b600a55565b5f546001600160a01b031633146124b35760405162461bcd60e51b815260040161167390615779565b803b63ffffffff16156125085760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e7472616374200000000000006044820152606401611673565b600380546001600160a01b039092166001600160a01b0319909216821790555f908152600c60205260409020805460ff19166001179055565b5f546001600160a01b0316331461256a5760405162461bcd60e51b815260040161167390615779565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146125bd5760405162461bcd60e51b815260040161167390615779565b601f805460ff19169055565b5f546001600160a01b031633146125f25760405162461bcd60e51b815260040161167390615779565b603255565b6060600680546117c990615799565b5f546001600160a01b0316331461262f5760405162461bcd60e51b815260040161167390615779565b602f805460ff19166001179055565b5f546001600160a01b031633146126675760405162461bcd60e51b815260040161167390615779565b603a54156126a65760405162461bcd60e51b815260206004820152600c60248201526b0737461727465644164644c560a41b6044820152606401611673565b43603a55565b602581815481106126bb575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f546001600160a01b03163314806126f657506003546001600160a01b031633145b6126fe575f80fd5b6001600160a01b039091165f908152602b6020526040902055565b5f546001600160a01b031633146127425760405162461bcd60e51b815260040161167390615779565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b5f61189d338484613191565b5f546001600160a01b031633146127a15760405162461bcd60e51b815260040161167390615779565b602454600160c81b900460ff166127f05760405162461bcd60e51b81526020600482015260136024820152721d185e0818da185b99d948191a5cd8589b1959606a1b6044820152606401611673565b81815f818110612802576128026157cb565b60200291909101356015555081816001818110612821576128216157cb565b60200291909101356016555081816002818110612840576128406157cb565b6020029190910135601755508181600381811061285f5761285f6157cb565b6020029190910135601855508181600481811061287e5761287e6157cb565b6020029190910135601955508181600581811061289d5761289d6157cb565b6020029190910135601a5550818160068181106128bc576128bc6157cb565b6020029190910135601b5550818160078181106128db576128db6157cb565b6020029190910135601c55505050565b5f546001600160a01b031633146129145760405162461bcd60e51b815260040161167390615779565b603455565b5f546001600160a01b031633148061293b57506003546001600160a01b031633145b6129715760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b6044820152606401611673565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303815f875af11580156129bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e19190615830565b506003546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015611a04573d5f803e3d5ffd5b5f546001600160a01b03163314612a415760405162461bcd60e51b815260040161167390615779565b600955565b5f546001600160a01b03163314612a6f5760405162461bcd60e51b815260040161167390615779565b603f55565b5f805f8060245f9054906101000a90046001600160a01b031690505f80826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612acd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af19190615861565b506011546001600160701b039283169450911691506001600160a01b031630811015612b2257829650819550612b29565b8196508295505b602480546040516370a0823160e01b81526001600160a01b039182166004820152908316916370a082319101602060405180830381865afa158015612b70573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b9491906157df565b945050505050909192565b5f546001600160a01b03163314612bc85760405162461bcd60e51b815260040161167390615779565b603680546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314612c135760405162461bcd60e51b815260040161167390615779565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314612c5e5760405162461bcd60e51b815260040161167390615779565b604255565b5f546001600160a01b03163314612c8c5760405162461bcd60e51b815260040161167390615779565b6064811115612cc85760405162461bcd60e51b81526020600482015260086024820152670e8dede40daeac6d60c31b6044820152606401611673565b603955565b5f546001600160a01b03163314612cf65760405162461bcd60e51b815260040161167390615779565b6003811115612d3c5760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401611673565b602755565b5f546001600160a01b03163314612d6a5760405162461bcd60e51b815260040161167390615779565b602f805460ff19169055565b5f546001600160a01b03163314612d9f5760405162461bcd60e51b815260040161167390615779565b60268054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b03163314612de65760405162461bcd60e51b815260040161167390615779565b80516024546001600160a01b03165f805b83811015611e4757602b5f868381518110612e1457612e146157cb565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f209150826001600160a01b03166370a08231868381518110612e5e57612e5e6157cb565b60200260200101516040518263ffffffff1660e01b8152600401612e9191906001600160a01b0391909116815260200190565b602060405180830381865afa158015612eac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed091906157df565b612edb90600161581d565b82556001808301805460ff191690911790558451612f0590869083908110611e3257611e326157cb565b600101612df7565b5f546001600160a01b03163314612f365760405162461bcd60e51b815260040161167390615779565b6001600160a01b038116612f775760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401611673565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314612ff95760405162461bcd60e51b815260040161167390615779565b5f5b83811015611e475761300e82600a615982565b613018908461598d565b60305f87878581811061302d5761302d6157cb565b905060200201602081019061304291906153d1565b6001600160a01b0316815260208101919091526040015f2055600101612ffb565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b803b80156130d0575050565b6001600160a01b0382165f908152603c6020526040812054900361318d57603b54158061312c5750816001600160a01b0316603b5f81548110613115576131156157cb565b5f918252602090912001546001600160a01b031614155b1561318d57603b80546001600160a01b0384165f818152603c60205260408120839055600183018455929092527fbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4d0180546001600160a01b03191690911790555b5050565b6001600160a01b0383165f90815260016020526040902054818110156131ec5760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401611673565b5f6131f685611e8a565b11156132355760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b6044820152606401611673565b60135460ff161561324b57611e47848484613b3e565b6001600160a01b0384165f908152600c602052604090205460ff1615801561328b57506001600160a01b0383165f908152600c602052604090205460ff16155b80156132a05750602654600160a81b900460ff165b80156132ad57505f602754115b80156132f157506001600160a01b0384165f9081526012602052604090205460ff16806132f157506001600160a01b0383165f9081526012602052604090205460ff165b1561332057816133008561227b565b036133205760275461331390600161598d565b61331d908361580a565b91505b6023541580156133395750602454600160a01b900460ff165b15613414576001600160a01b0384165f908152600c602052604090205460ff1615801561337e57506001600160a01b0383165f908152600c602052604090205460ff16155b80156133a257506001600160a01b0384165f9081526012602052604090205460ff16155b80156133c657506001600160a01b0383165f9081526012602052604090205460ff16155b1561341457823b63ffffffff16156134145760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b6044820152606401611673565b6001600160a01b0383165f9081526012602052604081205481908190819081908190819060ff1680156134555750335f908152602c602052604090205460ff165b801561346957506001600160a01b038b1632145b1561352b5761347789613bf1565b90505f8111801561348d575063ffffffff8b3b16155b1561352b576001600160a01b038b165f908152602b602052604081208054909350829184916134bd90849061581d565b90915550508154604080516001600160a01b038e1681526020810184905280820192909252517f44cc9391cdbb87171cecca6d448d00dc675c45f1e1c81038a5c1cc83c9ffbf079181900360600190a1600192506023545f0361352b576001828101805460ff191690911790555b6001600160a01b038b165f9081526012602052604081205460ff16156135df57602d5460ff16156135665761355f8a613c58565b9050613585565b602e546001036135795761355f8a613d77565b6135828a613e41565b90505b80156135df576001600160a01b038b165f908152602b60205260409020548111156135ae575f80fd5b6001600160a01b038b165f908152602b6020526040812080548392906135d590849061580a565b9091555060019550505b602454600160a01b900460ff1680156135f85750602354155b801561361c57506001600160a01b038c165f908152600c602052604090205460ff16155b801561364057506001600160a01b038b165f908152600c602052604090205460ff16155b156137a7576001600160a01b038b165f9081526012602052604090205460ff1661374457602f5460ff166136a55760405162461bcd60e51b815260206004820152600c60248201526b63616e7420627579206e6f7760a01b6044820152606401611673565b6001600160a01b038b165f908152603060205260409020548a6136c78d61227b565b6136d1919061581d565b11156137085760405162461bcd60e51b815260040161167390602080825260049082015263042dac2f60e31b604082015260600190565b84156137445760405162461bcd60e51b815260206004820152600b60248201526a63616e742072656d6f766560a81b6044820152606401611673565b6001600160a01b038b165f9081526012602052604090205460ff16156137a757603a545f1080156137725750835b6137a75760405162461bcd60e51b8152600401611673906020808252600490820152630858591960e21b604082015260600190565b6001600160a01b038c165f9081526012602052604090205460ff16806137e457506001600160a01b038b165f9081526012602052604090205460ff165b15613a5b576001600160a01b038c165f908152600c602052604090205460ff1615801561382957506001600160a01b038b165f908152600c602052604090205460ff16155b15613a3657602454600160a01b900460ff1680156138505750602454600160a81b900460ff165b801561386a5750600854602354613867919061581d565b43105b801561388e57506001600160a01b038b165f9081526012602052604090205460ff16155b156138b6576001600160a01b038b165f908152600d60205260409020805460ff191660011790555b6001600160a01b038b165f9081526012602052604090205460ff1615613a205760135460ff161580156138e7575083155b15613a2057305f90815260016020526040902054602a54811115613a1e576013805460ff191660011790556026546040805163159be9e360e31b815290516001600160a01b039092169163acdf4f18916004808201925f9290919082900301818387803b158015613956575f80fd5b505af1925050508015613967575060015b613994576040517f3f5028e8956709d2b943835f052a15fd3c70faecef3449e437edd6d7384ac6df905f90a15b6013805460ff19169055601a54601b546019546016546017546015545f95949392916139bf9161581d565b6139c9919061581d565b6139d3919061581d565b6139dd919061581d565b6139e7919061581d565b90505f60646029548e6139fa919061598d565b613a0491906159a4565b905082811115613a115750815b613a1b8183613f0f565b50505b505b83158015613a2c575084155b15613a3657600197505b6001600160a01b038b165f9081526012602052604090205460ff1615613a5b57600196505b6001600160a01b038c165f9081526012602052604090205460ff16158015613a9b57506001600160a01b038b165f9081526012602052604090205460ff16155b15613aa557600195505b613ab58c8c8c8b8b8b8a8c61462c565b6001600160a01b038c163014801590613b0657506001600160a01b038c165f9081526012602052604090205460ff1680613b0657506001600160a01b038b165f9081526012602052604090205460ff165b15613b3057838015613b1757505f8a115b15613b2557613b258c6130c4565b613b30603154614a62565b505050505050505050505050565b6001600160a01b0383165f90815260016020526040812080548391908390613b6790849061580a565b90915550506001600160a01b0383165f9081526001602052604081208054849290613b9390849061581d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613bdf91815260200190565b60405180910390a35060019392505050565b5f805f80613bfd612a74565b9250925092505f8084118015613c1257505f83115b15613c2f5782613c22858861598d565b613c2c91906159a4565b90505b613c39818561581d565b8210613c4f57613c4b82878686614eb4565b5094505b50505050919050565b5f805f80613c64612a74565b92509250925082811015613d26576024546001600160a01b03165f90815260016020526040902054613c9790869061580a565b60245f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ce7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d0b91906157df565b613d15908761598d565b613d1f91906159a4565b9350613d6f565b5f8084118015613d3557505f83115b15613c4f57613d44868461580a565b613d4e858861598d565b613d5891906159a4565b9050613d64848261581d565b821015613c4f575f80fd5b505050919050565b5f805f613d82612a74565b9250509150818111613e3a576024548490613da5906001600160a01b031661227b565b613daf919061580a565b60245f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e2391906157df565b613e2d908661598d565b613e3791906159a4565b92505b5050919050565b5f805f613e4c612a74565b9250509150818111613e3a576024546001908590613e72906001600160a01b031661227b565b613e7c919061580a565b613e86919061580a565b60245f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ed6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613efa91906157df565b613f04908661598d565b613e2d90600161581d565b6013805460ff19166001179055801580613f27575081155b61461e575f601654601a54613f3c919061581d565b90505f826002613f4c848761598d565b613f5691906159a4565b613f6091906159a4565b90505f613f6e6002846159a4565b613f78908561580a565b6011546040805160028082526060820183529394506001600160a01b03909216925f929160208301908036833701905050905030815f81518110613fbe57613fbe6157cb565b6001600160a01b039283166020918202929092010152601154825191169082906001908110613fef57613fef6157cb565b6001600160a01b03928316602091820292909201015260105416635c11d795614018868a61580a565b60135460405160e084901b6001600160e01b031916815261405192915f91879161010090046001600160a01b03169042906004016159c3565b5f604051808303815f87803b158015614068575f80fd5b505af1925050508015614079575060015b6140b1576040515f81527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6013546040516370a0823160e01b81526001600160a01b03610100909204821660048201525f918416906370a0823190602401602060405180830381865afa1580156140ff573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061412391906157df565b905080156141ac576013546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd906064016020604051808303815f875af1158015614186573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141aa9190615830565b505b5f8460026141ba898561598d565b6141c491906159a4565b6141ce91906159a4565b90505f856019546015546141e2919061581d565b6141ec908561598d565b6141f691906159a4565b90505f81614204848661580a565b61420e919061580a565b90505f606460395483614221919061598d565b61422b91906159a4565b90505f60646038548561423e919061598d565b61424891906159a4565b90505f614255828661580a565b90508115614394575f60646037548461426e919061598d565b61427891906159a4565b60035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192508b169063a9059cbb906044016020604051808303815f875af11580156142ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142ee9190615830565b506004546001600160a01b03808c169163a9059cbb911661430f848761580a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015614357573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061437b9190615830565b508260355f82825461438d919061581d565b9091555050505b80156144105760265460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101839052908a169063a9059cbb906044016020604051808303815f875af11580156143ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061440e9190615830565b505b5f8b11801561441e57505f86115b156144f35760105460115460365460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018f9052606481018a90525f6084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303815f875af19250505080156144be575060408051601f3d908101601f191682019092526144bb91810190615a34565b60015b6144ef576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c905f90a16144f3565b5050505b8215614611576040805160028082526060820183525f92602083019080368337505060115482519293506001600160a01b0316918391505f90614538576145386157cb565b6001600160a01b039283166020918202929092010152602254825191169082906001908110614569576145696157cb565b6001600160a01b039283166020918202929092010152601054604051635c11d79560e01b8152911690635c11d795906145ae9087905f908690309042906004016159c3565b5f604051808303815f87803b1580156145c5575f80fd5b505af19250505080156145d6575060015b61460f57604051600b81527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b505b5050505050505050505050505b50506013805460ff19169055565b6001600160a01b0388165f9081526001602052604090205461464f90879061580a565b6001600160a01b0389165f9081526001602052604081209190915585156147c2575f851561469b57601a54601b5460195461468a919061581d565b614694919061581d565b9050614722565b6017546016546015546146ae919061581d565b6146b8919061581d565b602454909150600160b81b900460ff1680156146d557505f600954115b15614722576009548811156147225760405162461bcd60e51b81526020600482015260136024820152721bdd995c881b585e08189d5e48185b5bdd5b9d606a1b6044820152606401611673565b5f612710614730838b61598d565b61473a91906159a4565b905080156147595761474c818461581d565b92506147598b3083615190565b5f87614781576127106018548b614770919061598d565b61477a91906159a4565b905061479f565b612710601c548b614792919061598d565b61479c91906159a4565b90505b80156147be576147af818561581d565b93506147be8c61dead83615190565b5050505b8380156147e757506001600160a01b0389165f908152600c602052604090205460ff16155b801561480b57506001600160a01b0388165f908152600c602052604090205460ff16155b1561484d575f61271060325489614822919061598d565b61482c91906159a4565b9050801561484b5761483e818361581d565b915061484b8a3083615190565b505b82801561487257506001600160a01b0389165f908152600c602052604090205460ff16155b801561489657506001600160a01b0388165f908152600c602052604090205460ff16155b156148d8575f612710603354896148ad919061598d565b6148b791906159a4565b905080156148d6576148c9818361581d565b91506148d68a3083615190565b505b8180156148fd57506001600160a01b0389165f908152600c602052604090205460ff16155b801561492157506001600160a01b0388165f908152600c602052604090205460ff16155b15614988576001600160a01b0388165f908152602b602052604090206001015460ff1615614988575f6127106034548961495b919061598d565b61496591906159a4565b9050801561498657614977818361581d565b91506149868a61dead83615190565b505b6001600160a01b0388165f908152600e602052604090205460ff161580156149b95750602454600160c01b900460ff165b80156149c657505f600a54115b15614a4357600a546001600160a01b0389165f9081526001602052604090205482906149f3908a9061581d565b6149fd919061580a565b1115614a435760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b6044820152606401611673565b614a578989614a52848b61580a565b615190565b505050505050505050565b43604154604054614a73919061581d565b1115614a7c5750565b6021546022546040516370a0823160e01b81523060048201526101009092046001600160a01b03908116929116905f9083906370a0823190602401602060405180830381865afa158015614ad2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614af691906157df565b9050603f54811015614b085750505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015614b4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b7091906157df565b90505f60245f9054906101000a90046001600160a01b031690505f816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614bc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614beb91906157df565b603b549091505f908190819081908180805a90505b8e83108015614c0e57508382105b15614e9f5783603e5410614c21575f603e555b603b603e5481548110614c3657614c366157cb565b5f9182526020808320909101546001600160a01b0316808352602b90915260409091205490985096508615801590614c8657506001600160a01b0388165f908152603d602052604090205460ff16155b15614e5e5788614c96888e61598d565b614ca091906159a4565b955088614cad888d61598d565b614cb791906159a4565b945088871115614d0f57604080516001600160a01b038a168152602081018990529081018a90527f9202bb21571d446be61a9c0579359dc3482be9056a94e6445002c3fccdb50e3b9060600160405180910390a15f95505b8515614e5e576042548610614d6557604080516001600160a01b038a168152602081018890527f36c15293c9e7302c2586d095c4e17021a9854f4fe555e130ec6174ff8a50a0c2910160405180910390a1614e5e565b6021545f90614d849061010090046001600160a01b03168a8984615206565b905080614de557602154604080516001600160a01b0361010090930483168152918b16602083015281018890524260608201527f4dfbd81b479abc934b14d8e3b7143a9422dfa2068ece06c632b0afdd07cf6aee9060800160405180910390a15b6022545f90614dff906001600160a01b03168b8984615206565b905080614e5b57602254604080516001600160a01b039283168152918c16602083015281018890524260608201527f4dfbd81b479abc934b14d8e3b7143a9422dfa2068ece06c632b0afdd07cf6aee9060800160405180910390a15b50505b5a614e69908261580a565b614e73908461581d565b92505a603e80549192505f614e8783615a5f565b91905055508180614e9790615a5f565b925050614c00565b50504360405550505050505050505050505050565b5f805f60245f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614f07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614f2b91906157df565b90505f60105f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015614f7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614fa29190615a77565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015614fdd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906150019190615a77565b60245460408051637464fc3d60e01b815290519293506001600160a01b038085161515935f9390911691637464fc3d9160048083019260209291908290030181865afa158015615053573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061507791906157df565b90508115615118578015615118575f615098615093898b61598d565b61532e565b90505f6150a48361532e565b905080821115615115575f6150b9828461580a565b6150c3908861598d565b6150ce90600861598d565b90505f6150dc83600861598d565b6150e785601161598d565b6150f1919061581d565b90506150fd81836159a4565b985088156151125761510f898961581d565b97505b50505b50505b5f615123898c61580a565b9050845f0361514d576103e861513c6150938c8461598d565b615146919061580a565b9650615182565b61517f8961515b878461598d565b61516591906159a4565b89615170888e61598d565b61517a91906159a4565b61539b565b96505b505050505094509492505050565b6001600160a01b0382165f908152600160205260409020546151b390829061581d565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130b79085815260200190565b5f805f866001600160a01b031663a9059cbb878760405160240161523f9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516152789190615a92565b5f604051808303815f865af19150503d805f81146152b1576040519150601f19603f3d011682016040523d82523d5f602084013e6152b6565b606091505b50915091508315615324578180156152e65750805115806152e65750808060200190518101906152e69190615830565b6153245760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401611673565b5095945050505050565b5f600382111561538d5750805f6153466002836159a4565b61535190600161581d565b90505b818110156153875790508060028161536c81866159a4565b615376919061581d565b61538091906159a4565b9050615354565b50919050565b8115611eb957506001919050565b5f8183106153a957816153ab565b825b9392505050565b6001600160a01b03811681146123fc575f80fd5b8035611eb9816153b2565b5f602082840312156153e1575f80fd5b81356153ab816153b2565b80151581146123fc575f80fd5b5f806040838503121561540a575f80fd5b8235615415816153b2565b91506020830135615425816153ec565b809150509250929050565b5f60208284031215615440575f80fd5b5035919050565b5f5b83811015615461578181015183820152602001615449565b50505f910152565b602081525f8251806020840152615487816040850160208701615447565b601f01601f19169190910160400192915050565b5f602082840312156154ab575f80fd5b81356153ab816153ec565b5f80604083850312156154c7575f80fd5b82356154d2816153b2565b946020939093013593505050565b5f8083601f8401126154f0575f80fd5b50813567ffffffffffffffff811115615507575f80fd5b6020830191508360208260051b8501011115615521575f80fd5b9250929050565b5f805f6040848603121561553a575f80fd5b833567ffffffffffffffff811115615550575f80fd5b61555c868287016154e0565b9094509250506020840135615570816153ec565b809150509250925092565b5f806020838503121561558c575f80fd5b823567ffffffffffffffff8111156155a2575f80fd5b6155ae858286016154e0565b90969095509350505050565b5f805f606084860312156155cc575f80fd5b83356155d7816153b2565b925060208401356155e7816153b2565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561561d575f80fd5b823567ffffffffffffffff80821115615634575f80fd5b818501915085601f830112615647575f80fd5b813581811115615659576156596155f8565b8060051b604051601f19603f8301168101818110858211171561567e5761567e6155f8565b60405291825284820192508381018501918883111561569b575f80fd5b938501935b828510156156c0576156b1856153c6565b845293850193928501926156a0565b98975050505050505050565b5f805f606084860312156156de575f80fd5b83356156e9816153b2565b9250602084013591506040840135615570816153b2565b5f8060408385031215615711575f80fd5b823561571c816153b2565b91506020830135615425816153b2565b5f805f806060858703121561573f575f80fd5b843567ffffffffffffffff811115615755575f80fd5b615761878288016154e0565b90989097506020870135966040013595509350505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600181811c908216806157ad57607f821691505b60208210810361538757634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156157ef575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156118a1576118a16157f6565b808201808211156118a1576118a16157f6565b5f60208284031215615840575f80fd5b81516153ab816153ec565b80516001600160701b0381168114611eb9575f80fd5b5f805f60608486031215615873575f80fd5b61587c8461584b565b925061588a6020850161584b565b9150604084015163ffffffff81168114615570575f80fd5b600181815b808511156158dc57815f19048211156158c2576158c26157f6565b808516156158cf57918102915b93841c93908002906158a7565b509250929050565b5f826158f2575060016118a1565b816158fe57505f6118a1565b8160018114615914576002811461591e5761593a565b60019150506118a1565b60ff84111561592f5761592f6157f6565b50506001821b6118a1565b5060208310610133831016604e8410600b841016171561595d575081810a6118a1565b61596783836158a2565b805f190482111561597a5761597a6157f6565b029392505050565b5f6153ab83836158e4565b80820281158282048414176118a1576118a16157f6565b5f826159be57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015615a135784516001600160a01b0316835293830193918301916001016159ee565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215615a46575f80fd5b8351925060208401519150604084015190509250925092565b5f60018201615a7057615a706157f6565b5060010190565b5f60208284031215615a87575f80fd5b81516153ab816153b2565b5f8251615aa3818460208701615447565b919091019291505056fea264697066735822122016e88477d6177b0c6548c058fe7a5140e68ac6f579f8bf4a1baef5d9d70e07ab64736f6c6343000818003360806040525f805460ff19166001179055600280546001600160a01b03191661dead17905534801561002f575f80fd5b50610b928061003d5f395ff3fe608060405234801561000f575f80fd5b506004361061011c575f3560e01c8063af6d1fe4116100a9578063d9c49a531161006e578063d9c49a5314610236578063e4e842ee14610249578063f851a44014610251578063f887ea4014610264578063fc0c546a14610277575f80fd5b8063af6d1fe4146101e2578063b1e51288146101f5578063b53820c414610208578063c167c2531461021b578063c54e44eb14610223575f80fd5b806380568690116100ef578063805686901461018f578063960cf58d146101a7578063a8aa1b31146101bb578063ac5e30cb146101ce578063acdf4f18146101da575f80fd5b8063111adc9b1461012057806318899f9c146101355780631bb84d86146101515780634d6be6c01461017c575b5f80fd5b61013361012e3660046108ff565b61028a565b005b61013e60015481565b6040519081526020015b60405180910390f35b600254610164906001600160a01b031681565b6040516001600160a01b039091168152602001610148565b61013361018a366004610931565b6102c2565b61019761030e565b6040519015158152602001610148565b60085461019790600160a01b900460ff1681565b600454610164906001600160a01b031681565b5f546101979060ff1681565b610133610383565b6101646101f03660046108ff565b6104c7565b610133610203366004610961565b6104ef565b61013361021636600461097c565b61052b565b61013e61071e565b600854610164906001600160a01b031681565b6101336102443660046109fa565b610795565b61019761085f565b600554610164906001600160a01b031681565b600754610164906001600160a01b031681565b600354610164906001600160a01b031681565b6005546001600160a01b031633146102bd5760405162461bcd60e51b81526004016102b490610a33565b60405180910390fd5b600155565b6005546001600160a01b031633146102ec5760405162461bcd60e51b81526004016102b490610a33565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546008546040516370a0823160e01b81523060048201525f92916001600160a01b0316906370a0823190602401602060405180830381865afa158015610358573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037c9190610a5a565b1015905090565b6005546001600160a01b03163314806103a657506003546001600160a01b031633145b6103c25760405162461bcd60e51b81526004016102b490610a33565b6103ca61030e565b6103f8576040517fca854b07268a057d0ae19f495011ad376548d36003829f7e8677f08589a470a5905f90a1565b61040061085f565b15801561040e57505f5460ff165b15610459577f3be903c083cb0e5b08463ebc2330b4fba0eb9872c5eee977f0f2cf245609d8d861043c61071e565b6001546040805192835260208301919091520160405180910390a1565b600754600154600254604051635c11d79560e01b81526001600160a01b0393841693635c11d795936104989390925f9260069216904290600401610a71565b5f604051808303815f87803b1580156104af575f80fd5b505af11580156104c1573d5f803e3d5ffd5b50505050565b600681815481106104d6575f80fd5b5f918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146105195760405162461bcd60e51b81526004016102b490610a33565b5f805460ff1916911515919091179055565b600854600160a01b900460ff16156105745760405162461bcd60e51b815260206004820152600c60248201526b185b1c9958591e481253925560a21b60448201526064016102b4565b600380546001600160a01b038981166001600160a01b031992831617909255600480548984169083161790556005805488841690831617905560088054928616929091169190911790556040805160028082526060820183529091602083019080368337505081516105ed926006925060200190610888565b50600854600680546001600160a01b03909216915f9061060f5761060f610ae5565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555086600660018154811061064f5761064f610ae5565b5f91825260209091200180546001600160a01b039283166001600160a01b0319918216179091556007805487841692168217905560085460405163095ea7b360e01b815260048101929092525f1960248301529091169063095ea7b3906044016020604051808303815f875af11580156106cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ef9190610af9565b508115610700575f805460ff191690555b60015550506008805460ff60a01b1916600160a01b17905550505050565b600854600480546040516370a0823160e01b81526001600160a01b03918216928101929092525f9216906370a0823190602401602060405180830381865afa15801561076c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107909190610a5a565b905090565b600554336001600160a01b039091160361085a576001600160a01b0383166107ea576040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156104c1573d5f803e3d5ffd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610836573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190610af9565b505050565b5f600154606461086d61071e565b610878906005610b14565b6108829190610b3d565b11905090565b828054828255905f5260205f209081019282156108db579160200282015b828111156108db57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906108a6565b506108e79291506108eb565b5090565b5b808211156108e7575f81556001016108ec565b5f6020828403121561090f575f80fd5b5035919050565b80356001600160a01b038116811461092c575f80fd5b919050565b5f60208284031215610941575f80fd5b61094a82610916565b9392505050565b801515811461095e575f80fd5b50565b5f60208284031215610971575f80fd5b813561094a81610951565b5f805f805f805f60e0888a031215610992575f80fd5b61099b88610916565b96506109a960208901610916565b95506109b760408901610916565b94506109c560608901610916565b93506109d360808901610916565b925060a08801356109e381610951565b8092505060c0880135905092959891949750929550565b5f805f60608486031215610a0c575f80fd5b610a1584610916565b9250610a2360208501610916565b9150604084013590509250925092565b6020808252600d908201526c3737903832b936b4b9b9b4b7b760991b604082015260600190565b5f60208284031215610a6a575f80fd5b5051919050565b5f60a08201878352602087602085015260a0604085015281875480845260c086019150885f5260205f2093505f5b81811015610ac45784546001600160a01b031683526001948501949284019201610a9f565b50506001600160a01b03969096166060850152505050608001529392505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610b09575f80fd5b815161094a81610951565b8082028115828204841417610b3757634e487b7160e01b5f52601160045260245ffd5b92915050565b5f82610b5757634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212203ffbbb4be862b6cd0587e1a9ee64d7d76b3b7f97e559f572f99f31dfe7a1ff7364736f6c63430008180033608060405234801561000f575f80fd5b5060405161013938038061013983398101604081905261002e916100a3565b60405163095ea7b360e01b81523360048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015610078573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061009c91906100d0565b50506100ef565b5f602082840312156100b3575f80fd5b81516001600160a01b03811681146100c9575f80fd5b9392505050565b5f602082840312156100e0575f80fd5b815180151581146100c9575f80fd5b603e806100fb5f395ff3fe60806040525f80fdfea26469706673582212209b08d1732ca30a7c6bf31ba61cf77848e17b840a4a689df928f47155290d1aab64736f6c63430008180033

Deployed Bytecode

0x608060405260043610610771575f3560e01c8063715018a6116103cc578063b9fbc49d116101ff578063dac1dcfe1161011e578063e82bef29116100b3578063ec2dec7011610083578063ec2dec70146115c3578063ef6e4f17146115d8578063f2b344b5146115ed578063f2fde38b1461160c578063f662bb921461162b575f80fd5b8063e82bef291461155c578063e92a98e21461157b578063ea10510e1461158f578063eb10b741146115ae575f80fd5b8063e2014279116100ee578063e2014279146114ea578063e32759cf14611509578063e5a6b10f1461151e578063e5c2b0a61461153d575f80fd5b8063dac1dcfe1461144f578063dc185ae114611468578063dd62ed3e14611487578063e043fe4b146114cb575f80fd5b8063c213d62d11610194578063ce4d9f1511610164578063ce4d9f15146113cc578063d285e6ab146113fb578063d598643314611410578063d710569b14611430575f80fd5b8063c213d62d1461134d578063c5827ae71461136c578063c92d567e14611397578063ce0192f9146113b7575f80fd5b8063be4fe9a5116101cf578063be4fe9a5146112e5578063bfac5ee0146112fa578063bfc3137e14611319578063c0aa931e1461132e575f80fd5b8063b9fbc49d1461124f578063bba30f8f14611264578063bd25bf2914611283578063bddf379e146112b1575f80fd5b80639183df39116102eb578063a5cde96c11610280578063aa582b4211610250578063aa582b42146111e6578063acb2ad6f14611205578063adc7955d1461121a578063b02d757f1461122f575f80fd5b8063a5cde96c1461117e578063a842486114611193578063a9059cbb146111b2578063aa4bde28146111d1575f80fd5b8063992db38f116102bb578063992db38f1461110c5780639cc0e3c714611120578063a23270d71461113f578063a5696d891461115f575f80fd5b80639183df39146110ba57806395d89b41146110cf57806395e36679146110e357806397a241e4146110f8575f80fd5b806388e765ff116103615780638da5cb5b116103315780638da5cb5b1461104b5780638e1e0838146110675780638f02bb5b146110865780638f6cd17d146110a5575f80fd5b806388e765ff14610fee5780638a26d47d146110035780638c2fc7ad146110185780638d84917514611037575f80fd5b80637db1342c1161039c5780637db1342c14610f7757806385dc300414610f965780638691752414610fb55780638718b24f14610fca575f80fd5b8063715018a614610f115780637959473614610f2557806379dc880c14610f445780637c5ee8e914610f63575f80fd5b8063313ce567116105a45780635a7ba73c116104c357806363d27d991161045857806369768b501161042857806369768b5014610eb0578063697cfc1914610ec95780636b61136814610edd57806370a0823114610ef2575f80fd5b806363d27d9914610e345780636402511e14610e53578063663c3a4114610e7257806366d1b6b514610e91575f80fd5b80636108a3db116104935780636108a3db14610da4578063621823e614610dc35780636386c1c714610dd8578063639909bf14610e1f575f80fd5b80635a7ba73c14610d275780635b37e72c14610d475780635ede70d714610d66578063605324f214610d85575f80fd5b806340aa81fe1161053957806346c123b61161050957806346c123b614610cb55780634a9a774014610cd45780634d5ce03814610cf3578063553193ca14610d12575f80fd5b806340aa81fe14610c3457806340acfff714610c625780634188bf5a14610c815780634482004e14610ca0575f80fd5b80633bb82eb6116105745780633bb82eb614610ba75780633bfe62ca14610bc65780633c11100d14610bdb5780633ccfdbcd14610c09575f80fd5b8063313ce56714610b3f57806335c9608914610b535780633757434214610b735780633b1cd18714610b92575f80fd5b8063150e4c47116106905780631dbbaebd1161062557806323b872dd116105f557806323b872dd14610ad7578063255412d914610af65780632bc9218b14610b0b5780632dab693f14610b2a575f80fd5b80631dbbaebd14610a65578063206c17bb14610a8457806320ae218a14610aa35780632171dcc914610ab8575f80fd5b806317417bb81161066057806317417bb814610a0857806318160ddd14610a1d5780631846a5a414610a3157806318d1285514610a51575f80fd5b8063150e4c471461097b5780631554e1ce1461099a57806315d07d82146109d6578063172246fc146109ef575f80fd5b806306fdde03116107065780630a79a70e116106d65780630a79a70e146109105780630a7a2842146109295780630f890b861461094857806314a432c91461095c575f80fd5b806306fdde031461088e57806307313d8d146108af57806307c3adf0146108ce578063095ea7b3146108f1575f80fd5b806304c23ffe1161074157806304c23ffe1461082357806305833c2b1461083c578063060e304e1461085b578063063be69e1461087a575f80fd5b806301339c211461077c57806301873d8f1461079257806301986fad146107d557806303da2b2314610803575f80fd5b3661077857005b5f80fd5b348015610787575f80fd5b5061079061164a565b005b34801561079d575f80fd5b506107c06107ac3660046153d1565b602c6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156107e0575f80fd5b506107c06107ef3660046153d1565b600c6020525f908152604090205460ff1681565b34801561080e575f80fd5b506024546107c090600160c01b900460ff1681565b34801561082e575f80fd5b50602d546107c09060ff1681565b348015610847575f80fd5b506107906108563660046153f9565b6116c1565b348015610866575f80fd5b50610790610875366004615430565b611714565b348015610885575f80fd5b50610790611782565b348015610899575f80fd5b506108a26117ba565b6040516107cc9190615469565b3480156108ba575f80fd5b506107906108c936600461549b565b61184a565b3480156108d9575f80fd5b506108e360175481565b6040519081526020016107cc565b3480156108fc575f80fd5b506107c061090b3660046154b6565b611891565b34801561091b575f80fd5b50602f546107c09060ff1681565b348015610934575f80fd5b50610790610943366004615430565b6118a7565b348015610953575f80fd5b50610790611911565b348015610967575f80fd5b50610790610976366004615430565b611949565b348015610986575f80fd5b50610790610995366004615528565b611977565b3480156109a5575f80fd5b506021546109be9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016107cc565b3480156109e1575f80fd5b506021546107c09060ff1681565b3480156109fa575f80fd5b50601f546107c09060ff1681565b348015610a13575f80fd5b506108e360205481565b348015610a28575f80fd5b50600f546108e3565b348015610a3c575f80fd5b506026546107c090600160a81b900460ff1681565b348015610a5c575f80fd5b50610790611a0a565b348015610a70575f80fd5b50610790610a7f36600461557b565b611a39565b348015610a8f575f80fd5b506010546109be906001600160a01b031681565b348015610aae575f80fd5b506108e360435481565b348015610ac3575f80fd5b50610790610ad23660046153f9565b611b4e565b348015610ae2575f80fd5b506107c0610af13660046155ba565b611ba1565b348015610b01575f80fd5b506108e360185481565b348015610b16575f80fd5b50610790610b25366004615430565b611c33565b348015610b35575f80fd5b506108e360085481565b348015610b4a575f80fd5b506007546108e3565b348015610b5e575f80fd5b506026546107c090600160a01b900460ff1681565b348015610b7e575f80fd5b50610790610b8d366004615430565b611c9d565b348015610b9d575f80fd5b506108e360335481565b348015610bb2575f80fd5b50610790610bc1366004615430565b611ccb565b348015610bd1575f80fd5b506108e360195481565b348015610be6575f80fd5b506107c0610bf53660046153d1565b60126020525f908152604090205460ff1681565b348015610c14575f80fd5b506108e3610c233660046153d1565b601d6020525f908152604090205481565b348015610c3f575f80fd5b506107c0610c4e3660046153d1565b600e6020525f908152604090205460ff1681565b348015610c6d575f80fd5b50610790610c7c36600461560c565b611cf9565b348015610c8c575f80fd5b506024546109be906001600160a01b031681565b348015610cab575f80fd5b506108e3603a5481565b348015610cc0575f80fd5b50610790610ccf36600461549b565b611e4e565b348015610cdf575f80fd5b506014546109be906001600160a01b031681565b348015610cfe575f80fd5b506108e3610d0d3660046153d1565b611e8a565b348015610d1d575f80fd5b506108e360235481565b348015610d32575f80fd5b506024546107c090600160a81b900460ff1681565b348015610d52575f80fd5b506026546109be906001600160a01b031681565b348015610d71575f80fd5b50610790610d803660046153d1565b611ebe565b348015610d90575f80fd5b50610790610d9f366004615430565b611f75565b348015610daf575f80fd5b50610790610dbe366004615528565b611ffb565b348015610dce575f80fd5b506108e360415481565b348015610de3575f80fd5b50610df7610df23660046153d1565b6120d7565b60408051948552602085019390935290151591830191909152151560608201526080016107cc565b348015610e2a575f80fd5b506108e360425481565b348015610e3f575f80fd5b50610790610e4e366004615430565b612193565b348015610e5e575f80fd5b50610790610e6d366004615430565b612215565b348015610e7d575f80fd5b506022546109be906001600160a01b031681565b348015610e9c575f80fd5b506004546109be906001600160a01b031681565b348015610ebb575f80fd5b50600b546107c09060ff1681565b348015610ed4575f80fd5b50610790612243565b348015610ee8575f80fd5b506108e3601c5481565b348015610efd575f80fd5b506108e3610f0c3660046153d1565b61227b565b348015610f1c575f80fd5b50610790612327565b348015610f30575f80fd5b50610790610f3f36600461549b565b612398565b348015610f4f575f80fd5b50610790610f5e366004615430565b6123ff565b348015610f6e575f80fd5b5061079061242d565b348015610f82575f80fd5b50610790610f91366004615430565b61245c565b348015610fa1575f80fd5b50610790610fb03660046153d1565b61248a565b348015610fc0575f80fd5b506108e3602a5481565b348015610fd5575f80fd5b506013546109be9061010090046001600160a01b031681565b348015610ff9575f80fd5b506108e360095481565b34801561100e575f80fd5b506108e360375481565b348015611023575f80fd5b506107906110323660046153f9565b612541565b348015611042575f80fd5b50610790612594565b348015611056575f80fd5b505f546001600160a01b03166109be565b348015611072575f80fd5b506036546109be906001600160a01b031681565b348015611091575f80fd5b506107906110a0366004615430565b6125c9565b3480156110b0575f80fd5b506108e360295481565b3480156110c5575f80fd5b506108e360395481565b3480156110da575f80fd5b506108a26125f7565b3480156110ee575f80fd5b506108e3601e5481565b348015611103575f80fd5b50610790612606565b348015611117575f80fd5b5061079061263e565b34801561112b575f80fd5b506109be61113a366004615430565b6126ac565b34801561114a575f80fd5b506024546107c090600160b81b900460ff1681565b34801561116a575f80fd5b506107906111793660046154b6565b6126d4565b348015611189575f80fd5b506108e3602e5481565b34801561119e575f80fd5b506107906111ad3660046153f9565b612719565b3480156111bd575f80fd5b506107c06111cc3660046154b6565b61276c565b3480156111dc575f80fd5b506108e3600a5481565b3480156111f1575f80fd5b5061079061120036600461557b565b612778565b348015611210575f80fd5b506108e360325481565b348015611225575f80fd5b506108e3601a5481565b34801561123a575f80fd5b506024546107c090600160b01b900460ff1681565b34801561125a575f80fd5b506108e360165481565b34801561126f575f80fd5b5061079061127e366004615430565b6128eb565b34801561128e575f80fd5b506107c061129d3660046153d1565b600d6020525f908152604090205460ff1681565b3480156112bc575f80fd5b506108e36112cb3660046153d1565b6001600160a01b03165f9081526030602052604090205490565b3480156112f0575f80fd5b506108e3601b5481565b348015611305575f80fd5b506107906113143660046156cc565b612919565b348015611324575f80fd5b506108e360345481565b348015611339575f80fd5b50610790611348366004615430565b612a18565b348015611358575f80fd5b50610790611367366004615430565b612a46565b348015611377575f80fd5b506108e36113863660046153d1565b60306020525f908152604090205481565b3480156113a2575f80fd5b506024546107c090600160a01b900460ff1681565b3480156113c2575f80fd5b506108e360155481565b3480156113d7575f80fd5b506113e0612a74565b604080519384526020840192909252908201526060016107cc565b348015611406575f80fd5b506108e360315481565b34801561141b575f80fd5b506024546107c090600160c81b900460ff1681565b34801561143b575f80fd5b5061079061144a3660046153d1565b612b9f565b34801561145a575f80fd5b506028546107c09060ff1681565b348015611473575f80fd5b506107906114823660046153d1565b612bea565b348015611492575f80fd5b506108e36114a1366004615700565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156114d6575f80fd5b506107906114e5366004615430565b612c35565b3480156114f5575f80fd5b50610790611504366004615430565b612c63565b348015611514575f80fd5b506108e360275481565b348015611529575f80fd5b506011546109be906001600160a01b031681565b348015611548575f80fd5b50610790611557366004615430565b612ccd565b348015611567575f80fd5b506003546109be906001600160a01b031681565b348015611586575f80fd5b50610790612d41565b34801561159a575f80fd5b506107906115a936600461549b565b612d76565b3480156115b9575f80fd5b506108e3603f5481565b3480156115ce575f80fd5b506108e360385481565b3480156115e3575f80fd5b506108e360355481565b3480156115f8575f80fd5b5061079061160736600461560c565b612dbd565b348015611617575f80fd5b506107906116263660046153d1565b612f0d565b348015611636575f80fd5b5061079061164536600461572c565b612fd0565b5f546001600160a01b0316331461167c5760405162461bcd60e51b815260040161167390615779565b60405180910390fd5b602354156116bb5760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b6044820152606401611673565b43602355565b5f546001600160a01b031633146116ea5760405162461bcd60e51b815260040161167390615779565b6001600160a01b03919091165f908152603d60205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461173d5760405162461bcd60e51b815260040161167390615779565b805f0361177d5760405162461bcd60e51b815260206004820152600e60248201526d067726561746572207468616e20360941b6044820152606401611673565b602955565b5f546001600160a01b031633146117ab5760405162461bcd60e51b815260040161167390615779565b6024805460ff60b81b19169055565b6060600580546117c990615799565b80601f01602080910402602001604051908101604052809291908181526020018280546117f590615799565b80156118405780601f1061181757610100808354040283529160200191611840565b820191905f5260205f20905b81548152906001019060200180831161182357829003601f168201915b5050505050905090565b5f546001600160a01b031633146118735760405162461bcd60e51b815260040161167390615779565b60268054911515600160a81b0260ff60a81b19909216919091179055565b5f61189d338484613063565b5060015b92915050565b5f546001600160a01b031633146118d05760405162461bcd60e51b815260040161167390615779565b606481111561190c5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611673565b603855565b5f546001600160a01b0316331461193a5760405162461bcd60e51b815260040161167390615779565b6024805460ff60c81b19169055565b5f546001600160a01b031633146119725760405162461bcd60e51b815260040161167390615779565b600855565b5f546001600160a01b031633146119a05760405162461bcd60e51b815260040161167390615779565b5f5b82811015611a045781600c5f8686858181106119c0576119c06157cb565b90506020020160208101906119d591906153d1565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790556001016119a2565b50505050565b5f546001600160a01b03163314611a335760405162461bcd60e51b815260040161167390615779565b5f603a55565b5f546001600160a01b03163314611a625760405162461bcd60e51b815260040161167390615779565b5f5b81811015611b49576024545f906001600160a01b03166370a08231858585818110611a9157611a916157cb565b9050602002016020810190611aa691906153d1565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611ae8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b0c91906157df565b1115611b4157611b41838383818110611b2757611b276157cb565b9050602002016020810190611b3c91906153d1565b6130c4565b600101611a64565b505050565b5f546001600160a01b03163314611b775760405162461bcd60e51b815260040161167390615779565b6001600160a01b03919091165f908152602c60205260409020805460ff1916911515919091179055565b5f611bad848484613191565b6001600160a01b0384165f9081526002602090815260408083203384529091529020545f1914611c29576001600160a01b0384165f908152600260209081526040808320338452909152902054611c0590839061580a565b6001600160a01b0385165f9081526002602090815260408083203384529091529020555b5060019392505050565b5f546001600160a01b03163314611c5c5760405162461bcd60e51b815260040161167390615779565b6064811115611c985760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611673565b603755565b5f546001600160a01b03163314611cc65760405162461bcd60e51b815260040161167390615779565b602e55565b5f546001600160a01b03163314611cf45760405162461bcd60e51b815260040161167390615779565b604155565b5f546001600160a01b0316331480611d1b57506003546001600160a01b031633145b611d23575f80fd5b80516024546001600160a01b03165f805b83811015611e4757602b5f868381518110611d5157611d516157cb565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f209150826001600160a01b03166370a08231868381518110611d9b57611d9b6157cb565b60200260200101516040518263ffffffff1660e01b8152600401611dce91906001600160a01b0391909116815260200190565b602060405180830381865afa158015611de9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0d91906157df565b611e1890600161581d565b82558451611e3f90869083908110611e3257611e326157cb565b60200260200101516130c4565b600101611d34565b5050505050565b5f546001600160a01b03163314611e775760405162461bcd60e51b815260040161167390615779565b602d805460ff1916911515919091179055565b6001600160a01b0381165f908152600d602052604081205460ff1615611eb257506001919050565b505f919050565b919050565b5f546001600160a01b03163314611ee75760405162461bcd60e51b815260040161167390615779565b803b63ffffffff1615611f3c5760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e7472616374200000000000006044820152606401611673565b600480546001600160a01b039092166001600160a01b0319909216821790555f908152600c60205260409020805460ff19166001179055565b5f546001600160a01b03163314611f9e5760405162461bcd60e51b815260040161167390615779565b62030d408110158015611fb45750621e84808111155b611ff65760405162461bcd60e51b8152602060048201526013602482015272746f6f2068696768206f7220746f6f206c6f7760681b6044820152606401611673565b603155565b5f546001600160a01b031633146120245760405162461bcd60e51b815260040161167390615779565b602454600160b01b900460ff166120735760405162461bcd60e51b81526020600482015260136024820152721c995dd85c99131a5cdd08191a5cd8589b1959606a1b6044820152606401611673565b5f5b82811015611a045781600d5f868685818110612093576120936157cb565b90506020020160208101906120a891906153d1565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101612075565b6001600160a01b038181165f818152602b6020526040808220546024805492516370a0823160e01b81526004810195909552909492938493849316916370a082319101602060405180830381865afa158015612135573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215991906157df565b6001600160a01b039095165f908152603d6020908152604080832054602b90925290912060010154949660ff918216959091169350915050565b336121a55f546001600160a01b031690565b6001600160a01b031614806121c457506003546001600160a01b031633145b6122105760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79206f776e6572206f72206d61726b6574696e672077616c6c657400006044820152606401611673565b604355565b5f546001600160a01b0316331461223e5760405162461bcd60e51b815260040161167390615779565b602a55565b5f546001600160a01b0316331461226c5760405162461bcd60e51b815260040161167390615779565b6024805460ff60c01b19169055565b6024545f906001600160a01b0383811691161480156122a457506024546001600160a01b031633145b80156122b95750602654600160a01b900460ff165b1561230c576024546001600160a01b03165f9081526001602052604090205461230c5760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b6044820152606401611673565b506001600160a01b03165f9081526001602052604090205490565b5f546001600160a01b031633146123505760405162461bcd60e51b815260040161167390615779565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146123c15760405162461bcd60e51b815260040161167390615779565b80156123f757601c54601b54601a546019546123dd919061581d565b6123e7919061581d565b6123f1919061581d565b60325550565b5f6032555b50565b5f546001600160a01b031633146124285760405162461bcd60e51b815260040161167390615779565b603355565b5f546001600160a01b031633146124565760405162461bcd60e51b815260040161167390615779565b5f602355565b5f546001600160a01b031633146124855760405162461bcd60e51b815260040161167390615779565b600a55565b5f546001600160a01b031633146124b35760405162461bcd60e51b815260040161167390615779565b803b63ffffffff16156125085760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e7472616374200000000000006044820152606401611673565b600380546001600160a01b039092166001600160a01b0319909216821790555f908152600c60205260409020805460ff19166001179055565b5f546001600160a01b0316331461256a5760405162461bcd60e51b815260040161167390615779565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146125bd5760405162461bcd60e51b815260040161167390615779565b601f805460ff19169055565b5f546001600160a01b031633146125f25760405162461bcd60e51b815260040161167390615779565b603255565b6060600680546117c990615799565b5f546001600160a01b0316331461262f5760405162461bcd60e51b815260040161167390615779565b602f805460ff19166001179055565b5f546001600160a01b031633146126675760405162461bcd60e51b815260040161167390615779565b603a54156126a65760405162461bcd60e51b815260206004820152600c60248201526b0737461727465644164644c560a41b6044820152606401611673565b43603a55565b602581815481106126bb575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f546001600160a01b03163314806126f657506003546001600160a01b031633145b6126fe575f80fd5b6001600160a01b039091165f908152602b6020526040902055565b5f546001600160a01b031633146127425760405162461bcd60e51b815260040161167390615779565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b5f61189d338484613191565b5f546001600160a01b031633146127a15760405162461bcd60e51b815260040161167390615779565b602454600160c81b900460ff166127f05760405162461bcd60e51b81526020600482015260136024820152721d185e0818da185b99d948191a5cd8589b1959606a1b6044820152606401611673565b81815f818110612802576128026157cb565b60200291909101356015555081816001818110612821576128216157cb565b60200291909101356016555081816002818110612840576128406157cb565b6020029190910135601755508181600381811061285f5761285f6157cb565b6020029190910135601855508181600481811061287e5761287e6157cb565b6020029190910135601955508181600581811061289d5761289d6157cb565b6020029190910135601a5550818160068181106128bc576128bc6157cb565b6020029190910135601b5550818160078181106128db576128db6157cb565b6020029190910135601c55505050565b5f546001600160a01b031633146129145760405162461bcd60e51b815260040161167390615779565b603455565b5f546001600160a01b031633148061293b57506003546001600160a01b031633145b6129715760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b6044820152606401611673565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303815f875af11580156129bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e19190615830565b506003546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015611a04573d5f803e3d5ffd5b5f546001600160a01b03163314612a415760405162461bcd60e51b815260040161167390615779565b600955565b5f546001600160a01b03163314612a6f5760405162461bcd60e51b815260040161167390615779565b603f55565b5f805f8060245f9054906101000a90046001600160a01b031690505f80826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612acd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af19190615861565b506011546001600160701b039283169450911691506001600160a01b031630811015612b2257829650819550612b29565b8196508295505b602480546040516370a0823160e01b81526001600160a01b039182166004820152908316916370a082319101602060405180830381865afa158015612b70573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b9491906157df565b945050505050909192565b5f546001600160a01b03163314612bc85760405162461bcd60e51b815260040161167390615779565b603680546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314612c135760405162461bcd60e51b815260040161167390615779565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314612c5e5760405162461bcd60e51b815260040161167390615779565b604255565b5f546001600160a01b03163314612c8c5760405162461bcd60e51b815260040161167390615779565b6064811115612cc85760405162461bcd60e51b81526020600482015260086024820152670e8dede40daeac6d60c31b6044820152606401611673565b603955565b5f546001600160a01b03163314612cf65760405162461bcd60e51b815260040161167390615779565b6003811115612d3c5760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401611673565b602755565b5f546001600160a01b03163314612d6a5760405162461bcd60e51b815260040161167390615779565b602f805460ff19169055565b5f546001600160a01b03163314612d9f5760405162461bcd60e51b815260040161167390615779565b60268054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b03163314612de65760405162461bcd60e51b815260040161167390615779565b80516024546001600160a01b03165f805b83811015611e4757602b5f868381518110612e1457612e146157cb565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f209150826001600160a01b03166370a08231868381518110612e5e57612e5e6157cb565b60200260200101516040518263ffffffff1660e01b8152600401612e9191906001600160a01b0391909116815260200190565b602060405180830381865afa158015612eac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed091906157df565b612edb90600161581d565b82556001808301805460ff191690911790558451612f0590869083908110611e3257611e326157cb565b600101612df7565b5f546001600160a01b03163314612f365760405162461bcd60e51b815260040161167390615779565b6001600160a01b038116612f775760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401611673565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314612ff95760405162461bcd60e51b815260040161167390615779565b5f5b83811015611e475761300e82600a615982565b613018908461598d565b60305f87878581811061302d5761302d6157cb565b905060200201602081019061304291906153d1565b6001600160a01b0316815260208101919091526040015f2055600101612ffb565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b803b80156130d0575050565b6001600160a01b0382165f908152603c6020526040812054900361318d57603b54158061312c5750816001600160a01b0316603b5f81548110613115576131156157cb565b5f918252602090912001546001600160a01b031614155b1561318d57603b80546001600160a01b0384165f818152603c60205260408120839055600183018455929092527fbbe3212124853f8b0084a66a2d057c2966e251e132af3691db153ab65f0d1a4d0180546001600160a01b03191690911790555b5050565b6001600160a01b0383165f90815260016020526040902054818110156131ec5760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401611673565b5f6131f685611e8a565b11156132355760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b6044820152606401611673565b60135460ff161561324b57611e47848484613b3e565b6001600160a01b0384165f908152600c602052604090205460ff1615801561328b57506001600160a01b0383165f908152600c602052604090205460ff16155b80156132a05750602654600160a81b900460ff165b80156132ad57505f602754115b80156132f157506001600160a01b0384165f9081526012602052604090205460ff16806132f157506001600160a01b0383165f9081526012602052604090205460ff165b1561332057816133008561227b565b036133205760275461331390600161598d565b61331d908361580a565b91505b6023541580156133395750602454600160a01b900460ff165b15613414576001600160a01b0384165f908152600c602052604090205460ff1615801561337e57506001600160a01b0383165f908152600c602052604090205460ff16155b80156133a257506001600160a01b0384165f9081526012602052604090205460ff16155b80156133c657506001600160a01b0383165f9081526012602052604090205460ff16155b1561341457823b63ffffffff16156134145760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b6044820152606401611673565b6001600160a01b0383165f9081526012602052604081205481908190819081908190819060ff1680156134555750335f908152602c602052604090205460ff165b801561346957506001600160a01b038b1632145b1561352b5761347789613bf1565b90505f8111801561348d575063ffffffff8b3b16155b1561352b576001600160a01b038b165f908152602b602052604081208054909350829184916134bd90849061581d565b90915550508154604080516001600160a01b038e1681526020810184905280820192909252517f44cc9391cdbb87171cecca6d448d00dc675c45f1e1c81038a5c1cc83c9ffbf079181900360600190a1600192506023545f0361352b576001828101805460ff191690911790555b6001600160a01b038b165f9081526012602052604081205460ff16156135df57602d5460ff16156135665761355f8a613c58565b9050613585565b602e546001036135795761355f8a613d77565b6135828a613e41565b90505b80156135df576001600160a01b038b165f908152602b60205260409020548111156135ae575f80fd5b6001600160a01b038b165f908152602b6020526040812080548392906135d590849061580a565b9091555060019550505b602454600160a01b900460ff1680156135f85750602354155b801561361c57506001600160a01b038c165f908152600c602052604090205460ff16155b801561364057506001600160a01b038b165f908152600c602052604090205460ff16155b156137a7576001600160a01b038b165f9081526012602052604090205460ff1661374457602f5460ff166136a55760405162461bcd60e51b815260206004820152600c60248201526b63616e7420627579206e6f7760a01b6044820152606401611673565b6001600160a01b038b165f908152603060205260409020548a6136c78d61227b565b6136d1919061581d565b11156137085760405162461bcd60e51b815260040161167390602080825260049082015263042dac2f60e31b604082015260600190565b84156137445760405162461bcd60e51b815260206004820152600b60248201526a63616e742072656d6f766560a81b6044820152606401611673565b6001600160a01b038b165f9081526012602052604090205460ff16156137a757603a545f1080156137725750835b6137a75760405162461bcd60e51b8152600401611673906020808252600490820152630858591960e21b604082015260600190565b6001600160a01b038c165f9081526012602052604090205460ff16806137e457506001600160a01b038b165f9081526012602052604090205460ff165b15613a5b576001600160a01b038c165f908152600c602052604090205460ff1615801561382957506001600160a01b038b165f908152600c602052604090205460ff16155b15613a3657602454600160a01b900460ff1680156138505750602454600160a81b900460ff165b801561386a5750600854602354613867919061581d565b43105b801561388e57506001600160a01b038b165f9081526012602052604090205460ff16155b156138b6576001600160a01b038b165f908152600d60205260409020805460ff191660011790555b6001600160a01b038b165f9081526012602052604090205460ff1615613a205760135460ff161580156138e7575083155b15613a2057305f90815260016020526040902054602a54811115613a1e576013805460ff191660011790556026546040805163159be9e360e31b815290516001600160a01b039092169163acdf4f18916004808201925f9290919082900301818387803b158015613956575f80fd5b505af1925050508015613967575060015b613994576040517f3f5028e8956709d2b943835f052a15fd3c70faecef3449e437edd6d7384ac6df905f90a15b6013805460ff19169055601a54601b546019546016546017546015545f95949392916139bf9161581d565b6139c9919061581d565b6139d3919061581d565b6139dd919061581d565b6139e7919061581d565b90505f60646029548e6139fa919061598d565b613a0491906159a4565b905082811115613a115750815b613a1b8183613f0f565b50505b505b83158015613a2c575084155b15613a3657600197505b6001600160a01b038b165f9081526012602052604090205460ff1615613a5b57600196505b6001600160a01b038c165f9081526012602052604090205460ff16158015613a9b57506001600160a01b038b165f9081526012602052604090205460ff16155b15613aa557600195505b613ab58c8c8c8b8b8b8a8c61462c565b6001600160a01b038c163014801590613b0657506001600160a01b038c165f9081526012602052604090205460ff1680613b0657506001600160a01b038b165f9081526012602052604090205460ff165b15613b3057838015613b1757505f8a115b15613b2557613b258c6130c4565b613b30603154614a62565b505050505050505050505050565b6001600160a01b0383165f90815260016020526040812080548391908390613b6790849061580a565b90915550506001600160a01b0383165f9081526001602052604081208054849290613b9390849061581d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613bdf91815260200190565b60405180910390a35060019392505050565b5f805f80613bfd612a74565b9250925092505f8084118015613c1257505f83115b15613c2f5782613c22858861598d565b613c2c91906159a4565b90505b613c39818561581d565b8210613c4f57613c4b82878686614eb4565b5094505b50505050919050565b5f805f80613c64612a74565b92509250925082811015613d26576024546001600160a01b03165f90815260016020526040902054613c9790869061580a565b60245f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ce7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d0b91906157df565b613d15908761598d565b613d1f91906159a4565b9350613d6f565b5f8084118015613d3557505f83115b15613c4f57613d44868461580a565b613d4e858861598d565b613d5891906159a4565b9050613d64848261581d565b821015613c4f575f80fd5b505050919050565b5f805f613d82612a74565b9250509150818111613e3a576024548490613da5906001600160a01b031661227b565b613daf919061580a565b60245f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e2391906157df565b613e2d908661598d565b613e3791906159a4565b92505b5050919050565b5f805f613e4c612a74565b9250509150818111613e3a576024546001908590613e72906001600160a01b031661227b565b613e7c919061580a565b613e86919061580a565b60245f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ed6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613efa91906157df565b613f04908661598d565b613e2d90600161581d565b6013805460ff19166001179055801580613f27575081155b61461e575f601654601a54613f3c919061581d565b90505f826002613f4c848761598d565b613f5691906159a4565b613f6091906159a4565b90505f613f6e6002846159a4565b613f78908561580a565b6011546040805160028082526060820183529394506001600160a01b03909216925f929160208301908036833701905050905030815f81518110613fbe57613fbe6157cb565b6001600160a01b039283166020918202929092010152601154825191169082906001908110613fef57613fef6157cb565b6001600160a01b03928316602091820292909201015260105416635c11d795614018868a61580a565b60135460405160e084901b6001600160e01b031916815261405192915f91879161010090046001600160a01b03169042906004016159c3565b5f604051808303815f87803b158015614068575f80fd5b505af1925050508015614079575060015b6140b1576040515f81527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6013546040516370a0823160e01b81526001600160a01b03610100909204821660048201525f918416906370a0823190602401602060405180830381865afa1580156140ff573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061412391906157df565b905080156141ac576013546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd906064016020604051808303815f875af1158015614186573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141aa9190615830565b505b5f8460026141ba898561598d565b6141c491906159a4565b6141ce91906159a4565b90505f856019546015546141e2919061581d565b6141ec908561598d565b6141f691906159a4565b90505f81614204848661580a565b61420e919061580a565b90505f606460395483614221919061598d565b61422b91906159a4565b90505f60646038548561423e919061598d565b61424891906159a4565b90505f614255828661580a565b90508115614394575f60646037548461426e919061598d565b61427891906159a4565b60035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192508b169063a9059cbb906044016020604051808303815f875af11580156142ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142ee9190615830565b506004546001600160a01b03808c169163a9059cbb911661430f848761580a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015614357573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061437b9190615830565b508260355f82825461438d919061581d565b9091555050505b80156144105760265460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101839052908a169063a9059cbb906044016020604051808303815f875af11580156143ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061440e9190615830565b505b5f8b11801561441e57505f86115b156144f35760105460115460365460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018f9052606481018a90525f6084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303815f875af19250505080156144be575060408051601f3d908101601f191682019092526144bb91810190615a34565b60015b6144ef576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c905f90a16144f3565b5050505b8215614611576040805160028082526060820183525f92602083019080368337505060115482519293506001600160a01b0316918391505f90614538576145386157cb565b6001600160a01b039283166020918202929092010152602254825191169082906001908110614569576145696157cb565b6001600160a01b039283166020918202929092010152601054604051635c11d79560e01b8152911690635c11d795906145ae9087905f908690309042906004016159c3565b5f604051808303815f87803b1580156145c5575f80fd5b505af19250505080156145d6575060015b61460f57604051600b81527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b505b5050505050505050505050505b50506013805460ff19169055565b6001600160a01b0388165f9081526001602052604090205461464f90879061580a565b6001600160a01b0389165f9081526001602052604081209190915585156147c2575f851561469b57601a54601b5460195461468a919061581d565b614694919061581d565b9050614722565b6017546016546015546146ae919061581d565b6146b8919061581d565b602454909150600160b81b900460ff1680156146d557505f600954115b15614722576009548811156147225760405162461bcd60e51b81526020600482015260136024820152721bdd995c881b585e08189d5e48185b5bdd5b9d606a1b6044820152606401611673565b5f612710614730838b61598d565b61473a91906159a4565b905080156147595761474c818461581d565b92506147598b3083615190565b5f87614781576127106018548b614770919061598d565b61477a91906159a4565b905061479f565b612710601c548b614792919061598d565b61479c91906159a4565b90505b80156147be576147af818561581d565b93506147be8c61dead83615190565b5050505b8380156147e757506001600160a01b0389165f908152600c602052604090205460ff16155b801561480b57506001600160a01b0388165f908152600c602052604090205460ff16155b1561484d575f61271060325489614822919061598d565b61482c91906159a4565b9050801561484b5761483e818361581d565b915061484b8a3083615190565b505b82801561487257506001600160a01b0389165f908152600c602052604090205460ff16155b801561489657506001600160a01b0388165f908152600c602052604090205460ff16155b156148d8575f612710603354896148ad919061598d565b6148b791906159a4565b905080156148d6576148c9818361581d565b91506148d68a3083615190565b505b8180156148fd57506001600160a01b0389165f908152600c602052604090205460ff16155b801561492157506001600160a01b0388165f908152600c602052604090205460ff16155b15614988576001600160a01b0388165f908152602b602052604090206001015460ff1615614988575f6127106034548961495b919061598d565b61496591906159a4565b9050801561498657614977818361581d565b91506149868a61dead83615190565b505b6001600160a01b0388165f908152600e602052604090205460ff161580156149b95750602454600160c01b900460ff165b80156149c657505f600a54115b15614a4357600a546001600160a01b0389165f9081526001602052604090205482906149f3908a9061581d565b6149fd919061580a565b1115614a435760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b6044820152606401611673565b614a578989614a52848b61580a565b615190565b505050505050505050565b43604154604054614a73919061581d565b1115614a7c5750565b6021546022546040516370a0823160e01b81523060048201526101009092046001600160a01b03908116929116905f9083906370a0823190602401602060405180830381865afa158015614ad2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614af691906157df565b9050603f54811015614b085750505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015614b4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b7091906157df565b90505f60245f9054906101000a90046001600160a01b031690505f816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614bc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614beb91906157df565b603b549091505f908190819081908180805a90505b8e83108015614c0e57508382105b15614e9f5783603e5410614c21575f603e555b603b603e5481548110614c3657614c366157cb565b5f9182526020808320909101546001600160a01b0316808352602b90915260409091205490985096508615801590614c8657506001600160a01b0388165f908152603d602052604090205460ff16155b15614e5e5788614c96888e61598d565b614ca091906159a4565b955088614cad888d61598d565b614cb791906159a4565b945088871115614d0f57604080516001600160a01b038a168152602081018990529081018a90527f9202bb21571d446be61a9c0579359dc3482be9056a94e6445002c3fccdb50e3b9060600160405180910390a15f95505b8515614e5e576042548610614d6557604080516001600160a01b038a168152602081018890527f36c15293c9e7302c2586d095c4e17021a9854f4fe555e130ec6174ff8a50a0c2910160405180910390a1614e5e565b6021545f90614d849061010090046001600160a01b03168a8984615206565b905080614de557602154604080516001600160a01b0361010090930483168152918b16602083015281018890524260608201527f4dfbd81b479abc934b14d8e3b7143a9422dfa2068ece06c632b0afdd07cf6aee9060800160405180910390a15b6022545f90614dff906001600160a01b03168b8984615206565b905080614e5b57602254604080516001600160a01b039283168152918c16602083015281018890524260608201527f4dfbd81b479abc934b14d8e3b7143a9422dfa2068ece06c632b0afdd07cf6aee9060800160405180910390a15b50505b5a614e69908261580a565b614e73908461581d565b92505a603e80549192505f614e8783615a5f565b91905055508180614e9790615a5f565b925050614c00565b50504360405550505050505050505050505050565b5f805f60245f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614f07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614f2b91906157df565b90505f60105f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015614f7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614fa29190615a77565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015614fdd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906150019190615a77565b60245460408051637464fc3d60e01b815290519293506001600160a01b038085161515935f9390911691637464fc3d9160048083019260209291908290030181865afa158015615053573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061507791906157df565b90508115615118578015615118575f615098615093898b61598d565b61532e565b90505f6150a48361532e565b905080821115615115575f6150b9828461580a565b6150c3908861598d565b6150ce90600861598d565b90505f6150dc83600861598d565b6150e785601161598d565b6150f1919061581d565b90506150fd81836159a4565b985088156151125761510f898961581d565b97505b50505b50505b5f615123898c61580a565b9050845f0361514d576103e861513c6150938c8461598d565b615146919061580a565b9650615182565b61517f8961515b878461598d565b61516591906159a4565b89615170888e61598d565b61517a91906159a4565b61539b565b96505b505050505094509492505050565b6001600160a01b0382165f908152600160205260409020546151b390829061581d565b6001600160a01b038084165f8181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130b79085815260200190565b5f805f866001600160a01b031663a9059cbb878760405160240161523f9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516152789190615a92565b5f604051808303815f865af19150503d805f81146152b1576040519150601f19603f3d011682016040523d82523d5f602084013e6152b6565b606091505b50915091508315615324578180156152e65750805115806152e65750808060200190518101906152e69190615830565b6153245760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401611673565b5095945050505050565b5f600382111561538d5750805f6153466002836159a4565b61535190600161581d565b90505b818110156153875790508060028161536c81866159a4565b615376919061581d565b61538091906159a4565b9050615354565b50919050565b8115611eb957506001919050565b5f8183106153a957816153ab565b825b9392505050565b6001600160a01b03811681146123fc575f80fd5b8035611eb9816153b2565b5f602082840312156153e1575f80fd5b81356153ab816153b2565b80151581146123fc575f80fd5b5f806040838503121561540a575f80fd5b8235615415816153b2565b91506020830135615425816153ec565b809150509250929050565b5f60208284031215615440575f80fd5b5035919050565b5f5b83811015615461578181015183820152602001615449565b50505f910152565b602081525f8251806020840152615487816040850160208701615447565b601f01601f19169190910160400192915050565b5f602082840312156154ab575f80fd5b81356153ab816153ec565b5f80604083850312156154c7575f80fd5b82356154d2816153b2565b946020939093013593505050565b5f8083601f8401126154f0575f80fd5b50813567ffffffffffffffff811115615507575f80fd5b6020830191508360208260051b8501011115615521575f80fd5b9250929050565b5f805f6040848603121561553a575f80fd5b833567ffffffffffffffff811115615550575f80fd5b61555c868287016154e0565b9094509250506020840135615570816153ec565b809150509250925092565b5f806020838503121561558c575f80fd5b823567ffffffffffffffff8111156155a2575f80fd5b6155ae858286016154e0565b90969095509350505050565b5f805f606084860312156155cc575f80fd5b83356155d7816153b2565b925060208401356155e7816153b2565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b5f602080838503121561561d575f80fd5b823567ffffffffffffffff80821115615634575f80fd5b818501915085601f830112615647575f80fd5b813581811115615659576156596155f8565b8060051b604051601f19603f8301168101818110858211171561567e5761567e6155f8565b60405291825284820192508381018501918883111561569b575f80fd5b938501935b828510156156c0576156b1856153c6565b845293850193928501926156a0565b98975050505050505050565b5f805f606084860312156156de575f80fd5b83356156e9816153b2565b9250602084013591506040840135615570816153b2565b5f8060408385031215615711575f80fd5b823561571c816153b2565b91506020830135615425816153b2565b5f805f806060858703121561573f575f80fd5b843567ffffffffffffffff811115615755575f80fd5b615761878288016154e0565b90989097506020870135966040013595509350505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600181811c908216806157ad57607f821691505b60208210810361538757634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156157ef575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156118a1576118a16157f6565b808201808211156118a1576118a16157f6565b5f60208284031215615840575f80fd5b81516153ab816153ec565b80516001600160701b0381168114611eb9575f80fd5b5f805f60608486031215615873575f80fd5b61587c8461584b565b925061588a6020850161584b565b9150604084015163ffffffff81168114615570575f80fd5b600181815b808511156158dc57815f19048211156158c2576158c26157f6565b808516156158cf57918102915b93841c93908002906158a7565b509250929050565b5f826158f2575060016118a1565b816158fe57505f6118a1565b8160018114615914576002811461591e5761593a565b60019150506118a1565b60ff84111561592f5761592f6157f6565b50506001821b6118a1565b5060208310610133831016604e8410600b841016171561595d575081810a6118a1565b61596783836158a2565b805f190482111561597a5761597a6157f6565b029392505050565b5f6153ab83836158e4565b80820281158282048414176118a1576118a16157f6565b5f826159be57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015615a135784516001600160a01b0316835293830193918301916001016159ee565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215615a46575f80fd5b8351925060208401519150604084015190509250925092565b5f60018201615a7057615a706157f6565b5060010190565b5f60208284031215615a87575f80fd5b81516153ab816153b2565b5f8251615aa3818460208701615447565b919091019291505056fea264697066735822122016e88477d6177b0c6548c058fe7a5140e68ac6f579f8bf4a1baef5d9d70e07ab64736f6c63430008180033

Deployed Bytecode Sourcemap

7562:45651:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44610:142;;;;;;;;;;;;;:::i;:::-;;22170:44;;;;;;;;;;-1:-1:-1;22170:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;706:14:1;;699:22;681:41;;669:2;654:18;22170:44:0;;;;;;;;8038:45;;;;;;;;;;-1:-1:-1;8038:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9371:29;;;;;;;;;;-1:-1:-1;9371:29:0;;;;-1:-1:-1;;;9371:29:0;;;;;;22344:31;;;;;;;;;;-1:-1:-1;22344:31:0;;;;;;;;53091:119;;;;;;;;;;-1:-1:-1;53091:119:0;;;;;:::i;:::-;;:::i;17762:163::-;;;;;;;;;;-1:-1:-1;17762:163:0;;;;;:::i;:::-;;:::i;46746:87::-;;;;;;;;;;;;;:::i;14392:94::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16698:97::-;;;;;;;;;;-1:-1:-1;16698:97:0;;;;;:::i;:::-;;:::i;8593:28::-;;;;;;;;;;;;;;;;;;;2476:25:1;;;2464:2;2449:18;8593:28:0;2330:177:1;15466:184:0;;;;;;;;;;-1:-1:-1;15466:184:0;;;;;:::i;:::-;;:::i;24575:26::-;;;;;;;;;;-1:-1:-1;24575:26:0;;;;;;;;39180:155;;;;;;;;;;-1:-1:-1;39180:155:0;;;;;:::i;:::-;;:::i;46940:87::-;;;;;;;;;;;;;:::i;16388:68::-;;;;;;;;;;-1:-1:-1;16388:68:0;;;;;:::i;:::-;;:::i;44851:223::-;;;;;;;;;;-1:-1:-1;44851:223:0;;;;;:::i;:::-;;:::i;8999:23::-;;;;;;;;;;-1:-1:-1;8999:23:0;;;;;;;-1:-1:-1;;;;;8999:23:0;;;;;;-1:-1:-1;;;;;3939:32:1;;;3921:51;;3909:2;3894:18;8999:23:0;3775:203:1;8965:25:0;;;;;;;;;;-1:-1:-1;8965:25:0;;;;;;;;8883:31;;;;;;;;;;-1:-1:-1;8883:31:0;;;;;;;;8921:35;;;;;;;;;;;;;;;;14598:95;;;;;;;;;;-1:-1:-1;14678:7:0;;14598:95;;16657:32;;;;;;;;;;-1:-1:-1;16657:32:0;;;;-1:-1:-1;;;16657:32:0;;;;;;44530:72;;;;;;;;;;;;;:::i;47973:266::-;;;;;;;;;;-1:-1:-1;47973:266:0;;;;;:::i;:::-;;:::i;8227:30::-;;;;;;;;;;-1:-1:-1;8227:30:0;;;;-1:-1:-1;;;;;8227:30:0;;;49128:48;;;;;;;;;;;;;;;;22221:115;;;;;;;;;;-1:-1:-1;22221:115:0;;;;;:::i;:::-;;:::i;15658:404::-;;;;;;;;;;-1:-1:-1;15658:404:0;;;;;:::i;:::-;;:::i;8628:26::-;;;;;;;;;;;;;;;;38957:171;;;;;;;;;;-1:-1:-1;38957:171:0;;;;;:::i;:::-;;:::i;7902:17::-;;;;;;;;;;;;;;;;14494:96;;;;;;;;;;-1:-1:-1;14573:9:0;;14494:96;;14701:20;;;;;;;;;;-1:-1:-1;14701:20:0;;;;-1:-1:-1;;;14701:20:0;;;;;;22526:127;;;;;;;;;;-1:-1:-1;22526:127:0;;;;;:::i;:::-;;:::i;34560:30::-;;;;;;;;;;;;;;;;48835:122;;;;;;;;;;-1:-1:-1;48835:122:0;;;;;:::i;:::-;;:::i;8661:27::-;;;;;;;;;;;;;;;;8294:45;;;;;;;;;;-1:-1:-1;8294:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8799:46;;;;;;;;;;-1:-1:-1;8799:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;8140;;;;;;;;;;-1:-1:-1;8140:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21589:573;;;;;;;;;;-1:-1:-1;21589:573:0;;;;;:::i;:::-;;:::i;9102:24::-;;;;;;;;;;-1:-1:-1;9102:24:0;;;;-1:-1:-1;;;;;9102:24:0;;;44349:27;;;;;;;;;;;;;;;;22382:95;;;;;;;;;;-1:-1:-1;22382:95:0;;;;;:::i;:::-;;:::i;8473:47::-;;;;;;;;;;-1:-1:-1;8473:47:0;;;;-1:-1:-1;;;;;8473:47:0;;;16464:185;;;;;;;;;;-1:-1:-1;16464:185:0;;;;;:::i;:::-;;:::i;9063:30::-;;;;;;;;;;;;;;;;9268:27;;;;;;;;;;-1:-1:-1;9268:27:0;;;;-1:-1:-1;;;9268:27:0;;;;;;9477:43;;;;;;;;;;-1:-1:-1;9477:43:0;;;;-1:-1:-1;;;;;9477:43:0;;;43932:209;;;;;;;;;;-1:-1:-1;43932:209:0;;;;;:::i;:::-;;:::i;33937:221::-;;;;;;;;;;-1:-1:-1;33937:221:0;;;;;:::i;:::-;;:::i;46305:331::-;;;;;;;;;;-1:-1:-1;46305:331:0;;;;;:::i;:::-;;:::i;48785:41::-;;;;;;;;;;;;;;;;20207:391;;;;;;;;;;-1:-1:-1;20207:391:0;;;;;:::i;:::-;;:::i;:::-;;;;7312:25:1;;;7368:2;7353:18;;7346:34;;;;7423:14;;7416:22;7396:18;;;7389:50;;;;7482:14;7475:22;7470:2;7455:18;;7448:50;7299:3;7284:19;20207:391:0;7093:411:1;48965:45:0;;;;;;;;;;;;;;;;49183:206;;;;;;;;;;-1:-1:-1;49183:206:0;;;;;:::i;:::-;;:::i;17973:102::-;;;;;;;;;;-1:-1:-1;17973:102:0;;;;;:::i;:::-;;:::i;9029:27::-;;;;;;;;;;-1:-1:-1;9029:27:0;;;;-1:-1:-1;;;;;9029:27:0;;;7769:36;;;;;;;;;;-1:-1:-1;7769:36:0;;;;-1:-1:-1;;;;;7769:36:0;;;7999:30;;;;;;;;;;-1:-1:-1;7999:30:0;;;;;;;;46841:91;;;;;;;;;;;;;:::i;8763:27::-;;;;;;;;;;;;;;;;14821:263;;;;;;;;;;-1:-1:-1;14821:263:0;;;;;:::i;:::-;;:::i;3588:148::-;;;;;;;;;;;;;:::i;17355:344::-;;;;;;;;;;-1:-1:-1;17355:344:0;;;;;:::i;:::-;;:::i;34812:164::-;;;;;;;;;;-1:-1:-1;34812:164:0;;;;;:::i;:::-;;:::i;44764:79::-;;;;;;;;;;;;;:::i;47283:107::-;;;;;;;;;;-1:-1:-1;47283:107:0;;;;;:::i;:::-;;:::i;43718:206::-;;;;;;;;;;-1:-1:-1;43718:206:0;;;;;:::i;:::-;;:::i;17933:31::-;;;;;;;;;;;;;;;;8425:41;;;;;;;;;;-1:-1:-1;8425:41:0;;;;;;;-1:-1:-1;;;;;8425:41:0;;;7926:27;;;;;;;;;;;;;;;;38906:44;;;;;;;;;;;;;;;;16255:125;;;;;;;;;;-1:-1:-1;16255:125:0;;;;;:::i;:::-;;:::i;46644:94::-;;;;;;;;;;;;;:::i;3402:79::-;;;;;;;;;;-1:-1:-1;3440:7:0;3467:6;-1:-1:-1;;;;;3467:6:0;3402:79;;38732:37;;;;;;;;;;-1:-1:-1;38732:37:0;;;;-1:-1:-1;;;;;38732:37:0;;;34646:158;;;;;;;;;;-1:-1:-1;34646:158:0;;;;;:::i;:::-;;:::i;17707:38::-;;;;;;;;;;;;;;;;39343:39;;;;;;;;;;;;;;;;14286:98;;;;;;;;;;;;;:::i;8852:24::-;;;;;;;;;;;;;;;;24608:86;;;;;;;;;;;;;:::i;44385:137::-;;;;;;;;;;;;;:::i;9443:27::-;;;;;;;;;;-1:-1:-1;9443:27:0;;;;;:::i;:::-;;:::i;9337:::-;;;;;;;;;;-1:-1:-1;9337:27:0;;;;-1:-1:-1;;;9337:27:0;;;;;;20006:193;;;;;;;;;;-1:-1:-1;20006:193:0;;;;;:::i;:::-;;:::i;22485:34::-;;;;;;;;;;;;;;;;47035:118;;;;;;;;;;-1:-1:-1;47035:118:0;;;;;:::i;:::-;;:::i;15092:190::-;;;;;;;;;;-1:-1:-1;15092:190:0;;;;;:::i;:::-;;:::i;7962:30::-;;;;;;;;;;;;;;;;45577:720;;;;;;;;;;-1:-1:-1;45577:720:0;;;;;:::i;:::-;;:::i;34527:26::-;;;;;;;;;;;;;;;;8695:25;;;;;;;;;;;;;;;;9302:28;;;;;;;;;;-1:-1:-1;9302:28:0;;;;-1:-1:-1;;;9302:28:0;;;;;;8562:24;;;;;;;;;;;;;;;;34984:172;;;;;;;;;;-1:-1:-1;34984:172:0;;;;;:::i;:::-;;:::i;8090:43::-;;;;;;;;;;-1:-1:-1;8090:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24976:119;;;;;;;;;;-1:-1:-1;24976:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;25062:25:0;25036:7;25062:25;;;:19;:25;;;;;;;24976:119;8727:29;;;;;;;;;;;;;;;;47510:293;;;;;;;;;;-1:-1:-1;47510:293:0;;;;;:::i;:::-;;:::i;34597:40::-;;;;;;;;;;;;;;;;47161:114;;;;;;;;;;-1:-1:-1;47161:114:0;;;;;:::i;:::-;;:::i;52965:118::-;;;;;;;;;;-1:-1:-1;52965:118:0;;;;;:::i;:::-;;:::i;24915:54::-;;;;;;;;;;-1:-1:-1;24915:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;9235:26;;;;;;;;;;-1:-1:-1;9235:26:0;;;;-1:-1:-1;;;9235:26:0;;;;;;8529;;;;;;;;;;;;;;;;24035:499;;;;;;;;;;;;;:::i;:::-;;;;8838:25:1;;;8894:2;8879:18;;8872:34;;;;8922:18;;;8915:34;8826:2;8811:18;24035:499:0;8636:319:1;33895:35:0;;;;;;;;;;;;;;;;9407:27;;;;;;;;;;-1:-1:-1;9407:27:0;;;;-1:-1:-1;;;9407:27:0;;;;;;38778:120;;;;;;;;;;-1:-1:-1;38778:120:0;;;;;:::i;:::-;;:::i;17309:37::-;;;;;;;;;;-1:-1:-1;17309:37:0;;;;;;;;24796:111;;;;;;;;;;-1:-1:-1;24796:111:0;;;;;:::i;:::-;;:::i;15290:168::-;;;;;;;;;;-1:-1:-1;15290:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;15423:18:0;;;15396:7;15423:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15290:168;49017:103;;;;;;;;;;-1:-1:-1;49017:103:0;;;;;:::i;:::-;;:::i;39389:164::-;;;;;;;;;;-1:-1:-1;39389:164:0;;;;;:::i;:::-;;:::i;17104:31::-;;;;;;;;;;;;;;;;8264:23;;;;;;;;;;-1:-1:-1;8264:23:0;;;;-1:-1:-1;;;;;8264:23:0;;;17144:157;;;;;;;;;;-1:-1:-1;17144:157:0;;;;;:::i;:::-;;:::i;7728:34::-;;;;;;;;;;-1:-1:-1;7728:34:0;;;;-1:-1:-1;;;;;7728:34:0;;;24700:88;;;;;;;;;;;;;:::i;14730:83::-;;;;;;;;;;-1:-1:-1;14730:83:0;;;;;:::i;:::-;;:::i;48700:36::-;;;;;;;;;;;;;;;;39136:37;;;;;;;;;;;;;;;;38686;;;;;;;;;;;;;;;;21083:498;;;;;;;;;;-1:-1:-1;21083:498:0;;;;;:::i;:::-;;:::i;3744:214::-;;;;;;;;;;-1:-1:-1;3744:214:0;;;;;:::i;:::-;;:::i;25103:277::-;;;;;;;;;;-1:-1:-1;25103:277:0;;;;;:::i;:::-;;:::i;44610:142::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;;;;;;;;;44671:15:::1;::::0;44666:20;44658:45:::1;;;::::0;-1:-1:-1;;;44658:45:0;;10467:2:1;44658:45:0::1;::::0;::::1;10449:21:1::0;10506:2;10486:18;;;10479:30;-1:-1:-1;;;10525:18:1;;;10518:42;10577:18;;44658:45:0::1;10265:336:1::0;44658:45:0::1;44732:12;44714:15;:30:::0;44610:142::o;53091:119::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;53174:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;53174:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53091:119::o;17762:163::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;17846:8:::1;17858:1;17846:13:::0;17838:40:::1;;;::::0;-1:-1:-1;;;17838:40:0;;10808:2:1;17838:40:0::1;::::0;::::1;10790:21:1::0;10847:2;10827:18;;;10820:30;-1:-1:-1;;;10866:18:1;;;10859:44;10920:18;;17838:40:0::1;10606:338:1::0;17838:40:0::1;17889:17;:28:::0;17762:163::o;46746:87::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;46802:15:::1;:23:::0;;-1:-1:-1;;;;46802:23:0::1;::::0;;46746:87::o;14392:94::-;14440:13;14473:5;14466:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14392:94;:::o;16698:97::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;16765:13:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;16765:22:0::1;-1:-1:-1::0;;;;16765:22:0;;::::1;::::0;;;::::1;::::0;;16698:97::o;15466:184::-;15566:4;15583:37;15592:10;15604:7;15613:6;15583:8;:37::i;:::-;-1:-1:-1;15638:4:0;15466:184;;;;;:::o;39180:155::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;39274:3:::1;39262:8;:15;;39254:35;;;::::0;-1:-1:-1;;;39254:35:0;;11536:2:1;39254:35:0::1;::::0;::::1;11518:21:1::0;11575:1;11555:18;;;11548:29;-1:-1:-1;;;11593:18:1;;;11586:38;11641:18;;39254:35:0::1;11334:331:1::0;39254:35:0::1;39300:16;:27:::0;39180:155::o;46940:87::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;46996:15:::1;:23:::0;;-1:-1:-1;;;;46996:23:0::1;::::0;;46940:87::o;16388:68::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;16442:2:::1;:6:::0;16388:68::o;44851:223::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;44972:9:::1;44967:100;44987:15:::0;;::::1;44967:100;;;45049:6;45024:13;:22;45038:4;;45043:1;45038:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45024:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;45024:22:0;:31;;-1:-1:-1;;45024:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;45004:3:0::1;44967:100;;;;44851:223:::0;;;:::o;44530:72::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;44593:1:::1;44578:12;:16:::0;44530:72::o;47973:266::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;48059:9:::1;48054:178;48070:19:::0;;::::1;48054:178;;;48125:9;::::0;48161:1:::1;::::0;-1:-1:-1;;;;;48125:9:0::1;48115:30;48146:8:::0;;48155:1;48146:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;48115:43;::::0;-1:-1:-1;;;;;;48115:43:0::1;::::0;;;;;;-1:-1:-1;;;;;3939:32:1;;;48115:43:0::1;::::0;::::1;3921:51:1::0;3894:18;;48115:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;48111:110;;;48183:22;48193:8;;48202:1;48193:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;48183:9;:22::i;:::-;48091:3;;48054:178;;;;47973:266:::0;;:::o;22221:115::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22301:18:0;;;::::1;;::::0;;;:12:::1;:18;::::0;;;;:27;;-1:-1:-1;;22301:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22221:115::o;15658:404::-;15790:4;15807:36;15817:6;15825:9;15836:6;15807:9;:36::i;:::-;-1:-1:-1;;;;;15858:19:0;;8416:1;15858:19;;;:11;:19;;;;;;;;15878:10;15858:31;;;;;;;;-1:-1:-1;;15858:38:0;15854:179;;-1:-1:-1;;;;;15964:19:0;;;;;;:11;:19;;;;;;;;15984:10;15964:31;;;;;;;;:57;;16015:6;;15964:57;:::i;:::-;-1:-1:-1;;;;;15913:19:0;;;;;;:11;:19;;;;;;;;15933:10;15913:31;;;;;;;:108;15854:179;-1:-1:-1;16050:4:0;15658:404;;;;;:::o;38957:171::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;39059:3:::1;39047:8;:15;;39039:35;;;::::0;-1:-1:-1;;;39039:35:0;;11536:2:1;39039:35:0::1;::::0;::::1;11518:21:1::0;11575:1;11555:18;;;11548:29;-1:-1:-1;;;11593:18:1;;;11586:38;11641:18;;39039:35:0::1;11334:331:1::0;39039:35:0::1;39085:24;:35:::0;38957:171::o;22526:127::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;22619:15:::1;:26:::0;22526:127::o;48835:122::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;48916:22:::1;:33:::0;48835:122::o;21589:573::-;3440:7;3467:6;-1:-1:-1;;;;;3467:6:0;21682:10;:21;;:50;;-1:-1:-1;21721:11:0;;-1:-1:-1;;;;;21721:11:0;21707:10;:25;21682:50;21674:59;;;;;;21758:15;;21815:9;;-1:-1:-1;;;;;21815:9:0;21744:11;;21874:281;21894:3;21890:1;:7;21874:281;;;21926:9;:22;21936:8;21945:1;21936:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;21926:22:0;-1:-1:-1;;;;;21926:22:0;;;;;;;;;;;;21915:33;;21983:8;-1:-1:-1;;;;;21983:18:0;;22002:8;22011:1;22002:11;;;;;;;;:::i;:::-;;;;;;;21983:31;;;;;;;;;;;;;;-1:-1:-1;;;;;3939:32:1;;;;3921:51;;3909:2;3894:18;;3775:203;21983:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;22017:1;21983:35;:::i;:::-;21963:55;;22082:11;;22072:22;;22082:8;;22091:1;;22082:11;;;;;;:::i;:::-;;;;;;;22072:9;:22::i;:::-;22129:3;;21874:281;;;;21663:499;;;21589:573;:::o;22382:95::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;22448:12:::1;:21:::0;;-1:-1:-1;;22448:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22382:95::o;16464:185::-;-1:-1:-1;;;;;16544:20:0;;16520:7;16544:20;;;:11;:20;;;;;;;;16540:102;;;-1:-1:-1;16588:1:0;;16464:185;-1:-1:-1;16464:185:0:o;16540:102::-;-1:-1:-1;16629:1:0;;16464:185;-1:-1:-1;16464:185:0:o;16540:102::-;16464:185;;;:::o;43932:209::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;44277:18;;44324:8;;;44009:56:::1;;;::::0;-1:-1:-1;;;44009:56:0;;12588:2:1;44009:56:0::1;::::0;::::1;12570:21:1::0;12627:2;12607:18;;;12600:30;12666:28;12646:18;;;12639:56;12712:18;;44009:56:0::1;12386:350:1::0;44009:56:0::1;44076:13;:20:::0;;-1:-1:-1;;;;;44076:20:0;;::::1;-1:-1:-1::0;;;;;;44076:20:0;;::::1;::::0;::::1;::::0;;:13:::1;44107:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;44107:26:0::1;44076:20:::0;44107:26:::1;::::0;;43932:209::o;33937:221::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;34041:6:::1;34029:8;:18;;:41;;;;;34063:7;34051:8;:19;;34029:41;34007:110;;;::::0;-1:-1:-1;;;34007:110:0;;12943:2:1;34007:110:0::1;::::0;::::1;12925:21:1::0;12982:2;12962:18;;;12955:30;-1:-1:-1;;;13001:18:1;;;12994:49;13060:18;;34007:110:0::1;12741:343:1::0;34007:110:0::1;34128:11;:22:::0;33937:221::o;46305:331::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;46430:16:::1;::::0;-1:-1:-1;;;46430:16:0;::::1;;;46422:48;;;::::0;-1:-1:-1;;;46422:48:0;;13291:2:1;46422:48:0::1;::::0;::::1;13273:21:1::0;13330:2;13310:18;;;13303:30;-1:-1:-1;;;13349:18:1;;;13342:49;13408:18;;46422:48:0::1;13089:343:1::0;46422:48:0::1;46531:9;46526:103;46542:20:::0;;::::1;46526:103;;;46612:5;46584:11;:25;46596:9;;46606:1;46596:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46584:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;46584:25:0;:33;;-1:-1:-1;;46584:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;46564:3:0::1;46526:103;;20207:391:::0;-1:-1:-1;;;;;20369:18:0;;;20276:16;20369:18;;;:9;:18;;;;;;:27;20426:9;;;20419:36;;-1:-1:-1;;;20419:36:0;;;;;3921:51:1;;;;20369:27:0;;20276:16;;;;;;20426:9;;20419:27;;3894:18:1;20419:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20478:22:0;;;;;;;:13;:22;;;;;;;;;20539:9;:18;;;;;;20478:22;20576:14;;20207:391;;20478:22;;;;;20576:14;;;;-1:-1:-1;20207:391:0;-1:-1:-1;;20207:391:0:o;49183:206::-;49269:10;49258:7;3440;3467:6;-1:-1:-1;;;;;3467:6:0;;3402:79;49258:7;-1:-1:-1;;;;;49258:21:0;;:50;;;-1:-1:-1;49297:11:0;;-1:-1:-1;;;;;49297:11:0;49283:10;:25;49258:50;49250:93;;;;-1:-1:-1;;;49250:93:0;;13639:2:1;49250:93:0;;;13621:21:1;13678:2;13658:18;;;13651:30;13717:32;13697:18;;;13690:60;13767:18;;49250:93:0;13437:354:1;49250:93:0;49354:16;:27;49183:206::o;17973:102::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;18044:12:::1;:23:::0;17973:102::o;46841:91::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;46899:17:::1;:25:::0;;-1:-1:-1;;;;46899:25:0::1;::::0;;46841:91::o;14821:263::-;14922:9;;14887:7;;-1:-1:-1;;;;;14911:20:0;;;14922:9;;14911:20;:47;;;;-1:-1:-1;14949:9:0;;-1:-1:-1;;;;;14949:9:0;14935:10;:23;14911:47;:59;;;;-1:-1:-1;14962:8:0;;-1:-1:-1;;;14962:8:0;;;;14911:59;14907:134;;;15005:9;;-1:-1:-1;;;;;15005:9:0;15018:1;14995:20;;;:9;:20;;;;;;14987:42;;;;-1:-1:-1;;;14987:42:0;;13998:2:1;14987:42:0;;;13980:21:1;14037:1;14017:18;;;14010:29;-1:-1:-1;;;14055:18:1;;;14048:35;14100:18;;14987:42:0;13796:328:1;14987:42:0;-1:-1:-1;;;;;;15058:18:0;;;;;:9;:18;;;;;;;14821:263::o;3588:148::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;3695:1:::1;3679:6:::0;;3658:40:::1;::::0;-1:-1:-1;;;;;3679:6:0;;::::1;::::0;3658:40:::1;::::0;3695:1;;3658:40:::1;3726:1;3709:19:::0;;-1:-1:-1;;;;;;3709:19:0::1;::::0;;3588:148::o;17355:344::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;17470:6:::1;17466:226;;;17620:12;;17586:14;;17556:10;;17524:12;;:42;;;;:::i;:::-;:76;;;;:::i;:::-;:108;;;;:::i;:::-;17493:11;:139:::0;17355:344;:::o;17466:226::-:1;17679:1;17665:11;:15:::0;17466:226:::1;17355:344:::0;:::o;34812:164::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;34942:15:::1;:26:::0;34812:164::o;44764:79::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;44834:1:::1;44816:15;:19:::0;44764:79::o;47283:107::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;47357:15:::1;:25:::0;47283:107::o;43718:206::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;44277:18;;44324:8;;;43794:56:::1;;;::::0;-1:-1:-1;;;43794:56:0;;12588:2:1;43794:56:0::1;::::0;::::1;12570:21:1::0;12627:2;12607:18;;;12600:30;12666:28;12646:18;;;12639:56;12712:18;;43794:56:0::1;12386:350:1::0;43794:56:0::1;43861:11;:18:::0;;-1:-1:-1;;;;;43861:18:0;;::::1;-1:-1:-1::0;;;;;;43861:18:0;;::::1;::::0;::::1;::::0;;:11:::1;43890:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;43890:26:0::1;43861:18:::0;43890:26:::1;::::0;;43718:206::o;16255:125::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16341:22:0;;;::::1;;::::0;;;:14:::1;:22;::::0;;;;:31;;-1:-1:-1;;16341:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16255:125::o;46644:94::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;46703:19:::1;:27:::0;;-1:-1:-1;;46703:27:0::1;::::0;;46644:94::o;34646:158::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;34774:11:::1;:22:::0;34646:158::o;14286:98::-;14336:13;14369:7;14362:14;;;;;:::i;24608:86::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;24665:14:::1;:21:::0;;-1:-1:-1;;24665:21:0::1;24682:4;24665:21;::::0;;24608:86::o;44385:137::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;44447:12:::1;::::0;44442:17;44434:42:::1;;;::::0;-1:-1:-1;;;44434:42:0;;14331:2:1;44434:42:0::1;::::0;::::1;14313:21:1::0;14370:2;14350:18;;;14343:30;-1:-1:-1;;;14389:18:1;;;14382:42;14441:18;;44434:42:0::1;14129:336:1::0;44434:42:0::1;44502:12;44487;:27:::0;44385:137::o;9443:27::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9443:27:0;;-1:-1:-1;9443:27:0;:::o;20006:193::-;3440:7;3467:6;-1:-1:-1;;;;;3467:6:0;20091:10;:21;;:50;;-1:-1:-1;20130:11:0;;-1:-1:-1;;;;;20130:11:0;20116:10;:25;20091:50;20083:59;;;;;;-1:-1:-1;;;;;20153:18:0;;;;;;;:9;:18;;;;;:38;20006:193::o;47035:118::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47117:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;47117:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47035:118::o;15092:190::-;15195:4;15212:40;15222:10;15234:9;15245:6;15212:9;:40::i;45577:720::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;45668:15:::1;::::0;-1:-1:-1;;;45668:15:0;::::1;;;45660:47;;;::::0;-1:-1:-1;;;45660:47:0;;14672:2:1;45660:47:0::1;::::0;::::1;14654:21:1::0;14711:2;14691:18;;;14684:30;-1:-1:-1;;;14730:18:1;;;14723:49;14789:18;;45660:47:0::1;14470:343:1::0;45660:47:0::1;45732:7;;45740:1;45732:10;;;;;;;:::i;:::-;;;::::0;;;::::1;;45718:11;:24:::0;-1:-1:-1;45765:7:0;;45773:1:::1;45765:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;45753:9;:22:::0;-1:-1:-1;45802:7:0;;45810:1:::1;45802:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;45786:13;:26:::0;-1:-1:-1;45837:7:0;;45845:1:::1;45837:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;45823:11;:24:::0;-1:-1:-1;45875:7:0;;45883:1:::1;45875:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;45860:12;:25:::0;-1:-1:-1;45909:7:0;;45917:1:::1;45909:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;45896;:23:::0;-1:-1:-1;45947:7:0;;45955:1:::1;45947:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;45930:14;:27:::0;-1:-1:-1;45983:7:0;;45991:1:::1;45983:10:::0;;::::1;;;;;:::i;:::-;;;::::0;;;::::1;;45968:12;:25:::0;-1:-1:-1;;;45577:720:0:o;34984:172::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;35119:18:::1;:29:::0;34984:172::o;47510:293::-;47635:6;;-1:-1:-1;;;;;47635:6:0;47645:10;47635:20;;:49;;-1:-1:-1;47659:11:0;;-1:-1:-1;;;;;47659:11:0;47674:10;47659:25;47635:49;47627:69;;;;-1:-1:-1;;;47627:69:0;;15020:2:1;47627:69:0;;;15002:21:1;15059:1;15039:18;;;15032:29;-1:-1:-1;;;15077:18:1;;;15070:37;15124:18;;47627:69:0;14818:330:1;47627:69:0;47707:34;;-1:-1:-1;;;47707:34:0;;-1:-1:-1;;;;;15345:32:1;;;47707:34:0;;;15327:51:1;15394:18;;;15387:34;;;47707:22:0;;;;;15300:18:1;;47707:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;47752:11:0;;:43;;-1:-1:-1;;;;;47752:11:0;;;;47773:21;47752:43;;;;;:11;:43;:11;:43;47773:21;47752:11;:43;;;;;;;;;;;;;;;;;;;47161:114;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;47239:12:::1;:28:::0;47161:114::o;52965:118::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;53045:21:::1;:30:::0;52965:118::o;24035:499::-;24080:14;24096:13;24111:20;24144:18;24175:9;;;;;;;;;-1:-1:-1;;;;;24175:9:0;24144:41;;24197:7;24206:10;24221:8;-1:-1:-1;;;;;24221:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24277:8:0;;-1:-1:-1;;;;;24196:47:0;;;;-1:-1:-1;24196:47:0;;;-1:-1:-1;;;;;;24277:8:0;24321:4;24300:26;;24296:164;;;24352:2;24343:11;;24377:2;24369:10;;24296:164;;;24421:2;24412:11;;24446:2;24438:10;;24296:164;24516:9;;;24487:39;;-1:-1:-1;;;24487:39:0;;-1:-1:-1;;;;;24516:9:0;;;24487:39;;;3921:51:1;24487:28:0;;;;;;3894:18:1;24487:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24472:54;;24133:401;;;;24035:499;;;:::o;38778:120::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;38858:22:::1;:32:::0;;-1:-1:-1;;;;;;38858:32:0::1;-1:-1:-1::0;;;;;38858:32:0;;;::::1;::::0;;;::::1;::::0;;38778:120::o;24796:111::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;24871:12:::1;:28:::0;;-1:-1:-1;;;;;;24871:28:0::1;-1:-1:-1::0;;;;;24871:28:0;;;::::1;::::0;;;::::1;::::0;;24796:111::o;49017:103::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;49088:13:::1;:24:::0;49017:103::o;39389:164::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;39487:3:::1;39475:8;:15;;39467:36;;;::::0;-1:-1:-1;;;39467:36:0;;16532:2:1;39467:36:0::1;::::0;::::1;16514:21:1::0;16571:1;16551:18;;;16544:29;-1:-1:-1;;;16589:18:1;;;16582:38;16637:18;;39467:36:0::1;16330:331:1::0;39467:36:0::1;39514:20;:31:::0;39389:164::o;17144:157::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;17235:1:::1;17223:8;:13;;17215:44;;;::::0;-1:-1:-1;;;17215:44:0;;16868:2:1;17215:44:0::1;::::0;::::1;16850:21:1::0;16907:2;16887:18;;;16880:30;-1:-1:-1;;;16926:18:1;;;16919:48;16984:18;;17215:44:0::1;16666:342:1::0;17215:44:0::1;17270:12;:23:::0;17144:157::o;24700:88::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;24758:14:::1;:22:::0;;-1:-1:-1;;24758:22:0::1;::::0;;24700:88::o;14730:83::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;14793:8:::1;:12:::0;;;::::1;;-1:-1:-1::0;;;14793:12:0::1;-1:-1:-1::0;;;;14793:12:0;;::::1;::::0;;;::::1;::::0;;14730:83::o;21083:498::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;21180:15;;21237:9:::1;::::0;-1:-1:-1;;;;;21237:9:0::1;21166:11;::::0;21296:278:::1;21316:3;21312:1;:7;21296:278;;;21348:9;:22;21358:8;21367:1;21358:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21348:22:0::1;-1:-1:-1::0;;;;;21348:22:0::1;;;;;;;;;;;;21337:33;;21405:8;-1:-1:-1::0;;;;;21405:18:0::1;;21424:8;21433:1;21424:11;;;;;;;;:::i;:::-;;;;;;;21405:31;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3939:32:1;;;;3921:51;;3909:2;3894:18;;3775:203;21405:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;::::0;21439:1:::1;21405:35;:::i;:::-;21385:55:::0;;21472:4:::1;21455:14:::0;;::::1;:21:::0;;-1:-1:-1;;21455:21:0::1;::::0;;::::1;::::0;;21501:11;;21491:22:::1;::::0;21501:8;;21510:1;;21501:11;::::1;;;;;:::i;21491:22::-;21548:3;;21296:278;;3744:214:::0;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3833:22:0;::::1;3825:43;;;::::0;-1:-1:-1;;;3825:43:0;;17215:2:1;3825:43:0::1;::::0;::::1;17197:21:1::0;17254:1;17234:18;;;17227:29;-1:-1:-1;;;17272:18:1;;;17265:38;17320:18;;3825:43:0::1;17013:331:1::0;3825:43:0::1;3905:6;::::0;;3884:38:::1;::::0;-1:-1:-1;;;;;3884:38:0;;::::1;::::0;3905:6;::::1;::::0;3884:38:::1;::::0;::::1;3933:6;:17:::0;;-1:-1:-1;;;;;;3933:17:0::1;-1:-1:-1::0;;;;;3933:17:0;;;::::1;::::0;;;::::1;::::0;;3744:214::o;25103:277::-;3529:6;;-1:-1:-1;;;;;3529:6:0;3539:10;3529:20;3521:39;;;;-1:-1:-1;;;3521:39:0;;;;;;;:::i;:::-;25249:6:::1;25244:129;25257:19:::0;;::::1;25244:129;;;25352:9;25358:3:::0;25352:2:::1;:9;:::i;:::-;25343:18;::::0;:6;:18:::1;:::i;:::-;25308:19;:32;25328:8;;25337:1;25328:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25308:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;25308:32:0;:53;25278:3:::1;;25244:129;;16070:177:::0;-1:-1:-1;;;;;16155:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16207:32;;2476:25:1;;;16207:32:0;;2449:18:1;16207:32:0;;;;;;;;16070:177;;;:::o;48247:410::-;48353:16;;48394:8;;48390:47;;48419:7;48247:410;:::o;48390:47::-;-1:-1:-1;;;;;48456:16:0;;;;;;:11;:16;;;;;;48451:21;;48447:203;;48498:7;:14;48493:19;;:40;;;48530:3;-1:-1:-1;;;;;48516:17:0;:7;48524:1;48516:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;48516:10:0;:17;;48493:40;48489:150;;;48573:7;:14;;-1:-1:-1;;;;;48554:16:0;;;;;;:11;:16;;;;;:33;;;48606:17;;;;;;;;;;;;;-1:-1:-1;;;;;;48606:17:0;;;;;;48489:150;48287:370;48247:410;:::o;25442:7011::-;-1:-1:-1;;;;;25540:15:0;;25522;25540;;;:9;:15;;;;;;25574:17;;;;25566:46;;;;-1:-1:-1;;;25566:46:0;;19092:2:1;25566:46:0;;;19074:21:1;19131:2;19111:18;;;19104:30;-1:-1:-1;;;19150:18:1;;;19143:46;19206:18;;25566:46:0;18890:340:1;25566:46:0;25646:1;25629:14;25638:4;25629:8;:14::i;:::-;:18;25625:83;;;25664:32;;-1:-1:-1;;;25664:32:0;;19437:2:1;25664:32:0;;;19419:21:1;19476:2;19456:18;;;19449:30;-1:-1:-1;;;19495:18:1;;;19488:44;19549:18;;25664:32:0;19235:338:1;25664:32:0;25724:6;;;;25720:92;;;25747:32;25762:4;25768:2;25772:6;25747:14;:32::i;25720:92::-;-1:-1:-1;;;;;25843:19:0;;;;;;:13;:19;;;;;;;;25842:20;:55;;;;-1:-1:-1;;;;;;25880:17:0;;;;;;:13;:17;;;;;;;;25879:18;25842:55;:85;;;;-1:-1:-1;25914:13:0;;-1:-1:-1;;;25914:13:0;;;;25842:85;:118;;;;;25959:1;25944:12;;:16;25842:118;:177;;;;-1:-1:-1;;;;;;25978:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;26001:17:0;;;;;;:13;:17;;;;;;;;25978:40;25824:338;;;26069:6;26050:15;26060:4;26050:9;:15::i;:::-;:25;26046:91;;26105:12;;:16;;26120:1;26105:16;:::i;:::-;26095:26;;;;:::i;:::-;;;26046:91;26178:15;;:20;:38;;;;-1:-1:-1;26202:14:0;;-1:-1:-1;;;26202:14:0;;;;26178:38;26174:327;;;-1:-1:-1;;;;;26256:19:0;;;;;;:13;:19;;;;;;;;26255:20;:59;;;;-1:-1:-1;;;;;;26297:17:0;;;;;;:13;:17;;;;;;;;26296:18;26255:59;:100;;;;-1:-1:-1;;;;;;26336:19:0;;;;;;:13;:19;;;;;;;;26335:20;26255:100;:139;;;;-1:-1:-1;;;;;;26377:17:0;;;;;;:13;:17;;;;;;;;26376:18;26255:139;26233:257;;;44277:18;;44324:8;;;26429:45;;;;-1:-1:-1;;;26429:45:0;;19780:2:1;26429:45:0;;;19762:21:1;19819:2;19799:18;;;19792:30;-1:-1:-1;;;19838:18:1;;;19831:47;19895:18;;26429:45:0;19578:341:1;26429:45:0;-1:-1:-1;;;;;26720:17:0;;26513:12;26720:17;;;:13;:17;;;;;;26513:12;;;;;;;;;;;;26720:17;;:58;;;;-1:-1:-1;26767:10:0;26754:24;;;;:12;:24;;;;;;;;26720:58;:92;;;;-1:-1:-1;;;;;;26795:17:0;;26803:9;26795:17;26720:92;26702:581;;;26856:23;26872:6;26856:15;:23::i;:::-;26839:40;;26915:1;26898:14;:18;:39;;;;-1:-1:-1;44324:8:0;44277:18;;44324:8;;26898:39;26894:378;;;-1:-1:-1;;;;;26969:15:0;;;;;;:9;:15;;;;;27003:35;;26969:15;;-1:-1:-1;27024:14:0;;26969:15;;27003:35;;27024:14;;27003:35;:::i;:::-;;;;-1:-1:-1;;27099:17:0;;27062:55;;;-1:-1:-1;;;;;20144:32:1;;20126:51;;20208:2;20193:18;;20186:34;;;20236:18;;;20229:34;;;;27062:55:0;;;;;;20114:2:1;27062:55:0;;;27144:4;27136:12;;27176:15;;27171:1;:20;27167:90;;27233:4;27216:14;;;:21;;-1:-1:-1;;27216:21:0;;;;;;27167:90;-1:-1:-1;;;;;27356:19:0;;27303:25;27356:19;;;:13;:19;;;;;;;;27339:646;;;27405:12;;;;27401:345;;;27458:23;27474:6;27458:15;:23::i;:::-;27438:43;;27401:345;;;27526:15;;27545:1;27526:20;27522:209;;27590:26;27609:6;27590:18;:26::i;27522:209::-;27683:28;27704:6;27683:20;:28::i;:::-;27663:48;;27522:209;27766:21;;27762:210;;-1:-1:-1;;;;;27816:13:0;;;;;;:9;:13;;;;;:22;:43;-1:-1:-1;27816:43:0;27808:52;;;;;;-1:-1:-1;;;;;27879:13:0;;;;;;:9;:13;;;;;:43;;27905:17;;27879:13;:43;;27905:17;;27879:43;:::i;:::-;;;;-1:-1:-1;27952:4:0;;-1:-1:-1;;27762:210:0;28001:14;;-1:-1:-1;;;28001:14:0;;;;:38;;;;-1:-1:-1;28019:15:0;;:20;28001:38;:62;;;;-1:-1:-1;;;;;;28044:19:0;;;;;;:13;:19;;;;;;;;28043:20;28001:62;:84;;;;-1:-1:-1;;;;;;28068:17:0;;;;;;:13;:17;;;;;;;;28067:18;28001:84;27997:597;;;-1:-1:-1;;;;;28108:17:0;;;;;;:13;:17;;;;;;;;28103:228;;28153:14;;;;28145:38;;;;-1:-1:-1;;;28145:38:0;;20476:2:1;28145:38:0;;;20458:21:1;20515:2;20495:18;;;20488:30;-1:-1:-1;;;20534:18:1;;;20527:42;20586:18;;28145:38:0;20274:336:1;28145:38:0;-1:-1:-1;;;;;25062:25:0;;25036:7;25062:25;;;:19;:25;;;;;;28226:6;28210:13;28220:2;28210:9;:13::i;:::-;:22;;;;:::i;:::-;:46;;28202:62;;;;-1:-1:-1;;;28202:62:0;;;;;;20817:2:1;20799:21;;;20856:1;20836:18;;;20829:29;-1:-1:-1;;;20889:2:1;20874:18;;20867:34;20933:2;20918:18;;20615:327;28202:62:0;28292:8;28291:9;28283:32;;;;-1:-1:-1;;;28283:32:0;;21149:2:1;28283:32:0;;;21131:21:1;21188:2;21168:18;;;21161:30;-1:-1:-1;;;21207:18:1;;;21200:41;21258:18;;28283:32:0;20947:335:1;28283:32:0;-1:-1:-1;;;;;28351:17:0;;;;;;:13;:17;;;;;;;;28347:234;;;28536:12;;28532:1;:16;:25;;;;;28552:5;28532:25;28524:41;;;;-1:-1:-1;;;28524:41:0;;;;;;21489:2:1;21471:21;;;21528:1;21508:18;;;21501:29;-1:-1:-1;;;21561:2:1;21546:18;;21539:34;21605:2;21590:18;;21287:327;28524:41:0;-1:-1:-1;;;;;28610:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;28633:17:0;;;;;;:13;:17;;;;;;;;28610:40;28606:3331;;;-1:-1:-1;;;;;28672:19:0;;;;;;:13;:19;;;;;;;;28671:20;:42;;;;-1:-1:-1;;;;;;28696:17:0;;;;;;:13;:17;;;;;;;;28695:18;28671:42;28667:3174;;;29065:14;;-1:-1:-1;;;29065:14:0;;;;:54;;;;-1:-1:-1;29104:15:0;;-1:-1:-1;;;29104:15:0;;;;29065:54;:114;;;;;29177:2;;29159:15;;:20;;;;:::i;:::-;29144:12;:35;29065:114;:157;;;;-1:-1:-1;;;;;;29205:17:0;;;;;;:13;:17;;;;;;;;29204:18;29065:157;29039:324;;;-1:-1:-1;;;;;29265:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;29265:22:0;29283:4;29265:22;;;29039:324;-1:-1:-1;;;;;29965:17:0;;;;;;:13;:17;;;;;;;;29961:1790;;;30012:6;;;;30011:7;:17;;;;;30023:5;30022:6;30011:17;30007:1725;;;30106:4;30057:28;30088:24;;;:9;:24;;;;;;30166:12;;30143:35;;30139:1570;;;30768:6;:13;;-1:-1:-1;;30768:13:0;30777:4;30768:13;;;30816:21;;:31;;;-1:-1:-1;;;30816:31:0;;;;-1:-1:-1;;;;;30816:21:0;;;;:29;;:31;;;;;30768:6;;30816:31;;;;;;;;30768:6;30816:21;:31;;;;;;;;;;;;;;;;;;;;;;;;;30812:133;;30897:16;;;;;;;30812:133;30975:6;:14;;-1:-1:-1;;30975:14:0;;;31279:10;;31229:14;;31181:12;;31136:9;;31087:13;;31040:11;;30984:5;;31279:10;31229:14;31181:12;31136:9;31040:60;;;:::i;:::-;:105;;;;:::i;:::-;:153;;;;:::i;:::-;:203;;;;:::i;:::-;:249;;;;:::i;:::-;31022:267;;31320:27;31414:3;31393:17;;31351:6;:59;;;;:::i;:::-;31350:67;;;;:::i;:::-;31320:97;;31474:20;31452:19;:42;31448:157;;;-1:-1:-1;31553:20:0;31448:157;31635:46;31652:19;31673:7;31635:16;:46::i;:::-;30180:1529;;30139:1570;30030:1702;30007:1725;31774:5;31773:6;:19;;;;;31784:8;31783:9;31773:19;31769:39;;;31804:4;31794:14;;31769:39;-1:-1:-1;;;;;31859:17:0;;;;;;:13;:17;;;;;;;;31855:71;;;31906:4;31897:13;;31855:71;-1:-1:-1;;;;;31954:19:0;;;;;;:13;:19;;;;;;;;31953:20;:42;;;;-1:-1:-1;;;;;;31978:17:0;;;;;;:13;:17;;;;;;;;31977:18;31953:42;31949:92;;;32025:4;32012:17;;31949:92;32053:193;32082:4;32101:2;32118:6;32139:7;32161:6;32182:10;32207:5;32227:8;32053:14;:193::i;:::-;-1:-1:-1;;;;;32265:21:0;;32281:4;32265:21;;;;:67;;-1:-1:-1;;;;;;32291:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;32314:17:0;;;;;;:13;:17;;;;;;;;32291:40;32261:185;;;32353:5;:19;;;;;32371:1;32362:6;:10;32353:19;32349:45;;;32376:15;32386:4;32376:9;:15::i;:::-;32408:26;32422:11;;32408:13;:26::i;:::-;25511:6942;;;;;;;;;25442:7011;;;:::o;16803:293::-;-1:-1:-1;;;;;16947:17:0;;16930:4;16947:17;;;:9;:17;;;;;:27;;16968:6;;16947:17;16930:4;;16947:27;;16968:6;;16947:27;:::i;:::-;;;;-1:-1:-1;;;;;;;16985:20:0;;;;;;:9;:20;;;;;:30;;17009:6;;16985:20;:30;;17009:6;;16985:30;:::i;:::-;;;;;;;;17048:9;-1:-1:-1;;;;;17031:35:0;17040:6;-1:-1:-1;;;;;17031:35:0;;17059:6;17031:35;;;;2476:25:1;;2464:2;2449:18;;2330:177;17031:35:0;;;;;;;;-1:-1:-1;17084:4:0;16803:293;;;;;:::o;18085:466::-;18149:17;18179:14;18195:13;18210:20;18234:14;:12;:14::i;:::-;18178:70;;;;;;18259:19;18302:1;18293:6;:10;:23;;;;;18315:1;18307:5;:9;18293:23;18289:93;;;18365:5;18347:15;18356:6;18347;:15;:::i;:::-;:23;;;;:::i;:::-;18333:37;;18289:93;18431:20;18440:11;18431:6;:20;:::i;:::-;18415:12;:36;18411:133;;18483:49;18496:12;18510:6;18518;18526:5;18483:12;:49::i;:::-;-1:-1:-1;18468:64:0;-1:-1:-1;18411:133:0;18167:384;;;;18085:466;;;:::o;22661:637::-;22725:17;22755:14;22771:13;22786:20;22810:14;:12;:14::i;:::-;22754:70;;;;;;22876:6;22861:12;:21;22857:434;;;22983:9;;-1:-1:-1;;;;;22983:9:0;22973:20;;;;:9;:20;;;;;;:29;;22996:6;;22973:29;:::i;:::-;22931:9;;;;;;;;;-1:-1:-1;;;;;22931:9:0;-1:-1:-1;;;;;22921:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22912:43;;:6;:43;:::i;:::-;22911:92;;;;:::i;:::-;22899:104;;22857:434;;;23036:19;23083:1;23074:6;:10;:23;;;;;23096:1;23088:5;:9;23074:23;23070:210;;;23151:14;23159:6;23151:5;:14;:::i;:::-;23132:15;23141:6;23132;:15;:::i;:::-;:34;;;;:::i;:::-;23118:48;-1:-1:-1;23243:20:0;23257:6;23118:48;23243:20;:::i;:::-;23227:12;:36;;23219:45;;;;;22857:434;22743:555;;;22661:637;;;:::o;23306:351::-;23373:17;23403:14;23421:20;23445:14;:12;:14::i;:::-;23402:57;;;;;23512:6;23496:12;:22;23492:158;;23618:9;;23631:6;;23608:20;;-1:-1:-1;;;;;23618:9:0;23608;:20::i;:::-;:29;;;;:::i;:::-;23566:9;;;;;;;;;-1:-1:-1;;;;;23566:9:0;-1:-1:-1;;;;;23556:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23547:43;;:6;:43;:::i;:::-;:91;;;;:::i;:::-;23535:103;;23492:158;23391:266;;23306:351;;;:::o;23665:362::-;23734:17;23764:14;23782:20;23806:14;:12;:14::i;:::-;23763:57;;;;;23873:6;23857:12;:22;23853:167;;23984:9;;24006:1;;23997:6;;23974:20;;-1:-1:-1;;;;;23984:9:0;23974;:20::i;:::-;:29;;;;:::i;:::-;:33;;;;:::i;:::-;23928:9;;;;;;;;;-1:-1:-1;;;;;23928:9:0;-1:-1:-1;;;;;23918:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23909:43;;:6;:43;:::i;:::-;:47;;23955:1;23909:47;:::i;39561:3928::-;9169:6;:13;;-1:-1:-1;;9169:13:0;9178:4;9169:13;;;39685:12;;;:32:::1;;-1:-1:-1::0;39701:16:0;;39685:32:::1;39734:7;39681:71;39764:13;39793:9;;39780:10;;:22;;;;:::i;:::-;39764:38:::0;-1:-1:-1;39813:16:0::1;39860:7:::0;39856:1:::1;39833:19;39764:38:::0;39833:11;:19:::1;:::i;:::-;39832:25;;;;:::i;:::-;:35;;;;:::i;:::-;39813:54:::0;-1:-1:-1;39878:18:0::1;39909:9;39917:1;39909:5:::0;:9:::1;:::i;:::-;39899:19;::::0;:7;:19:::1;:::i;:::-;39950:8;::::0;40006:16:::1;::::0;;40020:1:::1;40006:16:::0;;;;;::::1;::::0;;39878:40;;-1:-1:-1;;;;;;39950:8:0;;::::1;::::0;39931:9:::1;::::0;40006:16;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;40006:16:0::1;39972:50;;40061:4;40033:14;40048:1;40033:17;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40033:33:0;;::::1;:17;::::0;;::::1;::::0;;;;;:33;40097:8:::1;::::0;40077:17;;40097:8;::::1;::::0;40077:14;;40097:8;;40077:17;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;40077:28:0;;::::1;:17;::::0;;::::1;::::0;;;;;:28;40133:11:::1;::::0;::::1;:65;40217:22;40231:8:::0;40217:11;:22:::1;:::i;:::-;40319:17;::::0;40133:253:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;40133:253:0;;;::::1;::::0;;40258:1:::1;::::0;40278:14;;40319:17:::1;::::0;::::1;-1:-1:-1::0;;;;;40319:17:0::1;::::0;40356:15:::1;::::0;40133:253:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;40116:416;;40425:95;::::0;40504:1:::1;2476:25:1::0;;40425:95:0::1;::::0;2464:2:1;2449:18;40425:95:0::1;;;;;;;40116:416;40582:17;::::0;40561:40:::1;::::0;-1:-1:-1;;;40561:40:0;;-1:-1:-1;;;;;40582:17:0::1;::::0;;::::1;::::0;::::1;40561:40;::::0;::::1;3921:51:1::0;-1:-1:-1;;40561:12:0;::::1;::::0;::::1;::::0;3894:18:1;;40561:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40544:57:::0;-1:-1:-1;40616:11:0;;40612:110:::1;;40668:17;::::0;40644:66:::1;::::0;-1:-1:-1;;;40644:66:0;;40668:17:::1;::::0;;::::1;-1:-1:-1::0;;;;;40668:17:0;;::::1;40644:66;::::0;::::1;23256:34:1::0;40696:4:0::1;23306:18:1::0;;;23299:43;23358:18;;;23351:34;;;40644:15:0;::::1;::::0;::::1;::::0;23191:18:1;;40644:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40612:110;40734:18;40778:10:::0;40774:1:::1;40756:14;40765:5:::0;40756:6;:14:::1;:::i;:::-;40755:20;;;;:::i;:::-;:33;;;;:::i;:::-;40734:54;;40799:22;40879:10;40849:12;;40835:11;;:26;;;;:::i;:::-;40825:37;::::0;:6;:37:::1;:::i;:::-;40824:65;;;;:::i;:::-;40799:90:::0;-1:-1:-1;40900:16:0::1;40799:90:::0;40919:19:::1;40928:10:::0;40919:6;:19:::1;:::i;:::-;:36;;;;:::i;:::-;40900:55;;40976:26;41039:3;41016:20;;41005:8;:31;;;;:::i;:::-;:37;;;;:::i;:::-;40976:66;;41055:17;41111:3;41092:16;;41075:14;:33;;;;:::i;:::-;:39;;;;:::i;:::-;41055:59:::0;-1:-1:-1;41125:20:0::1;41148:26;41055:59:::0;41148:14;:26:::1;:::i;:::-;41125:49:::0;-1:-1:-1;41208:13:0;;41204:286:::1;;41238:17;41297:3;41270:24;;41258:9;:36;;;;:::i;:::-;:42;;;;:::i;:::-;41327:11;::::0;41315:35:::1;::::0;-1:-1:-1;;;41315:35:0;;-1:-1:-1;;;;;41327:11:0;;::::1;41315:35;::::0;::::1;15327:51:1::0;15394:18;;;15387:34;;;41238:62:0;;-1:-1:-1;41315:11:0;::::1;::::0;::::1;::::0;15300:18:1;;41315:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;41377:13:0::1;::::0;-1:-1:-1;;;;;41365:11:0;;::::1;::::0;::::1;::::0;41377:13:::1;41392:21;41404:9:::0;41392;:21:::1;:::i;:::-;41365:49;::::0;-1:-1:-1;;;;;;41365:49:0::1;::::0;;;;;;-1:-1:-1;;;;;15345:32:1;;;41365:49:0::1;::::0;::::1;15327:51:1::0;15394:18;;;15387:34;15300:18;;41365:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41469:9;41443:22;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;41204:286:0::1;41526:16:::0;;41522:104:::1;;41578:21;::::0;41558:56:::1;::::0;-1:-1:-1;;;41558:56:0;;-1:-1:-1;;;;;41578:21:0;;::::1;41558:56;::::0;::::1;15327:51:1::0;15394:18;;;15387:34;;;41558:11:0;;::::1;::::0;::::1;::::0;15300:18:1;;41558:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41522:104;41677:1;41666:8;:12;:30;;;;;41695:1;41682:10;:14;41666:30;41662:481;;;41734:11;::::0;41825:8:::1;::::0;41969:22:::1;::::0;41734:314:::1;::::0;-1:-1:-1;;;41734:314:0;;41789:4:::1;41734:314;::::0;::::1;24080:34:1::0;-1:-1:-1;;;;;41825:8:0;;::::1;24130:18:1::0;;;24123:43;24182:18;;;24175:34;;;24225:18;;;24218:34;;;41734:11:0::1;24268:19:1::0;;;24261:35;;;24312:19;;;24305:35;41969:22:0;;::::1;24356:19:1::0;;;24349:44;42014:15:0::1;24409:19:1::0;;;24402:35;41734:11:0;::::1;::::0;:24:::1;::::0;24014:19:1;;41734:314:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;41734:314:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;41734:314:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;41713:419;;42095:21;::::0;::::1;::::0;;;::::1;41713:419;;;;;;;42159:22:::0;;42155:678:::1;;42236:16;::::0;;42250:1:::1;42236:16:::0;;;;;::::1;::::0;;42197:36:::1;::::0;42236:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;42292:8:0::1;::::0;42267:22;;;;-1:-1:-1;;;;;;42292:8:0::1;::::0;42267:22;;-1:-1:-1;42292:8:0::1;::::0;42267:22:::1;;;;:::i;:::-;-1:-1:-1::0;;;;;42267:33:0;;::::1;:22;::::0;;::::1;::::0;;;;;:33;42340:12:::1;::::0;42315:22;;42340:12;::::1;::::0;42315:19;;42340:12;;42315:22;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;42315:37:0;;::::1;:22;::::0;;::::1;::::0;;;;;:37;42390:11:::1;::::0;:265:::1;::::0;-1:-1:-1;;;42390:265:0;;:11;::::1;::::0;:65:::1;::::0;:265:::1;::::0;42478:18;;42390:11:::1;::::0;42543:19;;42593:4:::1;::::0;42621:15:::1;::::0;42390:265:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;42369:453;;42702:104;::::0;42785:2:::1;2476:25:1::0;;42702:104:0::1;::::0;2464:2:1;2449:18;42702:104:0::1;;;;;;;42369:453;42182:651;42155:678;39670:3819;;;;;;;;;;;;9193:1;-1:-1:-1::0;;9205:6:0;:14;;-1:-1:-1;;9205:14:0;;;39561:3928::o;35164:3262::-;-1:-1:-1;;;;;35429:17:0;;;;;;:9;:17;;;;;;:27;;35449:7;;35429:27;:::i;:::-;-1:-1:-1;;;;;35409:17:0;;;;;;:9;:17;;;;;:47;;;;35497:1074;;;;35525:15;35559:6;35555:346;;;35628:10;;35611:14;;35596:12;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;35586:52;;35555:346;;;35715:13;;35703:9;;35689:11;;:23;;;;:::i;:::-;:39;;;;:::i;:::-;35751:15;;35679:49;;-1:-1:-1;;;;35751:15:0;;;;:35;;;;;35785:1;35770:12;;:16;35751:35;35747:139;;;35830:12;;35819:7;:23;;35811:55;;;;-1:-1:-1;;;35811:55:0;;25152:2:1;35811:55:0;;;25134:21:1;25191:2;25171:18;;;25164:30;-1:-1:-1;;;25210:18:1;;;25203:49;25269:18;;35811:55:0;24950:343:1;35811:55:0;35917:18;35960:5;35939:17;35949:7;35939;:17;:::i;:::-;35938:27;;;;:::i;:::-;35917:48;-1:-1:-1;35984:14:0;;35980:145;;36019:23;36032:10;36019:23;;:::i;:::-;;;36061:48;36075:6;36091:4;36098:10;36061:13;:48::i;:::-;36141:18;36179:6;36174:225;;36268:5;36253:11;;36243:7;:21;;;;:::i;:::-;36242:31;;;;:::i;:::-;36229:44;;36174:225;;;36378:5;36362:12;;36352:7;:22;;;;:::i;:::-;36351:32;;;;:::i;:::-;36338:45;;36174:225;36417:14;;36413:147;;36452:23;36465:10;36452:23;;:::i;:::-;;;36494:50;36508:6;36524;36533:10;36494:13;:50::i;:::-;35510:1061;;;35497:1074;36587:10;:36;;;;-1:-1:-1;;;;;;36602:21:0;;;;;;:13;:21;;;;;;;;36601:22;36587:36;:65;;;;-1:-1:-1;;;;;;36628:24:0;;;;;;:13;:24;;;;;;;;36627:25;36587:65;36583:371;;;36669:25;36755:5;36740:11;;36730:7;:21;;;;:::i;:::-;36729:31;;;;:::i;:::-;36709:51;-1:-1:-1;36781:21:0;;36777:166;;36823:30;36836:17;36823:30;;:::i;:::-;;;36872:55;36886:6;36902:4;36909:17;36872:13;:55::i;:::-;36654:300;36583:371;36970:5;:31;;;;-1:-1:-1;;;;;;36980:21:0;;;;;;:13;:21;;;;;;;;36979:22;36970:31;:60;;;;-1:-1:-1;;;;;;37006:24:0;;;;;;:13;:24;;;;;;;;37005:25;36970:60;36966:390;;;37047:29;37145:5;37126:15;;37116:7;:25;;;;:::i;:::-;37115:35;;;;:::i;:::-;37091:59;-1:-1:-1;37171:25:0;;37167:178;;37217:34;37230:21;37217:34;;:::i;:::-;;;37270:59;37284:6;37300:4;37307:21;37270:13;:59::i;:::-;37032:324;36966:390;37372:8;:34;;;;-1:-1:-1;;;;;;37385:21:0;;;;;;:13;:21;;;;;;;;37384:22;37372:34;:63;;;;-1:-1:-1;;;;;;37411:24:0;;;;;;:13;:24;;;;;;;;37410:25;37372:63;37368:739;;;-1:-1:-1;;;;;37456:20:0;;;;;;:9;:20;;;;;:26;;;;;37452:644;;;37645:32;37756:5;37734:18;;37724:7;:28;;;;:::i;:::-;37723:38;;;;:::i;:::-;37696:65;-1:-1:-1;37786:28:0;;37782:299;;37839:37;37852:24;37839:37;;:::i;:::-;;;37899:162;37939:6;37980;38014:24;37899:13;:162::i;:::-;37484:612;37452:644;-1:-1:-1;;;;;38124:25:0;;;;;;:14;:25;;;;;;;;38123:26;:47;;;;-1:-1:-1;38153:17:0;;-1:-1:-1;;;38153:17:0;;;;38123:47;:70;;;;;38192:1;38174:15;;:19;38123:70;38119:235;;;38282:15;;-1:-1:-1;;;;;38235:20:0;;;;;;:9;:20;;;;;;38268:9;;38235:30;;38258:7;;38235:30;:::i;:::-;:42;;;;:::i;:::-;38234:63;;38208:146;;;;-1:-1:-1;;;38208:146:0;;25500:2:1;38208:146:0;;;25482:21:1;25539:2;25519:18;;;25512:30;-1:-1:-1;;;25558:18:1;;;25551:51;25619:18;;38208:146:0;25298:345:1;38208:146:0;38365:53;38379:6;38387:9;38398:19;38408:9;38398:7;:19;:::i;:::-;38365:13;:53::i;:::-;35398:3028;35164:3262;;;;;;;;:::o;50262:2695::-;50368:12;50343:22;;50321:19;;:44;;;;:::i;:::-;:59;50317:98;;;50262:2695;:::o;50317:98::-;50446:8;;50485:12;;50533:27;;-1:-1:-1;;;50533:27:0;;50554:4;50533:27;;;3921:51:1;50446:8:0;;;;-1:-1:-1;;;;;50446:8:0;;;;50485:12;;;50427:9;;50446:8;;50533:12;;3894:18:1;;50533:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50511:49;;50589:21;;50575:11;:35;50571:74;;;50627:7;;;50262:2695;:::o;50571:74::-;50678:27;;-1:-1:-1;;;50678:27:0;;50699:4;50678:27;;;3921:51:1;50657:18:0;;-1:-1:-1;;;;;50678:12:0;;;;;3894:18:1;;50678:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50657:48;;50726:16;50752:9;;;;;;;;;-1:-1:-1;;;;;50752:9:0;50726:36;;50773:22;50798:9;-1:-1:-1;;;;;50798:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50983:7;:14;50773:48;;-1:-1:-1;50834:19:0;;;;;;;;;;;51091:9;51073:27;;51202:1701;51219:3;51209:7;:13;:46;;;;;51239:16;51226:10;:29;51209:46;51202:1701;;;51292:16;51276:12;;:32;51272:89;;51344:1;51329:12;:16;51272:89;51389:7;51397:12;;51389:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;51389:21:0;51505:22;;;:9;:22;;;;;;;:31;51389:21;;-1:-1:-1;51505:31:0;-1:-1:-1;51557:16:0;;;;;:47;;-1:-1:-1;;;;;;51578:26:0;;;;;;:13;:26;;;;;;;;51577:27;51557:47;51553:1191;;;51669:14;51639:26;51653:12;51639:11;:26;:::i;:::-;51638:45;;;;:::i;:::-;51625:58;-1:-1:-1;51744:14:0;51715:25;51728:12;51715:10;:25;:::i;:::-;51714:44;;;;:::i;:::-;51702:56;;51798:14;51783:12;:29;51779:169;;;51841:50;;;-1:-1:-1;;;;;20144:32:1;;20126:51;;20208:2;20193:18;;20186:34;;;20236:18;;;20229:34;;;51841:50:0;;20114:2:1;20099:18;51841:50:0;;;;;;;51927:1;51914:14;;51779:169;51972:14;;51968:761;;52028:13;;52014:10;:27;52011:699;;52074:28;;;-1:-1:-1;;;;;15345:32:1;;15327:51;;15409:2;15394:18;;15387:34;;;52074:28:0;;15300:18:1;52074:28:0;;;;;;;52011:699;;;52185:8;;52157:12;;52172:54;;52185:8;;;-1:-1:-1;;;;;52185:8:0;52195:11;52208:10;52157:12;52172;:54::i;:::-;52157:69;;52258:7;52253:150;;52324:8;;52303:72;;;-1:-1:-1;;;;;52324:8:0;;;;;;25917:34:1;;25987:15;;;25982:2;25967:18;;25960:43;26019:18;;26012:34;;;52359:15:0;26077:2:1;26062:18;;26055:34;52303:72:0;;25866:3:1;25851:19;52303:72:0;;;;;;;52253:150;52460:12;;52431:13;;52447:57;;-1:-1:-1;;;;;52460:12:0;52474:11;52487:9;52431:13;52447:12;:57::i;:::-;52431:73;;52536:8;52531:154;;52603:12;;52582:75;;;-1:-1:-1;;;;;52603:12:0;;;25917:34:1;;25987:15;;;25982:2;25967:18;;25960:43;26019:18;;26012:34;;;52641:15:0;26077:2:1;26062:18;;26055:34;52582:75:0;;25866:3:1;25851:19;52582:75:0;;;;;;;52531:154;52130:580;;52011:699;52791:9;52781:19;;:7;:19;:::i;:::-;52770:31;;:7;:31;:::i;:::-;52760:41;;52826:9;52850:12;:14;;52816:19;;-1:-1:-1;52850:12:0;:14;;;:::i;:::-;;;;;;52879:12;;;;;:::i;:::-;;;;51202:1701;;;-1:-1:-1;;52937:12:0;52915:19;:34;-1:-1:-1;;;;;;;;;;;;;50262:2695:0:o;18559:1306::-;18704:17;18723:22;18758:23;18794:9;;;;;;;;;-1:-1:-1;;;;;18794:9:0;-1:-1:-1;;;;;18784:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18758:60;;18829:13;18858:11;;;;;;;;;-1:-1:-1;;;;;18858:11:0;-1:-1:-1;;;;;18858:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18845:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18969:9;;18959:28;;;-1:-1:-1;;;18959:28:0;;;;18829:59;;-1:-1:-1;;;;;;18912:19:0;;;;;;18899:10;;18969:9;;;;18959:26;;:28;;;;;;;;;;;;;;18969:9;18959:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18942:45;;19002:5;18998:540;;;19028:11;;19024:503;;19060:13;19076:18;19086:7;19091:2;19086;:7;:::i;:::-;19076:9;:18::i;:::-;19060:34;;19113:17;19133;19143:6;19133:9;:17::i;:::-;19113:37;;19181:9;19173:5;:17;19169:343;;;19215:17;19254;19262:9;19254:5;:17;:::i;:::-;19235:37;;:15;:37;:::i;:::-;:41;;19275:1;19235:41;:::i;:::-;19215:61;-1:-1:-1;19299:19:0;19335:13;:9;19347:1;19335:13;:::i;:::-;19321:10;:5;19329:2;19321:10;:::i;:::-;:28;;;;:::i;:::-;19299:50;-1:-1:-1;19389:23:0;19299:50;19389:9;:23;:::i;:::-;19372:40;-1:-1:-1;19439:18:0;;19435:57;;19459:33;19478:14;19459:33;;:::i;:::-;;;19435:57;19192:320;;19169:343;19041:486;;19024:503;19548:15;19566:13;19577:2;19566:8;:13;:::i;:::-;19548:31;;19594:15;19613:1;19594:20;19590:268;;19673:4;19643:27;19653:16;19663:6;19653:7;:16;:::i;19643:27::-;:34;;;;:::i;:::-;19631:46;;19590:268;;;19722:124;19779:2;19750:25;19760:15;19750:7;:25;:::i;:::-;19749:32;;;;:::i;:::-;19829:2;19801:24;19810:15;19801:6;:24;:::i;:::-;19800:31;;;;:::i;:::-;19722:8;:124::i;:::-;19710:136;;19590:268;18747:1118;;;;;18559:1306;;;;;;;:::o;43497:213::-;-1:-1:-1;;;;;43634:13:0;;;;;;:9;:13;;;;;;:23;;43650:7;;43634:23;:::i;:::-;-1:-1:-1;;;;;43618:13:0;;;;;;;:9;:13;;;;;;;:39;;;;43673:29;;;;;;;;;;43694:7;2476:25:1;;2464:2;2449:18;;2330:177;49433:454:0;49533:4;49618:12;49632:17;49653:5;-1:-1:-1;;;;;49653:10:0;49687;49699:2;49703:5;49664:45;;;;;;;;-1:-1:-1;;;;;15345:32:1;;;;15327:51;;15409:2;15394:18;;15387:34;15315:2;15300:18;;15153:274;49664:45:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49664:45:0;;;;;;;;;;;49653:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49617:93;;;;49725:14;49721:132;;;49764:7;:57;;;;-1:-1:-1;49776:11:0;;:16;;:44;;;49807:4;49796:24;;;;;;;;;;;;:::i;:::-;49756:85;;;;-1:-1:-1;;;49756:85:0;;26990:2:1;49756:85:0;;;26972:21:1;27029:2;27009:18;;;27002:30;-1:-1:-1;;;27048:18:1;;;27041:45;27103:18;;49756:85:0;26788:339:1;49756:85:0;-1:-1:-1;49872:7:0;49433:454;-1:-1:-1;;;;;49433:454:0:o;185:303::-;230:6;257:1;253;:5;249:232;;;-1:-1:-1;279:1:0;295:6;304:5;308:1;279;304:5;:::i;:::-;:9;;312:1;304:9;:::i;:::-;295:18;;328:92;339:1;335;:5;328:92;;;365:1;-1:-1:-1;365:1:0;403;365;390:5;365:1;390;:5;:::i;:::-;:9;;;;:::i;:::-;389:15;;;;:::i;:::-;385:19;;328:92;;;260:171;16464:185;;;:::o;249:232::-;441:6;;437:44;;-1:-1:-1;468:1:0;185:303;;;:::o;81:96::-;133:6;160:1;156;:5;:13;;168:1;156:13;;;164:1;156:13;152:17;81:96;-1:-1:-1;;;81:96:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;733:118::-;819:5;812:13;805:21;798:5;795:32;785:60;;841:1;838;831:12;856:382;921:6;929;982:2;970:9;961:7;957:23;953:32;950:52;;;998:1;995;988:12;950:52;1037:9;1024:23;1056:31;1081:5;1056:31;:::i;:::-;1106:5;-1:-1:-1;1163:2:1;1148:18;;1135:32;1176:30;1135:32;1176:30;:::i;:::-;1225:7;1215:17;;;856:382;;;;;:::o;1243:180::-;1302:6;1355:2;1343:9;1334:7;1330:23;1326:32;1323:52;;;1371:1;1368;1361:12;1323:52;-1:-1:-1;1394:23:1;;1243:180;-1:-1:-1;1243:180:1:o;1428:250::-;1513:1;1523:113;1537:6;1534:1;1531:13;1523:113;;;1613:11;;;1607:18;1594:11;;;1587:39;1559:2;1552:10;1523:113;;;-1:-1:-1;;1670:1:1;1652:16;;1645:27;1428:250::o;1683:396::-;1832:2;1821:9;1814:21;1795:4;1864:6;1858:13;1907:6;1902:2;1891:9;1887:18;1880:34;1923:79;1995:6;1990:2;1979:9;1975:18;1970:2;1962:6;1958:15;1923:79;:::i;:::-;2063:2;2042:15;-1:-1:-1;;2038:29:1;2023:45;;;;2070:2;2019:54;;1683:396;-1:-1:-1;;1683:396:1:o;2084:241::-;2140:6;2193:2;2181:9;2172:7;2168:23;2164:32;2161:52;;;2209:1;2206;2199:12;2161:52;2248:9;2235:23;2267:28;2289:5;2267:28;:::i;2512:315::-;2580:6;2588;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2696:9;2683:23;2715:31;2740:5;2715:31;:::i;:::-;2765:5;2817:2;2802:18;;;;2789:32;;-1:-1:-1;;;2512:315:1:o;2832:367::-;2895:8;2905:6;2959:3;2952:4;2944:6;2940:17;2936:27;2926:55;;2977:1;2974;2967:12;2926:55;-1:-1:-1;3000:20:1;;3043:18;3032:30;;3029:50;;;3075:1;3072;3065:12;3029:50;3112:4;3104:6;3100:17;3088:29;;3172:3;3165:4;3155:6;3152:1;3148:14;3140:6;3136:27;3132:38;3129:47;3126:67;;;3189:1;3186;3179:12;3126:67;2832:367;;;;;:::o;3204:566::-;3296:6;3304;3312;3365:2;3353:9;3344:7;3340:23;3336:32;3333:52;;;3381:1;3378;3371:12;3333:52;3421:9;3408:23;3454:18;3446:6;3443:30;3440:50;;;3486:1;3483;3476:12;3440:50;3525:70;3587:7;3578:6;3567:9;3563:22;3525:70;:::i;:::-;3614:8;;-1:-1:-1;3499:96:1;-1:-1:-1;;3699:2:1;3684:18;;3671:32;3712:28;3671:32;3712:28;:::i;:::-;3759:5;3749:15;;;3204:566;;;;;:::o;3983:437::-;4069:6;4077;4130:2;4118:9;4109:7;4105:23;4101:32;4098:52;;;4146:1;4143;4136:12;4098:52;4186:9;4173:23;4219:18;4211:6;4208:30;4205:50;;;4251:1;4248;4241:12;4205:50;4290:70;4352:7;4343:6;4332:9;4328:22;4290:70;:::i;:::-;4379:8;;4264:96;;-1:-1:-1;3983:437:1;-1:-1:-1;;;;3983:437:1:o;4652:456::-;4729:6;4737;4745;4798:2;4786:9;4777:7;4773:23;4769:32;4766:52;;;4814:1;4811;4804:12;4766:52;4853:9;4840:23;4872:31;4897:5;4872:31;:::i;:::-;4922:5;-1:-1:-1;4979:2:1;4964:18;;4951:32;4992:33;4951:32;4992:33;:::i;:::-;4652:456;;5044:7;;-1:-1:-1;;;5098:2:1;5083:18;;;;5070:32;;4652:456::o;5113:127::-;5174:10;5169:3;5165:20;5162:1;5155:31;5205:4;5202:1;5195:15;5229:4;5226:1;5219:15;5245:1121;5329:6;5360:2;5403;5391:9;5382:7;5378:23;5374:32;5371:52;;;5419:1;5416;5409:12;5371:52;5459:9;5446:23;5488:18;5529:2;5521:6;5518:14;5515:34;;;5545:1;5542;5535:12;5515:34;5583:6;5572:9;5568:22;5558:32;;5628:7;5621:4;5617:2;5613:13;5609:27;5599:55;;5650:1;5647;5640:12;5599:55;5686:2;5673:16;5708:2;5704;5701:10;5698:36;;;5714:18;;:::i;:::-;5760:2;5757:1;5753:10;5792:2;5786:9;5855:2;5851:7;5846:2;5842;5838:11;5834:25;5826:6;5822:38;5910:6;5898:10;5895:22;5890:2;5878:10;5875:18;5872:46;5869:72;;;5921:18;;:::i;:::-;5957:2;5950:22;6007:18;;;6041:15;;;;-1:-1:-1;6083:11:1;;;6079:20;;;6111:19;;;6108:39;;;6143:1;6140;6133:12;6108:39;6167:11;;;;6187:148;6203:6;6198:3;6195:15;6187:148;;;6269:23;6288:3;6269:23;:::i;:::-;6257:36;;6220:12;;;;6313;;;;6187:148;;;6354:6;5245:1121;-1:-1:-1;;;;;;;;5245:1121:1:o;8175:456::-;8252:6;8260;8268;8321:2;8309:9;8300:7;8296:23;8292:32;8289:52;;;8337:1;8334;8327:12;8289:52;8376:9;8363:23;8395:31;8420:5;8395:31;:::i;:::-;8445:5;-1:-1:-1;8497:2:1;8482:18;;8469:32;;-1:-1:-1;8553:2:1;8538:18;;8525:32;8566:33;8525:32;8566:33;:::i;8960:388::-;9028:6;9036;9089:2;9077:9;9068:7;9064:23;9060:32;9057:52;;;9105:1;9102;9095:12;9057:52;9144:9;9131:23;9163:31;9188:5;9163:31;:::i;:::-;9213:5;-1:-1:-1;9270:2:1;9255:18;;9242:32;9283:33;9242:32;9283:33;:::i;9353:573::-;9457:6;9465;9473;9481;9534:2;9522:9;9513:7;9509:23;9505:32;9502:52;;;9550:1;9547;9540:12;9502:52;9590:9;9577:23;9623:18;9615:6;9612:30;9609:50;;;9655:1;9652;9645:12;9609:50;9694:70;9756:7;9747:6;9736:9;9732:22;9694:70;:::i;:::-;9783:8;;9668:96;;-1:-1:-1;9865:2:1;9850:18;;9837:32;;9916:2;9901:18;9888:32;;-1:-1:-1;9353:573:1;-1:-1:-1;;;;9353:573:1:o;9931:329::-;10133:2;10115:21;;;10172:1;10152:18;;;10145:29;-1:-1:-1;;;10205:2:1;10190:18;;10183:36;10251:2;10236:18;;9931:329::o;10949:380::-;11028:1;11024:12;;;;11071;;;11092:61;;11146:4;11138:6;11134:17;11124:27;;11092:61;11199:2;11191:6;11188:14;11168:18;11165:38;11162:161;;11245:10;11240:3;11236:20;11233:1;11226:31;11280:4;11277:1;11270:15;11308:4;11305:1;11298:15;11670:127;11731:10;11726:3;11722:20;11719:1;11712:31;11762:4;11759:1;11752:15;11786:4;11783:1;11776:15;11802:184;11872:6;11925:2;11913:9;11904:7;11900:23;11896:32;11893:52;;;11941:1;11938;11931:12;11893:52;-1:-1:-1;11964:16:1;;11802:184;-1:-1:-1;11802:184:1:o;11991:127::-;12052:10;12047:3;12043:20;12040:1;12033:31;12083:4;12080:1;12073:15;12107:4;12104:1;12097:15;12123:128;12190:9;;;12211:11;;;12208:37;;;12225:18;;:::i;12256:125::-;12321:9;;;12342:10;;;12339:36;;;12355:18;;:::i;15432:245::-;15499:6;15552:2;15540:9;15531:7;15527:23;15523:32;15520:52;;;15568:1;15565;15558:12;15520:52;15600:9;15594:16;15619:28;15641:5;15619:28;:::i;15682:188::-;15761:13;;-1:-1:-1;;;;;15803:42:1;;15793:53;;15783:81;;15860:1;15857;15850:12;15875:450;15962:6;15970;15978;16031:2;16019:9;16010:7;16006:23;16002:32;15999:52;;;16047:1;16044;16037:12;15999:52;16070:40;16100:9;16070:40;:::i;:::-;16060:50;;16129:49;16174:2;16163:9;16159:18;16129:49;:::i;:::-;16119:59;;16221:2;16210:9;16206:18;16200:25;16265:10;16258:5;16254:22;16247:5;16244:33;16234:61;;16291:1;16288;16281:12;17349:416;17438:1;17475:5;17438:1;17489:270;17510:7;17500:8;17497:21;17489:270;;;17569:4;17565:1;17561:6;17557:17;17551:4;17548:27;17545:53;;;17578:18;;:::i;:::-;17628:7;17618:8;17614:22;17611:55;;;17648:16;;;;17611:55;17727:22;;;;17687:15;;;;17489:270;;;17493:3;17349:416;;;;;:::o;17770:806::-;17819:5;17849:8;17839:80;;-1:-1:-1;17890:1:1;17904:5;;17839:80;17938:4;17928:76;;-1:-1:-1;17975:1:1;17989:5;;17928:76;18020:4;18038:1;18033:59;;;;18106:1;18101:130;;;;18013:218;;18033:59;18063:1;18054:10;;18077:5;;;18101:130;18138:3;18128:8;18125:17;18122:43;;;18145:18;;:::i;:::-;-1:-1:-1;;18201:1:1;18187:16;;18216:5;;18013:218;;18315:2;18305:8;18302:16;18296:3;18290:4;18287:13;18283:36;18277:2;18267:8;18264:16;18259:2;18253:4;18250:12;18246:35;18243:77;18240:159;;;-1:-1:-1;18352:19:1;;;18384:5;;18240:159;18431:34;18456:8;18450:4;18431:34;:::i;:::-;18501:6;18497:1;18493:6;18489:19;18480:7;18477:32;18474:58;;;18512:18;;:::i;:::-;18550:20;;17770:806;-1:-1:-1;;;17770:806:1:o;18581:131::-;18641:5;18670:36;18697:8;18691:4;18670:36;:::i;18717:168::-;18790:9;;;18821;;18838:15;;;18832:22;;18818:37;18808:71;;18859:18;;:::i;21619:217::-;21659:1;21685;21675:132;;21729:10;21724:3;21720:20;21717:1;21710:31;21764:4;21761:1;21754:15;21792:4;21789:1;21782:15;21675:132;-1:-1:-1;21821:9:1;;21619:217::o;21841:980::-;22103:4;22151:3;22140:9;22136:19;22182:6;22171:9;22164:25;22208:2;22246:6;22241:2;22230:9;22226:18;22219:34;22289:3;22284:2;22273:9;22269:18;22262:31;22313:6;22348;22342:13;22379:6;22371;22364:22;22417:3;22406:9;22402:19;22395:26;;22456:2;22448:6;22444:15;22430:29;;22477:1;22487:195;22501:6;22498:1;22495:13;22487:195;;;22566:13;;-1:-1:-1;;;;;22562:39:1;22550:52;;22657:15;;;;22622:12;;;;22598:1;22516:9;22487:195;;;-1:-1:-1;;;;;;;22738:32:1;;;;22733:2;22718:18;;22711:60;-1:-1:-1;;;22802:3:1;22787:19;22780:35;22699:3;21841:980;-1:-1:-1;;;21841:980:1:o;24448:306::-;24536:6;24544;24552;24605:2;24593:9;24584:7;24580:23;24576:32;24573:52;;;24621:1;24618;24611:12;24573:52;24650:9;24644:16;24634:26;;24700:2;24689:9;24685:18;24679:25;24669:35;;24744:2;24733:9;24729:18;24723:25;24713:35;;24448:306;;;;;:::o;26100:135::-;26139:3;26160:17;;;26157:43;;26180:18;;:::i;:::-;-1:-1:-1;26227:1:1;26216:13;;26100:135::o;26240:251::-;26310:6;26363:2;26351:9;26342:7;26338:23;26334:32;26331:52;;;26379:1;26376;26369:12;26331:52;26411:9;26405:16;26430:31;26455:5;26430:31;:::i;26496:287::-;26625:3;26663:6;26657:13;26679:66;26738:6;26733:3;26726:4;26718:6;26714:17;26679:66;:::i;:::-;26761:16;;;;;26496:287;-1:-1:-1;;26496:287:1:o

Swarm Source

ipfs://9b08d1732ca30a7c6bf31ba61cf77848e17b840a4a689df928f47155290d1aab
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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