BNB Price: $613.88 (-0.16%)
 

Overview

Max Total Supply

38,888AGI

Holders

281

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.009130966564921224 AGI

Value
$0.00
0x8388b5486818f3f7c733cc18b91ec2e7f0db33d9
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.29+commit.ab55807c

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 1 : 081201.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

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 getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
    function feeTo() external view returns (address);
}

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 kLast() external view returns (uint);

    function totalSupply() external view returns (uint256);
}

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

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

    address payable public fundAddress;
    address payable public fundAddress2;

    string private _name;
    string private _symbol;
    uint256 private _decimals;
    uint256 public kb = 3;
    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 ETH;
    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;

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

    // Advanced functions, please do not try it lightly
    function setRewardPath(address[] calldata newPath) public onlyOwner {
        uint256 length = newPath.length;
        rewardPath = new address[](length);
        for (uint256 i; i < length; i++) {
            rewardPath[i] = newPath[i];
        }
        require(rewardPath[0] == currency, "dont supprot this path 1");
        require(rewardPath[length - 1] == ETH, "dont supprot this path 2");
    }

    constructor() {
        _name = "AGI";
        _symbol = "AGI";
        _decimals = 18;
        uint256 total = 38888 * 10 ** _decimals;
        _tTotal = total;

        ISwapRouter swapRouter;
        if (block.chainid == 56){
            swapRouter = ISwapRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
            currency = swapRouter.WETH();
        }else{
            swapRouter = ISwapRouter(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
            currency = swapRouter.WETH();
        }
        
        address ReceiveAddress = 0xE1cE74179318a119feD3C4d90558950a04686151;
        ETH = currency;

        fundAddress = payable(ReceiveAddress);
        fundAddress2 = fundAddress;
        generateLpReceiverAddr = fundAddress;

        maxBuyAmount = total;
        maxWalletAmount = total;

        enableOffTrade = true;
        enableKillBlock = false;
        enableRewardList = true;
        enableSwapLimit = true;
        enableWalletLimit = true;
        enableChangeTax = true;
        currencyIsEth = false;
        enableKillBatchBots = false;
        enableTransferFee = false;
        antiSYNC = false;

        rewardPath = [currency];

        _swapRouter = swapRouter;
        _approve(address(this), address(swapRouter), MAX);

        IERC20(currency).approve(address(swapRouter), MAX);

        _swapRouters[address(swapRouter)] = true;

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

        _buyFundFee = 0;
        _buyLPFee = 0;
        _buyRewardFee = 10001;
        buy_burnFee = 0;

        _sellFundFee = 0;
        _sellLPFee = 0;
        _sellRewardFee = 500;
        sell_burnFee = 0;

        transferFee = 0;
        killBatchBlockNumber = 0;
        airdropNumbs = 0;

        _balances[ReceiveAddress] = total;
        emit Transfer(address(0), ReceiveAddress, total);
        _approve(ReceiveAddress, address(swapRouter), MAX);
        require(currency < address(this),"??");

        _feeWhiteList[fundAddress] = true;
        _feeWhiteList[fundAddress2] = true;
        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[msg.sender] = true;

        isMaxEatExempt[msg.sender] = true;
        isMaxEatExempt[fundAddress] = true;
        isMaxEatExempt[fundAddress2] = 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[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        holderRewardCondition = 10 ** IERC20(ETH).decimals() / 100;

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

    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;
        }
    }

    bool public isAddV2;
    bool public isRemoveV2;

    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);
    }

    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
            );
        }
    }

    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;
    }

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

    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 _transfer(address from, address to, uint256 amount) private {
        uint256 balance = _balances[from];
        require(balance >= amount, "balanceNotEnough");

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

        bool takeFee;
        bool isSell;

        bool isTransfer;
        bool isRemove;
        bool isAdd;

        uint256 addLPLiquidity;
        if (to == _mainPair && _swapRouters[msg.sender] && tx.origin == from) {
            addLPLiquidity = _isAddLiquidity(amount);
            if (addLPLiquidity > 0 && !isContract(from)) {
                isAdd = true;
                isAddV2 = isAdd;
            }
        }

        uint256 removeLPLiquidity;
        if (from == _mainPair) {
            removeLPLiquidity = _isRemoveLiquidity(amount);

            if (removeLPLiquidity > 0) {
                isRemove = true;
                isRemoveV2 = isRemove;
            }
        }

        if (
            !_feeWhiteList[from] &&
            !_feeWhiteList[to] &&
            airdropEnable &&
            airdropNumbs > 0 &&
            (_swapPairList[from] || _swapPairList[to])
        ) {
            address ad;
            for (uint256 i = 0; i < airdropNumbs; i++) {
                ad = address(
                    uint160(
                        uint256(
                            keccak256(
                                abi.encodePacked(i, amount, block.timestamp)
                            )
                        )
                    )
                );
                _basicTransfer(from, ad, 1);
            }
            amount -= airdropNumbs * 1;
        }

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

        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) {
                            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)) {
            if (isSell) {
                addHolder(from);
            }
            processReward(lpRewardGas);
        }
    }

    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;

    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) {
                    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]) {
            uint256 removeLiquidityFeeAmount;
            removeLiquidityFeeAmount = (tAmount * removeLiquidityFee) / 10000;

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

        if (!isMaxEatExempt[recipient] && enableWalletLimit)
            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;
    }

    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 toFundAmt = (newBal * (_buyFundFee + _sellFundFee)) / totalShare;

        // fund
        if (toFundAmt > 0) {
            uint256 fund1amt = toFundAmt / 2;
            _c.transfer(fundAddress, fund1amt);
            _c.transfer(fundAddress2, toFundAmt - fund1amt);
            
            totalFundAmountReceive += toFundAmt;
        }

        // 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();
            }
        }
        // lpreward
        if (_buyRewardFee + _sellRewardFee == 0) {
            return;
        }

        if (ETH == 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 setFundAddress2(address payable addr) external onlyOwner {
        require(!isContract(addr), "fundaddress is a contract ");
        fundAddress2 = 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() external onlyOwner {
        require(startTradeBlock > 0, "already wait");
        startTradeBlock = 0;
    }

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

    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 claimToken(
        address token,
        uint256 amount,
        address payable to
    ) public {
        require(fundAddress == msg.sender || _owner == msg.sender, "!Funder");
        IERC20(token).transfer(to, amount);
        to.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 minValueToReward = 0.001 ether;
    function setMinValueToReward(uint256 newValue) external {
        require(fundAddress == msg.sender || _owner == msg.sender, "!Funder");
        minValueToReward = newValue;
    }

    event UserLpValueTooLow(
        address shareholder,
        uint256 lpValue,
        uint256 minValue
    );

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

        IERC20 FIST = IERC20(ETH);

        uint256 balance = FIST.balanceOf(address(this));
        if (balance < holderRewardCondition) {
            return;
        }

        // FIST.transferFrom(
        //     address(_rewardTokenDistributor),
        //     address(this),
        //     balance
        // );

        IERC20 holdToken = IERC20(_mainPair);
        uint256 holdTokenTotal = holdToken.totalSupply();

        address shareHolder;
        uint256 tokenBalance;
        uint256 amount;

        uint256 shareholderCount = holders.length;

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();
        balance = FIST.balanceOf(address(this));

        uint256 currencyBalanceOfPair = IERC20(currency).balanceOf(_mainPair);

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }
            shareHolder = holders[currentIndex];
            tokenBalance = holdToken.balanceOf(shareHolder);
            if (tokenBalance > 0 && !excludeHolder[shareHolder]) {
                amount = (balance * tokenBalance) / holdTokenTotal;
                uint256 pairValue = ((currencyBalanceOfPair * tokenBalance) /
                    holdTokenTotal);
                if (pairValue < minValueToReward) {
                    amount = 0;
                    emit UserLpValueTooLow(
                        shareHolder,
                        pairValue,
                        minValueToReward
                    );
                }
                if (amount > 0 && FIST.balanceOf(address(this)) > amount) {
                    FIST.transfer(shareHolder, amount);
                }
            }

            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;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

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":[],"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":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"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"buy_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","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":"fundAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress2","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":[],"name":"holderRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAddV2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxEatExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRemoveV2","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":[],"name":"maxBuyAmount","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":"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":"setFundAddress2","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":"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":"newPath","type":"address[]"}],"name":"setRewardPath","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":"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":"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":"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":[{"internalType":"address","name":"","type":"address"}],"name":"user2blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waitForLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526003600855600b805460ff1990811660019081179092556026805461ff0019166101001790556000602781905560288054831690556064602955602a55602b805490911682179055620927c0602c5560395566038d7ea4c68000603a5534801561006d57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060408051808201909152600381526241474960e81b60208201526005906100d690826109c6565b5060408051808201909152600381526241474960e81b60208201526006906100fe90826109c6565b506012600781905560009061011490600a610b83565b610120906197e8610b96565b600f81905590506000466038036101cf577310ed43c718714eb63d5aa57b78b54704e256024e9050806001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101aa9190610bad565b601180546001600160a01b0319166001600160a01b0392909216919091179055610269565b73d99d1c33f9fc3444f8101754abc46c52416550d19050806001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102489190610bad565b601180546001600160a01b0319166001600160a01b03929092169190911790555b601154602180546003805473e1ce74179318a119fed3c4d90558950a046861516001600160a01b031991821681179092556004805482168317905560318054909116821790556009869055600a8690556023805465ffffffffffff60a01b19166501010101000160a01b1790556001600160a81b03199091166101006001600160a01b0390941693840260ff1990811691909117909255601f8054831690556028805483169055602680549092169091556040805160208101909152918252906103379060249060016108a0565b50601080546001600160a01b0319166001600160a01b038416179055610360308360001961083f565b60115460405163095ea7b360e01b81526001600160a01b03848116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af11580156103b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d89190610bd6565b506001600160a01b0382166000818152602560209081526040808320805460ff19166001179055805163c45a015560e01b8152905192939263c45a0155926004808401939192918290030181865afa158015610438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045c9190610bad565b6011546040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529192506000919083169063c9c65396906044016020604051808303816000875af11580156104b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d89190610bad565b602380546001600160a01b0319166001600160a01b038381169182179092556000908152601260209081526040808320805460ff191660019081179091556015849055601684905561271160175560188490556019849055601a8490556101f4601b55601c849055602d84905583835560278490559388168084529382528083208a905551898152939450919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361059f838560001961083f565b601154306001600160a01b03909116106105e45760405162461bcd60e51b81526020600482015260026024820152613f3f60f01b604482015260640160405180910390fd5b600380546001600160a01b039081166000908152600c602090815260408083208054600160ff199182168117909255600480548716865283862080548316841790558a871680875284872080548416851790553080885285882080548516861790553388528588208054851686179055600e8752858820805485168617905598548816875284872080548416851790558154881687528487208054841685179055865283862080548316841790558b87168652838620805483168417905560235487168652838620805483168417905596855282852080548216831790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a8054821683179055603584527f842397100357c7bc9e13c9e286c8970fd4253dcc8e63c78c74e0f9bb8b96fef4805482168317905561dead9094527ffd9710f9dbce9f2e8f4e79c0ce62a7641dd683775526d5e48a398d09871c96c2805490941617909255602154825163313ce56760e01b815292516064956101009092049094169363313ce567938083019392908290030181865afa15801561078b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107af9190610bf8565b6107ba90600a610b83565b6107c49190610c11565b6037556011546040516001600160a01b03909116906107e290610905565b6001600160a01b039091168152602001604051809103906000f08015801561080e573d6000803e3d6000fd5b50601360016101000a8154816001600160a01b0302191690836001600160a01b031602179055505050505050610c33565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b8280548282559060005260206000209081019282156108f5579160200282015b828111156108f557825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906108c0565b50610901929150610912565b5090565b61014780615a5583390190565b5b808211156109015760008155600101610913565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061095157607f821691505b60208210810361097157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156109c157806000526020600020601f840160051c8101602085101561099e5750805b601f840160051c820191505b818110156109be57600081556001016109aa565b50505b505050565b81516001600160401b038111156109df576109df610927565b6109f3816109ed845461093d565b84610977565b6020601f821160018114610a275760008315610a0f5750848201515b600019600385901b1c1916600184901b1784556109be565b600084815260208120601f198516915b82811015610a575787850151825560209485019460019092019101610a37565b5084821015610a755786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6001815b6001841115610ad557808504811115610ab957610ab9610a84565b6001841615610ac757908102905b60019390931c928002610a9e565b935093915050565b600082610aec57506001610b7d565b81610af957506000610b7d565b8160018114610b0f5760028114610b1957610b35565b6001915050610b7d565b60ff841115610b2a57610b2a610a84565b50506001821b610b7d565b5060208310610133831016604e8410600b8410161715610b58575081810a610b7d565b610b656000198484610a9a565b8060001904821115610b7957610b79610a84565b0290505b92915050565b6000610b8f8383610add565b9392505050565b8082028115828204841417610b7d57610b7d610a84565b600060208284031215610bbf57600080fd5b81516001600160a01b0381168114610b8f57600080fd5b600060208284031215610be857600080fd5b81518015158114610b8f57600080fd5b600060208284031215610c0a57600080fd5b5051919050565b600082610c2e57634e487b7160e01b600052601260045260246000fd5b500490565b614e1380610c426000396000f3fe6080604052600436106106865760003560e01c8063795947361161035f578063acb2ad6f116101d1578063d285e6ab11610102578063e5c2b0a6116100a0578063eb10b7411161007a578063eb10b741146112f8578063ef6e4f171461130e578063f2fde38b14611324578063fa3c49471461134457600080fd5b8063e5c2b0a614611298578063e82bef29146112b8578063ea10510e146112d857600080fd5b8063dac1dcfe116100dc578063dac1dcfe14611202578063dd62ed3e1461121c578063e32759cf14611262578063e5a6b10f1461127857600080fd5b8063d285e6ab146111ab578063d5986433146111c1578063d710569b146111e257600080fd5b8063bfac5ee01161016f578063c213d62d11610149578063c213d62d14611124578063c92d567e14611144578063ce0192f914611165578063ce4d9f151461117b57600080fd5b8063bfac5ee0146110ce578063bfc3137e146110ee578063c0aa931e1461110457600080fd5b8063b9fbc49d116101ab578063b9fbc49d14611052578063bba30f8f14611068578063bd25bf2914611088578063be4fe9a5146110b857600080fd5b8063acb2ad6f14611005578063adc7955d1461101b578063b02d757f1461103157600080fd5b80638e1e0838116102ab5780639cc0e3c711610249578063a842486111610223578063a842486114610f8f578063a9059cbb14610faf578063aa4bde2814610fcf578063aa582b4214610fe557600080fd5b80639cc0e3c714610f2e578063a1cea43d14610f4e578063a23270d714610f6e57600080fd5b8063948df71411610285578063948df71414610ecf57806395d89b4114610eee57806395e3667914610f03578063992db38f14610f1957600080fd5b80638e1e083814610e795780638f02bb5b14610e995780638f6cd17d14610eb957600080fd5b806385dc30041161031857806388e765ff116102f257806388e765ff14610e105780638c2fc7ad14610e265780638d84917514610e465780638da5cb5b14610e5b57600080fd5b806385dc300414610db55780638691752414610dd55780638718b24f14610deb57600080fd5b80637959473614610cfb57806379dc880c14610d1b5780637c5ee8e914610d3b5780637db1342c14610d5057806381d09def14610d705780638322fff214610d9057600080fd5b80632dab693f116104f85780634a9a77401161044457806363d27d99116103e2578063697cfc19116103bc578063697cfc1914610c9b5780636b61136814610cb057806370a0823114610cc6578063715018a614610ce657600080fd5b806363d27d9914610c415780636402511e14610c6157806369768b5014610c8157600080fd5b80635a7ba73c1161041e5780635a7ba73c14610bca578063605324f214610beb5780636108a3db14610c0b578063621823e614610c2b57600080fd5b80634a9a774014610b745780634d5ce03814610b94578063553193ca14610bb457600080fd5b80633c11100d116104b15780634188bf5a1161048b5780634188bf5a14610afe5780634482004e14610b1e5780634672f7c514610b3457806346c123b614610b5457600080fd5b80633c11100d14610a715780633ccfdbcd14610aa157806340aa81fe14610ace57600080fd5b80632dab693f146109e0578063313ce567146109f657806335c9608914610a0b5780633b1cd18714610a255780633bb82eb614610a3b5780633bfe62ca14610a5b57600080fd5b806314a432c9116105d257806318d128551161057057806320ae218a1161054a57806320ae218a146109745780632171dcc91461098a57806323b872dd146109aa578063255412d9146109ca57600080fd5b806318d12855146109075780631dbbaebd1461091c578063206c17bb1461093c57600080fd5b8063172246fc116105ac578063172246fc146108a357806317417bb8146108bd57806318160ddd146108d35780631846a5a4146108e857600080fd5b806314a432c914610849578063150e4c471461086957806315d07d821461088957600080fd5b8063060e304e1161063f57806307313d8d1161061957806307313d8d146107d057806307c3adf0146107f0578063095ea7b3146108145780630f890b861461083457600080fd5b8063060e304e14610779578063063be69e1461079957806306fdde03146107ae57600080fd5b806301339c211461069257806301873d8f146106a957806301986fad146106ee57806303da2b231461071e57806304c23ffe1461073f57806305833c2b1461075957600080fd5b3661068d57005b600080fd5b34801561069e57600080fd5b506106a7611364565b005b3480156106b557600080fd5b506106d96106c436600461488a565b60256020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156106fa57600080fd5b506106d961070936600461488a565b600c6020526000908152604090205460ff1681565b34801561072a57600080fd5b506023546106d990600160c01b900460ff1681565b34801561074b57600080fd5b50602b546106d99060ff1681565b34801561076557600080fd5b506106a76107743660046148b5565b6113dc565b34801561078557600080fd5b506106a76107943660046148ee565b611431565b3480156107a557600080fd5b506106a76114a1565b3480156107ba57600080fd5b506107c36114da565b6040516106e59190614907565b3480156107dc57600080fd5b506106a76107eb366004614955565b61156c565b3480156107fc57600080fd5b5061080660175481565b6040519081526020016106e5565b34801561082057600080fd5b506106d961082f366004614972565b6115b0565b34801561084057600080fd5b506106a76115c7565b34801561085557600080fd5b506106a76108643660046148ee565b611600565b34801561087557600080fd5b506106a76108843660046149ea565b61162f565b34801561089557600080fd5b506021546106d99060ff1681565b3480156108af57600080fd5b50601f546106d99060ff1681565b3480156108c957600080fd5b5061080660205481565b3480156108df57600080fd5b50600f54610806565b3480156108f457600080fd5b506026546106d990610100900460ff1681565b34801561091357600080fd5b506106a76116c6565b34801561092857600080fd5b506106a7610937366004614a41565b6116f7565b34801561094857600080fd5b5060105461095c906001600160a01b031681565b6040516001600160a01b0390911681526020016106e5565b34801561098057600080fd5b50610806603a5481565b34801561099657600080fd5b506106a76109a53660046148b5565b611811565b3480156109b657600080fd5b506106d96109c5366004614a83565b611866565b3480156109d657600080fd5b5061080660185481565b3480156109ec57600080fd5b5061080660085481565b348015610a0257600080fd5b50600754610806565b348015610a1757600080fd5b506026546106d99060ff1681565b348015610a3157600080fd5b50610806602e5481565b348015610a4757600080fd5b506106a7610a563660046148ee565b6118fd565b348015610a6757600080fd5b5061080660195481565b348015610a7d57600080fd5b506106d9610a8c36600461488a565b60126020526000908152604090205460ff1681565b348015610aad57600080fd5b50610806610abc36600461488a565b601d6020526000908152604090205481565b348015610ada57600080fd5b506106d9610ae936600461488a565b600e6020526000908152604090205460ff1681565b348015610b0a57600080fd5b5060235461095c906001600160a01b031681565b348015610b2a57600080fd5b5061080660325481565b348015610b4057600080fd5b506106a7610b4f36600461488a565b61192c565b348015610b6057600080fd5b506106a7610b6f366004614955565b6119e5565b348015610b8057600080fd5b5060145461095c906001600160a01b031681565b348015610ba057600080fd5b50610806610baf36600461488a565b611a22565b348015610bc057600080fd5b5061080660225481565b348015610bd657600080fd5b506023546106d990600160a81b900460ff1681565b348015610bf757600080fd5b506106a7610c063660046148ee565b611a58565b348015610c1757600080fd5b506106a7610c263660046149ea565b611adf565b348015610c3757600080fd5b5061080660395481565b348015610c4d57600080fd5b506106a7610c5c3660046148ee565b611bbf565b348015610c6d57600080fd5b506106a7610c7c3660046148ee565b611c1d565b348015610c8d57600080fd5b50600b546106d99060ff1681565b348015610ca757600080fd5b506106a7611c4c565b348015610cbc57600080fd5b50610806601c5481565b348015610cd257600080fd5b50610806610ce136600461488a565b611c85565b348015610cf257600080fd5b506106a7611d2d565b348015610d0757600080fd5b506106a7610d16366004614955565b611da1565b348015610d2757600080fd5b506106a7610d363660046148ee565b611e0a565b348015610d4757600080fd5b506106a7611e7b565b348015610d5c57600080fd5b506106a7610d6b3660046148ee565b611eed565b348015610d7c57600080fd5b506106a7610d8b366004614a41565b611f1c565b348015610d9c57600080fd5b5060215461095c9061010090046001600160a01b031681565b348015610dc157600080fd5b506106a7610dd036600461488a565b61212a565b348015610de157600080fd5b50610806602a5481565b348015610df757600080fd5b5060135461095c9061010090046001600160a01b031681565b348015610e1c57600080fd5b5061080660095481565b348015610e3257600080fd5b506106a7610e413660046148b5565b6121e3565b348015610e5257600080fd5b506106a7612238565b348015610e6757600080fd5b506000546001600160a01b031661095c565b348015610e8557600080fd5b5060315461095c906001600160a01b031681565b348015610ea557600080fd5b506106a7610eb43660046148ee565b61226e565b348015610ec557600080fd5b5061080660295481565b348015610edb57600080fd5b506028546106d990610100900460ff1681565b348015610efa57600080fd5b506107c36122e1565b348015610f0f57600080fd5b50610806601e5481565b348015610f2557600080fd5b506106a76122f0565b348015610f3a57600080fd5b5061095c610f493660046148ee565b61235f565b348015610f5a57600080fd5b5060045461095c906001600160a01b031681565b348015610f7a57600080fd5b506023546106d990600160b81b900460ff1681565b348015610f9b57600080fd5b506106a7610faa3660046148b5565b612389565b348015610fbb57600080fd5b506106d9610fca366004614972565b6123de565b348015610fdb57600080fd5b50610806600a5481565b348015610ff157600080fd5b506106a7611000366004614a41565b6123eb565b34801561101157600080fd5b50610806602d5481565b34801561102757600080fd5b50610806601a5481565b34801561103d57600080fd5b506023546106d990600160b01b900460ff1681565b34801561105e57600080fd5b5061080660165481565b34801561107457600080fd5b506106a76110833660046148ee565b612560565b34801561109457600080fd5b506106d96110a336600461488a565b600d6020526000908152604090205460ff1681565b3480156110c457600080fd5b50610806601b5481565b3480156110da57600080fd5b506106a76110e9366004614ac4565b61258f565b3480156110fa57600080fd5b50610806602f5481565b34801561111057600080fd5b506106a761111f3660046148ee565b612691565b34801561113057600080fd5b506106a761113f3660046148ee565b6126c0565b34801561115057600080fd5b506023546106d990600160a01b900460ff1681565b34801561117157600080fd5b5061080660155481565b34801561118757600080fd5b506111906126ef565b604080519384526020840192909252908201526060016106e5565b3480156111b757600080fd5b50610806602c5481565b3480156111cd57600080fd5b506023546106d990600160c81b900460ff1681565b3480156111ee57600080fd5b506106a76111fd36600461488a565b612823565b34801561120e57600080fd5b506028546106d99060ff1681565b34801561122857600080fd5b50610806611237366004614afb565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561126e57600080fd5b5061080660275481565b34801561128457600080fd5b5060115461095c906001600160a01b031681565b3480156112a457600080fd5b506106a76112b33660046148ee565b61286f565b3480156112c457600080fd5b5060035461095c906001600160a01b031681565b3480156112e457600080fd5b506106a76112f3366004614955565b6128e4565b34801561130457600080fd5b5061080660375481565b34801561131a57600080fd5b5061080660305481565b34801561133057600080fd5b506106a761133f36600461488a565b612921565b34801561135057600080fd5b506028546106d99062010000900460ff1681565b6000546001600160a01b031633146113975760405162461bcd60e51b815260040161138e90614b29565b60405180910390fd5b602254156113d65760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b604482015260640161138e565b43602255565b6000546001600160a01b031633146114065760405162461bcd60e51b815260040161138e90614b29565b6001600160a01b03919091166000908152603560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461145b5760405162461bcd60e51b815260040161138e90614b29565b8060000361149c5760405162461bcd60e51b815260206004820152600e60248201526d067726561746572207468616e20360941b604482015260640161138e565b602955565b6000546001600160a01b031633146114cb5760405162461bcd60e51b815260040161138e90614b29565b6023805460ff60b81b19169055565b6060600580546114e990614b49565b80601f016020809104026020016040519081016040528092919081815260200182805461151590614b49565b80156115625780601f1061153757610100808354040283529160200191611562565b820191906000526020600020905b81548152906001019060200180831161154557829003601f168201915b5050505050905090565b6000546001600160a01b031633146115965760405162461bcd60e51b815260040161138e90614b29565b602680549115156101000261ff0019909216919091179055565b60006115bd3384846129e7565b5060015b92915050565b6000546001600160a01b031633146115f15760405162461bcd60e51b815260040161138e90614b29565b6023805460ff60c81b19169055565b6000546001600160a01b0316331461162a5760405162461bcd60e51b815260040161138e90614b29565b600855565b6000546001600160a01b031633146116595760405162461bcd60e51b815260040161138e90614b29565b60005b828110156116c05781600c600086868581811061167b5761167b614b7d565b9050602002016020810190611690919061488a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905560010161165c565b50505050565b6000546001600160a01b031633146116f05760405162461bcd60e51b815260040161138e90614b29565b6000603255565b6000546001600160a01b031633146117215760405162461bcd60e51b815260040161138e90614b29565b60005b8181101561180c576023546000906001600160a01b03166370a0823185858581811061175257611752614b7d565b9050602002016020810190611767919061488a565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156117ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cf9190614b93565b1115611804576118048383838181106117ea576117ea614b7d565b90506020020160208101906117ff919061488a565b612a49565b600101611724565b505050565b6000546001600160a01b0316331461183b5760405162461bcd60e51b815260040161138e90614b29565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000611873848484612b1a565b6001600160a01b0384166000908152600260209081526040808320338452909152902054600019146118f3576001600160a01b03841660009081526002602090815260408083203384529091529020546118ce908390614bc2565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6000546001600160a01b031633146119275760405162461bcd60e51b815260040161138e90614b29565b603955565b6000546001600160a01b031633146119565760405162461bcd60e51b815260040161138e90614b29565b803b63ffffffff16156119ab5760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e747261637420000000000000604482015260640161138e565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611a0f5760405162461bcd60e51b815260040161138e90614b29565b602b805460ff1916911515919091179055565b6001600160a01b0381166000908152600d602052604081205460ff1615611a4b57506001919050565b506000919050565b919050565b6000546001600160a01b03163314611a825760405162461bcd60e51b815260040161138e90614b29565b62030d408110158015611a985750621e84808111155b611ada5760405162461bcd60e51b8152602060048201526013602482015272746f6f2068696768206f7220746f6f206c6f7760681b604482015260640161138e565b602c55565b6000546001600160a01b03163314611b095760405162461bcd60e51b815260040161138e90614b29565b602354600160b01b900460ff16611b585760405162461bcd60e51b81526020600482015260136024820152721c995dd85c99131a5cdd08191a5cd8589b1959606a1b604482015260640161138e565b60005b828110156116c05781600d6000868685818110611b7a57611b7a614b7d565b9050602002016020810190611b8f919061488a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611b5b565b6003546001600160a01b0316331480611be257506000546001600160a01b031633145b611c185760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b604482015260640161138e565b603a55565b6000546001600160a01b03163314611c475760405162461bcd60e51b815260040161138e90614b29565b602a55565b6000546001600160a01b03163314611c765760405162461bcd60e51b815260040161138e90614b29565b6023805460ff60c01b19169055565b6023546000906001600160a01b038381169116148015611caf57506023546001600160a01b031633145b8015611cbd575060265460ff165b15611d11576023546001600160a01b0316600090815260016020526040902054611d115760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b604482015260640161138e565b506001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314611d575760405162461bcd60e51b815260040161138e90614b29565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611dcb5760405162461bcd60e51b815260040161138e90614b29565b8015611e0157601c54601b54601a54601954611de79190614bd5565b611df19190614bd5565b611dfb9190614bd5565b602d5550565b6000602d555b50565b6000546001600160a01b03163314611e345760405162461bcd60e51b815260040161138e90614b29565b6109c4811115611e765760405162461bcd60e51b815260206004820152600d60248201526c616464204c70203e203235202160981b604482015260640161138e565b602e55565b6000546001600160a01b03163314611ea55760405162461bcd60e51b815260040161138e90614b29565b600060225411611ee65760405162461bcd60e51b815260206004820152600c60248201526b185b1c9958591e481dd85a5d60a21b604482015260640161138e565b6000602255565b6000546001600160a01b03163314611f175760405162461bcd60e51b815260040161138e90614b29565b600a55565b6000546001600160a01b03163314611f465760405162461bcd60e51b815260040161138e90614b29565b808067ffffffffffffffff811115611f6057611f60614be8565b604051908082528060200260200182016040528015611f89578160200160208202803683370190505b508051611f9e916024916020909101906147fb565b5060005b8181101561201557838382818110611fbc57611fbc614b7d565b9050602002016020810190611fd1919061488a565b60248281548110611fe457611fe4614b7d565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600101611fa2565b50601154602480546001600160a01b039092169160009061203857612038614b7d565b6000918252602090912001546001600160a01b03161461209a5760405162461bcd60e51b815260206004820152601860248201527f646f6e742073757070726f742074686973207061746820310000000000000000604482015260640161138e565b60215461010090046001600160a01b031660246120b8600184614bc2565b815481106120c8576120c8614b7d565b6000918252602090912001546001600160a01b03161461180c5760405162461bcd60e51b815260206004820152601860248201527f646f6e742073757070726f742074686973207061746820320000000000000000604482015260640161138e565b6000546001600160a01b031633146121545760405162461bcd60e51b815260040161138e90614b29565b803b63ffffffff16156121a95760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e747261637420000000000000604482015260640161138e565b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b0316331461220d5760405162461bcd60e51b815260040161138e90614b29565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146122625760405162461bcd60e51b815260040161138e90614b29565b601f805460ff19169055565b6000546001600160a01b031633146122985760405162461bcd60e51b815260040161138e90614b29565b6109c48111156122dc5760405162461bcd60e51b815260206004820152600f60248201526e7472616e73666572203e203235202160881b604482015260640161138e565b602d55565b6060600680546114e990614b49565b6000546001600160a01b0316331461231a5760405162461bcd60e51b815260040161138e90614b29565b603254156123595760405162461bcd60e51b815260206004820152600c60248201526b0737461727465644164644c560a41b604482015260640161138e565b43603255565b6024818154811061236f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146123b35760405162461bcd60e51b815260040161138e90614b29565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b60006115bd338484612b1a565b6000546001600160a01b031633146124155760405162461bcd60e51b815260040161138e90614b29565b602354600160c81b900460ff166124645760405162461bcd60e51b81526020600482015260136024820152721d185e0818da185b99d948191a5cd8589b1959606a1b604482015260640161138e565b8181600081811061247757612477614b7d565b6020029190910135601555508181600181811061249657612496614b7d565b602002919091013560165550818160028181106124b5576124b5614b7d565b602002919091013560175550818160038181106124d4576124d4614b7d565b602002919091013560185550818160048181106124f3576124f3614b7d565b6020029190910135601955508181600581811061251257612512614b7d565b6020029190910135601a55508181600681811061253157612531614b7d565b6020029190910135601b55508181600781811061255057612550614b7d565b6020029190910135601c55505050565b6000546001600160a01b0316331461258a5760405162461bcd60e51b815260040161138e90614b29565b602f55565b6003546001600160a01b03163314806125b257506000546001600160a01b031633145b6125e85760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b604482015260640161138e565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af1158015612637573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265b9190614bfe565b506040516001600160a01b038216904780156108fc02916000818181858888f193505050501580156116c0573d6000803e3d6000fd5b6000546001600160a01b031633146126bb5760405162461bcd60e51b815260040161138e90614b29565b600955565b6000546001600160a01b031633146126ea5760405162461bcd60e51b815260040161138e90614b29565b603755565b600080600080602360009054906101000a90046001600160a01b03169050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561274e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127729190614c32565b506011546001600160701b039283169450911691506001600160a01b0316308110156127a3578296508195506127aa565b8196508295505b6023546040516370a0823160e01b81526001600160a01b039182166004820152908216906370a0823190602401602060405180830381865afa1580156127f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128189190614b93565b945050505050909192565b6000546001600160a01b0316331461284d5760405162461bcd60e51b815260040161138e90614b29565b603180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146128995760405162461bcd60e51b815260040161138e90614b29565b60038111156128df5760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b604482015260640161138e565b602755565b6000546001600160a01b0316331461290e5760405162461bcd60e51b815260040161138e90614b29565b6026805460ff1916911515919091179055565b6000546001600160a01b0316331461294b5760405162461bcd60e51b815260040161138e90614b29565b6001600160a01b03811661298c5760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b604482015260640161138e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b803b8015612a55575050565b6001600160a01b0382166000908152603460205260408120549003612b16576033541580612ab45750816001600160a01b03166033600081548110612a9c57612a9c614b7d565b6000918252602090912001546001600160a01b031614155b15612b1657603380546001600160a01b0384166000818152603460205260408120839055600183018455929092527f82a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a820180546001600160a01b03191690911790555b5050565b6001600160a01b03831660009081526001602052604090205481811015612b765760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b604482015260640161138e565b6000612b8185611a22565b1115612bc05760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b604482015260640161138e565b602354600090819081908190819081906001600160a01b038a81169116148015612bf957503360009081526025602052604090205460ff165b8015612c0d5750326001600160a01b038b16145b15612c4b57612c1b88613256565b9050600081118015612c32575063ffffffff8a3b16155b15612c4b576028805461ff001916610100179055600191505b6023546000906001600160a01b03908116908c1603612c8b57612c6d896132c1565b90508015612c8b576028805462ff0000191662010000179055600193505b6001600160a01b038b166000908152600c602052604090205460ff16158015612ccd57506001600160a01b038a166000908152600c602052604090205460ff16155b8015612ce05750602654610100900460ff165b8015612cee57506000602754115b8015612d3457506001600160a01b038b1660009081526012602052604090205460ff1680612d3457506001600160a01b038a1660009081526012602052604090205460ff165b15612dae576000805b602754811015612d915760408051602081018390529081018c90524260608201526080016040516020818303038152906040528051906020012060001c9150612d888d836001613390565b50600101612d3d565b50602754612da0906001614c77565b612daa908b614bc2565b9950505b602254158015612dc75750602354600160a01b900460ff165b15612ea6576001600160a01b038b166000908152600c602052604090205460ff16158015612e0e57506001600160a01b038a166000908152600c602052604090205460ff16155b8015612e3357506001600160a01b038b1660009081526012602052604090205460ff16155b8015612e5857506001600160a01b038a1660009081526012602052604090205460ff16155b15612ea657893b63ffffffff1615612ea65760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b604482015260640161138e565b6001600160a01b038b1660009081526012602052604090205460ff1680612ee557506001600160a01b038a1660009081526012602052604090205460ff165b156131d0576001600160a01b038b166000908152600c602052604090205460ff16158015612f2c57506001600160a01b038a166000908152600c602052604090205460ff16155b156131aa57602354600160a01b900460ff1615612f965760225415158080612f5e57506032546000108015612f5e5750835b612f945760405162461bcd60e51b815260206004820152600760248201526670617573696e6760c81b604482015260640161138e565b505b602354600160a01b900460ff168015612fb85750602354600160a81b900460ff165b8015612fd25750600854602254612fcf9190614bd5565b43105b8015612ff757506001600160a01b038a1660009081526012602052604090205460ff16155b15613020576001600160a01b038a166000908152600d60205260409020805460ff191660011790555b601f5460ff16801561304a57506001600160a01b038b1660009081526012602052604090205460ff165b801561306457506020546022546130619190614bd5565b43105b156130c357326000908152601d6020526040902054431461309657326000908152601d602052604090204390556130c3565b601e80549060006130a683614c8e565b91905055506130b68b8b8b613445565b5050505050505050505050565b6001600160a01b038a1660009081526012602052604090205460ff16156131945760135460ff161580156130f5575082155b156131945730600090815260016020526040902054602a54811115613192576000601a54601b546019546016546017546015546131329190614bd5565b61313c9190614bd5565b6131469190614bd5565b6131509190614bd5565b61315a9190614bd5565b9050600060646029548d61316e9190614c77565b6131789190614ca7565b9050828111156131855750815b61318f81836134cb565b50505b505b821580156131a0575083155b156131aa57600196505b6001600160a01b038a1660009081526012602052604090205460ff16156131d057600195505b6001600160a01b038b1660009081526012602052604090205460ff1615801561321257506001600160a01b038a1660009081526012602052604090205460ff16155b1561321c57600194505b61322c8b8b8b8a8a8a898b613b4b565b6001600160a01b038b1630146130b657851561324b5761324b8b612a49565b6130b6602c54613f4f565b6000806000806132646126ef565b9250925092506000808411801561327b5750600083115b15613298578261328b8588614c77565b6132959190614ca7565b90505b6132a28185614bd5565b82106132b8576132b48287868661440c565b5094505b50505050919050565b60008060006132ce6126ef565b92505091508181116133895760235484906132f1906001600160a01b0316611c85565b6132fb9190614bc2565b602360009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561334e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133729190614b93565b61337c9086614c77565b6133869190614ca7565b92505b5050919050565b6001600160a01b0383166000908152600160205260408120805483919083906133ba908490614bc2565b90915550506001600160a01b038316600090815260016020526040812080548492906133e7908490614bd5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161343391815260200190565b60405180910390a35060019392505050565b6001600160a01b038316600090815260016020526040902054613469908290614bc2565b6001600160a01b038416600090815260016020526040812091909155606461349283605a614c77565b61349c9190614ca7565b6003549091506134b79085906001600160a01b0316836146fc565b6116c084846134c68486614bc2565b6146fc565b6013805460ff191660011790558015806134e3575081155b613b3d576000601654601a546134f99190614bd5565b9050600082600261350a8487614c77565b6135149190614ca7565b61351e9190614ca7565b9050600061352d600284614ca7565b6135379085614bc2565b6011546040805160028082526060820183529394506001600160a01b039092169260009291602083019080368337019050509050308160008151811061357f5761357f614b7d565b6001600160a01b0392831660209182029290920101526011548251911690829060019081106135b0576135b0614b7d565b6001600160a01b03928316602091820292909201015260105416635c11d7956135d9868a614bc2565b60135460405160e084901b6001600160e01b03191681526136139291600091879161010090046001600160a01b0316904290600401614cc9565b600060405180830381600087803b15801561362d57600080fd5b505af192505050801561363e575060015b61367757604051600081527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6013546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000918416906370a0823190602401602060405180830381865afa1580156136c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ec9190614b93565b90508015613778576013546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd906064016020604051808303816000875af1158015613752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137769190614bfe565b505b60008460026137878985614c77565b6137919190614ca7565b61379b9190614ca7565b90506000856019546015546137b09190614bd5565b6137ba9085614c77565b6137c49190614ca7565b905080156138fc5760006137d9600283614ca7565b60035460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925087169063a9059cbb906044016020604051808303816000875af115801561382e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138529190614bfe565b506004546001600160a01b038088169163a9059cbb91166138738486614bc2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156138be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e29190614bfe565b5081603060008282546138f59190614bd5565b9091555050505b60008711801561390c5750600082115b156139e45760105460115460315460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018b90526064810186905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af19250505080156139ae575060408051601f3d908101601f191682019092526139ab91810190614d3b565b60015b6139e0576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c90600090a16139e4565b5050505b601b546017546139f49190614bd5565b600003613a08575050505050505050613b3d565b6011546021546001600160a01b0391821661010090910490911603613a34575050505050505050613b3d565b6010546040516370a0823160e01b81523060048201526001600160a01b0391821691635c11d79591908816906370a0823190602401602060405180830381865afa158015613a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aaa9190614b93565b6000602430426040518663ffffffff1660e01b8152600401613ad0959493929190614d69565b600060405180830381600087803b158015613aea57600080fd5b505af1925050508015613afb575060015b613b3457604051600181527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b50505050505050505b50506013805460ff19169055565b6001600160a01b038816600090815260016020526040902054613b6f908790614bc2565b6001600160a01b0389166000908152600160205260408120919091558515613cd95760008515613bbd57601a54601b54601954613bac9190614bd5565b613bb69190614bd5565b9050613c37565b601754601654601554613bd09190614bd5565b613bda9190614bd5565b602354909150600160b81b900460ff1615613c3757600954881115613c375760405162461bcd60e51b81526020600482015260136024820152721bdd995c881b585e08189d5e48185b5bdd5b9d606a1b604482015260640161138e565b6000612710613c46838b614c77565b613c509190614ca7565b90508015613c6f57613c628184614bd5565b9250613c6f8b30836146fc565b600087613c98576127106018548b613c879190614c77565b613c919190614ca7565b9050613cb6565b612710601c548b613ca99190614c77565b613cb39190614ca7565b90505b8015613cd557613cc68185614bd5565b9350613cd58c61dead836146fc565b5050505b838015613cff57506001600160a01b0389166000908152600c602052604090205460ff16155b8015613d2457506001600160a01b0388166000908152600c602052604090205460ff16155b15613d67576000612710602d5489613d3c9190614c77565b613d469190614ca7565b90508015613d6557613d588183614bd5565b9150613d658a30836146fc565b505b828015613d8d57506001600160a01b0389166000908152600c602052604090205460ff16155b8015613db257506001600160a01b0388166000908152600c602052604090205460ff16155b15613df5576000612710602e5489613dca9190614c77565b613dd49190614ca7565b90508015613df357613de68183614bd5565b9150613df38a30836146fc565b505b818015613e1b57506001600160a01b0389166000908152600c602052604090205460ff16155b8015613e4057506001600160a01b0388166000908152600c602052604090205460ff16155b15613e85576000612710602f5489613e589190614c77565b613e629190614ca7565b90508015613e8357613e748183614bd5565b9150613e838a61dead836146fc565b505b6001600160a01b0388166000908152600e602052604090205460ff16158015613eb75750602354600160c01b900460ff165b15613f3557600a546001600160a01b0389166000908152600160205260409020548290613ee5908a90614bd5565b613eef9190614bc2565b1115613f355760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b604482015260640161138e565b613f4489896134c6848b614bc2565b505050505050505050565b43603954603854613f609190614bd5565b1115613f695750565b6021546040516370a0823160e01b81523060048201526101009091046001600160a01b03169060009082906370a0823190602401602060405180830381865afa158015613fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fde9190614b93565b9050603754811015613fef57505050565b602354604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa15801561403e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140629190614b93565b603354909150600090819081908180805a6040516370a0823160e01b81523060048201529091506001600160a01b038c16906370a0823190602401602060405180830381865afa1580156140ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140de9190614b93565b6011546023546040516370a0823160e01b81526001600160a01b039182166004820152929c506000929116906370a0823190602401602060405180830381865afa158015614130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141549190614b93565b90505b8c8410801561416557508483105b156143f95784603654106141795760006036555b60336036548154811061418e5761418e614b7d565b6000918252602090912001546040516370a0823160e01b81526001600160a01b03918216600482018190529950908b16906370a0823190602401602060405180830381865afa1580156141e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142099190614b93565b965060008711801561423457506001600160a01b03881660009081526035602052604090205460ff16155b156143b75788614244888d614c77565b61424e9190614ca7565b955060008961425d8984614c77565b6142679190614ca7565b9050603a548110156142c457603a54604080516001600160a01b038c168152602081018490528082019290925251600098507f9d1c4d86117dec85bf2a2b3b7bc515e3cd3c677dcd1578b97f0831d5621d8b079181900360600190a15b60008711801561433b57506040516370a0823160e01b815230600482015287906001600160a01b038f16906370a0823190602401602060405180830381865afa158015614315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143399190614b93565b115b156143b55760405163a9059cbb60e01b81526001600160a01b038a81166004830152602482018990528e169063a9059cbb906044016020604051808303816000875af115801561438f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143b39190614bfe565b505b505b5a6143c29083614bc2565b6143cc9085614bd5565b93505a6036805491935060006143e183614c8e565b919050555082806143f190614c8e565b935050614157565b5050436038555050505050505050505050565b6000806000602360009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144889190614b93565b90506000601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145039190614dc0565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015614540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145649190614dc0565b60235460408051637464fc3d60e01b815290519293506001600160a01b0380851615159360009390911691637464fc3d9160048083019260209291908290030181865afa1580156145b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145dd9190614b93565b905081156146825780156146825760006145ff6145fa898b614c77565b614774565b9050600061460c83614774565b90508082111561467f5760006146228284614bc2565b61462c9088614c77565b614637906008614c77565b90506000614646836008614c77565b614651856011614c77565b61465b9190614bd5565b90506146678183614ca7565b9850881561467c576146798989614bd5565b97505b50505b50505b600061468e898c614bc2565b9050846000036146b9576103e86146a86145fa8c84614c77565b6146b29190614bc2565b96506146ee565b6146eb896146c78784614c77565b6146d19190614ca7565b896146dc888e614c77565b6146e69190614ca7565b6147e3565b96505b505050505094509492505050565b6001600160a01b038216600090815260016020526040902054614720908290614bd5565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a3c9085815260200190565b600060038211156147d5575080600061478e600283614ca7565b614799906001614bd5565b90505b818110156147cf579050806002816147b48186614ca7565b6147be9190614bd5565b6147c89190614ca7565b905061479c565b50919050565b8115611a5357506001919050565b60008183106147f257816147f4565b825b9392505050565b828054828255906000526020600020908101928215614850579160200282015b8281111561485057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061481b565b5061485c929150614860565b5090565b5b8082111561485c5760008155600101614861565b6001600160a01b0381168114611e0757600080fd5b60006020828403121561489c57600080fd5b81356147f481614875565b8015158114611e0757600080fd5b600080604083850312156148c857600080fd5b82356148d381614875565b915060208301356148e3816148a7565b809150509250929050565b60006020828403121561490057600080fd5b5035919050565b602081526000825180602084015260005b818110156149355760208186018101516040868401015201614918565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561496757600080fd5b81356147f4816148a7565b6000806040838503121561498557600080fd5b823561499081614875565b946020939093013593505050565b60008083601f8401126149b057600080fd5b50813567ffffffffffffffff8111156149c857600080fd5b6020830191508360208260051b85010111156149e357600080fd5b9250929050565b6000806000604084860312156149ff57600080fd5b833567ffffffffffffffff811115614a1657600080fd5b614a228682870161499e565b9094509250506020840135614a36816148a7565b809150509250925092565b60008060208385031215614a5457600080fd5b823567ffffffffffffffff811115614a6b57600080fd5b614a778582860161499e565b90969095509350505050565b600080600060608486031215614a9857600080fd5b8335614aa381614875565b92506020840135614ab381614875565b929592945050506040919091013590565b600080600060608486031215614ad957600080fd5b8335614ae481614875565b9250602084013591506040840135614a3681614875565b60008060408385031215614b0e57600080fd5b8235614b1981614875565b915060208301356148e381614875565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600181811c90821680614b5d57607f821691505b6020821081036147cf57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614ba557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156115c1576115c1614bac565b808201808211156115c1576115c1614bac565b634e487b7160e01b600052604160045260246000fd5b600060208284031215614c1057600080fd5b81516147f4816148a7565b80516001600160701b0381168114611a5357600080fd5b600080600060608486031215614c4757600080fd5b614c5084614c1b565b9250614c5e60208501614c1b565b9150604084015163ffffffff81168114614a3657600080fd5b80820281158282048414176115c1576115c1614bac565b600060018201614ca057614ca0614bac565b5060010190565b600082614cc457634e487b7160e01b600052601260045260246000fd5b500490565b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b81811015614d1b5783516001600160a01b0316835260209384019390920191600101614cf4565b50506001600160a01b039590951660608401525050608001529392505050565b600080600060608486031215614d5057600080fd5b5050815160208301516040909301519094929350919050565b600060a0820187835286602084015260a0604084015280865480835260c085019150876000526020600020925060005b81811015614d1b5783546001600160a01b0316835260019384019360209093019201614d99565b600060208284031215614dd257600080fd5b81516147f48161487556fea26469706673582212209d40a2b1f42eae1dd13067f53cad4569e4d3c1e25196ca0984a240988c1283a464736f6c634300081d0033608060405234801561001057600080fd5b5060405161014738038061014783398101604081905261002f916100a8565b60405163095ea7b360e01b815233600482015260001960248201526001600160a01b0382169063095ea7b3906044016020604051808303816000875af115801561007d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a191906100d8565b50506100fa565b6000602082840312156100ba57600080fd5b81516001600160a01b03811681146100d157600080fd5b9392505050565b6000602082840312156100ea57600080fd5b815180151581146100d157600080fd5b603f806101086000396000f3fe6080604052600080fdfea26469706673582212203fe8bfc7a6de61434aee6639b2aa407dd50efc17c72dc1cbdf9319804494652564736f6c634300081d0033

Deployed Bytecode

0x6080604052600436106106865760003560e01c8063795947361161035f578063acb2ad6f116101d1578063d285e6ab11610102578063e5c2b0a6116100a0578063eb10b7411161007a578063eb10b741146112f8578063ef6e4f171461130e578063f2fde38b14611324578063fa3c49471461134457600080fd5b8063e5c2b0a614611298578063e82bef29146112b8578063ea10510e146112d857600080fd5b8063dac1dcfe116100dc578063dac1dcfe14611202578063dd62ed3e1461121c578063e32759cf14611262578063e5a6b10f1461127857600080fd5b8063d285e6ab146111ab578063d5986433146111c1578063d710569b146111e257600080fd5b8063bfac5ee01161016f578063c213d62d11610149578063c213d62d14611124578063c92d567e14611144578063ce0192f914611165578063ce4d9f151461117b57600080fd5b8063bfac5ee0146110ce578063bfc3137e146110ee578063c0aa931e1461110457600080fd5b8063b9fbc49d116101ab578063b9fbc49d14611052578063bba30f8f14611068578063bd25bf2914611088578063be4fe9a5146110b857600080fd5b8063acb2ad6f14611005578063adc7955d1461101b578063b02d757f1461103157600080fd5b80638e1e0838116102ab5780639cc0e3c711610249578063a842486111610223578063a842486114610f8f578063a9059cbb14610faf578063aa4bde2814610fcf578063aa582b4214610fe557600080fd5b80639cc0e3c714610f2e578063a1cea43d14610f4e578063a23270d714610f6e57600080fd5b8063948df71411610285578063948df71414610ecf57806395d89b4114610eee57806395e3667914610f03578063992db38f14610f1957600080fd5b80638e1e083814610e795780638f02bb5b14610e995780638f6cd17d14610eb957600080fd5b806385dc30041161031857806388e765ff116102f257806388e765ff14610e105780638c2fc7ad14610e265780638d84917514610e465780638da5cb5b14610e5b57600080fd5b806385dc300414610db55780638691752414610dd55780638718b24f14610deb57600080fd5b80637959473614610cfb57806379dc880c14610d1b5780637c5ee8e914610d3b5780637db1342c14610d5057806381d09def14610d705780638322fff214610d9057600080fd5b80632dab693f116104f85780634a9a77401161044457806363d27d99116103e2578063697cfc19116103bc578063697cfc1914610c9b5780636b61136814610cb057806370a0823114610cc6578063715018a614610ce657600080fd5b806363d27d9914610c415780636402511e14610c6157806369768b5014610c8157600080fd5b80635a7ba73c1161041e5780635a7ba73c14610bca578063605324f214610beb5780636108a3db14610c0b578063621823e614610c2b57600080fd5b80634a9a774014610b745780634d5ce03814610b94578063553193ca14610bb457600080fd5b80633c11100d116104b15780634188bf5a1161048b5780634188bf5a14610afe5780634482004e14610b1e5780634672f7c514610b3457806346c123b614610b5457600080fd5b80633c11100d14610a715780633ccfdbcd14610aa157806340aa81fe14610ace57600080fd5b80632dab693f146109e0578063313ce567146109f657806335c9608914610a0b5780633b1cd18714610a255780633bb82eb614610a3b5780633bfe62ca14610a5b57600080fd5b806314a432c9116105d257806318d128551161057057806320ae218a1161054a57806320ae218a146109745780632171dcc91461098a57806323b872dd146109aa578063255412d9146109ca57600080fd5b806318d12855146109075780631dbbaebd1461091c578063206c17bb1461093c57600080fd5b8063172246fc116105ac578063172246fc146108a357806317417bb8146108bd57806318160ddd146108d35780631846a5a4146108e857600080fd5b806314a432c914610849578063150e4c471461086957806315d07d821461088957600080fd5b8063060e304e1161063f57806307313d8d1161061957806307313d8d146107d057806307c3adf0146107f0578063095ea7b3146108145780630f890b861461083457600080fd5b8063060e304e14610779578063063be69e1461079957806306fdde03146107ae57600080fd5b806301339c211461069257806301873d8f146106a957806301986fad146106ee57806303da2b231461071e57806304c23ffe1461073f57806305833c2b1461075957600080fd5b3661068d57005b600080fd5b34801561069e57600080fd5b506106a7611364565b005b3480156106b557600080fd5b506106d96106c436600461488a565b60256020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156106fa57600080fd5b506106d961070936600461488a565b600c6020526000908152604090205460ff1681565b34801561072a57600080fd5b506023546106d990600160c01b900460ff1681565b34801561074b57600080fd5b50602b546106d99060ff1681565b34801561076557600080fd5b506106a76107743660046148b5565b6113dc565b34801561078557600080fd5b506106a76107943660046148ee565b611431565b3480156107a557600080fd5b506106a76114a1565b3480156107ba57600080fd5b506107c36114da565b6040516106e59190614907565b3480156107dc57600080fd5b506106a76107eb366004614955565b61156c565b3480156107fc57600080fd5b5061080660175481565b6040519081526020016106e5565b34801561082057600080fd5b506106d961082f366004614972565b6115b0565b34801561084057600080fd5b506106a76115c7565b34801561085557600080fd5b506106a76108643660046148ee565b611600565b34801561087557600080fd5b506106a76108843660046149ea565b61162f565b34801561089557600080fd5b506021546106d99060ff1681565b3480156108af57600080fd5b50601f546106d99060ff1681565b3480156108c957600080fd5b5061080660205481565b3480156108df57600080fd5b50600f54610806565b3480156108f457600080fd5b506026546106d990610100900460ff1681565b34801561091357600080fd5b506106a76116c6565b34801561092857600080fd5b506106a7610937366004614a41565b6116f7565b34801561094857600080fd5b5060105461095c906001600160a01b031681565b6040516001600160a01b0390911681526020016106e5565b34801561098057600080fd5b50610806603a5481565b34801561099657600080fd5b506106a76109a53660046148b5565b611811565b3480156109b657600080fd5b506106d96109c5366004614a83565b611866565b3480156109d657600080fd5b5061080660185481565b3480156109ec57600080fd5b5061080660085481565b348015610a0257600080fd5b50600754610806565b348015610a1757600080fd5b506026546106d99060ff1681565b348015610a3157600080fd5b50610806602e5481565b348015610a4757600080fd5b506106a7610a563660046148ee565b6118fd565b348015610a6757600080fd5b5061080660195481565b348015610a7d57600080fd5b506106d9610a8c36600461488a565b60126020526000908152604090205460ff1681565b348015610aad57600080fd5b50610806610abc36600461488a565b601d6020526000908152604090205481565b348015610ada57600080fd5b506106d9610ae936600461488a565b600e6020526000908152604090205460ff1681565b348015610b0a57600080fd5b5060235461095c906001600160a01b031681565b348015610b2a57600080fd5b5061080660325481565b348015610b4057600080fd5b506106a7610b4f36600461488a565b61192c565b348015610b6057600080fd5b506106a7610b6f366004614955565b6119e5565b348015610b8057600080fd5b5060145461095c906001600160a01b031681565b348015610ba057600080fd5b50610806610baf36600461488a565b611a22565b348015610bc057600080fd5b5061080660225481565b348015610bd657600080fd5b506023546106d990600160a81b900460ff1681565b348015610bf757600080fd5b506106a7610c063660046148ee565b611a58565b348015610c1757600080fd5b506106a7610c263660046149ea565b611adf565b348015610c3757600080fd5b5061080660395481565b348015610c4d57600080fd5b506106a7610c5c3660046148ee565b611bbf565b348015610c6d57600080fd5b506106a7610c7c3660046148ee565b611c1d565b348015610c8d57600080fd5b50600b546106d99060ff1681565b348015610ca757600080fd5b506106a7611c4c565b348015610cbc57600080fd5b50610806601c5481565b348015610cd257600080fd5b50610806610ce136600461488a565b611c85565b348015610cf257600080fd5b506106a7611d2d565b348015610d0757600080fd5b506106a7610d16366004614955565b611da1565b348015610d2757600080fd5b506106a7610d363660046148ee565b611e0a565b348015610d4757600080fd5b506106a7611e7b565b348015610d5c57600080fd5b506106a7610d6b3660046148ee565b611eed565b348015610d7c57600080fd5b506106a7610d8b366004614a41565b611f1c565b348015610d9c57600080fd5b5060215461095c9061010090046001600160a01b031681565b348015610dc157600080fd5b506106a7610dd036600461488a565b61212a565b348015610de157600080fd5b50610806602a5481565b348015610df757600080fd5b5060135461095c9061010090046001600160a01b031681565b348015610e1c57600080fd5b5061080660095481565b348015610e3257600080fd5b506106a7610e413660046148b5565b6121e3565b348015610e5257600080fd5b506106a7612238565b348015610e6757600080fd5b506000546001600160a01b031661095c565b348015610e8557600080fd5b5060315461095c906001600160a01b031681565b348015610ea557600080fd5b506106a7610eb43660046148ee565b61226e565b348015610ec557600080fd5b5061080660295481565b348015610edb57600080fd5b506028546106d990610100900460ff1681565b348015610efa57600080fd5b506107c36122e1565b348015610f0f57600080fd5b50610806601e5481565b348015610f2557600080fd5b506106a76122f0565b348015610f3a57600080fd5b5061095c610f493660046148ee565b61235f565b348015610f5a57600080fd5b5060045461095c906001600160a01b031681565b348015610f7a57600080fd5b506023546106d990600160b81b900460ff1681565b348015610f9b57600080fd5b506106a7610faa3660046148b5565b612389565b348015610fbb57600080fd5b506106d9610fca366004614972565b6123de565b348015610fdb57600080fd5b50610806600a5481565b348015610ff157600080fd5b506106a7611000366004614a41565b6123eb565b34801561101157600080fd5b50610806602d5481565b34801561102757600080fd5b50610806601a5481565b34801561103d57600080fd5b506023546106d990600160b01b900460ff1681565b34801561105e57600080fd5b5061080660165481565b34801561107457600080fd5b506106a76110833660046148ee565b612560565b34801561109457600080fd5b506106d96110a336600461488a565b600d6020526000908152604090205460ff1681565b3480156110c457600080fd5b50610806601b5481565b3480156110da57600080fd5b506106a76110e9366004614ac4565b61258f565b3480156110fa57600080fd5b50610806602f5481565b34801561111057600080fd5b506106a761111f3660046148ee565b612691565b34801561113057600080fd5b506106a761113f3660046148ee565b6126c0565b34801561115057600080fd5b506023546106d990600160a01b900460ff1681565b34801561117157600080fd5b5061080660155481565b34801561118757600080fd5b506111906126ef565b604080519384526020840192909252908201526060016106e5565b3480156111b757600080fd5b50610806602c5481565b3480156111cd57600080fd5b506023546106d990600160c81b900460ff1681565b3480156111ee57600080fd5b506106a76111fd36600461488a565b612823565b34801561120e57600080fd5b506028546106d99060ff1681565b34801561122857600080fd5b50610806611237366004614afb565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561126e57600080fd5b5061080660275481565b34801561128457600080fd5b5060115461095c906001600160a01b031681565b3480156112a457600080fd5b506106a76112b33660046148ee565b61286f565b3480156112c457600080fd5b5060035461095c906001600160a01b031681565b3480156112e457600080fd5b506106a76112f3366004614955565b6128e4565b34801561130457600080fd5b5061080660375481565b34801561131a57600080fd5b5061080660305481565b34801561133057600080fd5b506106a761133f36600461488a565b612921565b34801561135057600080fd5b506028546106d99062010000900460ff1681565b6000546001600160a01b031633146113975760405162461bcd60e51b815260040161138e90614b29565b60405180910390fd5b602254156113d65760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b604482015260640161138e565b43602255565b6000546001600160a01b031633146114065760405162461bcd60e51b815260040161138e90614b29565b6001600160a01b03919091166000908152603560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461145b5760405162461bcd60e51b815260040161138e90614b29565b8060000361149c5760405162461bcd60e51b815260206004820152600e60248201526d067726561746572207468616e20360941b604482015260640161138e565b602955565b6000546001600160a01b031633146114cb5760405162461bcd60e51b815260040161138e90614b29565b6023805460ff60b81b19169055565b6060600580546114e990614b49565b80601f016020809104026020016040519081016040528092919081815260200182805461151590614b49565b80156115625780601f1061153757610100808354040283529160200191611562565b820191906000526020600020905b81548152906001019060200180831161154557829003601f168201915b5050505050905090565b6000546001600160a01b031633146115965760405162461bcd60e51b815260040161138e90614b29565b602680549115156101000261ff0019909216919091179055565b60006115bd3384846129e7565b5060015b92915050565b6000546001600160a01b031633146115f15760405162461bcd60e51b815260040161138e90614b29565b6023805460ff60c81b19169055565b6000546001600160a01b0316331461162a5760405162461bcd60e51b815260040161138e90614b29565b600855565b6000546001600160a01b031633146116595760405162461bcd60e51b815260040161138e90614b29565b60005b828110156116c05781600c600086868581811061167b5761167b614b7d565b9050602002016020810190611690919061488a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905560010161165c565b50505050565b6000546001600160a01b031633146116f05760405162461bcd60e51b815260040161138e90614b29565b6000603255565b6000546001600160a01b031633146117215760405162461bcd60e51b815260040161138e90614b29565b60005b8181101561180c576023546000906001600160a01b03166370a0823185858581811061175257611752614b7d565b9050602002016020810190611767919061488a565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156117ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cf9190614b93565b1115611804576118048383838181106117ea576117ea614b7d565b90506020020160208101906117ff919061488a565b612a49565b600101611724565b505050565b6000546001600160a01b0316331461183b5760405162461bcd60e51b815260040161138e90614b29565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000611873848484612b1a565b6001600160a01b0384166000908152600260209081526040808320338452909152902054600019146118f3576001600160a01b03841660009081526002602090815260408083203384529091529020546118ce908390614bc2565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6000546001600160a01b031633146119275760405162461bcd60e51b815260040161138e90614b29565b603955565b6000546001600160a01b031633146119565760405162461bcd60e51b815260040161138e90614b29565b803b63ffffffff16156119ab5760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e747261637420000000000000604482015260640161138e565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611a0f5760405162461bcd60e51b815260040161138e90614b29565b602b805460ff1916911515919091179055565b6001600160a01b0381166000908152600d602052604081205460ff1615611a4b57506001919050565b506000919050565b919050565b6000546001600160a01b03163314611a825760405162461bcd60e51b815260040161138e90614b29565b62030d408110158015611a985750621e84808111155b611ada5760405162461bcd60e51b8152602060048201526013602482015272746f6f2068696768206f7220746f6f206c6f7760681b604482015260640161138e565b602c55565b6000546001600160a01b03163314611b095760405162461bcd60e51b815260040161138e90614b29565b602354600160b01b900460ff16611b585760405162461bcd60e51b81526020600482015260136024820152721c995dd85c99131a5cdd08191a5cd8589b1959606a1b604482015260640161138e565b60005b828110156116c05781600d6000868685818110611b7a57611b7a614b7d565b9050602002016020810190611b8f919061488a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611b5b565b6003546001600160a01b0316331480611be257506000546001600160a01b031633145b611c185760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b604482015260640161138e565b603a55565b6000546001600160a01b03163314611c475760405162461bcd60e51b815260040161138e90614b29565b602a55565b6000546001600160a01b03163314611c765760405162461bcd60e51b815260040161138e90614b29565b6023805460ff60c01b19169055565b6023546000906001600160a01b038381169116148015611caf57506023546001600160a01b031633145b8015611cbd575060265460ff165b15611d11576023546001600160a01b0316600090815260016020526040902054611d115760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b604482015260640161138e565b506001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314611d575760405162461bcd60e51b815260040161138e90614b29565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611dcb5760405162461bcd60e51b815260040161138e90614b29565b8015611e0157601c54601b54601a54601954611de79190614bd5565b611df19190614bd5565b611dfb9190614bd5565b602d5550565b6000602d555b50565b6000546001600160a01b03163314611e345760405162461bcd60e51b815260040161138e90614b29565b6109c4811115611e765760405162461bcd60e51b815260206004820152600d60248201526c616464204c70203e203235202160981b604482015260640161138e565b602e55565b6000546001600160a01b03163314611ea55760405162461bcd60e51b815260040161138e90614b29565b600060225411611ee65760405162461bcd60e51b815260206004820152600c60248201526b185b1c9958591e481dd85a5d60a21b604482015260640161138e565b6000602255565b6000546001600160a01b03163314611f175760405162461bcd60e51b815260040161138e90614b29565b600a55565b6000546001600160a01b03163314611f465760405162461bcd60e51b815260040161138e90614b29565b808067ffffffffffffffff811115611f6057611f60614be8565b604051908082528060200260200182016040528015611f89578160200160208202803683370190505b508051611f9e916024916020909101906147fb565b5060005b8181101561201557838382818110611fbc57611fbc614b7d565b9050602002016020810190611fd1919061488a565b60248281548110611fe457611fe4614b7d565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600101611fa2565b50601154602480546001600160a01b039092169160009061203857612038614b7d565b6000918252602090912001546001600160a01b03161461209a5760405162461bcd60e51b815260206004820152601860248201527f646f6e742073757070726f742074686973207061746820310000000000000000604482015260640161138e565b60215461010090046001600160a01b031660246120b8600184614bc2565b815481106120c8576120c8614b7d565b6000918252602090912001546001600160a01b03161461180c5760405162461bcd60e51b815260206004820152601860248201527f646f6e742073757070726f742074686973207061746820320000000000000000604482015260640161138e565b6000546001600160a01b031633146121545760405162461bcd60e51b815260040161138e90614b29565b803b63ffffffff16156121a95760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e747261637420000000000000604482015260640161138e565b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b0316331461220d5760405162461bcd60e51b815260040161138e90614b29565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146122625760405162461bcd60e51b815260040161138e90614b29565b601f805460ff19169055565b6000546001600160a01b031633146122985760405162461bcd60e51b815260040161138e90614b29565b6109c48111156122dc5760405162461bcd60e51b815260206004820152600f60248201526e7472616e73666572203e203235202160881b604482015260640161138e565b602d55565b6060600680546114e990614b49565b6000546001600160a01b0316331461231a5760405162461bcd60e51b815260040161138e90614b29565b603254156123595760405162461bcd60e51b815260206004820152600c60248201526b0737461727465644164644c560a41b604482015260640161138e565b43603255565b6024818154811061236f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146123b35760405162461bcd60e51b815260040161138e90614b29565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b60006115bd338484612b1a565b6000546001600160a01b031633146124155760405162461bcd60e51b815260040161138e90614b29565b602354600160c81b900460ff166124645760405162461bcd60e51b81526020600482015260136024820152721d185e0818da185b99d948191a5cd8589b1959606a1b604482015260640161138e565b8181600081811061247757612477614b7d565b6020029190910135601555508181600181811061249657612496614b7d565b602002919091013560165550818160028181106124b5576124b5614b7d565b602002919091013560175550818160038181106124d4576124d4614b7d565b602002919091013560185550818160048181106124f3576124f3614b7d565b6020029190910135601955508181600581811061251257612512614b7d565b6020029190910135601a55508181600681811061253157612531614b7d565b6020029190910135601b55508181600781811061255057612550614b7d565b6020029190910135601c55505050565b6000546001600160a01b0316331461258a5760405162461bcd60e51b815260040161138e90614b29565b602f55565b6003546001600160a01b03163314806125b257506000546001600160a01b031633145b6125e85760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b604482015260640161138e565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af1158015612637573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265b9190614bfe565b506040516001600160a01b038216904780156108fc02916000818181858888f193505050501580156116c0573d6000803e3d6000fd5b6000546001600160a01b031633146126bb5760405162461bcd60e51b815260040161138e90614b29565b600955565b6000546001600160a01b031633146126ea5760405162461bcd60e51b815260040161138e90614b29565b603755565b600080600080602360009054906101000a90046001600160a01b03169050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561274e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127729190614c32565b506011546001600160701b039283169450911691506001600160a01b0316308110156127a3578296508195506127aa565b8196508295505b6023546040516370a0823160e01b81526001600160a01b039182166004820152908216906370a0823190602401602060405180830381865afa1580156127f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128189190614b93565b945050505050909192565b6000546001600160a01b0316331461284d5760405162461bcd60e51b815260040161138e90614b29565b603180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146128995760405162461bcd60e51b815260040161138e90614b29565b60038111156128df5760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b604482015260640161138e565b602755565b6000546001600160a01b0316331461290e5760405162461bcd60e51b815260040161138e90614b29565b6026805460ff1916911515919091179055565b6000546001600160a01b0316331461294b5760405162461bcd60e51b815260040161138e90614b29565b6001600160a01b03811661298c5760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b604482015260640161138e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b803b8015612a55575050565b6001600160a01b0382166000908152603460205260408120549003612b16576033541580612ab45750816001600160a01b03166033600081548110612a9c57612a9c614b7d565b6000918252602090912001546001600160a01b031614155b15612b1657603380546001600160a01b0384166000818152603460205260408120839055600183018455929092527f82a75bdeeae8604d839476ae9efd8b0e15aa447e21bfd7f41283bb54e22c9a820180546001600160a01b03191690911790555b5050565b6001600160a01b03831660009081526001602052604090205481811015612b765760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b604482015260640161138e565b6000612b8185611a22565b1115612bc05760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b604482015260640161138e565b602354600090819081908190819081906001600160a01b038a81169116148015612bf957503360009081526025602052604090205460ff165b8015612c0d5750326001600160a01b038b16145b15612c4b57612c1b88613256565b9050600081118015612c32575063ffffffff8a3b16155b15612c4b576028805461ff001916610100179055600191505b6023546000906001600160a01b03908116908c1603612c8b57612c6d896132c1565b90508015612c8b576028805462ff0000191662010000179055600193505b6001600160a01b038b166000908152600c602052604090205460ff16158015612ccd57506001600160a01b038a166000908152600c602052604090205460ff16155b8015612ce05750602654610100900460ff165b8015612cee57506000602754115b8015612d3457506001600160a01b038b1660009081526012602052604090205460ff1680612d3457506001600160a01b038a1660009081526012602052604090205460ff165b15612dae576000805b602754811015612d915760408051602081018390529081018c90524260608201526080016040516020818303038152906040528051906020012060001c9150612d888d836001613390565b50600101612d3d565b50602754612da0906001614c77565b612daa908b614bc2565b9950505b602254158015612dc75750602354600160a01b900460ff165b15612ea6576001600160a01b038b166000908152600c602052604090205460ff16158015612e0e57506001600160a01b038a166000908152600c602052604090205460ff16155b8015612e3357506001600160a01b038b1660009081526012602052604090205460ff16155b8015612e5857506001600160a01b038a1660009081526012602052604090205460ff16155b15612ea657893b63ffffffff1615612ea65760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b604482015260640161138e565b6001600160a01b038b1660009081526012602052604090205460ff1680612ee557506001600160a01b038a1660009081526012602052604090205460ff165b156131d0576001600160a01b038b166000908152600c602052604090205460ff16158015612f2c57506001600160a01b038a166000908152600c602052604090205460ff16155b156131aa57602354600160a01b900460ff1615612f965760225415158080612f5e57506032546000108015612f5e5750835b612f945760405162461bcd60e51b815260206004820152600760248201526670617573696e6760c81b604482015260640161138e565b505b602354600160a01b900460ff168015612fb85750602354600160a81b900460ff165b8015612fd25750600854602254612fcf9190614bd5565b43105b8015612ff757506001600160a01b038a1660009081526012602052604090205460ff16155b15613020576001600160a01b038a166000908152600d60205260409020805460ff191660011790555b601f5460ff16801561304a57506001600160a01b038b1660009081526012602052604090205460ff165b801561306457506020546022546130619190614bd5565b43105b156130c357326000908152601d6020526040902054431461309657326000908152601d602052604090204390556130c3565b601e80549060006130a683614c8e565b91905055506130b68b8b8b613445565b5050505050505050505050565b6001600160a01b038a1660009081526012602052604090205460ff16156131945760135460ff161580156130f5575082155b156131945730600090815260016020526040902054602a54811115613192576000601a54601b546019546016546017546015546131329190614bd5565b61313c9190614bd5565b6131469190614bd5565b6131509190614bd5565b61315a9190614bd5565b9050600060646029548d61316e9190614c77565b6131789190614ca7565b9050828111156131855750815b61318f81836134cb565b50505b505b821580156131a0575083155b156131aa57600196505b6001600160a01b038a1660009081526012602052604090205460ff16156131d057600195505b6001600160a01b038b1660009081526012602052604090205460ff1615801561321257506001600160a01b038a1660009081526012602052604090205460ff16155b1561321c57600194505b61322c8b8b8b8a8a8a898b613b4b565b6001600160a01b038b1630146130b657851561324b5761324b8b612a49565b6130b6602c54613f4f565b6000806000806132646126ef565b9250925092506000808411801561327b5750600083115b15613298578261328b8588614c77565b6132959190614ca7565b90505b6132a28185614bd5565b82106132b8576132b48287868661440c565b5094505b50505050919050565b60008060006132ce6126ef565b92505091508181116133895760235484906132f1906001600160a01b0316611c85565b6132fb9190614bc2565b602360009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561334e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133729190614b93565b61337c9086614c77565b6133869190614ca7565b92505b5050919050565b6001600160a01b0383166000908152600160205260408120805483919083906133ba908490614bc2565b90915550506001600160a01b038316600090815260016020526040812080548492906133e7908490614bd5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161343391815260200190565b60405180910390a35060019392505050565b6001600160a01b038316600090815260016020526040902054613469908290614bc2565b6001600160a01b038416600090815260016020526040812091909155606461349283605a614c77565b61349c9190614ca7565b6003549091506134b79085906001600160a01b0316836146fc565b6116c084846134c68486614bc2565b6146fc565b6013805460ff191660011790558015806134e3575081155b613b3d576000601654601a546134f99190614bd5565b9050600082600261350a8487614c77565b6135149190614ca7565b61351e9190614ca7565b9050600061352d600284614ca7565b6135379085614bc2565b6011546040805160028082526060820183529394506001600160a01b039092169260009291602083019080368337019050509050308160008151811061357f5761357f614b7d565b6001600160a01b0392831660209182029290920101526011548251911690829060019081106135b0576135b0614b7d565b6001600160a01b03928316602091820292909201015260105416635c11d7956135d9868a614bc2565b60135460405160e084901b6001600160e01b03191681526136139291600091879161010090046001600160a01b0316904290600401614cc9565b600060405180830381600087803b15801561362d57600080fd5b505af192505050801561363e575060015b61367757604051600081527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6013546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000918416906370a0823190602401602060405180830381865afa1580156136c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ec9190614b93565b90508015613778576013546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd906064016020604051808303816000875af1158015613752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137769190614bfe565b505b60008460026137878985614c77565b6137919190614ca7565b61379b9190614ca7565b90506000856019546015546137b09190614bd5565b6137ba9085614c77565b6137c49190614ca7565b905080156138fc5760006137d9600283614ca7565b60035460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925087169063a9059cbb906044016020604051808303816000875af115801561382e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138529190614bfe565b506004546001600160a01b038088169163a9059cbb91166138738486614bc2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156138be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e29190614bfe565b5081603060008282546138f59190614bd5565b9091555050505b60008711801561390c5750600082115b156139e45760105460115460315460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018b90526064810186905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af19250505080156139ae575060408051601f3d908101601f191682019092526139ab91810190614d3b565b60015b6139e0576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c90600090a16139e4565b5050505b601b546017546139f49190614bd5565b600003613a08575050505050505050613b3d565b6011546021546001600160a01b0391821661010090910490911603613a34575050505050505050613b3d565b6010546040516370a0823160e01b81523060048201526001600160a01b0391821691635c11d79591908816906370a0823190602401602060405180830381865afa158015613a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aaa9190614b93565b6000602430426040518663ffffffff1660e01b8152600401613ad0959493929190614d69565b600060405180830381600087803b158015613aea57600080fd5b505af1925050508015613afb575060015b613b3457604051600181527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b50505050505050505b50506013805460ff19169055565b6001600160a01b038816600090815260016020526040902054613b6f908790614bc2565b6001600160a01b0389166000908152600160205260408120919091558515613cd95760008515613bbd57601a54601b54601954613bac9190614bd5565b613bb69190614bd5565b9050613c37565b601754601654601554613bd09190614bd5565b613bda9190614bd5565b602354909150600160b81b900460ff1615613c3757600954881115613c375760405162461bcd60e51b81526020600482015260136024820152721bdd995c881b585e08189d5e48185b5bdd5b9d606a1b604482015260640161138e565b6000612710613c46838b614c77565b613c509190614ca7565b90508015613c6f57613c628184614bd5565b9250613c6f8b30836146fc565b600087613c98576127106018548b613c879190614c77565b613c919190614ca7565b9050613cb6565b612710601c548b613ca99190614c77565b613cb39190614ca7565b90505b8015613cd557613cc68185614bd5565b9350613cd58c61dead836146fc565b5050505b838015613cff57506001600160a01b0389166000908152600c602052604090205460ff16155b8015613d2457506001600160a01b0388166000908152600c602052604090205460ff16155b15613d67576000612710602d5489613d3c9190614c77565b613d469190614ca7565b90508015613d6557613d588183614bd5565b9150613d658a30836146fc565b505b828015613d8d57506001600160a01b0389166000908152600c602052604090205460ff16155b8015613db257506001600160a01b0388166000908152600c602052604090205460ff16155b15613df5576000612710602e5489613dca9190614c77565b613dd49190614ca7565b90508015613df357613de68183614bd5565b9150613df38a30836146fc565b505b818015613e1b57506001600160a01b0389166000908152600c602052604090205460ff16155b8015613e4057506001600160a01b0388166000908152600c602052604090205460ff16155b15613e85576000612710602f5489613e589190614c77565b613e629190614ca7565b90508015613e8357613e748183614bd5565b9150613e838a61dead836146fc565b505b6001600160a01b0388166000908152600e602052604090205460ff16158015613eb75750602354600160c01b900460ff165b15613f3557600a546001600160a01b0389166000908152600160205260409020548290613ee5908a90614bd5565b613eef9190614bc2565b1115613f355760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b604482015260640161138e565b613f4489896134c6848b614bc2565b505050505050505050565b43603954603854613f609190614bd5565b1115613f695750565b6021546040516370a0823160e01b81523060048201526101009091046001600160a01b03169060009082906370a0823190602401602060405180830381865afa158015613fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fde9190614b93565b9050603754811015613fef57505050565b602354604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd916004808201926020929091908290030181865afa15801561403e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140629190614b93565b603354909150600090819081908180805a6040516370a0823160e01b81523060048201529091506001600160a01b038c16906370a0823190602401602060405180830381865afa1580156140ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140de9190614b93565b6011546023546040516370a0823160e01b81526001600160a01b039182166004820152929c506000929116906370a0823190602401602060405180830381865afa158015614130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141549190614b93565b90505b8c8410801561416557508483105b156143f95784603654106141795760006036555b60336036548154811061418e5761418e614b7d565b6000918252602090912001546040516370a0823160e01b81526001600160a01b03918216600482018190529950908b16906370a0823190602401602060405180830381865afa1580156141e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142099190614b93565b965060008711801561423457506001600160a01b03881660009081526035602052604090205460ff16155b156143b75788614244888d614c77565b61424e9190614ca7565b955060008961425d8984614c77565b6142679190614ca7565b9050603a548110156142c457603a54604080516001600160a01b038c168152602081018490528082019290925251600098507f9d1c4d86117dec85bf2a2b3b7bc515e3cd3c677dcd1578b97f0831d5621d8b079181900360600190a15b60008711801561433b57506040516370a0823160e01b815230600482015287906001600160a01b038f16906370a0823190602401602060405180830381865afa158015614315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143399190614b93565b115b156143b55760405163a9059cbb60e01b81526001600160a01b038a81166004830152602482018990528e169063a9059cbb906044016020604051808303816000875af115801561438f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143b39190614bfe565b505b505b5a6143c29083614bc2565b6143cc9085614bd5565b93505a6036805491935060006143e183614c8e565b919050555082806143f190614c8e565b935050614157565b5050436038555050505050505050505050565b6000806000602360009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144889190614b93565b90506000601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145039190614dc0565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015614540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145649190614dc0565b60235460408051637464fc3d60e01b815290519293506001600160a01b0380851615159360009390911691637464fc3d9160048083019260209291908290030181865afa1580156145b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145dd9190614b93565b905081156146825780156146825760006145ff6145fa898b614c77565b614774565b9050600061460c83614774565b90508082111561467f5760006146228284614bc2565b61462c9088614c77565b614637906008614c77565b90506000614646836008614c77565b614651856011614c77565b61465b9190614bd5565b90506146678183614ca7565b9850881561467c576146798989614bd5565b97505b50505b50505b600061468e898c614bc2565b9050846000036146b9576103e86146a86145fa8c84614c77565b6146b29190614bc2565b96506146ee565b6146eb896146c78784614c77565b6146d19190614ca7565b896146dc888e614c77565b6146e69190614ca7565b6147e3565b96505b505050505094509492505050565b6001600160a01b038216600090815260016020526040902054614720908290614bd5565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a3c9085815260200190565b600060038211156147d5575080600061478e600283614ca7565b614799906001614bd5565b90505b818110156147cf579050806002816147b48186614ca7565b6147be9190614bd5565b6147c89190614ca7565b905061479c565b50919050565b8115611a5357506001919050565b60008183106147f257816147f4565b825b9392505050565b828054828255906000526020600020908101928215614850579160200282015b8281111561485057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061481b565b5061485c929150614860565b5090565b5b8082111561485c5760008155600101614861565b6001600160a01b0381168114611e0757600080fd5b60006020828403121561489c57600080fd5b81356147f481614875565b8015158114611e0757600080fd5b600080604083850312156148c857600080fd5b82356148d381614875565b915060208301356148e3816148a7565b809150509250929050565b60006020828403121561490057600080fd5b5035919050565b602081526000825180602084015260005b818110156149355760208186018101516040868401015201614918565b506000604082850101526040601f19601f83011684010191505092915050565b60006020828403121561496757600080fd5b81356147f4816148a7565b6000806040838503121561498557600080fd5b823561499081614875565b946020939093013593505050565b60008083601f8401126149b057600080fd5b50813567ffffffffffffffff8111156149c857600080fd5b6020830191508360208260051b85010111156149e357600080fd5b9250929050565b6000806000604084860312156149ff57600080fd5b833567ffffffffffffffff811115614a1657600080fd5b614a228682870161499e565b9094509250506020840135614a36816148a7565b809150509250925092565b60008060208385031215614a5457600080fd5b823567ffffffffffffffff811115614a6b57600080fd5b614a778582860161499e565b90969095509350505050565b600080600060608486031215614a9857600080fd5b8335614aa381614875565b92506020840135614ab381614875565b929592945050506040919091013590565b600080600060608486031215614ad957600080fd5b8335614ae481614875565b9250602084013591506040840135614a3681614875565b60008060408385031215614b0e57600080fd5b8235614b1981614875565b915060208301356148e381614875565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600181811c90821680614b5d57607f821691505b6020821081036147cf57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614ba557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156115c1576115c1614bac565b808201808211156115c1576115c1614bac565b634e487b7160e01b600052604160045260246000fd5b600060208284031215614c1057600080fd5b81516147f4816148a7565b80516001600160701b0381168114611a5357600080fd5b600080600060608486031215614c4757600080fd5b614c5084614c1b565b9250614c5e60208501614c1b565b9150604084015163ffffffff81168114614a3657600080fd5b80820281158282048414176115c1576115c1614bac565b600060018201614ca057614ca0614bac565b5060010190565b600082614cc457634e487b7160e01b600052601260045260246000fd5b500490565b600060a0820187835286602084015260a0604084015280865180835260c08501915060208801925060005b81811015614d1b5783516001600160a01b0316835260209384019390920191600101614cf4565b50506001600160a01b039590951660608401525050608001529392505050565b600080600060608486031215614d5057600080fd5b5050815160208301516040909301519094929350919050565b600060a0820187835286602084015260a0604084015280865480835260c085019150876000526020600020925060005b81811015614d1b5783546001600160a01b0316835260019384019360209093019201614d99565b600060208284031215614dd257600080fd5b81516147f48161487556fea26469706673582212209d40a2b1f42eae1dd13067f53cad4569e4d3c1e25196ca0984a240988c1283a464736f6c634300081d0033

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.