ETH Price: $2,476.60 (+2.80%)
 

Overview

Max Total Supply

500,000,000 Htz

Holders

129

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HostileZone

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-14
*/

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

interface IUniswapV2Pair {

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

interface IERC20 {
   
    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);
}

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// Hostilezone ERC-721 Contract
interface HostileZoneNft {
    function walletOfOwner(address _owner) external view returns (uint256[] memory);
    function ownerOf(uint256 tokenId) external view returns (address owner);

}

contract HostileZone is Ownable, IERC20{

    // pairs in AMM
    mapping (address => bool) public _isPool;

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

    // Fees wallets.
    address public marketWallet;
    address public developerWallet;
    address public GameDevelopWallet;
    address public liquidityWallet;

    // token 
    string private _name = "HostileZoneOfficial";
    string private _symbol = "Htz";
    uint8 private _decimals = 18;

    // supply
    uint256 public _total = 500000000;
    uint256 private _totalSupply; 

    // addresses
    address public _uniRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public _pair = address(0);

    // pause the contract at start
    bool public paused = true;
    bool public poolCreated;

    // set time based limitation 
    bool public isLimited = true;

    uint256 public maxTransactionAmount = 100000 * 10 ** 18;
    uint256 public buyTotalFees;
    uint256 public sellTotalFees;

    // exclusions
    mapping (address => bool) public _isExcludedFromBuyFees;                // buy fees exclusion
    mapping (address => bool) public _isExcludedFromSellFees;               // sell fees exclusion
    mapping (address => bool) public _isExcludedMaxTransactionAmount;       // max amount per transactions (any time) exclusion
    mapping (address => bool) public _isExcludedFromTimeTx;                 // max number of transactions in lower time scale exclusion 
    mapping (address => bool) public _isExcludedFromTimeAmount;             // max amount traded in higher time scale exclusion
    mapping (address => bool) public _isExcludedFromMaxWallet;              // max wallet amount exclusion

    // wallets metrics
    mapping(address => uint256) public _previousFirstTradeTime;                 // first transaction in lower time scale
    mapping(address => uint256) public _numberOfTrades;                     // number of trades in lower time scale
    mapping(address => uint256) public _largerPreviousFirstTradeTime;           // first transaction in larger time scale    
    mapping(address => uint256) public _largerCurrentAmountTraded;          // amount traded in large time scale
    
    // limitations values
    uint256 public largerTimeLimitBetweenTx = 7 days;                       // larger time scale
    uint256 public timeLimitBetweenTx = 1 hours;                            // lower time scale
    uint256 public txLimitByTime = 3;                                       // number limit of transactions (lower scale)
    uint256 public largerAmountLimitByTime = 1500000 * 10 ** _decimals;     // transaction amounts limits (larger scale) 
    uint256 public maxByWallet = 600000 * 10 ** 18;                  //  max token in wallet

     // Buy Fees
    uint256 _buyMarketingFee;
    uint256 _buyLiquidityFee;
    uint256 _buyDevFee;
    uint256 _buyGameDevelopingFee;
    uint256 public buyDiscountLv1;
    uint256 public buyDiscountLv2;

    // Sell Fees
    uint256 _sellMarketingFee;
    uint256 _sellLiquidityFee;
    uint256 _sellDevFee;
    uint256 _sellGameDevelopingFee;
    uint256 public sellDiscountLv1;
    uint256 public sellDiscountLv2;


    // Tokens routing   
    uint256 public tokensForMarketing;
    uint256 public tokensForDev;
    uint256 public tokensForGameDev;
    uint256 public tokensForLiquidity;

    // uniswap v2 interface
    IUniswapV2Router02 private UniV2Router;

    // nft address to check discount
    address hostileZoneNftAddress;

 //Legendary NFTs 
    uint256[] public legendaryNFTs;


    constructor() {
        
        // initial supply to mint
        _totalSupply = 100000000 * 10 ** _decimals;
        _balances[_msgSender()] += _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
        
        // set router v2 
        UniV2Router = IUniswapV2Router02(_uniRouter);

        // wallets setting
       
        marketWallet = 0x7F22B4D77EAa010C53Ad7383F93725Db405f44C7;
        developerWallet = 0xaE859cc7FD075cBff43E2E659694fb1F7aeE0ecF;
        GameDevelopWallet = 0xab9cc7E0E2B86d77bE6059bC69C4db3A9B53a6bf;
        liquidityWallet = 0xCD01C9F709535FdfdB1cd943C7C01D58714a0Ca6;
        
        // pair address
        _pair = IUniswapV2Factory(UniV2Router.factory()).createPair(address(this), UniV2Router.WETH());
        
        // pair is set as pair
        _isPool[_pair] = true;

        // basic exclusions
        // buy fees exclusions
        _isExcludedFromBuyFees[_msgSender()] = true;
        _isExcludedFromBuyFees[address(this)] = true;
       
        // sell fees exclusions
        _isExcludedFromSellFees[_msgSender()] = true;
        _isExcludedFromSellFees[address(this)] = true;

        // max transaction amount any time
        _isExcludedMaxTransactionAmount[_msgSender()] = true;
        _isExcludedMaxTransactionAmount[_pair] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

        // lower scale time number of transactions exclusions
        _isExcludedFromTimeTx[_msgSender()] = true;
        _isExcludedFromTimeTx[_pair] = true;
        _isExcludedFromTimeTx[address(this)] = true;

        // larger scale time amount exclusion
        _isExcludedFromTimeAmount[_msgSender()] = true;
        _isExcludedFromTimeAmount[_pair] = true;
        _isExcludedFromTimeAmount[address(this)] = true;
        
        // max wallet in exclusions
        _isExcludedFromMaxWallet[_msgSender()] = true;
        _isExcludedFromMaxWallet[_pair] = true;
        _isExcludedFromMaxWallet[address(this)] = true;

        // buy fees
        _buyMarketingFee = 4;
        _buyLiquidityFee = 5;
        _buyDevFee = 2;
        _buyGameDevelopingFee = 2;
        buyTotalFees = _buyMarketingFee + _buyDevFee + _buyLiquidityFee + _buyGameDevelopingFee; // 13%
        buyDiscountLv1 = 1;
        buyDiscountLv2 = 4;



        // Sell Fees
        _sellMarketingFee = 5;
        _sellLiquidityFee = 9;
        _sellDevFee = 2;
        _sellGameDevelopingFee = 3;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee + _sellDevFee + _sellGameDevelopingFee; // 19%
        sellDiscountLv1 = 2;
        sellDiscountLv2 = 5;
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), 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(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require (_allowances[sender][_msgSender()] >= amount, "ERC20: transfer amount exceeds allowance");
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(_balances[sender] >= amount, "ERC20: transfer exceeds balance");
        require(amount > 450 * 10 ** 18, "HostileZone: cannot transfer less than 450 tokens.");
        require(!paused, "HostileZone: trading isn't enabled yet.");

        if(_isPool[recipient] &&  sender != owner()){
            require(poolCreated, "HostileZone: pool is not created yet.");
        }

        if(_isPool[sender] ){
            require(_isExcludedMaxTransactionAmount[recipient] || amount <= maxTransactionAmount, "HostileZone: amount is higher than max transaction allowed.");
        }
        
         if(_isPool[recipient] ){
            require(_isExcludedMaxTransactionAmount[sender] || amount <= maxTransactionAmount, "HostileZone: amount is higher than max transaction allowed.");
        }




        // amount limit
        // check max transactions exclusion or max transaction amount limits 
        require(_isExcludedMaxTransactionAmount[sender] || amount <= maxTransactionAmount, "HostileZone: amount is higher than max transaction allowed.");
        // check max wallet in exclusion or max transaction amount limits
        require(_isExcludedFromMaxWallet[recipient] || amount + _balances[recipient] <= maxByWallet, "HostileZone: amount is higher than max wallet amount allowed.");

        // time scales limitation
        if(isLimited){
            // check if it's a buy  or sell transaction
            // some limits only to apply on buy and sell
            if( _isPool[recipient] ) { 
                checkTimeLimits(sender, amount);
            } else if(_isPool[sender] ){
                checkTimeLimits(recipient, amount);
            }
        }
        
        uint256 fees = 0;

        bool takeBuyFee;
        bool takeSellFee;

        // Should contract take buy fees
        if( !_isExcludedFromBuyFees[recipient] && _isPool[sender] && buyTotalFees > 0 ) { 
            takeBuyFee = true;
        }

        // Should contract take sell fees
        if( !_isExcludedFromSellFees[sender] && _isPool[recipient] && sellTotalFees > 0 ) { 
            takeSellFee = true;
        }

        if(takeBuyFee){
            // check discount for buy fees
            uint256 buyTotalFeesWithDiscount = calculateFeeBuyAmount(recipient);

            if(buyTotalFeesWithDiscount > 0){

                // add total buy fees to fees
                fees += uint256(uint256(amount * buyTotalFeesWithDiscount) / 100);


                // Buy: liquidity fees calculation
                tokensForLiquidity = uint256(uint256(fees * _buyLiquidityFee) / buyTotalFeesWithDiscount);
                _balances[liquidityWallet] += tokensForLiquidity;
                emit Transfer(sender, liquidityWallet, tokensForLiquidity);


                // Buy: dev fees calculation
                tokensForDev = uint256(uint256(fees * _buyDevFee) / buyTotalFeesWithDiscount);
                _balances[developerWallet] += tokensForDev;
                emit Transfer(sender, developerWallet, tokensForDev);


                // Buy: marketing fees calculation
                tokensForMarketing = uint256(uint256(fees * _buyMarketingFee) / buyTotalFeesWithDiscount);
                _balances[marketWallet] += tokensForMarketing;
                emit Transfer(sender, marketWallet, tokensForMarketing);


                // Buy: game development fees calculation
                tokensForGameDev = uint256(uint256(fees * _buyGameDevelopingFee) / buyTotalFeesWithDiscount);
                _balances[GameDevelopWallet] += tokensForGameDev;
                emit Transfer(sender, GameDevelopWallet, tokensForGameDev);

                // reset some splited fees values
                resetTokenRouting();
            }
            
        } 

        if(takeSellFee) {

            // check discounts for sell fees
            uint256 sellTotalFeesWithDiscount = calculateFeeSellAmount(sender);


            if(sellTotalFeesWithDiscount > 0){


                // add total sell fees amount to fees
                fees += uint256(uint256(amount * sellTotalFeesWithDiscount) / 100);


                // Sell: liquidity fees calculation
                tokensForLiquidity = uint256(uint256(fees * _sellLiquidityFee) / sellTotalFeesWithDiscount);
                _balances[liquidityWallet] += tokensForLiquidity;
                emit Transfer(sender, liquidityWallet, tokensForLiquidity);
                

                // Sell: dev fees calculation
                tokensForDev += uint256(uint256(fees * _sellDevFee) / sellTotalFeesWithDiscount);
                _balances[developerWallet] += tokensForDev;
                emit Transfer(sender, developerWallet, tokensForDev);


                // Sell: marketing fees calculation
                tokensForMarketing += uint256(uint256(fees * _sellMarketingFee) / sellTotalFeesWithDiscount);
                _balances[marketWallet] += tokensForMarketing;
                emit Transfer(sender, marketWallet, tokensForMarketing);


                // Sell: game development fees calculation
                tokensForGameDev += uint256(uint256(fees * _sellGameDevelopingFee) / sellTotalFeesWithDiscount);
                _balances[GameDevelopWallet] += tokensForGameDev;
                emit Transfer(sender, GameDevelopWallet, tokensForGameDev);


                // reset some splited fees values
                resetTokenRouting();

            }
        }

        // amount to transfer minus fees
        uint256 amountMinusFees = amount - fees;

        // decrease sender balance
        _balances[sender] -= amount;

        // increase recipient balance
        _balances[recipient] += amountMinusFees;

        // if it's a sell
        if( _isPool[recipient]) { 

            // add amount to larger time scale by user
            _largerCurrentAmountTraded[sender] += amount;

            // add 1 transaction to lower scale user count 
            _numberOfTrades[sender] += 1;

        // it's a buy
        } else if(_isPool[sender]){

            // add amount to larger time scale by user
            _largerCurrentAmountTraded[recipient] += amount;

            // add 1 transaction to lower scale user count 
            _numberOfTrades[recipient] += 1;
        }

        // transfer event
        emit Transfer(sender, recipient, amountMinusFees);
    }

  function checkTimeLimits(address _address, uint256 _amount) private {

        // if higher than limit for lower time scale: reset all sender values
        
               
                if( _previousFirstTradeTime[_address] == 0){
                    _previousFirstTradeTime[_address] = block.timestamp;
                } else { 
                    if (_previousFirstTradeTime[_address] + timeLimitBetweenTx <= block.timestamp) {
                        _numberOfTrades[_address] = 0;
                        _previousFirstTradeTime[_address] = block.timestamp;
                    }
                }

                // check for time number of transaction exclusion or 
                require(_isExcludedFromTimeTx[_address] || _numberOfTrades[_address] + 1 <= txLimitByTime, "transfer: number of transactions higher than based time allowance.");


                // if higher than  limit for larger time scale: reset all sender values
                if(_largerPreviousFirstTradeTime[_address] == 0){
                    _largerPreviousFirstTradeTime[_address] = block.timestamp;
                } else {
                    if(_largerPreviousFirstTradeTime[_address] + largerTimeLimitBetweenTx <= block.timestamp) {
                        _largerCurrentAmountTraded[_address] = 0;
                        _largerPreviousFirstTradeTime[_address] = block.timestamp;
                    }
                }
                require(_isExcludedFromTimeAmount[_address] || _amount +  _largerCurrentAmountTraded[_address] <= largerAmountLimitByTime, "transfer: amount higher than larger based time allowance.");
    }





    // Calculate amount of buy discount .
    function  calculateFeeBuyAmount(address _address) public view returns (uint256) {
        uint256 discountLvl = checkForDiscount(_address);
        if(discountLvl == 1){
            return buyTotalFees - buyDiscountLv1;
        }else if(discountLvl == 2){
            return  buyTotalFees - buyDiscountLv2;
        }
        else if(discountLvl == 3){
            return 0;
        }
        return buyTotalFees;
    }

    // Calculate amount of sell discount .
    function  calculateFeeSellAmount(address _address) public view returns (uint256) {
        uint256 discountLvl = checkForDiscount(_address);
        if(discountLvl == 1){
            return sellTotalFees - sellDiscountLv1;
        } else if(discountLvl == 2){
            return  sellTotalFees - sellDiscountLv2;
        } else if(discountLvl == 3){
            return 0;
        }
        return sellTotalFees;
    }

    // enable fees discounts by checking the number of nfts in HostileZone nft contract 
    function checkForDiscount(address _address) public view returns (uint256)  {
        if(hostileZoneNftAddress != address(0)) {
            uint256 NFTAmount =  HostileZoneNft(hostileZoneNftAddress).walletOfOwner(_address).length;
            if(checkForNFTDiscount(_address)){
                 return 3;
            }
           else if(NFTAmount > 0 && NFTAmount <= 3){
                return 1;
            } else if (NFTAmount > 3 && NFTAmount <= 9){
                return 2;
            } else if (NFTAmount >= 10 ){
                return 3;
            }
        }
        return 0;   
    }

    // mint
    function mint(uint256 amount) external onlyOwner {
        require (_totalSupply + amount <= _total * 10 ** _decimals, "HostileZone: amount higher than max.");
        _totalSupply = _totalSupply + amount;
        _balances[_msgSender()] += amount;
        emit Transfer(address(0), _msgSender(), amount);
    }

    // burn
    function burn(uint256 amount) external onlyOwner {
        require(balanceOf(_msgSender())>= amount, "HostileZone: balance must be higher than amount.");
        _totalSupply = _totalSupply - amount;
        _balances[_msgSender()] -= amount;
        emit Transfer(_msgSender(), address(0), amount);
    }

    // // mint in batch for airdrop
    // function mintBatch(uint256[] memory amounts, address[] memory recipients) external onlyOwner {
    //     require(amounts.length > 0, "HostileZone: amounts list length should size higher than 0.");
    //     require(amounts.length == recipients.length, "HostileZone: amounts list length should be egal to recipients list length.");
    //     uint256 totalAmount;
    //     for(uint256 i = 0; i < amounts.length; i++){
    //         require(amounts[i] > 0, "HostileZone: amount should be higher than 0." );
    //         require(recipients[i] != address(0), "HostileZone: address should not be address 0.");
    //         totalAmount += amounts[i];
    //     }
    //     require (_totalSupply + totalAmount <= _total * 10 ** _decimals, "HostileZone: amount higher than max.");
    //     for(uint256 i = 0; i < amounts.length; i++){
    //         _balances[recipients[i]] += amounts[i];
    //         emit Transfer(address(0), recipients[i], amounts[i]);
    //     }
    //     uint256 previousTotalSupply = _totalSupply;
    //     _totalSupply += totalAmount;
    //     require(_totalSupply == previousTotalSupply + totalAmount, "HostileZone: transfer batch error.");
    // }

    // Disable fees.
    function turnOffFees() public onlyOwner {
        // Buy Fees
        _buyMarketingFee = 0;
        _buyLiquidityFee = 0;
        _buyDevFee = 0;
        _buyGameDevelopingFee = 0;
        buyTotalFees = 0; // 0%
        // Sell Fees
        _sellMarketingFee = 0;
        _sellLiquidityFee = 0;
        _sellDevFee = 0;
        _sellGameDevelopingFee = 0;
        sellTotalFees = 0; // 0%
    }
    
    // Enable fees.
    function turnOnFees() public onlyOwner {
        // Buy Fees
        _buyMarketingFee = 4;
        _buyLiquidityFee = 5;
        _buyDevFee = 2;
        _buyGameDevelopingFee = 2;
        buyTotalFees = _buyMarketingFee + _buyDevFee + _buyLiquidityFee + _buyGameDevelopingFee; // 13%

        // Sell Fees
        _sellMarketingFee = 5;
        _sellLiquidityFee = 9;
        _sellDevFee = 2;
        _sellGameDevelopingFee = 3;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee + _sellDevFee + _sellGameDevelopingFee; // 19%
    }

    // to reset token routing values
    // in order to calculate fees properly
    function resetTokenRouting() private {
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForGameDev = 0;
        tokensForLiquidity = 0;
    }

    // to add liquidity to uniswap once
    function addLiquidity(uint256 _tokenAmountWithoutDecimals) external payable onlyOwner {
        uint256 tokenAmount = _tokenAmountWithoutDecimals * 10 ** _decimals;
        require(_pair != address(0), "addLiquidity: pair isn't create yet.");
        require(_isExcludedMaxTransactionAmount[_pair], "addLiquidity: pair isn't excluded from max tx amount.");
        (uint112 reserve0, uint112 reserve1,) = IUniswapV2Pair(_pair).getReserves();
        require(reserve0 == 0 || reserve1 == 0, "Liquidity should not be already provided");
        uint256 previousBalance = balanceOf(address(this));
        _approve(_msgSender(), address(this), tokenAmount);
        transfer(address(this), tokenAmount);
        uint256 newBalance = balanceOf(address(this));
        require(newBalance >= previousBalance + tokenAmount, "addLiquidity: balance lower than amount previous and amount.");
        _approve(address(this), address(UniV2Router), tokenAmount);
        UniV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp + 60
        );
    }

    // excluder
    // exclude any wallet for contact buy fees
    function excludeFromBuyFees(address _address, bool _exclude) external onlyOwner {
        _isExcludedFromBuyFees[_address] = _exclude;
    }

    // exclude any wallet for contact sell fees
    function excludeFromSellFees(address _address, bool _exclude) external onlyOwner {
        _isExcludedFromSellFees[_address] = _exclude;
    }

    // exclude any wallet for max transaction amount any time
    function excludedMaxTransactionAmount(address _address, bool _exclude) external onlyOwner {
        _isExcludedMaxTransactionAmount[_address] = _exclude;
    }

    // exclude any wallet for limited number of transactions in lower time scale
    function excludedFromTimeTx(address _address, bool _exclude) external onlyOwner {
        _isExcludedFromTimeTx[_address] = _exclude;
    }

    // exclude any wallet for limited amount to trade in larger time scale
    function excludedFromTimeAmount(address _address, bool _exclude) external onlyOwner {
        _isExcludedFromTimeAmount[_address] = _exclude;
    }

    // exclude any wallet from max amount in
    function excludedFromMaxWallet(address _address, bool _exclude) external onlyOwner {
        _isExcludedFromMaxWallet[_address] = _exclude;
    }

    // setter
    // set a pair in any automated market maker
    function setPool(address _addr, bool _enable) external onlyOwner {
        _isPool[_addr] = _enable;
        _isExcludedMaxTransactionAmount[_addr] = _enable;
        _isExcludedFromTimeTx[_addr] = _enable;
        _isExcludedFromTimeAmount[_addr] = _enable;
        _isExcludedFromMaxWallet[_addr] = _enable;
    }

    // set max transcation amount any times
    function setMaxTransactionAmount(uint256 _maxTransactionAmount) external onlyOwner {
        require(_maxTransactionAmount >= 100000 * 10 ** _decimals, "HostileZone: amount should be higher than 0.1% of totalSupply.");
        maxTransactionAmount = _maxTransactionAmount;
    }

    // set lower time scale between resetting restrictions limits: max 1 hour
    function setTimeLimitBetweenTx(uint256 _timeLimitBetweenTx) external onlyOwner {
        require(_timeLimitBetweenTx <= 1 hours, "HostileZone: amount must be lower than 1 Hour.");
        timeLimitBetweenTx = _timeLimitBetweenTx;
    }

    // set larger time scale between resetting restrictions limits: max 1 week
    function setLargerTimeLimitBetweenTx(uint256 _largerTimeLimitBetweenTx) external onlyOwner {
        require(_largerTimeLimitBetweenTx <= 7 days, "HostileZone: amount must be lower than 1 week.");
        largerTimeLimitBetweenTx = _largerTimeLimitBetweenTx;
    }

    // set number of transactions by lower scale time restriction: minimum 5 transactions
    function setTxLimitByTime(uint256 _txLimitByTime) external onlyOwner {
        require(_txLimitByTime >= 3, "HostileZone: amount must be higher than 3 transactions.");
        txLimitByTime = _txLimitByTime;
    }

    // set amount by large time scale restriction: min 1'500'000 tokens
    function setLargerAmountLimitByTime(uint256 _largerAmountLimitByTime) external onlyOwner {
        require(_largerAmountLimitByTime >= 1500000 * 10 ** _decimals, "HostileZone: larger amount must be higher than 1'500'000 tokens.");
        largerAmountLimitByTime = _largerAmountLimitByTime;
    }

    // set max amount by wallet restriction 
    function setMaxByWallet(uint256 _maxByWallet) external onlyOwner {
        require(_maxByWallet >= 600000 * 10 ** _decimals, "HostileZone: amount must be higher than 600'000 tokens.");
        maxByWallet = _maxByWallet;
    }

    // could only be set once
    function setPause() external onlyOwner {
        paused = false;
    }

    // set time restrict limit
    function setLimited(bool _isLimited) external onlyOwner {
        isLimited = _isLimited;
    }

    function setNftAddress(address _hostileZoneNftAddress) external onlyOwner {
        hostileZoneNftAddress = _hostileZoneNftAddress;
    }

    function setMarketWallet(address _marketWallet) external onlyOwner {
        _isExcludedMaxTransactionAmount[_marketWallet] = true;
        _isExcludedFromTimeTx[_marketWallet] = true;
        _isExcludedFromTimeAmount[_marketWallet] = true;
        _isExcludedFromMaxWallet[_marketWallet] = true;    
         _isExcludedFromBuyFees[_marketWallet] = true;
        _isExcludedFromSellFees[_marketWallet] = true;

        }

    function setDeveloperWallet(address _developerWallet) external onlyOwner {
        developerWallet = _developerWallet;
         _isExcludedMaxTransactionAmount[_developerWallet] = true;
        _isExcludedFromTimeTx[_developerWallet] = true;
        _isExcludedFromTimeAmount[_developerWallet] = true;
        _isExcludedFromMaxWallet[_developerWallet] = true;
          _isExcludedFromBuyFees[_developerWallet] = true;
        _isExcludedFromSellFees[_developerWallet] = true;
    }

    function setGameDevelopWallet(address _GameDevelopWallet) external onlyOwner {
        GameDevelopWallet = _GameDevelopWallet;
         _isExcludedMaxTransactionAmount[_GameDevelopWallet] = true;
        _isExcludedFromTimeTx[_GameDevelopWallet] = true;
        _isExcludedFromTimeAmount[_GameDevelopWallet] = true;
        _isExcludedFromMaxWallet[_GameDevelopWallet] = true;
          _isExcludedFromBuyFees[_GameDevelopWallet] = true;
        _isExcludedFromSellFees[_GameDevelopWallet] = true;
    }

    function setLiquidityWallet(address _liquidityWallet) external onlyOwner {
        liquidityWallet = _liquidityWallet;
         _isExcludedMaxTransactionAmount[_liquidityWallet] = true;
        _isExcludedFromTimeTx[_liquidityWallet] = true;
        _isExcludedFromTimeAmount[_liquidityWallet] = true;
        _isExcludedFromMaxWallet[_liquidityWallet] = true;
          _isExcludedFromBuyFees[_liquidityWallet] = true;
        _isExcludedFromSellFees[_liquidityWallet] = true;
    }

    // set buy fees: max 33%
    function setBuyFees(
        uint256 buyMarketingFee, 
        uint256 buyLiquidityFee, 
        uint256 buyDevFee, 
        uint256 buyGameDevelopingFee, 
        uint256 _buyDiscountLv1, 
        uint256 _buyDiscountLv2
    ) external onlyOwner {
        require(buyMarketingFee <= 20 && buyLiquidityFee <= 20 && buyDevFee <= 20 && buyGameDevelopingFee <= 20);
        _buyMarketingFee = buyMarketingFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyDevFee = buyDevFee;
        _buyGameDevelopingFee = buyGameDevelopingFee;
        buyTotalFees = _buyMarketingFee + _buyDevFee + _buyLiquidityFee + _buyGameDevelopingFee;
        buyDiscountLv1 = _buyDiscountLv1;
        buyDiscountLv2 = _buyDiscountLv2;
        require(buyTotalFees <= 33, "total fees cannot be higher than 33%.");
        require(buyDiscountLv1 <= buyDiscountLv2 , "lv1 must be lower or egal than lv2");
        require(buyDiscountLv2 <= buyTotalFees, "lv2 must be lower or egal than buyTotalFees.");
    }

    // set sell fees: max 33%
    function setSellFees(
        uint256 sellMarketingFee, 
        uint256 sellLiquidityFee, 
        uint256 sellDevFee, 
        uint256 sellGameDevelopingFee,
        uint256 _sellDiscountLv1, 
        uint256 _sellDiscountLv2
        ) external onlyOwner {
        require(sellMarketingFee <= 20 && sellLiquidityFee <= 20 && sellDevFee <= 20 && sellGameDevelopingFee <= 20);
        _sellMarketingFee = sellMarketingFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellDevFee = sellDevFee;
        _sellGameDevelopingFee = sellGameDevelopingFee;
        sellTotalFees = _sellMarketingFee + _sellLiquidityFee + _sellDevFee + _sellGameDevelopingFee;
        sellDiscountLv1 = _sellDiscountLv1;
        sellDiscountLv2 = _sellDiscountLv2;
        require(sellTotalFees <= 33, "total fees cannot be higher than 33%.");
        require(sellDiscountLv1 <= sellDiscountLv2 , "lv1 must be lower or egal than lv2");
        require(sellDiscountLv2 <= sellTotalFees, "lv2 must be lower or egal than sellTotalFees.");
    }
    // pool created for the first time.
    function setPoolCreated() external onlyOwner {
        poolCreated = true;
    }
  
    // withdraw any ERC20 just in case
    function tokenWithdraw(IERC20 _tokenAddress, uint256 _tokenAmount, bool _withdrawAll) external onlyOwner returns(bool){
        uint256 tokenBalance = _tokenAddress.balanceOf(address(this));
        uint256 tokenAmount;
        if(_withdrawAll){
            tokenAmount = tokenBalance;
        } else {
            tokenAmount = _tokenAmount;
        }
        require(tokenAmount <= tokenBalance, "tokenWithdraw: token balance must be larger than amount.");
        _tokenAddress.transfer(owner(), tokenAmount);
        return true;
    }

    // withdraw eth just in case
    function withdrawEth(uint256 _ethAmount, bool _withdrawAll) external onlyOwner returns(bool){
        uint256 ethBalance = address(this).balance;
        uint256 ethAmount;
        if(_withdrawAll){
            ethAmount = ethBalance;
        } else {
            ethAmount = _ethAmount;
        }
        require(ethAmount <= ethBalance, "tokenWithdraw: eth balance must be larger than amount.");
        (bool success,) = payable(owner()).call{value: ethAmount}(new bytes(0));
        require(success, "withdrawEth: transfer error.");
        return true;
    }



    // Check for discounts eligble
 function checkForNFTDiscount(address sender) public view returns (bool success) {


        for(uint i = 1 ; i < legendaryNFTs.length ; i++){

            if( getOwnerOf(legendaryNFTs[i]) == sender ){
                return true;
            }
            }
        
    return false;

    }

 // Set legendary NFTs

     function setNFTsTokens(uint256[] memory _tokens) public onlyOwner()  {
        legendaryNFTs = _tokens;
  }
   function getLegendaryNFTs() public view returns (uint256[] memory ){
      return legendaryNFTs;
  }

 function getOwnerOf( uint256 _tokenId ) public view returns (address) {
        
       return HostileZoneNft(hostileZoneNftAddress).ownerOf(_tokenId);
        
    }
    // Batch Transfer for multiple wallets.
    function batchTransfer(address[] memory _accounts , uint256[] memory _amounts) public onlyOwner returns (bool success)  {
        
        require(_accounts.length == _amounts.length);
        uint256 _totalTransfer = 0;
      for(uint256 i = 0; i < _amounts.length ; i++  ) {
        _totalTransfer += _amounts[i] * 10 ** 18;
          
      }
        
        require( balanceOf(msg.sender) >= _totalTransfer );
   
         for(uint256 i = 0; i < _amounts.length ; i++  ) {
                  
                _balances[_accounts[i]] += _amounts[i] * 10 ** 18;
                _balances[msg.sender] -= _amounts[i] * 10 ** 18;
            emit Transfer(msg.sender , _accounts[i], _amounts[i] * 10 ** 18);  
                   }
        return true;
    
}
    receive() external payable {}
    fallback() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"GameDevelopWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromBuyFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromSellFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromTimeAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromTimeTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_largerCurrentAmountTraded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_largerPreviousFirstTradeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_numberOfTrades","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_previousFirstTradeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_total","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenAmountWithoutDecimals","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","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":[{"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":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"batchTransfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDiscountLv1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDiscountLv2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"calculateFeeBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"calculateFeeSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"checkForDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"checkForNFTDiscount","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_exclude","type":"bool"}],"name":"excludeFromBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_exclude","type":"bool"}],"name":"excludeFromSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_exclude","type":"bool"}],"name":"excludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_exclude","type":"bool"}],"name":"excludedFromTimeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_exclude","type":"bool"}],"name":"excludedFromTimeTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_exclude","type":"bool"}],"name":"excludedMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLegendaryNFTs","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getOwnerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"largerAmountLimitByTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"largerTimeLimitBetweenTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"legendaryNFTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolCreated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDiscountLv1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDiscountLv2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"internalType":"uint256","name":"buyGameDevelopingFee","type":"uint256"},{"internalType":"uint256","name":"_buyDiscountLv1","type":"uint256"},{"internalType":"uint256","name":"_buyDiscountLv2","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developerWallet","type":"address"}],"name":"setDeveloperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_GameDevelopWallet","type":"address"}],"name":"setGameDevelopWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_largerAmountLimitByTime","type":"uint256"}],"name":"setLargerAmountLimitByTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_largerTimeLimitBetweenTx","type":"uint256"}],"name":"setLargerTimeLimitBetweenTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isLimited","type":"bool"}],"name":"setLimited","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketWallet","type":"address"}],"name":"setMarketWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxByWallet","type":"uint256"}],"name":"setMaxByWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokens","type":"uint256[]"}],"name":"setNFTsTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_hostileZoneNftAddress","type":"address"}],"name":"setNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPoolCreated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellDevFee","type":"uint256"},{"internalType":"uint256","name":"sellGameDevelopingFee","type":"uint256"},{"internalType":"uint256","name":"_sellDiscountLv1","type":"uint256"},{"internalType":"uint256","name":"_sellDiscountLv2","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timeLimitBetweenTx","type":"uint256"}],"name":"setTimeLimitBetweenTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txLimitByTime","type":"uint256"}],"name":"setTxLimitByTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeLimitBetweenTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"internalType":"bool","name":"_withdrawAll","type":"bool"}],"name":"tokenWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForGameDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnOffFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"turnOnFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimitByTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ethAmount","type":"uint256"},{"internalType":"bool","name":"_withdrawAll","type":"bool"}],"name":"withdrawEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052601360808190527f486f7374696c655a6f6e654f6666696369616c0000000000000000000000000060a090815262000040916008919062000738565b5060408051808201909152600380825262243a3d60e91b60209092019182526200006d9160099162000738565b50600a805460ff191660129081178255631dcd6500600b55600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600e80546201000160a01b600161ff0160a81b031990911617905569152d02c7e14af6800000600f5562093a80601c55610e10601d556003601e55620000f19162000874565b62000100906216e36062000935565b601f55697f0e10af47c1c70000006020553480156200011e57600080fd5b506200012a33620006e8565b600a80546200013f9160ff9091169062000874565b6200014f906305f5e10062000935565b600c81905533600090815260026020526040812080549091906200017590849062000810565b9091555050600c5460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3600d54603180546001600160a01b03199081166001600160a01b03909316928317909155600480548216737f22b4d77eaa010c53ad7383f93725db405f44c717815560058054831673ae859cc7fd075cbff43e2e659694fb1f7aee0ecf17905560068054831673ab9cc7e0e2b86d77be6059bc69c4db3a9b53a6bf1790556007805490921673cd01c9f709535fdfdb1cd943c7c01d58714a0ca6179091556040805163c45a015560e01b8152905163c45a015592828101926020929190829003018186803b1580156200028757600080fd5b505afa1580156200029c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c29190620007de565b6001600160a01b031663c9c6539630603160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032057600080fd5b505afa15801562000335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035b9190620007de565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003a457600080fd5b505af1158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df9190620007de565b600e80546001600160a01b0319166001600160a01b0392909216918217905560009081526001602081905260408220805460ff19168217905590601290620004243390565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526012909252812080549092166001908117909255601390620004723390565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526013909252812080549092166001908117909255601490620004c03390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e549091168152601490925280822080548416600190811790915530835290822080549093168117909255601590620005253390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e5490911681526015909252808220805484166001908117909155308352908220805490931681179092556016906200058a3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e549091168152601690925280822080548416600190811790915530835290822080549093168117909255601790620005ef3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e5490911681526017909252808220805484166001908117909155308352912080549092161790556004602181905560056022819055600260238190556024819055916200066e90839062000810565b6200067a919062000810565b62000686919062000810565b601055600160255560046026556005602781905560096028819055600260298190556003602a819055929091620006bd9162000810565b620006c9919062000810565b620006d5919062000810565b6011556002602b556005602c55620009aa565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620007469062000957565b90600052602060002090601f0160209004810192826200076a5760008555620007b5565b82601f106200078557805160ff1916838001178555620007b5565b82800160010185558215620007b5579182015b82811115620007b557825182559160200191906001019062000798565b50620007c3929150620007c7565b5090565b5b80821115620007c35760008155600101620007c8565b600060208284031215620007f157600080fd5b81516001600160a01b03811681146200080957600080fd5b9392505050565b6000821982111562000826576200082662000994565b500190565b600181815b808511156200086c57816000190482111562000850576200085062000994565b808516156200085e57918102915b93841c939080029062000830565b509250929050565b60006200080960ff84168360008262000890575060016200092f565b816200089f575060006200092f565b8160018114620008b85760028114620008c357620008e3565b60019150506200092f565b60ff841115620008d757620008d762000994565b50506001821b6200092f565b5060208310610133831016604e8410600b841016171562000908575081810a6200092f565b6200091483836200082b565b80600019048211156200092b576200092b62000994565b0290505b92915050565b600081600019048311821515161562000952576200095262000994565b500290565b600181811c908216806200096c57607f821691505b602082108114156200098e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61497880620009ba6000396000f3fe60806040526004361061049f5760003560e01c8063715018a61161025e578063ba876bb911610143578063d85ba063116100bb578063e4440a8611610082578063e4440a8614610f03578063ea28b65f14610f23578063f2fde38b14610f50578063f74c9f4714610f70578063f756893b14610f90578063fa32e7d814610fb057005b8063d85ba06314610e50578063d96530d214610e66578063db5671fb14610e7c578063dd62ed3e14610e9d578063e10dffc014610ee357005b8063ceb198841161010a578063ceb1988414610d7e578063d0a6dc6814610d9e578063d1d7d7ef14610dbe578063d388451014610dee578063d431b1ac14610e1b578063d469801614610e3057005b8063ba876bb914610cf2578063c261a3c814610d12578063c71b49b014610d27578063c8c8ebe414610d48578063ca3436d414610d5e57005b80638f8a3403116101d6578063a104b12f1161019d578063a104b12f14610c22578063a7137e7114610c42578063a9059cbb14610c62578063aa43471e14610c82578063ae4edb0914610cb2578063b51449bb14610cd257005b80638f8a340314610b9757806393280f7b14610bb757806395d89b4114610bd75780639fccce3214610bec578063a0712d6814610c0257005b80637a27da79116102255780637a27da7914610ad65780637a7f36fe14610aec5780638363871014610b0c57806387c891dd14610b2c57806388d695b214610b595780638da5cb5b14610b7957005b8063715018a614610a4f57806373ad373a14610a64578063760509f014610a7a578063793761ae14610aaa578063795eeafc14610ac057005b80632e067421116103845780634d1d772c116102fc5780635c975abb116102c35780635c975abb1461098257806366373959146109a35780636a486a8e146109c35780636a725292146109d95780636cd56878146109f957806370a0823114610a1957005b80634d1d772c1461090457806351c6590a146109245780635433226614610937578063546900331461095757806354dd97061461096c57005b80633dce3b411161034b5780633dce3b41146108565780633e4353c61461086c57806342966c681461088257806342ba61bb146108a257806343faaf63146108c25780634a33a01a146108e457005b80632e067421146107b95780632e41225b146107d9578063313ce567146107ee57806331f870101461081057806334ecc70a1461084057005b80631a8145bb1161041757806320bec12c116103de57806320bec12c146106f3578063227313961461071357806323b872dd146107335780632744fdaa14610753578063296f0a0c146107695780632da557da1461078957005b80631a8145bb1461065a5780631e293c10146106705780631e38535c146106905780631e593e48146106b05780631f3fed8f146106dd57005b80630d827781116104665780630d8277811461057357806310d5de531461059357806315430f40146105c357806315d37054146105e357806318160ddd14610603578063185870f91461062257005b806306fdde03146104a85780630713f16b146104d3578063095ea7b3146105135780630abab09e146105335780630b102d1a1461055357005b366104a657005b005b3480156104b457600080fd5b506104bd610fc6565b6040516104ca9190614538565b60405180910390f35b3480156104df57600080fd5b506105036104ee3660046140a3565b60016020526000908152604090205460ff1681565b60405190151581526020016104ca565b34801561051f57600080fd5b5061050361052e366004614185565b611058565b34801561053f57600080fd5b506104a661054e3660046140a3565b61106f565b34801561055f57600080fd5b506104a661056e3660046140a3565b611131565b34801561057f57600080fd5b506104a661058e36600461427a565b61117d565b34801561059f57600080fd5b506105036105ae3660046140a3565b60146020526000908152604090205460ff1681565b3480156105cf57600080fd5b506104a66105de366004614157565b6111be565b3480156105ef57600080fd5b506105036105fe366004614442565b611213565b34801561060f57600080fd5b50600c545b6040519081526020016104ca565b34801561062e57600080fd5b50600554610642906001600160a01b031681565b6040516001600160a01b0390911681526020016104ca565b34801561066657600080fd5b5061061460305481565b34801561067c57600080fd5b506104a661068b366004614410565b61138a565b34801561069c57600080fd5b506104a66106ab366004614410565b61144e565b3480156106bc57600080fd5b506106146106cb3660046140a3565b60196020526000908152604090205481565b3480156106e957600080fd5b50610614602d5481565b3480156106ff57600080fd5b506104a661070e366004614157565b6114e7565b34801561071f57600080fd5b506104a661072e36600461434f565b61157c565b34801561073f57600080fd5b5061050361074e366004614116565b6115c4565b34801561075f57600080fd5b50610614602f5481565b34801561077557600080fd5b506104a66107843660046140a3565b611698565b34801561079557600080fd5b506105036107a43660046140a3565b60156020526000908152604090205460ff1681565b3480156107c557600080fd5b506104a66107d4366004614410565b611751565b3480156107e557600080fd5b506104a6611815565b3480156107fa57600080fd5b50600a5460405160ff90911681526020016104ca565b34801561081c57600080fd5b5061050361082b3660046140a3565b60136020526000908152604090205460ff1681565b34801561084c57600080fd5b5061061460205481565b34801561086257600080fd5b50610614601e5481565b34801561087857600080fd5b50610614601f5481565b34801561088e57600080fd5b506104a661089d366004614410565b611854565b3480156108ae57600080fd5b50600d54610642906001600160a01b031681565b3480156108ce57600080fd5b506108d761194e565b6040516104ca91906144f4565b3480156108f057600080fd5b506105036108ff366004614389565b6119a5565b34801561091057600080fd5b5061061461091f3660046140a3565b611b82565b6104a6610932366004614410565b611be5565b34801561094357600080fd5b506104a66109523660046140a3565b611fd5565b34801561096357600080fd5b506104a6612077565b34801561097857600080fd5b50610614602c5481565b34801561098e57600080fd5b50600e5461050390600160a01b900460ff1681565b3480156109af57600080fd5b506104a66109be366004614410565b6120d5565b3480156109cf57600080fd5b5061061460115481565b3480156109e557600080fd5b506104a66109f4366004614410565b61217b565b348015610a0557600080fd5b506104a6610a143660046140a3565b612241565b348015610a2557600080fd5b50610614610a343660046140a3565b6001600160a01b031660009081526002602052604090205490565b348015610a5b57600080fd5b506104a66122fa565b348015610a7057600080fd5b50610614602b5481565b348015610a8657600080fd5b50610503610a953660046140a3565b60126020526000908152604090205460ff1681565b348015610ab657600080fd5b50610614601c5481565b348015610acc57600080fd5b5061061460255481565b348015610ae257600080fd5b50610614600b5481565b348015610af857600080fd5b50610614610b073660046140a3565b612330565b348015610b1857600080fd5b50610642610b27366004614410565b612438565b348015610b3857600080fd5b50610614610b473660046140a3565b60186020526000908152604090205481565b348015610b6557600080fd5b50610503610b743660046141b1565b6124b5565b348015610b8557600080fd5b506000546001600160a01b0316610642565b348015610ba357600080fd5b506104a6610bb2366004614157565b6126da565b348015610bc357600080fd5b50600654610642906001600160a01b031681565b348015610be357600080fd5b506104bd61272f565b348015610bf857600080fd5b50610614602e5481565b348015610c0e57600080fd5b506104a6610c1d366004614410565b61273e565b348015610c2e57600080fd5b506104a6610c3d366004614157565b612848565b348015610c4e57600080fd5b506104a6610c5d366004614157565b61289d565b348015610c6e57600080fd5b50610503610c7d366004614185565b6128f2565b348015610c8e57600080fd5b50610503610c9d3660046140a3565b60166020526000908152604090205460ff1681565b348015610cbe57600080fd5b506104a6610ccd366004614157565b6128ff565b348015610cde57600080fd5b50600e54610642906001600160a01b031681565b348015610cfe57600080fd5b506104a6610d0d366004614495565b612954565b348015610d1e57600080fd5b506104a6612aac565b348015610d3357600080fd5b50600e5461050390600160a81b900460ff1681565b348015610d5457600080fd5b50610614600f5481565b348015610d6a57600080fd5b50610614610d793660046140a3565b612b54565b348015610d8a57600080fd5b50610503610d993660046140a3565b612bb0565b348015610daa57600080fd5b50610614610db9366004614410565b612c19565b348015610dca57600080fd5b50610503610dd93660046140a3565b60176020526000908152604090205460ff1681565b348015610dfa57600080fd5b50610614610e093660046140a3565b601a6020526000908152604090205481565b348015610e2757600080fd5b506104a6612c3a565b348015610e3c57600080fd5b50600754610642906001600160a01b031681565b348015610e5c57600080fd5b5061061460105481565b348015610e7257600080fd5b50610614601d5481565b348015610e8857600080fd5b50600e5461050390600160b01b900460ff1681565b348015610ea957600080fd5b50610614610eb83660046140dd565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610eef57600080fd5b506104a6610efe366004614157565b612c73565b348015610f0f57600080fd5b50600454610642906001600160a01b031681565b348015610f2f57600080fd5b50610614610f3e3660046140a3565b601b6020526000908152604090205481565b348015610f5c57600080fd5b506104a6610f6b3660046140a3565b612cc8565b348015610f7c57600080fd5b506104a6610f8b366004614495565b612d63565b348015610f9c57600080fd5b506104a6610fab366004614410565b612eb2565b348015610fbc57600080fd5b5061061460265481565b606060088054610fd590614867565b80601f016020809104026020016040519081016040528092919081815260200182805461100190614867565b801561104e5780601f106110235761010080835404028352916020019161104e565b820191906000526020600020905b81548152906001019060200180831161103157829003601f168201915b5050505050905090565b6000611065338484612f4a565b5060015b92915050565b6000546001600160a01b031633146110a25760405162461bcd60e51b8152600401611099906145f2565b60405180910390fd5b600680546001600160a01b039092166001600160a01b0319909216821790556000908152601460209081526040808320805460ff1990811660019081179092556015845282852080548216831790556016845282852080548216831790556017845282852080548216831790556012845282852080548216831790556013909352922080549091169091179055565b6000546001600160a01b0316331461115b5760405162461bcd60e51b8152600401611099906145f2565b603280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111a75760405162461bcd60e51b8152600401611099906145f2565b80516111ba906033906020840190613fb5565b5050565b6000546001600160a01b031633146111e85760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600080546001600160a01b0316331461123e5760405162461bcd60e51b8152600401611099906145f2565b476000831561124e575080611251565b50835b818111156112c05760405162461bcd60e51b815260206004820152603660248201527f746f6b656e57697468647261773a206574682062616c616e6365206d757374206044820152753132903630b933b2b9103a3430b71030b6b7bab73a1760511b6064820152608401611099565b600080546040805183815260208101918290526001600160a01b039092169184916112eb91906144d8565b60006040518083038185875af1925050503d8060008114611328576040519150601f19603f3d011682016040523d82523d6000602084013e61132d565b606091505b505090508061137e5760405162461bcd60e51b815260206004820152601c60248201527f77697468647261774574683a207472616e73666572206572726f722e000000006044820152606401611099565b50600195945050505050565b6000546001600160a01b031633146113b45760405162461bcd60e51b8152600401611099906145f2565b600a80546113c79160ff90911690614756565b6113d490620186a0614801565b8110156114495760405162461bcd60e51b815260206004820152603e60248201527f486f7374696c655a6f6e653a20616d6f756e742073686f756c6420626520686960448201527f67686572207468616e20302e3125206f6620746f74616c537570706c792e00006064820152608401611099565b600f55565b6000546001600160a01b031633146114785760405162461bcd60e51b8152600401611099906145f2565b62093a808111156114e25760405162461bcd60e51b815260206004820152602e60248201527f486f7374696c655a6f6e653a20616d6f756e74206d757374206265206c6f776560448201526d39103a3430b71018903bb2b2b59760911b6064820152608401611099565b601c55565b6000546001600160a01b031633146115115760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b039091166000908152600160209081526040808320805494151560ff19958616811790915560148352818420805486168217905560158352818420805486168217905560168352818420805486168217905560179092529091208054909216179055565b6000546001600160a01b031633146115a65760405162461bcd60e51b8152600401611099906145f2565b600e8054911515600160b01b0260ff60b01b19909216919091179055565b6001600160a01b03831660009081526003602090815260408083203384529091528120548211156116485760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401611099565b61165384848461306e565b6001600160a01b03841660009081526003602090815260408083203380855292529091205461168e918691611689908690614820565b612f4a565b5060019392505050565b6000546001600160a01b031633146116c25760405162461bcd60e51b8152600401611099906145f2565b600780546001600160a01b039092166001600160a01b0319909216821790556000908152601460209081526040808320805460ff1990811660019081179092556015845282852080548216831790556016845282852080548216831790556017845282852080548216831790556012845282852080548216831790556013909352922080549091169091179055565b6000546001600160a01b0316331461177b5760405162461bcd60e51b8152600401611099906145f2565b600a805461178e9160ff90911690614756565b61179b90620927c0614801565b8110156118105760405162461bcd60e51b815260206004820152603760248201527f486f7374696c655a6f6e653a20616d6f756e74206d757374206265206869676860448201527f6572207468616e203630302730303020746f6b656e732e0000000000000000006064820152608401611099565b602055565b6000546001600160a01b0316331461183f5760405162461bcd60e51b8152600401611099906145f2565b600e805460ff60a81b1916600160a81b179055565b6000546001600160a01b0316331461187e5760405162461bcd60e51b8152600401611099906145f2565b8061188833610a34565b10156118ef5760405162461bcd60e51b815260206004820152603060248201527f486f7374696c655a6f6e653a2062616c616e6365206d7573742062652068696760448201526f3432b9103a3430b71030b6b7bab73a1760811b6064820152608401611099565b80600c546118fd9190614820565b600c55336000908152600260205260408120805483929061191f908490614820565b90915550506040518181526000903390600080516020614923833981519152906020015b60405180910390a350565b6060603380548060200260200160405190810160405280929190818152602001828054801561104e57602002820191906000526020600020905b815481526020019060010190808311611988575050505050905090565b600080546001600160a01b031633146119d05760405162461bcd60e51b8152600401611099906145f2565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a082319060240160206040518083038186803b158015611a1257600080fd5b505afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190614429565b905060008315611a5b575080611a5e565b50835b81811115611ad45760405162461bcd60e51b815260206004820152603860248201527f746f6b656e57697468647261773a20746f6b656e2062616c616e6365206d757360448201527f74206265206c6172676572207468616e20616d6f756e742e00000000000000006064820152608401611099565b856001600160a01b031663a9059cbb611af56000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015611b3d57600080fd5b505af1158015611b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b75919061436c565b5060019695505050505050565b600080611b8e83612330565b90508060011415611bb057602b54601154611ba99190614820565b9392505050565b8060021415611bc957602c54601154611ba99190614820565b8060031415611bdb5750600092915050565b5050601154919050565b6000546001600160a01b03163314611c0f5760405162461bcd60e51b8152600401611099906145f2565b600a8054600091611c239160ff1690614756565b611c2d9083614801565b600e549091506001600160a01b0316611c945760405162461bcd60e51b8152602060048201526024808201527f6164644c69717569646974793a20706169722069736e277420637265617465206044820152633cb2ba1760e11b6064820152608401611099565b600e546001600160a01b031660009081526014602052604090205460ff16611d1c5760405162461bcd60e51b815260206004820152603560248201527f6164644c69717569646974793a20706169722069736e2774206578636c7564656044820152743210333937b69036b0bc103a3c1030b6b7bab73a1760591b6064820152608401611099565b600080600e60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611d6d57600080fd5b505afa158015611d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da591906143cb565b5091509150816001600160701b031660001480611dc957506001600160701b038116155b611e265760405162461bcd60e51b815260206004820152602860248201527f4c69717569646974792073686f756c64206e6f7420626520616c7265616479206044820152671c1c9bdd9a59195960c21b6064820152608401611099565b306000908152600260205260408120549050611e43333086612f4a565b611e4d30856128f2565b5030600090815260026020526040902054611e6885836146d9565b811015611edd5760405162461bcd60e51b815260206004820152603c60248201527f6164644c69717569646974793a2062616c616e6365206c6f776572207468616e60448201527f20616d6f756e742070726576696f757320616e6420616d6f756e742e000000006064820152608401611099565b603154611ef59030906001600160a01b031687612f4a565b6031546001600160a01b031663f305d719343088600080611f1e6000546001600160a01b031690565b611f2942603c6146d9565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b158015611f9157600080fd5b505af1158015611fa5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fca9190614467565b505050505050505050565b6000546001600160a01b03163314611fff5760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b031660009081526014602090815260408083208054600160ff1991821681179092556015845282852080548216831790556016845282852080548216831790556017845282852080548216831790556012845282852080548216831790556013909352922080549091169091179055565b6000546001600160a01b031633146120a15760405162461bcd60e51b8152600401611099906145f2565b600060218190556022819055602381905560248190556010819055602781905560288190556029819055602a819055601155565b6000546001600160a01b031633146120ff5760405162461bcd60e51b8152600401611099906145f2565b60038110156121765760405162461bcd60e51b815260206004820152603760248201527f486f7374696c655a6f6e653a20616d6f756e74206d757374206265206869676860448201527f6572207468616e2033207472616e73616374696f6e732e0000000000000000006064820152608401611099565b601e55565b6000546001600160a01b031633146121a55760405162461bcd60e51b8152600401611099906145f2565b600a80546121b89160ff90911690614756565b6121c5906216e360614801565b81101561223c576040805162461bcd60e51b81526020600482015260248101919091527f486f7374696c655a6f6e653a206c617267657220616d6f756e74206d7573742060448201527f626520686967686572207468616e2031273530302730303020746f6b656e732e6064820152608401611099565b601f55565b6000546001600160a01b0316331461226b5760405162461bcd60e51b8152600401611099906145f2565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152601460209081526040808320805460ff1990811660019081179092556015845282852080548216831790556016845282852080548216831790556017845282852080548216831790556012845282852080548216831790556013909352922080549091169091179055565b6000546001600160a01b031633146123245760405162461bcd60e51b8152600401611099906145f2565b61232e6000613cbb565b565b6032546000906001600160a01b0316156124305760325460405162438b6360e81b81526001600160a01b038481166004830152600092169063438b63009060240160006040518083038186803b15801561238957600080fd5b505afa15801561239d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123c591908101906142b7565b5190506123d183612bb0565b156123df5750600392915050565b6000811180156123f0575060038111155b156123fe5750600192915050565b60038111801561240f575060098111155b1561241d5750600292915050565b600a811061242e5750600392915050565b505b506000919050565b6032546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e9060240160206040518083038186803b15801561247d57600080fd5b505afa158015612491573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106991906140c0565b600080546001600160a01b031633146124e05760405162461bcd60e51b8152600401611099906145f2565b81518351146124ee57600080fd5b6000805b83518110156125465783818151811061250d5761250d6148d3565b6020026020010151670de0b6b3a76400006125289190614801565b61253290836146d9565b91508061253e816148a2565b9150506124f2565b503360009081526002602052604090205481111561256357600080fd5b60005b83518110156126cf57838181518110612581576125816148d3565b6020026020010151670de0b6b3a764000061259c9190614801565b600260008784815181106125b2576125b26148d3565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546125e991906146d9565b92505081905550838181518110612602576126026148d3565b6020026020010151670de0b6b3a764000061261d9190614801565b336000908152600260205260408120805490919061263c908490614820565b92505081905550848181518110612655576126556148d3565b60200260200101516001600160a01b0316336001600160a01b0316600080516020614923833981519152868481518110612691576126916148d3565b6020026020010151670de0b6b3a76400006126ac9190614801565b60405190815260200160405180910390a3806126c7816148a2565b915050612566565b506001949350505050565b6000546001600160a01b031633146127045760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b606060098054610fd590614867565b6000546001600160a01b031633146127685760405162461bcd60e51b8152600401611099906145f2565b600a805461277b9160ff90911690614756565b600b546127889190614801565b81600c5461279691906146d9565b11156127f05760405162461bcd60e51b8152602060048201526024808201527f486f7374696c655a6f6e653a20616d6f756e7420686967686572207468616e2060448201526336b0bc1760e11b6064820152608401611099565b80600c546127fe91906146d9565b600c5533600090815260026020526040812080548392906128209084906146d9565b9091555050604051818152339060009060008051602061492383398151915290602001611943565b6000546001600160a01b031633146128725760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146128c75760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600061106533848461306e565b6000546001600160a01b031633146129295760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461297e5760405162461bcd60e51b8152600401611099906145f2565b60148611158015612990575060148511155b801561299d575060148411155b80156129aa575060148311155b6129b357600080fd5b602786905560288590556029849055602a83905582846129d387896146d9565b6129dd91906146d9565b6129e791906146d9565b6011819055602b839055602c82905560211015612a165760405162461bcd60e51b81526004016110999061456b565b602c54602b541115612a3a5760405162461bcd60e51b8152600401611099906145b0565b601154602c541115612aa45760405162461bcd60e51b815260206004820152602d60248201527f6c7632206d757374206265206c6f776572206f72206567616c207468616e207360448201526c32b6362a37ba30b62332b2b99760991b6064820152608401611099565b505050505050565b6000546001600160a01b03163314612ad65760405162461bcd60e51b8152600401611099906145f2565b600460218190556005602281905560026023819055602481905591612afc9083906146d9565b612b0691906146d9565b612b1091906146d9565b6010556005602781905560096028819055600260298190556003602a819055929091612b3b916146d9565b612b4591906146d9565b612b4f91906146d9565b601155565b600080612b6083612330565b90508060011415612b7b57602554601054611ba99190614820565b8060021415612b9457602654601054611ba99190614820565b8060031415612ba65750600092915050565b5050601054919050565b600060015b60335481101561242e57826001600160a01b0316612bef60338381548110612bdf57612bdf6148d3565b9060005260206000200154612438565b6001600160a01b03161415612c075750600192915050565b80612c11816148a2565b915050612bb5565b60338181548110612c2957600080fd5b600091825260209091200154905081565b6000546001600160a01b03163314612c645760405162461bcd60e51b8152600401611099906145f2565b600e805460ff60a01b19169055565b6000546001600160a01b03163314612c9d5760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612cf25760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b038116612d575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611099565b612d6081613cbb565b50565b6000546001600160a01b03163314612d8d5760405162461bcd60e51b8152600401611099906145f2565b60148611158015612d9f575060148511155b8015612dac575060148411155b8015612db9575060148311155b612dc257600080fd5b60218690556022859055602384905560248390558285612de286896146d9565b612dec91906146d9565b612df691906146d9565b60108190556025839055602682905560211015612e255760405162461bcd60e51b81526004016110999061456b565b6026546025541115612e495760405162461bcd60e51b8152600401611099906145b0565b6010546026541115612aa45760405162461bcd60e51b815260206004820152602c60248201527f6c7632206d757374206265206c6f776572206f72206567616c207468616e206260448201526b3abcaa37ba30b62332b2b99760a11b6064820152608401611099565b6000546001600160a01b03163314612edc5760405162461bcd60e51b8152600401611099906145f2565b610e10811115612f455760405162461bcd60e51b815260206004820152602e60248201527f486f7374696c655a6f6e653a20616d6f756e74206d757374206265206c6f776560448201526d39103a3430b71018902437bab91760911b6064820152608401611099565b601d55565b6001600160a01b038316612fac5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611099565b6001600160a01b03821661300d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611099565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166130d25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611099565b6001600160a01b0382166131345760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611099565b6001600160a01b03831660009081526002602052604090205481111561319c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220657863656564732062616c616e6365006044820152606401611099565b6818650127cc3dc80000811161320f5760405162461bcd60e51b815260206004820152603260248201527f486f7374696c655a6f6e653a2063616e6e6f74207472616e73666572206c657360448201527139903a3430b7101a1a98103a37b5b2b7399760711b6064820152608401611099565b600e54600160a01b900460ff16156132795760405162461bcd60e51b815260206004820152602760248201527f486f7374696c655a6f6e653a2074726164696e672069736e277420656e61626c60448201526632b2103cb2ba1760c91b6064820152608401611099565b6001600160a01b03821660009081526001602052604090205460ff1680156132af57506000546001600160a01b03848116911614155b1561331b57600e54600160a81b900460ff1661331b5760405162461bcd60e51b815260206004820152602560248201527f486f7374696c655a6f6e653a20706f6f6c206973206e6f742063726561746564604482015264103cb2ba1760d91b6064820152608401611099565b6001600160a01b03831660009081526001602052604090205460ff1615613381576001600160a01b03821660009081526014602052604090205460ff16806133655750600f548111155b6133815760405162461bcd60e51b815260040161109990614627565b6001600160a01b03821660009081526001602052604090205460ff16156133e7576001600160a01b03831660009081526014602052604090205460ff16806133cb5750600f548111155b6133e75760405162461bcd60e51b815260040161109990614627565b6001600160a01b03831660009081526014602052604090205460ff16806134105750600f548111155b61342c5760405162461bcd60e51b815260040161109990614627565b6001600160a01b03821660009081526017602052604090205460ff16806134795750602080546001600160a01b0384166000908152600290925260409091205461347690836146d9565b11155b6134eb5760405162461bcd60e51b815260206004820152603d60248201527f486f7374696c655a6f6e653a20616d6f756e742069732068696768657220746860448201527f616e206d61782077616c6c657420616d6f756e7420616c6c6f7765642e0000006064820152608401611099565b600e54600160b01b900460ff1615613558576001600160a01b03821660009081526001602052604090205460ff161561352d576135288382613d0b565b613558565b6001600160a01b03831660009081526001602052604090205460ff1615613558576135588282613d0b565b6001600160a01b0382166000908152601260205260408120548190819060ff1615801561359d57506001600160a01b03861660009081526001602052604090205460ff165b80156135ab57506000601054115b156135b557600191505b6001600160a01b03861660009081526013602052604090205460ff161580156135f657506001600160a01b03851660009081526001602052604090205460ff165b801561360457506000601154115b1561360d575060015b811561386f57600061361e86612b54565b9050801561386d5760646136328287614801565b61363c91906146f1565b61364690856146d9565b935080602254856136579190614801565b61366191906146f1565b60308190556007546001600160a01b0316600090815260026020526040812080549091906136909084906146d9565b90915550506007546030546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a380602354856136da9190614801565b6136e491906146f1565b602e8190556005546001600160a01b0316600090815260026020526040812080549091906137139084906146d9565b9091555050600554602e546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a3806021548561375d9190614801565b61376791906146f1565b602d8190556004546001600160a01b0316600090815260026020526040812080549091906137969084906146d9565b9091555050600454602d546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a380602454856137e09190614801565b6137ea91906146f1565b602f8190556006546001600160a01b0316600090815260026020526040812080549091906138199084906146d9565b9091555050600654602f546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a361386d6000602d819055602e819055602f819055603055565b505b8015613b0d57600061388087611b82565b90508015613b0b5760646138948287614801565b61389e91906146f1565b6138a890856146d9565b935080602854856138b99190614801565b6138c391906146f1565b60308190556007546001600160a01b0316600090815260026020526040812080549091906138f29084906146d9565b90915550506007546030546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a3806029548561393c9190614801565b61394691906146f1565b602e600082825461395791906146d9565b9091555050602e546005546001600160a01b0316600090815260026020526040812080549091906139899084906146d9565b9091555050600554602e546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a380602754856139d39190614801565b6139dd91906146f1565b602d60008282546139ee91906146d9565b9091555050602d546004546001600160a01b031660009081526002602052604081208054909190613a209084906146d9565b9091555050600454602d546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a380602a5485613a6a9190614801565b613a7491906146f1565b602f6000828254613a8591906146d9565b9091555050602f546006546001600160a01b031660009081526002602052604081208054909190613ab79084906146d9565b9091555050600654602f546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a3613b0b6000602d819055602e819055602f819055603055565b505b6000613b198486614820565b6001600160a01b038816600090815260026020526040812080549293508792909190613b46908490614820565b90915550506001600160a01b03861660009081526002602052604081208054839290613b739084906146d9565b90915550506001600160a01b03861660009081526001602052604090205460ff1615613bfa576001600160a01b0387166000908152601b602052604081208054879290613bc19084906146d9565b90915550506001600160a01b0387166000908152601960205260408120805460019290613bef9084906146d9565b90915550613c779050565b6001600160a01b03871660009081526001602052604090205460ff1615613c77576001600160a01b0386166000908152601b602052604081208054879290613c439084906146d9565b90915550506001600160a01b0386166000908152601960205260408120805460019290613c719084906146d9565b90915550505b856001600160a01b0316876001600160a01b031660008051602061492383398151915283604051613caa91815260200190565b60405180910390a350505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216600090815260186020526040902054613d48576001600160a01b0382166000908152601860205260409020429055613d9d565b601d546001600160a01b0383166000908152601860205260409020544291613d6f916146d9565b11613d9d576001600160a01b0382166000908152601960209081526040808320839055601890915290204290555b6001600160a01b03821660009081526015602052604090205460ff1680613de95750601e546001600160a01b038316600090815260196020526040902054613de69060016146d9565b11155b613e665760405162461bcd60e51b815260206004820152604260248201527f7472616e736665723a206e756d626572206f66207472616e73616374696f6e7360448201527f20686967686572207468616e2062617365642074696d6520616c6c6f77616e63606482015261329760f11b608482015260a401611099565b6001600160a01b0382166000908152601a6020526040902054613ea3576001600160a01b0382166000908152601a60205260409020429055613ef8565b601c546001600160a01b0383166000908152601a60205260409020544291613eca916146d9565b11613ef8576001600160a01b0382166000908152601b60209081526040808320839055601a90915290204290555b6001600160a01b03821660009081526016602052604090205460ff1680613f435750601f546001600160a01b0383166000908152601b6020526040902054613f4090836146d9565b11155b6111ba5760405162461bcd60e51b815260206004820152603960248201527f7472616e736665723a20616d6f756e7420686967686572207468616e206c617260448201527f6765722062617365642074696d6520616c6c6f77616e63652e000000000000006064820152608401611099565b828054828255906000526020600020908101928215613ff0579160200282015b82811115613ff0578251825591602001919060010190613fd5565b50613ffc929150614000565b5090565b5b80821115613ffc5760008155600101614001565b600082601f83011261402657600080fd5b8135602061403b614036836146b5565b614684565b80838252828201915082860187848660051b890101111561405b57600080fd5b60005b8581101561407a5781358452928401929084019060010161405e565b5090979650505050505050565b80516001600160701b038116811461409e57600080fd5b919050565b6000602082840312156140b557600080fd5b8135611ba9816148ff565b6000602082840312156140d257600080fd5b8151611ba9816148ff565b600080604083850312156140f057600080fd5b82356140fb816148ff565b9150602083013561410b816148ff565b809150509250929050565b60008060006060848603121561412b57600080fd5b8335614136816148ff565b92506020840135614146816148ff565b929592945050506040919091013590565b6000806040838503121561416a57600080fd5b8235614175816148ff565b9150602083013561410b81614914565b6000806040838503121561419857600080fd5b82356141a3816148ff565b946020939093013593505050565b600080604083850312156141c457600080fd5b823567ffffffffffffffff808211156141dc57600080fd5b818501915085601f8301126141f057600080fd5b81356020614200614036836146b5565b8083825282820191508286018a848660051b890101111561422057600080fd5b600096505b8487101561424c578035614238816148ff565b835260019690960195918301918301614225565b509650508601359250508082111561426357600080fd5b5061427085828601614015565b9150509250929050565b60006020828403121561428c57600080fd5b813567ffffffffffffffff8111156142a357600080fd5b6142af84828501614015565b949350505050565b600060208083850312156142ca57600080fd5b825167ffffffffffffffff8111156142e157600080fd5b8301601f810185136142f257600080fd5b8051614300614036826146b5565b80828252848201915084840188868560051b870101111561432057600080fd5b600094505b83851015614343578051835260019490940193918501918501614325565b50979650505050505050565b60006020828403121561436157600080fd5b8135611ba981614914565b60006020828403121561437e57600080fd5b8151611ba981614914565b60008060006060848603121561439e57600080fd5b83356143a9816148ff565b92506020840135915060408401356143c081614914565b809150509250925092565b6000806000606084860312156143e057600080fd5b6143e984614087565b92506143f760208501614087565b9150604084015163ffffffff811681146143c057600080fd5b60006020828403121561442257600080fd5b5035919050565b60006020828403121561443b57600080fd5b5051919050565b6000806040838503121561445557600080fd5b82359150602083013561410b81614914565b60008060006060848603121561447c57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156144ae57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600082516144ea818460208701614837565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b8181101561452c57835183529284019291840191600101614510565b50909695505050505050565b6020815260008251806020840152614557816040850160208701614837565b601f01601f19169190910160400192915050565b60208082526025908201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e604082015264101999929760d91b606082015260800190565b60208082526022908201527f6c7631206d757374206265206c6f776572206f72206567616c207468616e206c6040820152613b1960f11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603b908201527f486f7374696c655a6f6e653a20616d6f756e742069732068696768657220746860408201527f616e206d6178207472616e73616374696f6e20616c6c6f7765642e0000000000606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156146ad576146ad6148e9565b604052919050565b600067ffffffffffffffff8211156146cf576146cf6148e9565b5060051b60200190565b600082198211156146ec576146ec6148bd565b500190565b60008261470e57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561474e578160001904821115614734576147346148bd565b8085161561474157918102915b93841c9390800290614718565b509250929050565b6000611ba960ff84168360008261476f57506001611069565b8161477c57506000611069565b8160018114614792576002811461479c576147b8565b6001915050611069565b60ff8411156147ad576147ad6148bd565b50506001821b611069565b5060208310610133831016604e8410600b84101617156147db575081810a611069565b6147e58383614713565b80600019048211156147f9576147f96148bd565b029392505050565b600081600019048311821515161561481b5761481b6148bd565b500290565b600082821015614832576148326148bd565b500390565b60005b8381101561485257818101518382015260200161483a565b83811115614861576000848401525b50505050565b600181811c9082168061487b57607f821691505b6020821081141561489c57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156148b6576148b66148bd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612d6057600080fd5b8015158114612d6057600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220316861761c36fbee5a3759542de0b3e8726f6acb57e0b4aa968cbfbbf883ce0a64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061049f5760003560e01c8063715018a61161025e578063ba876bb911610143578063d85ba063116100bb578063e4440a8611610082578063e4440a8614610f03578063ea28b65f14610f23578063f2fde38b14610f50578063f74c9f4714610f70578063f756893b14610f90578063fa32e7d814610fb057005b8063d85ba06314610e50578063d96530d214610e66578063db5671fb14610e7c578063dd62ed3e14610e9d578063e10dffc014610ee357005b8063ceb198841161010a578063ceb1988414610d7e578063d0a6dc6814610d9e578063d1d7d7ef14610dbe578063d388451014610dee578063d431b1ac14610e1b578063d469801614610e3057005b8063ba876bb914610cf2578063c261a3c814610d12578063c71b49b014610d27578063c8c8ebe414610d48578063ca3436d414610d5e57005b80638f8a3403116101d6578063a104b12f1161019d578063a104b12f14610c22578063a7137e7114610c42578063a9059cbb14610c62578063aa43471e14610c82578063ae4edb0914610cb2578063b51449bb14610cd257005b80638f8a340314610b9757806393280f7b14610bb757806395d89b4114610bd75780639fccce3214610bec578063a0712d6814610c0257005b80637a27da79116102255780637a27da7914610ad65780637a7f36fe14610aec5780638363871014610b0c57806387c891dd14610b2c57806388d695b214610b595780638da5cb5b14610b7957005b8063715018a614610a4f57806373ad373a14610a64578063760509f014610a7a578063793761ae14610aaa578063795eeafc14610ac057005b80632e067421116103845780634d1d772c116102fc5780635c975abb116102c35780635c975abb1461098257806366373959146109a35780636a486a8e146109c35780636a725292146109d95780636cd56878146109f957806370a0823114610a1957005b80634d1d772c1461090457806351c6590a146109245780635433226614610937578063546900331461095757806354dd97061461096c57005b80633dce3b411161034b5780633dce3b41146108565780633e4353c61461086c57806342966c681461088257806342ba61bb146108a257806343faaf63146108c25780634a33a01a146108e457005b80632e067421146107b95780632e41225b146107d9578063313ce567146107ee57806331f870101461081057806334ecc70a1461084057005b80631a8145bb1161041757806320bec12c116103de57806320bec12c146106f3578063227313961461071357806323b872dd146107335780632744fdaa14610753578063296f0a0c146107695780632da557da1461078957005b80631a8145bb1461065a5780631e293c10146106705780631e38535c146106905780631e593e48146106b05780631f3fed8f146106dd57005b80630d827781116104665780630d8277811461057357806310d5de531461059357806315430f40146105c357806315d37054146105e357806318160ddd14610603578063185870f91461062257005b806306fdde03146104a85780630713f16b146104d3578063095ea7b3146105135780630abab09e146105335780630b102d1a1461055357005b366104a657005b005b3480156104b457600080fd5b506104bd610fc6565b6040516104ca9190614538565b60405180910390f35b3480156104df57600080fd5b506105036104ee3660046140a3565b60016020526000908152604090205460ff1681565b60405190151581526020016104ca565b34801561051f57600080fd5b5061050361052e366004614185565b611058565b34801561053f57600080fd5b506104a661054e3660046140a3565b61106f565b34801561055f57600080fd5b506104a661056e3660046140a3565b611131565b34801561057f57600080fd5b506104a661058e36600461427a565b61117d565b34801561059f57600080fd5b506105036105ae3660046140a3565b60146020526000908152604090205460ff1681565b3480156105cf57600080fd5b506104a66105de366004614157565b6111be565b3480156105ef57600080fd5b506105036105fe366004614442565b611213565b34801561060f57600080fd5b50600c545b6040519081526020016104ca565b34801561062e57600080fd5b50600554610642906001600160a01b031681565b6040516001600160a01b0390911681526020016104ca565b34801561066657600080fd5b5061061460305481565b34801561067c57600080fd5b506104a661068b366004614410565b61138a565b34801561069c57600080fd5b506104a66106ab366004614410565b61144e565b3480156106bc57600080fd5b506106146106cb3660046140a3565b60196020526000908152604090205481565b3480156106e957600080fd5b50610614602d5481565b3480156106ff57600080fd5b506104a661070e366004614157565b6114e7565b34801561071f57600080fd5b506104a661072e36600461434f565b61157c565b34801561073f57600080fd5b5061050361074e366004614116565b6115c4565b34801561075f57600080fd5b50610614602f5481565b34801561077557600080fd5b506104a66107843660046140a3565b611698565b34801561079557600080fd5b506105036107a43660046140a3565b60156020526000908152604090205460ff1681565b3480156107c557600080fd5b506104a66107d4366004614410565b611751565b3480156107e557600080fd5b506104a6611815565b3480156107fa57600080fd5b50600a5460405160ff90911681526020016104ca565b34801561081c57600080fd5b5061050361082b3660046140a3565b60136020526000908152604090205460ff1681565b34801561084c57600080fd5b5061061460205481565b34801561086257600080fd5b50610614601e5481565b34801561087857600080fd5b50610614601f5481565b34801561088e57600080fd5b506104a661089d366004614410565b611854565b3480156108ae57600080fd5b50600d54610642906001600160a01b031681565b3480156108ce57600080fd5b506108d761194e565b6040516104ca91906144f4565b3480156108f057600080fd5b506105036108ff366004614389565b6119a5565b34801561091057600080fd5b5061061461091f3660046140a3565b611b82565b6104a6610932366004614410565b611be5565b34801561094357600080fd5b506104a66109523660046140a3565b611fd5565b34801561096357600080fd5b506104a6612077565b34801561097857600080fd5b50610614602c5481565b34801561098e57600080fd5b50600e5461050390600160a01b900460ff1681565b3480156109af57600080fd5b506104a66109be366004614410565b6120d5565b3480156109cf57600080fd5b5061061460115481565b3480156109e557600080fd5b506104a66109f4366004614410565b61217b565b348015610a0557600080fd5b506104a6610a143660046140a3565b612241565b348015610a2557600080fd5b50610614610a343660046140a3565b6001600160a01b031660009081526002602052604090205490565b348015610a5b57600080fd5b506104a66122fa565b348015610a7057600080fd5b50610614602b5481565b348015610a8657600080fd5b50610503610a953660046140a3565b60126020526000908152604090205460ff1681565b348015610ab657600080fd5b50610614601c5481565b348015610acc57600080fd5b5061061460255481565b348015610ae257600080fd5b50610614600b5481565b348015610af857600080fd5b50610614610b073660046140a3565b612330565b348015610b1857600080fd5b50610642610b27366004614410565b612438565b348015610b3857600080fd5b50610614610b473660046140a3565b60186020526000908152604090205481565b348015610b6557600080fd5b50610503610b743660046141b1565b6124b5565b348015610b8557600080fd5b506000546001600160a01b0316610642565b348015610ba357600080fd5b506104a6610bb2366004614157565b6126da565b348015610bc357600080fd5b50600654610642906001600160a01b031681565b348015610be357600080fd5b506104bd61272f565b348015610bf857600080fd5b50610614602e5481565b348015610c0e57600080fd5b506104a6610c1d366004614410565b61273e565b348015610c2e57600080fd5b506104a6610c3d366004614157565b612848565b348015610c4e57600080fd5b506104a6610c5d366004614157565b61289d565b348015610c6e57600080fd5b50610503610c7d366004614185565b6128f2565b348015610c8e57600080fd5b50610503610c9d3660046140a3565b60166020526000908152604090205460ff1681565b348015610cbe57600080fd5b506104a6610ccd366004614157565b6128ff565b348015610cde57600080fd5b50600e54610642906001600160a01b031681565b348015610cfe57600080fd5b506104a6610d0d366004614495565b612954565b348015610d1e57600080fd5b506104a6612aac565b348015610d3357600080fd5b50600e5461050390600160a81b900460ff1681565b348015610d5457600080fd5b50610614600f5481565b348015610d6a57600080fd5b50610614610d793660046140a3565b612b54565b348015610d8a57600080fd5b50610503610d993660046140a3565b612bb0565b348015610daa57600080fd5b50610614610db9366004614410565b612c19565b348015610dca57600080fd5b50610503610dd93660046140a3565b60176020526000908152604090205460ff1681565b348015610dfa57600080fd5b50610614610e093660046140a3565b601a6020526000908152604090205481565b348015610e2757600080fd5b506104a6612c3a565b348015610e3c57600080fd5b50600754610642906001600160a01b031681565b348015610e5c57600080fd5b5061061460105481565b348015610e7257600080fd5b50610614601d5481565b348015610e8857600080fd5b50600e5461050390600160b01b900460ff1681565b348015610ea957600080fd5b50610614610eb83660046140dd565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610eef57600080fd5b506104a6610efe366004614157565b612c73565b348015610f0f57600080fd5b50600454610642906001600160a01b031681565b348015610f2f57600080fd5b50610614610f3e3660046140a3565b601b6020526000908152604090205481565b348015610f5c57600080fd5b506104a6610f6b3660046140a3565b612cc8565b348015610f7c57600080fd5b506104a6610f8b366004614495565b612d63565b348015610f9c57600080fd5b506104a6610fab366004614410565b612eb2565b348015610fbc57600080fd5b5061061460265481565b606060088054610fd590614867565b80601f016020809104026020016040519081016040528092919081815260200182805461100190614867565b801561104e5780601f106110235761010080835404028352916020019161104e565b820191906000526020600020905b81548152906001019060200180831161103157829003601f168201915b5050505050905090565b6000611065338484612f4a565b5060015b92915050565b6000546001600160a01b031633146110a25760405162461bcd60e51b8152600401611099906145f2565b60405180910390fd5b600680546001600160a01b039092166001600160a01b0319909216821790556000908152601460209081526040808320805460ff1990811660019081179092556015845282852080548216831790556016845282852080548216831790556017845282852080548216831790556012845282852080548216831790556013909352922080549091169091179055565b6000546001600160a01b0316331461115b5760405162461bcd60e51b8152600401611099906145f2565b603280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111a75760405162461bcd60e51b8152600401611099906145f2565b80516111ba906033906020840190613fb5565b5050565b6000546001600160a01b031633146111e85760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600080546001600160a01b0316331461123e5760405162461bcd60e51b8152600401611099906145f2565b476000831561124e575080611251565b50835b818111156112c05760405162461bcd60e51b815260206004820152603660248201527f746f6b656e57697468647261773a206574682062616c616e6365206d757374206044820152753132903630b933b2b9103a3430b71030b6b7bab73a1760511b6064820152608401611099565b600080546040805183815260208101918290526001600160a01b039092169184916112eb91906144d8565b60006040518083038185875af1925050503d8060008114611328576040519150601f19603f3d011682016040523d82523d6000602084013e61132d565b606091505b505090508061137e5760405162461bcd60e51b815260206004820152601c60248201527f77697468647261774574683a207472616e73666572206572726f722e000000006044820152606401611099565b50600195945050505050565b6000546001600160a01b031633146113b45760405162461bcd60e51b8152600401611099906145f2565b600a80546113c79160ff90911690614756565b6113d490620186a0614801565b8110156114495760405162461bcd60e51b815260206004820152603e60248201527f486f7374696c655a6f6e653a20616d6f756e742073686f756c6420626520686960448201527f67686572207468616e20302e3125206f6620746f74616c537570706c792e00006064820152608401611099565b600f55565b6000546001600160a01b031633146114785760405162461bcd60e51b8152600401611099906145f2565b62093a808111156114e25760405162461bcd60e51b815260206004820152602e60248201527f486f7374696c655a6f6e653a20616d6f756e74206d757374206265206c6f776560448201526d39103a3430b71018903bb2b2b59760911b6064820152608401611099565b601c55565b6000546001600160a01b031633146115115760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b039091166000908152600160209081526040808320805494151560ff19958616811790915560148352818420805486168217905560158352818420805486168217905560168352818420805486168217905560179092529091208054909216179055565b6000546001600160a01b031633146115a65760405162461bcd60e51b8152600401611099906145f2565b600e8054911515600160b01b0260ff60b01b19909216919091179055565b6001600160a01b03831660009081526003602090815260408083203384529091528120548211156116485760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401611099565b61165384848461306e565b6001600160a01b03841660009081526003602090815260408083203380855292529091205461168e918691611689908690614820565b612f4a565b5060019392505050565b6000546001600160a01b031633146116c25760405162461bcd60e51b8152600401611099906145f2565b600780546001600160a01b039092166001600160a01b0319909216821790556000908152601460209081526040808320805460ff1990811660019081179092556015845282852080548216831790556016845282852080548216831790556017845282852080548216831790556012845282852080548216831790556013909352922080549091169091179055565b6000546001600160a01b0316331461177b5760405162461bcd60e51b8152600401611099906145f2565b600a805461178e9160ff90911690614756565b61179b90620927c0614801565b8110156118105760405162461bcd60e51b815260206004820152603760248201527f486f7374696c655a6f6e653a20616d6f756e74206d757374206265206869676860448201527f6572207468616e203630302730303020746f6b656e732e0000000000000000006064820152608401611099565b602055565b6000546001600160a01b0316331461183f5760405162461bcd60e51b8152600401611099906145f2565b600e805460ff60a81b1916600160a81b179055565b6000546001600160a01b0316331461187e5760405162461bcd60e51b8152600401611099906145f2565b8061188833610a34565b10156118ef5760405162461bcd60e51b815260206004820152603060248201527f486f7374696c655a6f6e653a2062616c616e6365206d7573742062652068696760448201526f3432b9103a3430b71030b6b7bab73a1760811b6064820152608401611099565b80600c546118fd9190614820565b600c55336000908152600260205260408120805483929061191f908490614820565b90915550506040518181526000903390600080516020614923833981519152906020015b60405180910390a350565b6060603380548060200260200160405190810160405280929190818152602001828054801561104e57602002820191906000526020600020905b815481526020019060010190808311611988575050505050905090565b600080546001600160a01b031633146119d05760405162461bcd60e51b8152600401611099906145f2565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a082319060240160206040518083038186803b158015611a1257600080fd5b505afa158015611a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4a9190614429565b905060008315611a5b575080611a5e565b50835b81811115611ad45760405162461bcd60e51b815260206004820152603860248201527f746f6b656e57697468647261773a20746f6b656e2062616c616e6365206d757360448201527f74206265206c6172676572207468616e20616d6f756e742e00000000000000006064820152608401611099565b856001600160a01b031663a9059cbb611af56000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015611b3d57600080fd5b505af1158015611b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b75919061436c565b5060019695505050505050565b600080611b8e83612330565b90508060011415611bb057602b54601154611ba99190614820565b9392505050565b8060021415611bc957602c54601154611ba99190614820565b8060031415611bdb5750600092915050565b5050601154919050565b6000546001600160a01b03163314611c0f5760405162461bcd60e51b8152600401611099906145f2565b600a8054600091611c239160ff1690614756565b611c2d9083614801565b600e549091506001600160a01b0316611c945760405162461bcd60e51b8152602060048201526024808201527f6164644c69717569646974793a20706169722069736e277420637265617465206044820152633cb2ba1760e11b6064820152608401611099565b600e546001600160a01b031660009081526014602052604090205460ff16611d1c5760405162461bcd60e51b815260206004820152603560248201527f6164644c69717569646974793a20706169722069736e2774206578636c7564656044820152743210333937b69036b0bc103a3c1030b6b7bab73a1760591b6064820152608401611099565b600080600e60009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611d6d57600080fd5b505afa158015611d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da591906143cb565b5091509150816001600160701b031660001480611dc957506001600160701b038116155b611e265760405162461bcd60e51b815260206004820152602860248201527f4c69717569646974792073686f756c64206e6f7420626520616c7265616479206044820152671c1c9bdd9a59195960c21b6064820152608401611099565b306000908152600260205260408120549050611e43333086612f4a565b611e4d30856128f2565b5030600090815260026020526040902054611e6885836146d9565b811015611edd5760405162461bcd60e51b815260206004820152603c60248201527f6164644c69717569646974793a2062616c616e6365206c6f776572207468616e60448201527f20616d6f756e742070726576696f757320616e6420616d6f756e742e000000006064820152608401611099565b603154611ef59030906001600160a01b031687612f4a565b6031546001600160a01b031663f305d719343088600080611f1e6000546001600160a01b031690565b611f2942603c6146d9565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b158015611f9157600080fd5b505af1158015611fa5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fca9190614467565b505050505050505050565b6000546001600160a01b03163314611fff5760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b031660009081526014602090815260408083208054600160ff1991821681179092556015845282852080548216831790556016845282852080548216831790556017845282852080548216831790556012845282852080548216831790556013909352922080549091169091179055565b6000546001600160a01b031633146120a15760405162461bcd60e51b8152600401611099906145f2565b600060218190556022819055602381905560248190556010819055602781905560288190556029819055602a819055601155565b6000546001600160a01b031633146120ff5760405162461bcd60e51b8152600401611099906145f2565b60038110156121765760405162461bcd60e51b815260206004820152603760248201527f486f7374696c655a6f6e653a20616d6f756e74206d757374206265206869676860448201527f6572207468616e2033207472616e73616374696f6e732e0000000000000000006064820152608401611099565b601e55565b6000546001600160a01b031633146121a55760405162461bcd60e51b8152600401611099906145f2565b600a80546121b89160ff90911690614756565b6121c5906216e360614801565b81101561223c576040805162461bcd60e51b81526020600482015260248101919091527f486f7374696c655a6f6e653a206c617267657220616d6f756e74206d7573742060448201527f626520686967686572207468616e2031273530302730303020746f6b656e732e6064820152608401611099565b601f55565b6000546001600160a01b0316331461226b5760405162461bcd60e51b8152600401611099906145f2565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152601460209081526040808320805460ff1990811660019081179092556015845282852080548216831790556016845282852080548216831790556017845282852080548216831790556012845282852080548216831790556013909352922080549091169091179055565b6000546001600160a01b031633146123245760405162461bcd60e51b8152600401611099906145f2565b61232e6000613cbb565b565b6032546000906001600160a01b0316156124305760325460405162438b6360e81b81526001600160a01b038481166004830152600092169063438b63009060240160006040518083038186803b15801561238957600080fd5b505afa15801561239d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123c591908101906142b7565b5190506123d183612bb0565b156123df5750600392915050565b6000811180156123f0575060038111155b156123fe5750600192915050565b60038111801561240f575060098111155b1561241d5750600292915050565b600a811061242e5750600392915050565b505b506000919050565b6032546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e9060240160206040518083038186803b15801561247d57600080fd5b505afa158015612491573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106991906140c0565b600080546001600160a01b031633146124e05760405162461bcd60e51b8152600401611099906145f2565b81518351146124ee57600080fd5b6000805b83518110156125465783818151811061250d5761250d6148d3565b6020026020010151670de0b6b3a76400006125289190614801565b61253290836146d9565b91508061253e816148a2565b9150506124f2565b503360009081526002602052604090205481111561256357600080fd5b60005b83518110156126cf57838181518110612581576125816148d3565b6020026020010151670de0b6b3a764000061259c9190614801565b600260008784815181106125b2576125b26148d3565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546125e991906146d9565b92505081905550838181518110612602576126026148d3565b6020026020010151670de0b6b3a764000061261d9190614801565b336000908152600260205260408120805490919061263c908490614820565b92505081905550848181518110612655576126556148d3565b60200260200101516001600160a01b0316336001600160a01b0316600080516020614923833981519152868481518110612691576126916148d3565b6020026020010151670de0b6b3a76400006126ac9190614801565b60405190815260200160405180910390a3806126c7816148a2565b915050612566565b506001949350505050565b6000546001600160a01b031633146127045760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b606060098054610fd590614867565b6000546001600160a01b031633146127685760405162461bcd60e51b8152600401611099906145f2565b600a805461277b9160ff90911690614756565b600b546127889190614801565b81600c5461279691906146d9565b11156127f05760405162461bcd60e51b8152602060048201526024808201527f486f7374696c655a6f6e653a20616d6f756e7420686967686572207468616e2060448201526336b0bc1760e11b6064820152608401611099565b80600c546127fe91906146d9565b600c5533600090815260026020526040812080548392906128209084906146d9565b9091555050604051818152339060009060008051602061492383398151915290602001611943565b6000546001600160a01b031633146128725760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146128c75760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600061106533848461306e565b6000546001600160a01b031633146129295760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461297e5760405162461bcd60e51b8152600401611099906145f2565b60148611158015612990575060148511155b801561299d575060148411155b80156129aa575060148311155b6129b357600080fd5b602786905560288590556029849055602a83905582846129d387896146d9565b6129dd91906146d9565b6129e791906146d9565b6011819055602b839055602c82905560211015612a165760405162461bcd60e51b81526004016110999061456b565b602c54602b541115612a3a5760405162461bcd60e51b8152600401611099906145b0565b601154602c541115612aa45760405162461bcd60e51b815260206004820152602d60248201527f6c7632206d757374206265206c6f776572206f72206567616c207468616e207360448201526c32b6362a37ba30b62332b2b99760991b6064820152608401611099565b505050505050565b6000546001600160a01b03163314612ad65760405162461bcd60e51b8152600401611099906145f2565b600460218190556005602281905560026023819055602481905591612afc9083906146d9565b612b0691906146d9565b612b1091906146d9565b6010556005602781905560096028819055600260298190556003602a819055929091612b3b916146d9565b612b4591906146d9565b612b4f91906146d9565b601155565b600080612b6083612330565b90508060011415612b7b57602554601054611ba99190614820565b8060021415612b9457602654601054611ba99190614820565b8060031415612ba65750600092915050565b5050601054919050565b600060015b60335481101561242e57826001600160a01b0316612bef60338381548110612bdf57612bdf6148d3565b9060005260206000200154612438565b6001600160a01b03161415612c075750600192915050565b80612c11816148a2565b915050612bb5565b60338181548110612c2957600080fd5b600091825260209091200154905081565b6000546001600160a01b03163314612c645760405162461bcd60e51b8152600401611099906145f2565b600e805460ff60a01b19169055565b6000546001600160a01b03163314612c9d5760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314612cf25760405162461bcd60e51b8152600401611099906145f2565b6001600160a01b038116612d575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611099565b612d6081613cbb565b50565b6000546001600160a01b03163314612d8d5760405162461bcd60e51b8152600401611099906145f2565b60148611158015612d9f575060148511155b8015612dac575060148411155b8015612db9575060148311155b612dc257600080fd5b60218690556022859055602384905560248390558285612de286896146d9565b612dec91906146d9565b612df691906146d9565b60108190556025839055602682905560211015612e255760405162461bcd60e51b81526004016110999061456b565b6026546025541115612e495760405162461bcd60e51b8152600401611099906145b0565b6010546026541115612aa45760405162461bcd60e51b815260206004820152602c60248201527f6c7632206d757374206265206c6f776572206f72206567616c207468616e206260448201526b3abcaa37ba30b62332b2b99760a11b6064820152608401611099565b6000546001600160a01b03163314612edc5760405162461bcd60e51b8152600401611099906145f2565b610e10811115612f455760405162461bcd60e51b815260206004820152602e60248201527f486f7374696c655a6f6e653a20616d6f756e74206d757374206265206c6f776560448201526d39103a3430b71018902437bab91760911b6064820152608401611099565b601d55565b6001600160a01b038316612fac5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611099565b6001600160a01b03821661300d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611099565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166130d25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611099565b6001600160a01b0382166131345760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611099565b6001600160a01b03831660009081526002602052604090205481111561319c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220657863656564732062616c616e6365006044820152606401611099565b6818650127cc3dc80000811161320f5760405162461bcd60e51b815260206004820152603260248201527f486f7374696c655a6f6e653a2063616e6e6f74207472616e73666572206c657360448201527139903a3430b7101a1a98103a37b5b2b7399760711b6064820152608401611099565b600e54600160a01b900460ff16156132795760405162461bcd60e51b815260206004820152602760248201527f486f7374696c655a6f6e653a2074726164696e672069736e277420656e61626c60448201526632b2103cb2ba1760c91b6064820152608401611099565b6001600160a01b03821660009081526001602052604090205460ff1680156132af57506000546001600160a01b03848116911614155b1561331b57600e54600160a81b900460ff1661331b5760405162461bcd60e51b815260206004820152602560248201527f486f7374696c655a6f6e653a20706f6f6c206973206e6f742063726561746564604482015264103cb2ba1760d91b6064820152608401611099565b6001600160a01b03831660009081526001602052604090205460ff1615613381576001600160a01b03821660009081526014602052604090205460ff16806133655750600f548111155b6133815760405162461bcd60e51b815260040161109990614627565b6001600160a01b03821660009081526001602052604090205460ff16156133e7576001600160a01b03831660009081526014602052604090205460ff16806133cb5750600f548111155b6133e75760405162461bcd60e51b815260040161109990614627565b6001600160a01b03831660009081526014602052604090205460ff16806134105750600f548111155b61342c5760405162461bcd60e51b815260040161109990614627565b6001600160a01b03821660009081526017602052604090205460ff16806134795750602080546001600160a01b0384166000908152600290925260409091205461347690836146d9565b11155b6134eb5760405162461bcd60e51b815260206004820152603d60248201527f486f7374696c655a6f6e653a20616d6f756e742069732068696768657220746860448201527f616e206d61782077616c6c657420616d6f756e7420616c6c6f7765642e0000006064820152608401611099565b600e54600160b01b900460ff1615613558576001600160a01b03821660009081526001602052604090205460ff161561352d576135288382613d0b565b613558565b6001600160a01b03831660009081526001602052604090205460ff1615613558576135588282613d0b565b6001600160a01b0382166000908152601260205260408120548190819060ff1615801561359d57506001600160a01b03861660009081526001602052604090205460ff165b80156135ab57506000601054115b156135b557600191505b6001600160a01b03861660009081526013602052604090205460ff161580156135f657506001600160a01b03851660009081526001602052604090205460ff165b801561360457506000601154115b1561360d575060015b811561386f57600061361e86612b54565b9050801561386d5760646136328287614801565b61363c91906146f1565b61364690856146d9565b935080602254856136579190614801565b61366191906146f1565b60308190556007546001600160a01b0316600090815260026020526040812080549091906136909084906146d9565b90915550506007546030546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a380602354856136da9190614801565b6136e491906146f1565b602e8190556005546001600160a01b0316600090815260026020526040812080549091906137139084906146d9565b9091555050600554602e546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a3806021548561375d9190614801565b61376791906146f1565b602d8190556004546001600160a01b0316600090815260026020526040812080549091906137969084906146d9565b9091555050600454602d546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a380602454856137e09190614801565b6137ea91906146f1565b602f8190556006546001600160a01b0316600090815260026020526040812080549091906138199084906146d9565b9091555050600654602f546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a361386d6000602d819055602e819055602f819055603055565b505b8015613b0d57600061388087611b82565b90508015613b0b5760646138948287614801565b61389e91906146f1565b6138a890856146d9565b935080602854856138b99190614801565b6138c391906146f1565b60308190556007546001600160a01b0316600090815260026020526040812080549091906138f29084906146d9565b90915550506007546030546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a3806029548561393c9190614801565b61394691906146f1565b602e600082825461395791906146d9565b9091555050602e546005546001600160a01b0316600090815260026020526040812080549091906139899084906146d9565b9091555050600554602e546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a380602754856139d39190614801565b6139dd91906146f1565b602d60008282546139ee91906146d9565b9091555050602d546004546001600160a01b031660009081526002602052604081208054909190613a209084906146d9565b9091555050600454602d546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a380602a5485613a6a9190614801565b613a7491906146f1565b602f6000828254613a8591906146d9565b9091555050602f546006546001600160a01b031660009081526002602052604081208054909190613ab79084906146d9565b9091555050600654602f546040519081526001600160a01b03918216918916906000805160206149238339815191529060200160405180910390a3613b0b6000602d819055602e819055602f819055603055565b505b6000613b198486614820565b6001600160a01b038816600090815260026020526040812080549293508792909190613b46908490614820565b90915550506001600160a01b03861660009081526002602052604081208054839290613b739084906146d9565b90915550506001600160a01b03861660009081526001602052604090205460ff1615613bfa576001600160a01b0387166000908152601b602052604081208054879290613bc19084906146d9565b90915550506001600160a01b0387166000908152601960205260408120805460019290613bef9084906146d9565b90915550613c779050565b6001600160a01b03871660009081526001602052604090205460ff1615613c77576001600160a01b0386166000908152601b602052604081208054879290613c439084906146d9565b90915550506001600160a01b0386166000908152601960205260408120805460019290613c719084906146d9565b90915550505b856001600160a01b0316876001600160a01b031660008051602061492383398151915283604051613caa91815260200190565b60405180910390a350505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216600090815260186020526040902054613d48576001600160a01b0382166000908152601860205260409020429055613d9d565b601d546001600160a01b0383166000908152601860205260409020544291613d6f916146d9565b11613d9d576001600160a01b0382166000908152601960209081526040808320839055601890915290204290555b6001600160a01b03821660009081526015602052604090205460ff1680613de95750601e546001600160a01b038316600090815260196020526040902054613de69060016146d9565b11155b613e665760405162461bcd60e51b815260206004820152604260248201527f7472616e736665723a206e756d626572206f66207472616e73616374696f6e7360448201527f20686967686572207468616e2062617365642074696d6520616c6c6f77616e63606482015261329760f11b608482015260a401611099565b6001600160a01b0382166000908152601a6020526040902054613ea3576001600160a01b0382166000908152601a60205260409020429055613ef8565b601c546001600160a01b0383166000908152601a60205260409020544291613eca916146d9565b11613ef8576001600160a01b0382166000908152601b60209081526040808320839055601a90915290204290555b6001600160a01b03821660009081526016602052604090205460ff1680613f435750601f546001600160a01b0383166000908152601b6020526040902054613f4090836146d9565b11155b6111ba5760405162461bcd60e51b815260206004820152603960248201527f7472616e736665723a20616d6f756e7420686967686572207468616e206c617260448201527f6765722062617365642074696d6520616c6c6f77616e63652e000000000000006064820152608401611099565b828054828255906000526020600020908101928215613ff0579160200282015b82811115613ff0578251825591602001919060010190613fd5565b50613ffc929150614000565b5090565b5b80821115613ffc5760008155600101614001565b600082601f83011261402657600080fd5b8135602061403b614036836146b5565b614684565b80838252828201915082860187848660051b890101111561405b57600080fd5b60005b8581101561407a5781358452928401929084019060010161405e565b5090979650505050505050565b80516001600160701b038116811461409e57600080fd5b919050565b6000602082840312156140b557600080fd5b8135611ba9816148ff565b6000602082840312156140d257600080fd5b8151611ba9816148ff565b600080604083850312156140f057600080fd5b82356140fb816148ff565b9150602083013561410b816148ff565b809150509250929050565b60008060006060848603121561412b57600080fd5b8335614136816148ff565b92506020840135614146816148ff565b929592945050506040919091013590565b6000806040838503121561416a57600080fd5b8235614175816148ff565b9150602083013561410b81614914565b6000806040838503121561419857600080fd5b82356141a3816148ff565b946020939093013593505050565b600080604083850312156141c457600080fd5b823567ffffffffffffffff808211156141dc57600080fd5b818501915085601f8301126141f057600080fd5b81356020614200614036836146b5565b8083825282820191508286018a848660051b890101111561422057600080fd5b600096505b8487101561424c578035614238816148ff565b835260019690960195918301918301614225565b509650508601359250508082111561426357600080fd5b5061427085828601614015565b9150509250929050565b60006020828403121561428c57600080fd5b813567ffffffffffffffff8111156142a357600080fd5b6142af84828501614015565b949350505050565b600060208083850312156142ca57600080fd5b825167ffffffffffffffff8111156142e157600080fd5b8301601f810185136142f257600080fd5b8051614300614036826146b5565b80828252848201915084840188868560051b870101111561432057600080fd5b600094505b83851015614343578051835260019490940193918501918501614325565b50979650505050505050565b60006020828403121561436157600080fd5b8135611ba981614914565b60006020828403121561437e57600080fd5b8151611ba981614914565b60008060006060848603121561439e57600080fd5b83356143a9816148ff565b92506020840135915060408401356143c081614914565b809150509250925092565b6000806000606084860312156143e057600080fd5b6143e984614087565b92506143f760208501614087565b9150604084015163ffffffff811681146143c057600080fd5b60006020828403121561442257600080fd5b5035919050565b60006020828403121561443b57600080fd5b5051919050565b6000806040838503121561445557600080fd5b82359150602083013561410b81614914565b60008060006060848603121561447c57600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156144ae57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600082516144ea818460208701614837565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b8181101561452c57835183529284019291840191600101614510565b50909695505050505050565b6020815260008251806020840152614557816040850160208701614837565b601f01601f19169190910160400192915050565b60208082526025908201527f746f74616c20666565732063616e6e6f7420626520686967686572207468616e604082015264101999929760d91b606082015260800190565b60208082526022908201527f6c7631206d757374206265206c6f776572206f72206567616c207468616e206c6040820152613b1960f11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252603b908201527f486f7374696c655a6f6e653a20616d6f756e742069732068696768657220746860408201527f616e206d6178207472616e73616374696f6e20616c6c6f7765642e0000000000606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156146ad576146ad6148e9565b604052919050565b600067ffffffffffffffff8211156146cf576146cf6148e9565b5060051b60200190565b600082198211156146ec576146ec6148bd565b500190565b60008261470e57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561474e578160001904821115614734576147346148bd565b8085161561474157918102915b93841c9390800290614718565b509250929050565b6000611ba960ff84168360008261476f57506001611069565b8161477c57506000611069565b8160018114614792576002811461479c576147b8565b6001915050611069565b60ff8411156147ad576147ad6148bd565b50506001821b611069565b5060208310610133831016604e8410600b84101617156147db575081810a611069565b6147e58383614713565b80600019048211156147f9576147f96148bd565b029392505050565b600081600019048311821515161561481b5761481b6148bd565b500290565b600082821015614832576148326148bd565b500390565b60005b8381101561485257818101518382015260200161483a565b83811115614861576000848401525b50505050565b600181811c9082168061487b57607f821691505b6020821081141561489c57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156148b6576148b66148bd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612d6057600080fd5b8015158114612d6057600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220316861761c36fbee5a3759542de0b3e8726f6acb57e0b4aa968cbfbbf883ce0a64736f6c63430008070033

Deployed Bytecode Sourcemap

2979:33865:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9402:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3048:40;;;;;;;;;;-1:-1:-1;3048:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10562:14:1;;10555:22;10537:41;;10525:2;10510:18;3048:40:0;10397:187:1;10240:161:0;;;;;;;;;;-1:-1:-1;10240:161:0;;;;;:::i;:::-;;:::i;30685:511::-;;;;;;;;;;-1:-1:-1;30685:511:0;;;;;:::i;:::-;;:::i;29601:139::-;;;;;;;;;;-1:-1:-1;29601:139:0;;;;;:::i;:::-;;:::i;35552:109::-;;;;;;;;;;-1:-1:-1;35552:109:0;;;;;:::i;:::-;;:::i;4292:64::-;;;;;;;;;;-1:-1:-1;4292:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25919:144;;;;;;;;;;-1:-1:-1;25919:144:0;;;;;:::i;:::-;;:::i;34594:575::-;;;;;;;;;;-1:-1:-1;34594:575:0;;;;;:::i;:::-;;:::i;9679:100::-;;;;;;;;;;-1:-1:-1;9759:12:0;;9679:100;;;25140:25:1;;;25128:2;25113:18;9679:100:0;24994:177:1;3284:30:0;;;;;;;;;;-1:-1:-1;3284:30:0;;;;-1:-1:-1;;;;;3284:30:0;;;;;;-1:-1:-1;;;;;8825:32:1;;;8807:51;;8795:2;8780:18;3284:30:0;8661:203:1;6448:33:0;;;;;;;;;;;;;;;;27406:281;;;;;;;;;;-1:-1:-1;27406:281:0;;;;;:::i;:::-;;:::i;28100:267::-;;;;;;;;;;-1:-1:-1;28100:267:0;;;;;:::i;:::-;;:::i;4944:50::-;;;;;;;;;;-1:-1:-1;4944:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;6336:33;;;;;;;;;;;;;;;;27032:321;;;;;;;;;;-1:-1:-1;27032:321:0;;;;;:::i;:::-;;:::i;29496:97::-;;;;;;;;;;-1:-1:-1;29496:97:0;;;;;:::i;:::-;;:::i;10409:374::-;;;;;;;;;;-1:-1:-1;10409:374:0;;;;;:::i;:::-;;:::i;6410:31::-;;;;;;;;;;;;;;;;31204:491;;;;;;;;;;-1:-1:-1;31204:491:0;;;;;:::i;:::-;;:::i;4421:54::-;;;;;;;;;;-1:-1:-1;4421:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29116:229;;;;;;;;;;-1:-1:-1;29116:229:0;;;;;:::i;:::-;;:::i;33870:82::-;;;;;;;;;;;;;:::i;9588:83::-;;;;;;;;;;-1:-1:-1;9654:9:0;;9588:83;;9654:9;;;;25318:36:1;;25306:2;25291:18;9588:83:0;25176:184:1;4192:56:0;;;;;;;;;;-1:-1:-1;4192:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5776:46;;;;;;;;;;;;;;;;5530:32;;;;;;;;;;;;;;;;5653:66;;;;;;;;;;;;;;;;21570:310;;;;;;;;;;-1:-1:-1;21570:310:0;;;;;:::i;:::-;;:::i;3650:70::-;;;;;;;;;;-1:-1:-1;3650:70:0;;;;-1:-1:-1;;;;;3650:70:0;;;35666:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34002:550::-;;;;;;;;;;-1:-1:-1;34002:550:0;;;;;:::i;:::-;;:::i;20074:427::-;;;;;;;;;;-1:-1:-1;20074:427:0;;;;;:::i;:::-;;:::i;24470:1177::-;;;;;;:::i;:::-;;:::i;29748:430::-;;;;;;;;;;-1:-1:-1;29748:430:0;;;;;:::i;:::-;;:::i;23164:408::-;;;;;;;;;;;;;:::i;6269:30::-;;;;;;;;;;;;;;;;3805:25;;;;;;;;;;-1:-1:-1;3805:25:0;;;;-1:-1:-1;;;3805:25:0;;;;;;28466:216;;;;;;;;;;-1:-1:-1;28466:216:0;;;;;:::i;:::-;;:::i;4037:28::-;;;;;;;;;;;;;;;;28763:299;;;;;;;;;;-1:-1:-1;28763:299:0;;;;;:::i;:::-;;:::i;30186:491::-;;;;;;;;;;-1:-1:-1;30186:491:0;;;;;:::i;:::-;;:::i;9787:119::-;;;;;;;;;;-1:-1:-1;9787:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;9880:18:0;9853:7;9880:18;;;:9;:18;;;;;;;9787:119;2229:103;;;;;;;;;;;;;:::i;6232:30::-;;;;;;;;;;;;;;;;4093:55;;;;;;;;;;-1:-1:-1;4093:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5335:48;;;;;;;;;;;;;;;;6013:29;;;;;;;;;;;;;;;;3554:33;;;;;;;;;;;;;;;;20599:613;;;;;;;;;;-1:-1:-1;20599:613:0;;;;;:::i;:::-;;:::i;35773:170::-;;;;;;;;;;-1:-1:-1;35773:170:0;;;;;:::i;:::-;;:::i;4822:58::-;;;;;;;;;;-1:-1:-1;4822:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;35994:776;;;;;;;;;;-1:-1:-1;35994:776:0;;;;;:::i;:::-;;:::i;2006:87::-;;;;;;;;;;-1:-1:-1;2052:7:0;2079:6;-1:-1:-1;;;;;2079:6:0;2006:87;;25720:142;;;;;;;;;;-1:-1:-1;25720:142:0;;;;;:::i;:::-;;:::i;3321:32::-;;;;;;;;;;-1:-1:-1;3321:32:0;;;;-1:-1:-1;;;;;3321:32:0;;;9493:87;;;;;;;;;;;;;:::i;6376:27::-;;;;;;;;;;;;;;;;21233:316;;;;;;;;;;-1:-1:-1;21233:316:0;;;;;:::i;:::-;;:::i;26610:149::-;;;;;;;;;;-1:-1:-1;26610:149:0;;;;;:::i;:::-;;:::i;26134:161::-;;;;;;;;;;-1:-1:-1;26134:161:0;;;;;:::i;:::-;;:::i;9914:167::-;;;;;;;;;;-1:-1:-1;9914:167:0;;;;;:::i;:::-;;:::i;4559:58::-;;;;;;;;;;-1:-1:-1;4559:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26385:141;;;;;;;;;;-1:-1:-1;26385:141:0;;;;;:::i;:::-;;:::i;3727:33::-;;;;;;;;;;-1:-1:-1;3727:33:0;;;;-1:-1:-1;;;;;3727:33:0;;;32779:1044;;;;;;;;;;-1:-1:-1;32779:1044:0;;;;;:::i;:::-;;:::i;23605:557::-;;;;;;;;;;;;;:::i;3837:23::-;;;;;;;;;;-1:-1:-1;3837:23:0;;;;-1:-1:-1;;;3837:23:0;;;;;;3941:55;;;;;;;;;;;;;;;;19593:429;;;;;;;;;;-1:-1:-1;19593:429:0;;;;;:::i;:::-;;:::i;35214:303::-;;;;;;;;;;-1:-1:-1;35214:303:0;;;;;:::i;:::-;;:::i;6662:30::-;;;;;;;;;;-1:-1:-1;6662:30:0;;;;;:::i;:::-;;:::i;4688:57::-;;;;;;;;;;-1:-1:-1;4688:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5061:64;;;;;;;;;;-1:-1:-1;5061:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;29384:72;;;;;;;;;;;;;:::i;3360:30::-;;;;;;;;;;-1:-1:-1;3360:30:0;;;;-1:-1:-1;;;;;3360:30:0;;;4003:27;;;;;;;;;;;;;;;;5433:43;;;;;;;;;;;;;;;;3904:28;;;;;;;;;;-1:-1:-1;3904:28:0;;;;-1:-1:-1;;;3904:28:0;;;;;;10089:143;;;;;;;;;;-1:-1:-1;10089:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;10197:18:0;;;10170:7;10197:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10089:143;26813:147;;;;;;;;;;-1:-1:-1;26813:147:0;;;;;:::i;:::-;;:::i;3250:27::-;;;;;;;;;;-1:-1:-1;3250:27:0;;;;-1:-1:-1;;;;;3250:27:0;;;5188:61;;;;;;;;;;-1:-1:-1;5188:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;2340:201;;;;;;;;;;-1:-1:-1;2340:201:0;;;;;:::i;:::-;;:::i;31733:1007::-;;;;;;;;;;-1:-1:-1;31733:1007:0;;;;;:::i;:::-;;:::i;27774:238::-;;;;;;;;;;-1:-1:-1;27774:238:0;;;;;:::i;:::-;;:::i;6049:29::-;;;;;;;;;;;;;;;;9402:83;9439:13;9472:5;9465:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9402:83;:::o;10240:161::-;10315:4;10332:39;1021:10;10355:7;10364:6;10332:8;:39::i;:::-;-1:-1:-1;10389:4:0;10240:161;;;;;:::o;30685:511::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;;;;;;;;;30773:17:::1;:38:::0;;-1:-1:-1;;;;;30773:38:0;;::::1;-1:-1:-1::0;;;;;;30773:38:0;;::::1;::::0;::::1;::::0;;:17:::1;30823:51:::0;;;:31:::1;:51;::::0;;;;;;;:58;;-1:-1:-1;;30823:58:0;;::::1;30773:38:::0;30823:58;;::::1;::::0;;;30892:21:::1;:41:::0;;;;;:48;;;::::1;::::0;::::1;::::0;;30951:25:::1;:45:::0;;;;;:52;;;::::1;::::0;::::1;::::0;;31014:24:::1;:44:::0;;;;;:51;;;::::1;::::0;::::1;::::0;;31078:22:::1;:42:::0;;;;;:49;;;::::1;::::0;::::1;::::0;;31138:23:::1;:43:::0;;;;;:50;;;;::::1;::::0;;::::1;::::0;;30685:511::o;29601:139::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;29686:21:::1;:46:::0;;-1:-1:-1;;;;;;29686:46:0::1;-1:-1:-1::0;;;;;29686:46:0;;;::::1;::::0;;;::::1;::::0;;29601:139::o;35552:109::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;35632:23;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;35552:109:::0;:::o;25919:144::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26011:33:0;;;::::1;;::::0;;;:23:::1;:33;::::0;;;;:44;;-1:-1:-1;;26011:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25919:144::o;34594:575::-;34681:4;2079:6;;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;34718:21:::1;34697:18;34778:120:::0;::::1;;;-1:-1:-1::0;34821:10:0;34778:120:::1;;;-1:-1:-1::0;34876:10:0;34778:120:::1;34929:10;34916:9;:23;;34908:90;;;::::0;-1:-1:-1;;;34908:90:0;;24773:2:1;34908:90:0::1;::::0;::::1;24755:21:1::0;24812:2;24792:18;;;24785:30;24851:34;24831:18;;;24824:62;-1:-1:-1;;;24902:18:1;;;24895:52;24964:19;;34908:90:0::1;24571:418:1::0;34908:90:0::1;35010:12;2079:6:::0;;35067:12:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;2079:6:0;;;;35056:9;;35027:53:::1;::::0;35067:12;35027:53:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35009:71;;;35099:7;35091:48;;;::::0;-1:-1:-1;;;35091:48:0;;18978:2:1;35091:48:0::1;::::0;::::1;18960:21:1::0;19017:2;18997:18;;;18990:30;19056;19036:18;;;19029:58;19104:18;;35091:48:0::1;18776:352:1::0;35091:48:0::1;-1:-1:-1::0;35157:4:0::1;::::0;34594:575;-1:-1:-1;;;;;34594:575:0:o;27406:281::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;27548:9:::1;::::0;;27542:15:::1;::::0;27548:9:::1;::::0;;::::1;::::0;27542:15:::1;:::i;:::-;27533:24;::::0;:6:::1;:24;:::i;:::-;27508:21;:49;;27500:124;;;::::0;-1:-1:-1;;;27500:124:0;;14514:2:1;27500:124:0::1;::::0;::::1;14496:21:1::0;14553:2;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14663:32;14643:18;;;14636:60;14713:19;;27500:124:0::1;14312:426:1::0;27500:124:0::1;27635:20;:44:::0;27406:281::o;28100:267::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;28239:6:::1;28210:25;:35;;28202:94;;;::::0;-1:-1:-1;;;28202:94:0;;17371:2:1;28202:94:0::1;::::0;::::1;17353:21:1::0;17410:2;17390:18;;;17383:30;17449:34;17429:18;;;17422:62;-1:-1:-1;;;17500:18:1;;;17493:44;17554:19;;28202:94:0::1;17169:410:1::0;28202:94:0::1;28307:24;:52:::0;28100:267::o;27032:321::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27108:14:0;;::::1;;::::0;;;:7:::1;:14;::::0;;;;;;;:24;;;::::1;;-1:-1:-1::0;;27108:24:0;;::::1;::::0;::::1;::::0;;;27143:31:::1;:38:::0;;;;;:48;;;::::1;::::0;::::1;::::0;;27202:21:::1;:28:::0;;;;;:38;;;::::1;::::0;::::1;::::0;;27251:25:::1;:32:::0;;;;;:42;;;::::1;::::0;::::1;::::0;;27304:24:::1;:31:::0;;;;;;:41;;;;::::1;;::::0;;27032:321::o;29496:97::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;29563:9:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;29563:22:0::1;-1:-1:-1::0;;;;29563:22:0;;::::1;::::0;;;::::1;::::0;;29496:97::o;10409:374::-;-1:-1:-1;;;;;10533:19:0;;10507:4;10533:19;;;:11;:19;;;;;;;;1021:10;10533:33;;;;;;;;:43;-1:-1:-1;10533:43:0;10524:97;;;;-1:-1:-1;;;10524:97:0;;17786:2:1;10524:97:0;;;17768:21:1;17825:2;17805:18;;;17798:30;17864:34;17844:18;;;17837:62;-1:-1:-1;;;17915:18:1;;;17908:38;17963:19;;10524:97:0;17584:404:1;10524:97:0;10632:36;10642:6;10650:9;10661:6;10632:9;:36::i;:::-;-1:-1:-1;;;;;10710:19:0;;;;;;:11;:19;;;;;;;;1021:10;10710:33;;;;;;;;;10679:74;;10688:6;;10710:42;;10746:6;;10710:42;:::i;:::-;10679:8;:74::i;:::-;-1:-1:-1;10771:4:0;10409:374;;;;;:::o;31204:491::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;31288:15:::1;:34:::0;;-1:-1:-1;;;;;31288:34:0;;::::1;-1:-1:-1::0;;;;;;31288:34:0;;::::1;::::0;::::1;::::0;;:15:::1;31334:49:::0;;;:31:::1;:49;::::0;;;;;;;:56;;-1:-1:-1;;31334:56:0;;::::1;31288:34:::0;31334:56;;::::1;::::0;;;31401:21:::1;:39:::0;;;;;:46;;;::::1;::::0;::::1;::::0;;31458:25:::1;:43:::0;;;;;:50;;;::::1;::::0;::::1;::::0;;31519:24:::1;:42:::0;;;;;:49;;;::::1;::::0;::::1;::::0;;31581:22:::1;:40:::0;;;;;:47;;;::::1;::::0;::::1;::::0;;31639:23:::1;:41:::0;;;;;:48;;;;::::1;::::0;;::::1;::::0;;31204:491::o;29116:229::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;29231:9:::1;::::0;;29225:15:::1;::::0;29231:9:::1;::::0;;::::1;::::0;29225:15:::1;:::i;:::-;29216:24;::::0;:6:::1;:24;:::i;:::-;29200:12;:40;;29192:108;;;::::0;-1:-1:-1;;;29192:108:0;;21004:2:1;29192:108:0::1;::::0;::::1;20986:21:1::0;21043:2;21023:18;;;21016:30;21082:34;21062:18;;;21055:62;21153:25;21133:18;;;21126:53;21196:19;;29192:108:0::1;20802:419:1::0;29192:108:0::1;29311:11;:26:::0;29116:229::o;33870:82::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;33926:11:::1;:18:::0;;-1:-1:-1;;;;33926:18:0::1;-1:-1:-1::0;;;33926:18:0::1;::::0;;33870:82::o;21570:310::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;21664:6;21638:23:::1;1021:10:::0;21648:12:::1;941:98:::0;21638:23:::1;:32;;21630:93;;;::::0;-1:-1:-1;;;21630:93:0;;15348:2:1;21630:93:0::1;::::0;::::1;15330:21:1::0;15387:2;15367:18;;;15360:30;15426:34;15406:18;;;15399:62;-1:-1:-1;;;15477:18:1;;;15470:46;15533:19;;21630:93:0::1;15146:412:1::0;21630:93:0::1;21764:6;21749:12;;:21;;;;:::i;:::-;21734:12;:36:::0;1021:10;21781:23:::1;::::0;;;:9:::1;:23;::::0;;;;:33;;21808:6;;21781:23;:33:::1;::::0;21808:6;;21781:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;21830:42:0::1;::::0;25140:25:1;;;21861:1:0::1;::::0;1021:10;;-1:-1:-1;;;;;;;;;;;21830:42:0;25128:2:1;25113:18;21830:42:0::1;;;;;;;;21570:310:::0;:::o;35666:102::-;35715:16;35749:13;35742:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35666:102;:::o;34002:550::-;34115:4;2079:6;;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;34154:38:::1;::::0;-1:-1:-1;;;34154:38:0;;34186:4:::1;34154:38;::::0;::::1;8807:51:1::0;34131:20:0::1;::::0;-1:-1:-1;;;;;34154:23:0;::::1;::::0;::::1;::::0;8780:18:1;;34154:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34131:61;;34203:19;34236:12;34233:128;;;-1:-1:-1::0;34278:12:0;34233:128:::1;;;-1:-1:-1::0;34337:12:0;34233:128:::1;34394:12;34379:11;:27;;34371:96;;;::::0;-1:-1:-1;;;34371:96:0;;20579:2:1;34371:96:0::1;::::0;::::1;20561:21:1::0;20618:2;20598:18;;;20591:30;20657:34;20637:18;;;20630:62;20728:26;20708:18;;;20701:54;20772:19;;34371:96:0::1;20377:420:1::0;34371:96:0::1;34478:13;-1:-1:-1::0;;;;;34478:22:0::1;;34501:7;2052::::0;2079:6;-1:-1:-1;;;;;2079:6:0;;2006:87;34501:7:::1;34478:44;::::0;-1:-1:-1;;;;;;34478:44:0::1;::::0;;;;;;-1:-1:-1;;;;;9061:32:1;;;34478:44:0::1;::::0;::::1;9043:51:1::0;9110:18;;;9103:34;;;9016:18;;34478:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;34540:4:0::1;::::0;34002:550;-1:-1:-1;;;;;;34002:550:0:o;20074:427::-;20146:7;20166:19;20188:26;20205:8;20188:16;:26::i;:::-;20166:48;;20228:11;20243:1;20228:16;20225:238;;;20283:15;;20267:13;;:31;;;;:::i;:::-;20260:38;20074:427;-1:-1:-1;;;20074:427:0:o;20225:238::-;20319:11;20334:1;20319:16;20316:147;;;20375:15;;20359:13;;:31;;;;:::i;20316:147::-;20411:11;20426:1;20411:16;20408:55;;;-1:-1:-1;20450:1:0;;20074:427;-1:-1:-1;;20074:427:0:o;20408:55::-;-1:-1:-1;;20480:13:0;;;20074:427;-1:-1:-1;20074:427:0:o;24470:1177::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;24625:9:::1;::::0;;24567:19:::1;::::0;24619:15:::1;::::0;24625:9:::1;;::::0;24619:15:::1;:::i;:::-;24589:45;::::0;:27;:45:::1;:::i;:::-;24653:5;::::0;24567:67;;-1:-1:-1;;;;;;24653:5:0::1;24645:68;;;::::0;-1:-1:-1;;;24645:68:0;;16198:2:1;24645:68:0::1;::::0;::::1;16180:21:1::0;16237:2;16217:18;;;16210:30;16276:34;16256:18;;;16249:62;-1:-1:-1;;;16327:18:1;;;16320:34;16371:19;;24645:68:0::1;15996:400:1::0;24645:68:0::1;24764:5;::::0;-1:-1:-1;;;;;24764:5:0::1;24732:38;::::0;;;:31:::1;:38;::::0;;;;;::::1;;24724:104;;;::::0;-1:-1:-1;;;24724:104:0;;18556:2:1;24724:104:0::1;::::0;::::1;18538:21:1::0;18595:2;18575:18;;;18568:30;18634:34;18614:18;;;18607:62;-1:-1:-1;;;18685:18:1;;;18678:51;18746:19;;24724:104:0::1;18354:417:1::0;24724:104:0::1;24840:16;24858::::0;24894:5:::1;;;;;;;;;-1:-1:-1::0;;;;;24894:5:0::1;-1:-1:-1::0;;;;;24879:33:0::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24839:75;;;;;24933:8;-1:-1:-1::0;;;;;24933:13:0::1;24945:1;24933:13;:30;;;-1:-1:-1::0;;;;;;24950:13:0;::::1;::::0;24933:30:::1;24925:83;;;::::0;-1:-1:-1;;;24925:83:0;;21833:2:1;24925:83:0::1;::::0;::::1;21815:21:1::0;21872:2;21852:18;;;21845:30;21911:34;21891:18;;;21884:62;-1:-1:-1;;;21962:18:1;;;21955:38;22010:19;;24925:83:0::1;21631:404:1::0;24925:83:0::1;25063:4;25019:23;9880:18:::0;;;:9;:18;;;;;;25019:50;-1:-1:-1;25080:50:0::1;1021:10:::0;25111:4:::1;25118:11;25080:8;:50::i;:::-;25141:36;25158:4;25165:11;25141:8;:36::i;:::-;-1:-1:-1::0;25227:4:0::1;25188:18;9880::::0;;;:9;:18;;;;;;25266:29:::1;25284:11:::0;25266:15;:29:::1;:::i;:::-;25252:10;:43;;25244:116;;;::::0;-1:-1:-1;;;25244:116:0;;23085:2:1;25244:116:0::1;::::0;::::1;23067:21:1::0;23124:2;23104:18;;;23097:30;23163:34;23143:18;;;23136:62;23234:30;23214:18;;;23207:58;23282:19;;25244:116:0::1;22883:424:1::0;25244:116:0::1;25403:11;::::0;25371:58:::1;::::0;25388:4:::1;::::0;-1:-1:-1;;;;;25403:11:0::1;25417::::0;25371:8:::1;:58::i;:::-;25440:11;::::0;-1:-1:-1;;;;;25440:11:0::1;:27;25475:9;25508:4;25528:11:::0;25440::::1;::::0;25586:7:::1;2052::::0;2079:6;-1:-1:-1;;;;;2079:6:0;;2006:87;25586:7:::1;25608:20;:15;25626:2;25608:20;:::i;:::-;25440:199;::::0;::::1;::::0;;;-1:-1:-1;;;;;;25440:199:0;;;-1:-1:-1;;;;;9507:15:1;;;25440:199:0::1;::::0;::::1;9489:34:1::0;9539:18;;;9532:34;;;;9582:18;;;9575:34;;;;9625:18;;;9618:34;;;;9689:15;;;9668:19;;;9661:44;9721:19;;;9714:35;;;;9423:19;;25440:199:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24556:1091;;;;;24470:1177:::0;:::o;29748:430::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29826:46:0::1;;::::0;;;:31:::1;:46;::::0;;;;;;;:53;;29875:4:::1;-1:-1:-1::0;;29826:53:0;;::::1;::::0;::::1;::::0;;;29890:21:::1;:36:::0;;;;;:43;;;::::1;::::0;::::1;::::0;;29944:25:::1;:40:::0;;;;;:47;;;::::1;::::0;::::1;::::0;;30002:24:::1;:39:::0;;;;;:46;;;::::1;::::0;::::1;::::0;;30064:22:::1;:37:::0;;;;;:44;;;::::1;::::0;::::1;::::0;;30119:23:::1;:38:::0;;;;;:45;;;;::::1;::::0;;::::1;::::0;;29748:430::o;23164:408::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;23255:1:::1;23236:16;:20:::0;;;23267:16:::1;:20:::0;;;23298:10:::1;:14:::0;;;23323:21:::1;:25:::0;;;23359:12:::1;:16:::0;;;23414:17:::1;:21:::0;;;23446:17:::1;:21:::0;;;23478:11:::1;:15:::0;;;23504:22:::1;:26:::0;;;-1:-1:-1;23541:17:0;23164:408::o;28466:216::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;28572:1:::1;28554:14;:19;;28546:87;;;::::0;-1:-1:-1;;;28546:87:0;;19335:2:1;28546:87:0::1;::::0;::::1;19317:21:1::0;19374:2;19354:18;;;19347:30;19413:34;19393:18;;;19386:62;19484:25;19464:18;;;19457:53;19527:19;;28546:87:0::1;19133:419:1::0;28546:87:0::1;28644:13;:30:::0;28466:216::o;28763:299::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;28915:9:::1;::::0;;28909:15:::1;::::0;28915:9:::1;::::0;;::::1;::::0;28909:15:::1;:::i;:::-;28899:25;::::0;:7:::1;:25;:::i;:::-;28871:24;:53;;28863:130;;;::::0;;-1:-1:-1;;;28863:130:0;;15765:2:1;28863:130:0::1;::::0;::::1;15747:21:1::0;15784:18;;;15777:30;;;;15843:34;15823:18;;;15816:62;15914:34;15894:18;;;15887:62;15966:19;;28863:130:0::1;15563:428:1::0;28863:130:0::1;29004:23;:50:::0;28763:299::o;30186:491::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;30270:15:::1;:34:::0;;-1:-1:-1;;;;;30270:34:0;;::::1;-1:-1:-1::0;;;;;;30270:34:0;;::::1;::::0;::::1;::::0;;:15:::1;30316:49:::0;;;:31:::1;:49;::::0;;;;;;;:56;;-1:-1:-1;;30316:56:0;;::::1;30270:34:::0;30316:56;;::::1;::::0;;;30383:21:::1;:39:::0;;;;;:46;;;::::1;::::0;::::1;::::0;;30440:25:::1;:43:::0;;;;;:50;;;::::1;::::0;::::1;::::0;;30501:24:::1;:42:::0;;;;;:49;;;::::1;::::0;::::1;::::0;;30563:22:::1;:40:::0;;;;;:47;;;::::1;::::0;::::1;::::0;;30621:23:::1;:41:::0;;;;;:48;;;;::::1;::::0;;::::1;::::0;;30186:491::o;2229:103::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;2294:30:::1;2321:1;2294:18;:30::i;:::-;2229:103::o:0;20599:613::-;20688:21;;20664:7;;-1:-1:-1;;;;;20688:21:0;:35;20685:498;;20776:21;;20761:61;;-1:-1:-1;;;20761:61:0;;-1:-1:-1;;;;;8825:32:1;;;20761:61:0;;;8807:51:1;20740:17:0;;20776:21;;20761:51;;8780:18:1;;20761:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20761:61:0;;;;;;;;;;;;:::i;:::-;:68;20740:89;;20847:29;20867:8;20847:19;:29::i;:::-;20844:328;;;-1:-1:-1;20904:1:0;;20599:613;-1:-1:-1;;20599:613:0:o;20844:328::-;20954:1;20942:9;:13;:31;;;;;20972:1;20959:9;:14;;20942:31;20939:233;;;-1:-1:-1;21000:1:0;;20599:613;-1:-1:-1;;20599:613:0:o;20939:233::-;21039:1;21027:9;:13;:31;;;;;21057:1;21044:9;:14;;21027:31;21023:149;;;-1:-1:-1;21085:1:0;;20599:613;-1:-1:-1;;20599:613:0:o;21023:149::-;21125:2;21112:9;:15;21108:64;;-1:-1:-1;21155:1:0;;20599:613;-1:-1:-1;;20599:613:0:o;21108:64::-;20725:458;20685:498;-1:-1:-1;21200:1:0;;20599:613;-1:-1:-1;20599:613:0:o;35773:170::-;35885:21;;35870:55;;-1:-1:-1;;;35870:55:0;;;;;25140:25:1;;;35834:7:0;;-1:-1:-1;;;;;35885:21:0;;35870:45;;25113:18:1;;35870:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35994:776::-;36099:12;2079:6;;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;36163:8:::1;:15;36143:9;:16;:35;36135:44;;;::::0;::::1;;36190:22;36229:9:::0;36225:121:::1;36248:8;:15;36244:1;:19;36225:121;;;36302:8;36311:1;36302:11;;;;;;;;:::i;:::-;;;;;;;36316:8;36302:22;;;;:::i;:::-;36284:40;::::0;;::::1;:::i;:::-;::::0;-1:-1:-1;36266:3:0;::::1;::::0;::::1;:::i;:::-;;;;36225:121;;;-1:-1:-1::0;36385:10:0::1;9853:7:::0;9880:18;;;:9;:18;;;;;;36400:14;-1:-1:-1;36375:39:0::1;36366:50;;;::::0;::::1;;36437:9;36433:306;36456:8;:15;36452:1;:19;36433:306;;;36547:8;36556:1;36547:11;;;;;;;;:::i;:::-;;;;;;;36561:8;36547:22;;;;:::i;:::-;36520:9;:23;36530:9;36540:1;36530:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;36520:23:0::1;-1:-1:-1::0;;;;;36520:23:0::1;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;36613:8;36622:1;36613:11;;;;;;;;:::i;:::-;;;;;;;36627:8;36613:22;;;;:::i;:::-;36598:10;36588:21;::::0;;;:9:::1;:21;::::0;;;;:47;;:21;;;:47:::1;::::0;;;::::1;:::i;:::-;;;;;;;;36677:9;36687:1;36677:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;36655:59:0::1;36664:10;-1:-1:-1::0;;;;;36655:59:0::1;-1:-1:-1::0;;;;;;;;;;;36691:8:0::1;36700:1;36691:11;;;;;;;;:::i;:::-;;;;;;;36705:8;36691:22;;;;:::i;:::-;36655:59;::::0;25140:25:1;;;25128:2;25113:18;36655:59:0::1;;;;;;;36474:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36433:306;;;-1:-1:-1::0;36756:4:0::1;::::0;35994:776;-1:-1:-1;;;;35994:776:0:o;25720:142::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25811:32:0;;;::::1;;::::0;;;:22:::1;:32;::::0;;;;:43;;-1:-1:-1;;25811:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25720:142::o;9493:87::-;9532:13;9565:7;9558:14;;;;;:::i;21233:316::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;21342:9:::1;::::0;;21336:15:::1;::::0;21342:9:::1;::::0;;::::1;::::0;21336:15:::1;:::i;:::-;21327:6;;:24;;;;:::i;:::-;21317:6;21302:12;;:21;;;;:::i;:::-;:49;;21293:99;;;::::0;-1:-1:-1;;;21293:99:0;;23940:2:1;21293:99:0::1;::::0;::::1;23922:21:1::0;23979:2;23959:18;;;23952:30;24018:34;23998:18;;;23991:62;-1:-1:-1;;;24069:18:1;;;24062:34;24113:19;;21293:99:0::1;23738:400:1::0;21293:99:0::1;21433:6;21418:12;;:21;;;;:::i;:::-;21403:12;:36:::0;1021:10;21450:23:::1;::::0;;;:9:::1;:23;::::0;;;;:33;;21477:6;;21450:23;:33:::1;::::0;21477:6;;21450:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;21499:42:0::1;::::0;25140:25:1;;;1021:10:0;;21516:1:::1;::::0;-1:-1:-1;;;;;;;;;;;21499:42:0;25128:2:1;25113:18;21499:42:0::1;24994:177:1::0;26610:149:0;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26705:35:0;;;::::1;;::::0;;;:25:::1;:35;::::0;;;;:46;;-1:-1:-1;;26705:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26610:149::o;26134:161::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26235:41:0;;;::::1;;::::0;;;:31:::1;:41;::::0;;;;:52;;-1:-1:-1;;26235:52:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26134:161::o;9914:167::-;9992:4;10009:42;1021:10;10033:9;10044:6;10009:9;:42::i;26385:141::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26476:31:0;;;::::1;;::::0;;;:21:::1;:31;::::0;;;;:42;;-1:-1:-1;;26476:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26385:141::o;32779:1044::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;33082:2:::1;33062:16;:22;;:48;;;;;33108:2;33088:16;:22;;33062:48;:68;;;;;33128:2;33114:10;:16;;33062:68;:99;;;;;33159:2;33134:21;:27;;33062:99;33054:108;;;::::0;::::1;;33173:17;:36:::0;;;33220:17:::1;:36:::0;;;33267:11:::1;:24:::0;;;33302:22:::1;:46:::0;;;33327:21;33281:10;33375:37:::1;33240:16:::0;33193;33375:37:::1;:::i;:::-;:51;;;;:::i;:::-;:76;;;;:::i;:::-;33359:13;:92:::0;;;33462:15:::1;:34:::0;;;33507:15:::1;:34:::0;;;33577:2:::1;-1:-1:-1::0;33560:19:0::1;33552:69;;;;-1:-1:-1::0;;;33552:69:0::1;;;;;;;:::i;:::-;33659:15;;33640;;:34;;33632:82;;;;-1:-1:-1::0;;;33632:82:0::1;;;;;;;:::i;:::-;33752:13;;33733:15;;:32;;33725:90;;;::::0;-1:-1:-1;;;33725:90:0;;19759:2:1;33725:90:0::1;::::0;::::1;19741:21:1::0;19798:2;19778:18;;;19771:30;19837:34;19817:18;;;19810:62;-1:-1:-1;;;19888:18:1;;;19881:43;19941:19;;33725:90:0::1;19557:409:1::0;33725:90:0::1;32779:1044:::0;;;;;;:::o;23605:557::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;23695:1:::1;23676:16;:20:::0;;;23726:1:::1;23707:16;:20:::0;;;23751:1:::1;23738:10;:14:::0;;;23763:21:::1;:25:::0;;;23751:1;23814:29:::1;::::0;23751:1;;23814:29:::1;:::i;:::-;:48;;;;:::i;:::-;:72;;;;:::i;:::-;23799:12;:87:::0;23948:1:::1;23928:17;:21:::0;;;23980:1:::1;23960:17;:21:::0;;;24006:1:::1;23992:11;:15:::0;;;24043:1:::1;24018:22;:26:::0;;;24043:1;24006;;24071:37:::1;::::0;::::1;:::i;:::-;:51;;;;:::i;:::-;:76;;;;:::i;:::-;24055:13;:92:::0;23605:557::o;19593:429::-;19664:7;19684:19;19706:26;19723:8;19706:16;:26::i;:::-;19684:48;;19746:11;19761:1;19746:16;19743:242;;;19800:14;;19785:12;;:29;;;;:::i;19743:242::-;19834:11;19849:1;19834:16;19831:154;;;19889:14;;19874:12;;:29;;;;:::i;19831:154::-;19933:11;19948:1;19933:16;19930:55;;;-1:-1:-1;19972:1:0;;19593:429;-1:-1:-1;;19593:429:0:o;19930:55::-;-1:-1:-1;;20002:12:0;;;19593:429;-1:-1:-1;19593:429:0:o;35214:303::-;35280:12;35322:1;35309:170;35330:13;:20;35326:24;;35309:170;;;35410:6;-1:-1:-1;;;;;35378:38:0;:28;35389:13;35403:1;35389:16;;;;;;;;:::i;:::-;;;;;;;;;35378:10;:28::i;:::-;-1:-1:-1;;;;;35378:38:0;;35374:90;;;-1:-1:-1;35444:4:0;;35214:303;-1:-1:-1;;35214:303:0:o;35374:90::-;35353:3;;;;:::i;:::-;;;;35309:170;;6662:30;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6662:30:0;:::o;29384:72::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;29434:6:::1;:14:::0;;-1:-1:-1;;;;29434:14:0::1;::::0;;29384:72::o;26813:147::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26907:34:0;;;::::1;;::::0;;;:24:::1;:34;::::0;;;;:45;;-1:-1:-1;;26907:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26813:147::o;2340:201::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2429:22:0;::::1;2421:73;;;::::0;-1:-1:-1;;;2421:73:0;;12870:2:1;2421:73:0::1;::::0;::::1;12852:21:1::0;12909:2;12889:18;;;12882:30;12948:34;12928:18;;;12921:62;-1:-1:-1;;;12999:18:1;;;12992:36;13045:19;;2421:73:0::1;12668:402:1::0;2421:73:0::1;2505:28;2524:8;2505:18;:28::i;:::-;2340:201:::0;:::o;31733:1007::-;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;32025:2:::1;32006:15;:21;;:46;;;;;32050:2;32031:15;:21;;32006:46;:65;;;;;32069:2;32056:9;:15;;32006:65;:95;;;;;32099:2;32075:20;:26;;32006:95;31998:104;;;::::0;::::1;;32113:16;:34:::0;;;32158:16:::1;:34:::0;;;32203:10:::1;:22:::0;;;32236:21:::1;:44:::0;;;32260:20;32177:15;32306:29:::1;32216:9:::0;32132:15;32306:29:::1;:::i;:::-;:48;;;;:::i;:::-;:72;;;;:::i;:::-;32291:12;:87:::0;;;32389:14:::1;:32:::0;;;32432:14:::1;:32:::0;;;32499:2:::1;-1:-1:-1::0;32483:18:0::1;32475:68;;;;-1:-1:-1::0;;;32475:68:0::1;;;;;;;:::i;:::-;32580:14;;32562;;:32;;32554:80;;;;-1:-1:-1::0;;;32554:80:0::1;;;;;;;:::i;:::-;32671:12;;32653:14;;:30;;32645:87;;;::::0;-1:-1:-1;;;32645:87:0;;22672:2:1;32645:87:0::1;::::0;::::1;22654:21:1::0;22711:2;22691:18;;;22684:30;22750:34;22730:18;;;22723:62;-1:-1:-1;;;22801:18:1;;;22794:42;22853:19;;32645:87:0::1;22470:408:1::0;27774:238:0;2052:7;2079:6;-1:-1:-1;;;;;2079:6:0;1021:10;2141:23;2133:68;;;;-1:-1:-1;;;2133:68:0;;;;;;;:::i;:::-;27895:7:::1;27872:19;:30;;27864:89;;;::::0;-1:-1:-1;;;27864:89:0;;14099:2:1;27864:89:0::1;::::0;::::1;14081:21:1::0;14138:2;14118:18;;;14111:30;14177:34;14157:18;;;14150:62;-1:-1:-1;;;14228:18:1;;;14221:44;14282:19;;27864:89:0::1;13897:410:1::0;27864:89:0::1;27964:18;:40:::0;27774:238::o;10791:335::-;-1:-1:-1;;;;;10884:19:0;;10876:68;;;;-1:-1:-1;;;10876:68:0;;21428:2:1;10876:68:0;;;21410:21:1;21467:2;21447:18;;;21440:30;21506:34;21486:18;;;21479:62;-1:-1:-1;;;21557:18:1;;;21550:34;21601:19;;10876:68:0;21226:400:1;10876:68:0;-1:-1:-1;;;;;10963:21:0;;10955:68;;;;-1:-1:-1;;;10955:68:0;;13277:2:1;10955:68:0;;;13259:21:1;13316:2;13296:18;;;13289:30;13355:34;13335:18;;;13328:62;-1:-1:-1;;;13406:18:1;;;13399:32;13448:19;;10955:68:0;13075:398:1;10955:68:0;-1:-1:-1;;;;;11034:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11086:32;;25140:25:1;;;11086:32:0;;25113:18:1;11086:32:0;;;;;;;10791:335;;;:::o;11134:6743::-;-1:-1:-1;;;;;11231:20:0;;11223:70;;;;-1:-1:-1;;;11223:70:0;;20173:2:1;11223:70:0;;;20155:21:1;20212:2;20192:18;;;20185:30;20251:34;20231:18;;;20224:62;-1:-1:-1;;;20302:18:1;;;20295:35;20347:19;;11223:70:0;19971:401:1;11223:70:0;-1:-1:-1;;;;;11312:23:0;;11304:71;;;;-1:-1:-1;;;11304:71:0;;11179:2:1;11304:71:0;;;11161:21:1;11218:2;11198:18;;;11191:30;11257:34;11237:18;;;11230:62;-1:-1:-1;;;11308:18:1;;;11301:33;11351:19;;11304:71:0;10977:399:1;11304:71:0;-1:-1:-1;;;;;11394:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;11394:27:0;11386:71;;;;-1:-1:-1;;;11386:71:0;;16603:2:1;11386:71:0;;;16585:21:1;16642:2;16622:18;;;16615:30;16681:33;16661:18;;;16654:61;16732:18;;11386:71:0;16401:355:1;11386:71:0;11485:14;11476:6;:23;11468:86;;;;-1:-1:-1;;;11468:86:0;;13680:2:1;11468:86:0;;;13662:21:1;13719:2;13699:18;;;13692:30;13758:34;13738:18;;;13731:62;-1:-1:-1;;;13809:18:1;;;13802:48;13867:19;;11468:86:0;13478:414:1;11468:86:0;11574:6;;-1:-1:-1;;;11574:6:0;;;;11573:7;11565:59;;;;-1:-1:-1;;;11565:59:0;;16963:2:1;11565:59:0;;;16945:21:1;17002:2;16982:18;;;16975:30;17041:34;17021:18;;;17014:62;-1:-1:-1;;;17092:18:1;;;17085:37;17139:19;;11565:59:0;16761:403:1;11565:59:0;-1:-1:-1;;;;;11640:18:0;;;;;;:7;:18;;;;;;;;:40;;;;-1:-1:-1;2052:7:0;2079:6;-1:-1:-1;;;;;11663:17:0;;;2079:6;;11663:17;;11640:40;11637:132;;;11704:11;;-1:-1:-1;;;11704:11:0;;;;11696:61;;;;-1:-1:-1;;;11696:61:0;;12058:2:1;11696:61:0;;;12040:21:1;12097:2;12077:18;;;12070:30;12136:34;12116:18;;;12109:62;-1:-1:-1;;;12187:18:1;;;12180:35;12232:19;;11696:61:0;11856:401:1;11696:61:0;-1:-1:-1;;;;;11784:15:0;;;;;;:7;:15;;;;;;;;11781:195;;;-1:-1:-1;;;;;11824:42:0;;;;;;:31;:42;;;;;;;;;:76;;;11880:20;;11870:6;:30;;11824:76;11816:148;;;;-1:-1:-1;;;11816:148:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12000:18:0;;;;;;:7;:18;;;;;;;;11997:195;;;-1:-1:-1;;;;;12043:39:0;;;;;;:31;:39;;;;;;;;;:73;;;12096:20;;12086:6;:30;;12043:73;12035:145;;;;-1:-1:-1;;;12035:145:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12322:39:0;;;;;;:31;:39;;;;;;;;;:73;;;12375:20;;12365:6;:30;;12322:73;12314:145;;;;-1:-1:-1;;;12314:145:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12553:35:0;;;;;;:24;:35;;;;;;;;;:83;;-1:-1:-1;12625:11:0;;;-1:-1:-1;;;;;12601:20:0;;;;;;:9;:20;;;;;;;;12592:29;;:6;:29;:::i;:::-;:44;;12553:83;12545:157;;;;-1:-1:-1;;;12545:157:0;;22242:2:1;12545:157:0;;;22224:21:1;22281:2;22261:18;;;22254:30;22320:34;22300:18;;;22293:62;22391:31;22371:18;;;22364:59;22440:19;;12545:157:0;22040:425:1;12545:157:0;12753:9;;-1:-1:-1;;;12753:9:0;;;;12750:341;;;-1:-1:-1;;;;;12897:18:0;;;;;;:7;:18;;;;;;;;12893:187;;;12938:31;12954:6;12962;12938:15;:31::i;:::-;12893:187;;;-1:-1:-1;;;;;12994:15:0;;;;;;:7;:15;;;;;;;;12991:89;;;13030:34;13046:9;13057:6;13030:15;:34::i;:::-;-1:-1:-1;;;;;13242:33:0;;13111:12;13242:33;;;:22;:33;;;;;;13111:12;;;;13242:33;;13241:34;:53;;;;-1:-1:-1;;;;;;13279:15:0;;;;;;:7;:15;;;;;;;;13241:53;:73;;;;;13313:1;13298:12;;:16;13241:73;13237:125;;;13346:4;13333:17;;13237:125;-1:-1:-1;;;;;13422:31:0;;;;;;:23;:31;;;;;;;;13421:32;:54;;;;-1:-1:-1;;;;;;13457:18:0;;;;;;:7;:18;;;;;;;;13421:54;:75;;;;;13495:1;13479:13;;:17;13421:75;13417:128;;;-1:-1:-1;13529:4:0;13417:128;13560:10;13557:1660;;;13630:32;13665;13687:9;13665:21;:32::i;:::-;13630:67;-1:-1:-1;13717:28:0;;13714:1478;;13875:3;13838:33;13847:24;13838:6;:33;:::i;:::-;13830:48;;;;:::i;:::-;13814:65;;;;:::i;:::-;;;14018:24;13998:16;;13991:4;:23;;;;:::i;:::-;13983:59;;;;:::i;:::-;13954:18;:89;;;14072:15;;-1:-1:-1;;;;;14072:15:0;14062:26;;;;:9;:26;;;;;:48;;:26;;;:48;;13954:89;;14062:48;:::i;:::-;;;;-1:-1:-1;;14151:15:0;;14168:18;;14134:53;;25140:25:1;;;-1:-1:-1;;;;;14151:15:0;;;;14134:53;;;-1:-1:-1;;;;;;;;;;;14134:53:0;25128:2:1;25113:18;14134:53:0;;;;;;;14308:24;14294:10;;14287:4;:17;;;;:::i;:::-;14279:53;;;;:::i;:::-;14256:12;:77;;;14362:15;;-1:-1:-1;;;;;14362:15:0;14352:26;;;;:9;:26;;;;;:42;;:26;;;:42;;14256:77;;14352:42;:::i;:::-;;;;-1:-1:-1;;14435:15:0;;14452:12;;14418:47;;25140:25:1;;;-1:-1:-1;;;;;14435:15:0;;;;14418:47;;;-1:-1:-1;;;;;;;;;;;14418:47:0;25128:2:1;25113:18;14418:47:0;;;;;;;14604:24;14584:16;;14577:4;:23;;;;:::i;:::-;14569:59;;;;:::i;:::-;14540:18;:89;;;14658:12;;-1:-1:-1;;;;;14658:12:0;14648:23;;;;:9;:23;;;;;:45;;:23;;;:45;;14540:89;;14648:45;:::i;:::-;;;;-1:-1:-1;;14734:12:0;;14748:18;;14717:50;;25140:25:1;;;-1:-1:-1;;;;;14734:12:0;;;;14717:50;;;-1:-1:-1;;;;;;;;;;;14717:50:0;25128:2:1;25113:18;14717:50:0;;;;;;;14916:24;14891:21;;14884:4;:28;;;;:::i;:::-;14876:64;;;;:::i;:::-;14849:16;:92;;;14970:17;;-1:-1:-1;;;;;14970:17:0;14960:28;;;;:9;:28;;;;;:48;;:28;;;:48;;14849:92;;14960:48;:::i;:::-;;;;-1:-1:-1;;15049:17:0;;15068:16;;15032:53;;25140:25:1;;;-1:-1:-1;;;;;15049:17:0;;;;15032:53;;;-1:-1:-1;;;;;;;;;;;15032:53:0;25128:2:1;25113:18;15032:53:0;;;;;;;15157:19;24321:1;24300:18;:22;;;24333:12;:16;;;24360;:20;;;24391:18;:22;24252:169;15157:19;13571:1646;13557:1660;15233:11;15230:1700;;;15309:33;15345:30;15368:6;15345:22;:30::i;:::-;15309:66;-1:-1:-1;15397:29:0;;15394:1525;;15567:3;15529:34;15538:25;15529:6;:34;:::i;:::-;15521:49;;;;:::i;:::-;15505:66;;;;:::i;:::-;;;15712:25;15691:17;;15684:4;:24;;;;:::i;:::-;15676:61;;;;:::i;:::-;15647:18;:91;;;15767:15;;-1:-1:-1;;;;;15767:15:0;15757:26;;;;:9;:26;;;;;:48;;:26;;;:48;;15647:91;;15757:48;:::i;:::-;;;;-1:-1:-1;;15846:15:0;;15863:18;;15829:53;;25140:25:1;;;-1:-1:-1;;;;;15846:15:0;;;;15829:53;;;-1:-1:-1;;;;;;;;;;;15829:53:0;25128:2:1;25113:18;15829:53:0;;;;;;;16022:25;16007:11;;16000:4;:18;;;;:::i;:::-;15992:55;;;;:::i;:::-;15968:12;;:80;;;;;;;:::i;:::-;;;;-1:-1:-1;;16097:12:0;;16077:15;;-1:-1:-1;;;;;16077:15:0;16067:26;;;;:9;:26;;;;;:42;;:26;;;:42;;16097:12;;16067:42;:::i;:::-;;;;-1:-1:-1;;16150:15:0;;16167:12;;16133:47;;25140:25:1;;;-1:-1:-1;;;;;16150:15:0;;;;16133:47;;;-1:-1:-1;;;;;;;;;;;16133:47:0;25128:2:1;25113:18;16133:47:0;;;;;;;16322:25;16301:17;;16294:4;:24;;;;:::i;:::-;16286:61;;;;:::i;:::-;16256:18;;:92;;;;;;;:::i;:::-;;;;-1:-1:-1;;16394:18:0;;16377:12;;-1:-1:-1;;;;;16377:12:0;16367:23;;;;:9;:23;;;;;:45;;:23;;;:45;;16394:18;;16367:45;:::i;:::-;;;;-1:-1:-1;;16453:12:0;;16467:18;;16436:50;;25140:25:1;;;-1:-1:-1;;;;;16453:12:0;;;;16436:50;;;-1:-1:-1;;;;;;;;;;;16436:50:0;25128:2:1;25113:18;16436:50:0;;;;;;;16638:25;16612:22;;16605:4;:29;;;;:::i;:::-;16597:66;;;;:::i;:::-;16569:16;;:95;;;;;;;:::i;:::-;;;;-1:-1:-1;;16715:16:0;;16693:17;;-1:-1:-1;;;;;16693:17:0;16683:28;;;;:9;:28;;;;;:48;;:28;;;:48;;16715:16;;16683:48;:::i;:::-;;;;-1:-1:-1;;16772:17:0;;16791:16;;16755:53;;25140:25:1;;;-1:-1:-1;;;;;16772:17:0;;;;16755:53;;;-1:-1:-1;;;;;;;;;;;16755:53:0;25128:2:1;25113:18;16755:53:0;;;;;;;16882:19;24321:1;24300:18;:22;;;24333:12;:16;;;24360;:20;;;24391:18;:22;24252:169;16882:19;15246:1684;15230:1700;16984:23;17010:13;17019:4;17010:6;:13;:::i;:::-;-1:-1:-1;;;;;17072:17:0;;;;;;:9;:17;;;;;:27;;16984:39;;-1:-1:-1;17093:6:0;;17072:17;;;:27;;17093:6;;17072:27;:::i;:::-;;;;-1:-1:-1;;;;;;;17151:20:0;;;;;;:9;:20;;;;;:39;;17175:15;;17151:20;:39;;17175:15;;17151:39;:::i;:::-;;;;-1:-1:-1;;;;;;;17234:18:0;;;;;;:7;:18;;;;;;;;17230:551;;;-1:-1:-1;;;;;17328:34:0;;;;;;:26;:34;;;;;:44;;17366:6;;17328:34;:44;;17366:6;;17328:44;:::i;:::-;;;;-1:-1:-1;;;;;;;17450:23:0;;;;;;:15;:23;;;;;:28;;17477:1;;17450:23;:28;;17477:1;;17450:28;:::i;:::-;;;;-1:-1:-1;17230:551:0;;-1:-1:-1;17230:551:0;;-1:-1:-1;;;;;17524:15:0;;;;;;:7;:15;;;;;;;;17521:260;;;-1:-1:-1;;;;;17613:37:0;;;;;;:26;:37;;;;;:47;;17654:6;;17613:37;:47;;17654:6;;17613:47;:::i;:::-;;;;-1:-1:-1;;;;;;;17738:26:0;;;;;;:15;:26;;;;;:31;;17768:1;;17738:26;:31;;17768:1;;17738:31;:::i;:::-;;;;-1:-1:-1;;17521:260:0;17842:9;-1:-1:-1;;;;;17825:44:0;17834:6;-1:-1:-1;;;;;17825:44:0;-1:-1:-1;;;;;;;;;;;17853:15:0;17825:44;;;;25140:25:1;;25128:2;25113:18;;24994:177;17825:44:0;;;;;;;;11212:6665;;;;11134:6743;;;:::o;2549:191::-;2623:16;2642:6;;-1:-1:-1;;;;;2659:17:0;;;-1:-1:-1;;;;;;2659:17:0;;;;;;2692:40;;2642:6;;;;;;;2692:40;;2623:16;2692:40;2612:128;2549:191;:::o;17883:1651::-;-1:-1:-1;;;;;18082:33:0;;;;;;:23;:33;;;;;;18078:423;;-1:-1:-1;;;;;18144:33:0;;;;;;:23;:33;;;;;18180:15;18144:51;;18078:423;;;18285:18;;-1:-1:-1;;;;;18249:33:0;;;;;;:23;:33;;;;;;18307:15;;18249:54;;;:::i;:::-;:73;18245:237;;-1:-1:-1;;;;;18351:25:0;;18379:1;18351:25;;;:15;:25;;;;;;;;:29;;;18407:23;:33;;;;;18443:15;18407:51;;18245:237;-1:-1:-1;;;;;18600:31:0;;;;;;:21;:31;;;;;;;;;:81;;-1:-1:-1;18668:13:0;;-1:-1:-1;;;;;18635:25:0;;;;;;:15;:25;;;;;;:29;;18663:1;18635:29;:::i;:::-;:46;;18600:81;18592:160;;;;-1:-1:-1;;;18592:160:0;;11583:2:1;18592:160:0;;;11565:21:1;11622:2;11602:18;;;11595:30;11661:34;11641:18;;;11634:62;11732:34;11712:18;;;11705:62;-1:-1:-1;;;11783:19:1;;;11776:33;11826:19;;18592:160:0;11381:470:1;18592:160:0;-1:-1:-1;;;;;18867:39:0;;;;;;:29;:39;;;;;;18864:461;;-1:-1:-1;;;;;18935:39:0;;;;;;:29;:39;;;;;18977:15;18935:57;;18864:461;;;19086:24;;-1:-1:-1;;;;;19044:39:0;;;;;;:29;:39;;;;;;19114:15;;19044:66;;;:::i;:::-;:85;19041:265;;-1:-1:-1;;;;;19158:36:0;;19197:1;19158:36;;;:26;:36;;;;;;;;:40;;;19225:29;:39;;;;;19267:15;19225:57;;19041:265;-1:-1:-1;;;;;19351:35:0;;;;;;:25;:35;;;;;;;;;:113;;-1:-1:-1;19441:23:0;;-1:-1:-1;;;;;19401:36:0;;;;;;:26;:36;;;;;;19390:47;;:7;:47;:::i;:::-;:74;;19351:113;19343:183;;;;-1:-1:-1;;;19343:183:0;;23514:2:1;19343:183:0;;;23496:21:1;23553:2;23533:18;;;23526:30;23592:34;23572:18;;;23565:62;23663:27;23643:18;;;23636:55;23708:19;;19343:183:0;23312:421:1;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:673:1;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:163;509:2;506:1;503:9;495:163;;;566:17;;554:30;;604:12;;;;636;;;;527:1;520:9;495:163;;;-1:-1:-1;676:5:1;;14:673;-1:-1:-1;;;;;;;14:673:1:o;692:188::-;771:13;;-1:-1:-1;;;;;813:42:1;;803:53;;793:81;;870:1;867;860:12;793:81;692:188;;;:::o;885:247::-;944:6;997:2;985:9;976:7;972:23;968:32;965:52;;;1013:1;1010;1003:12;965:52;1052:9;1039:23;1071:31;1096:5;1071:31;:::i;1137:251::-;1207:6;1260:2;1248:9;1239:7;1235:23;1231:32;1228:52;;;1276:1;1273;1266:12;1228:52;1308:9;1302:16;1327:31;1352:5;1327:31;:::i;1393:388::-;1461:6;1469;1522:2;1510:9;1501:7;1497:23;1493:32;1490:52;;;1538:1;1535;1528:12;1490:52;1577:9;1564:23;1596:31;1621:5;1596:31;:::i;:::-;1646:5;-1:-1:-1;1703:2:1;1688:18;;1675:32;1716:33;1675:32;1716:33;:::i;:::-;1768:7;1758:17;;;1393:388;;;;;:::o;1786:456::-;1863:6;1871;1879;1932:2;1920:9;1911:7;1907:23;1903:32;1900:52;;;1948:1;1945;1938:12;1900:52;1987:9;1974:23;2006:31;2031:5;2006:31;:::i;:::-;2056:5;-1:-1:-1;2113:2:1;2098:18;;2085:32;2126:33;2085:32;2126:33;:::i;:::-;1786:456;;2178:7;;-1:-1:-1;;;2232:2:1;2217:18;;;;2204:32;;1786:456::o;2247:382::-;2312:6;2320;2373:2;2361:9;2352:7;2348:23;2344:32;2341:52;;;2389:1;2386;2379:12;2341:52;2428:9;2415:23;2447:31;2472:5;2447:31;:::i;:::-;2497:5;-1:-1:-1;2554:2:1;2539:18;;2526:32;2567:30;2526:32;2567:30;:::i;2634:315::-;2702:6;2710;2763:2;2751:9;2742:7;2738:23;2734:32;2731:52;;;2779:1;2776;2769:12;2731:52;2818:9;2805:23;2837:31;2862:5;2837:31;:::i;:::-;2887:5;2939:2;2924:18;;;;2911:32;;-1:-1:-1;;;2634:315:1:o;2954:1226::-;3072:6;3080;3133:2;3121:9;3112:7;3108:23;3104:32;3101:52;;;3149:1;3146;3139:12;3101:52;3189:9;3176:23;3218:18;3259:2;3251:6;3248:14;3245:34;;;3275:1;3272;3265:12;3245:34;3313:6;3302:9;3298:22;3288:32;;3358:7;3351:4;3347:2;3343:13;3339:27;3329:55;;3380:1;3377;3370:12;3329:55;3416:2;3403:16;3438:4;3462:60;3478:43;3518:2;3478:43;:::i;3462:60::-;3544:3;3568:2;3563:3;3556:15;3596:2;3591:3;3587:12;3580:19;;3627:2;3623;3619:11;3675:7;3670:2;3664;3661:1;3657:10;3653:2;3649:19;3645:28;3642:41;3639:61;;;3696:1;3693;3686:12;3639:61;3718:1;3709:10;;3728:238;3742:2;3739:1;3736:9;3728:238;;;3813:3;3800:17;3830:31;3855:5;3830:31;:::i;:::-;3874:18;;3760:1;3753:9;;;;;3912:12;;;;3944;;3728:238;;;-1:-1:-1;3985:5:1;-1:-1:-1;;4028:18:1;;4015:32;;-1:-1:-1;;4059:16:1;;;4056:36;;;4088:1;4085;4078:12;4056:36;;4111:63;4166:7;4155:8;4144:9;4140:24;4111:63;:::i;:::-;4101:73;;;2954:1226;;;;;:::o;4185:348::-;4269:6;4322:2;4310:9;4301:7;4297:23;4293:32;4290:52;;;4338:1;4335;4328:12;4290:52;4378:9;4365:23;4411:18;4403:6;4400:30;4397:50;;;4443:1;4440;4433:12;4397:50;4466:61;4519:7;4510:6;4499:9;4495:22;4466:61;:::i;:::-;4456:71;4185:348;-1:-1:-1;;;;4185:348:1:o;4538:892::-;4633:6;4664:2;4707;4695:9;4686:7;4682:23;4678:32;4675:52;;;4723:1;4720;4713:12;4675:52;4756:9;4750:16;4789:18;4781:6;4778:30;4775:50;;;4821:1;4818;4811:12;4775:50;4844:22;;4897:4;4889:13;;4885:27;-1:-1:-1;4875:55:1;;4926:1;4923;4916:12;4875:55;4955:2;4949:9;4978:60;4994:43;5034:2;4994:43;:::i;4978:60::-;5060:3;5084:2;5079:3;5072:15;5112:2;5107:3;5103:12;5096:19;;5143:2;5139;5135:11;5191:7;5186:2;5180;5177:1;5173:10;5169:2;5165:19;5161:28;5158:41;5155:61;;;5212:1;5209;5202:12;5155:61;5234:1;5225:10;;5244:156;5258:2;5255:1;5252:9;5244:156;;;5315:10;;5303:23;;5276:1;5269:9;;;;;5346:12;;;;5378;;5244:156;;;-1:-1:-1;5419:5:1;4538:892;-1:-1:-1;;;;;;;4538:892:1:o;5435:241::-;5491:6;5544:2;5532:9;5523:7;5519:23;5515:32;5512:52;;;5560:1;5557;5550:12;5512:52;5599:9;5586:23;5618:28;5640:5;5618:28;:::i;5681:245::-;5748:6;5801:2;5789:9;5780:7;5776:23;5772:32;5769:52;;;5817:1;5814;5807:12;5769:52;5849:9;5843:16;5868:28;5890:5;5868:28;:::i;5931:464::-;6019:6;6027;6035;6088:2;6076:9;6067:7;6063:23;6059:32;6056:52;;;6104:1;6101;6094:12;6056:52;6143:9;6130:23;6162:31;6187:5;6162:31;:::i;:::-;6212:5;-1:-1:-1;6264:2:1;6249:18;;6236:32;;-1:-1:-1;6320:2:1;6305:18;;6292:32;6333:30;6292:32;6333:30;:::i;:::-;6382:7;6372:17;;;5931:464;;;;;:::o;6400:450::-;6487:6;6495;6503;6556:2;6544:9;6535:7;6531:23;6527:32;6524:52;;;6572:1;6569;6562:12;6524:52;6595:40;6625:9;6595:40;:::i;:::-;6585:50;;6654:49;6699:2;6688:9;6684:18;6654:49;:::i;:::-;6644:59;;6746:2;6735:9;6731:18;6725:25;6790:10;6783:5;6779:22;6772:5;6769:33;6759:61;;6816:1;6813;6806:12;6855:180;6914:6;6967:2;6955:9;6946:7;6942:23;6938:32;6935:52;;;6983:1;6980;6973:12;6935:52;-1:-1:-1;7006:23:1;;6855:180;-1:-1:-1;6855:180:1:o;7040:184::-;7110:6;7163:2;7151:9;7142:7;7138:23;7134:32;7131:52;;;7179:1;7176;7169:12;7131:52;-1:-1:-1;7202:16:1;;7040:184;-1:-1:-1;7040:184:1:o;7229:309::-;7294:6;7302;7355:2;7343:9;7334:7;7330:23;7326:32;7323:52;;;7371:1;7368;7361:12;7323:52;7407:9;7394:23;7384:33;;7467:2;7456:9;7452:18;7439:32;7480:28;7502:5;7480:28;:::i;7543:306::-;7631:6;7639;7647;7700:2;7688:9;7679:7;7675:23;7671:32;7668:52;;;7716:1;7713;7706:12;7668:52;7745:9;7739:16;7729:26;;7795:2;7784:9;7780:18;7774:25;7764:35;;7839:2;7828:9;7824:18;7818:25;7808:35;;7543:306;;;;;:::o;7854:523::-;7958:6;7966;7974;7982;7990;7998;8051:3;8039:9;8030:7;8026:23;8022:33;8019:53;;;8068:1;8065;8058:12;8019:53;-1:-1:-1;;8091:23:1;;;8161:2;8146:18;;8133:32;;-1:-1:-1;8212:2:1;8197:18;;8184:32;;8263:2;8248:18;;8235:32;;-1:-1:-1;8314:3:1;8299:19;;8286:33;;-1:-1:-1;8366:3:1;8351:19;8338:33;;-1:-1:-1;7854:523:1;-1:-1:-1;7854:523:1:o;8382:274::-;8511:3;8549:6;8543:13;8565:53;8611:6;8606:3;8599:4;8591:6;8587:17;8565:53;:::i;:::-;8634:16;;;;;8382:274;-1:-1:-1;;8382:274:1:o;9760:632::-;9931:2;9983:21;;;10053:13;;9956:18;;;10075:22;;;9902:4;;9931:2;10154:15;;;;10128:2;10113:18;;;9902:4;10197:169;10211:6;10208:1;10205:13;10197:169;;;10272:13;;10260:26;;10341:15;;;;10306:12;;;;10233:1;10226:9;10197:169;;;-1:-1:-1;10383:3:1;;9760:632;-1:-1:-1;;;;;;9760:632:1:o;10589:383::-;10738:2;10727:9;10720:21;10701:4;10770:6;10764:13;10813:6;10808:2;10797:9;10793:18;10786:34;10829:66;10888:6;10883:2;10872:9;10868:18;10863:2;10855:6;10851:15;10829:66;:::i;:::-;10956:2;10935:15;-1:-1:-1;;10931:29:1;10916:45;;;;10963:2;10912:54;;10589:383;-1:-1:-1;;10589:383:1:o;12262:401::-;12464:2;12446:21;;;12503:2;12483:18;;;12476:30;12542:34;12537:2;12522:18;;12515:62;-1:-1:-1;;;12608:2:1;12593:18;;12586:35;12653:3;12638:19;;12262:401::o;14743:398::-;14945:2;14927:21;;;14984:2;14964:18;;;14957:30;15023:34;15018:2;15003:18;;14996:62;-1:-1:-1;;;15089:2:1;15074:18;;15067:32;15131:3;15116:19;;14743:398::o;17993:356::-;18195:2;18177:21;;;18214:18;;;18207:30;18273:34;18268:2;18253:18;;18246:62;18340:2;18325:18;;17993:356::o;24143:423::-;24345:2;24327:21;;;24384:2;24364:18;;;24357:30;24423:34;24418:2;24403:18;;24396:62;24494:29;24489:2;24474:18;;24467:57;24556:3;24541:19;;24143:423::o;25365:275::-;25436:2;25430:9;25501:2;25482:13;;-1:-1:-1;;25478:27:1;25466:40;;25536:18;25521:34;;25557:22;;;25518:62;25515:88;;;25583:18;;:::i;:::-;25619:2;25612:22;25365:275;;-1:-1:-1;25365:275:1:o;25645:183::-;25705:4;25738:18;25730:6;25727:30;25724:56;;;25760:18;;:::i;:::-;-1:-1:-1;25805:1:1;25801:14;25817:4;25797:25;;25645:183::o;25833:128::-;25873:3;25904:1;25900:6;25897:1;25894:13;25891:39;;;25910:18;;:::i;:::-;-1:-1:-1;25946:9:1;;25833:128::o;25966:217::-;26006:1;26032;26022:132;;26076:10;26071:3;26067:20;26064:1;26057:31;26111:4;26108:1;26101:15;26139:4;26136:1;26129:15;26022:132;-1:-1:-1;26168:9:1;;25966:217::o;26188:422::-;26277:1;26320:5;26277:1;26334:270;26355:7;26345:8;26342:21;26334:270;;;26414:4;26410:1;26406:6;26402:17;26396:4;26393:27;26390:53;;;26423:18;;:::i;:::-;26473:7;26463:8;26459:22;26456:55;;;26493:16;;;;26456:55;26572:22;;;;26532:15;;;;26334:270;;;26338:3;26188:422;;;;;:::o;26615:140::-;26673:5;26702:47;26743:4;26733:8;26729:19;26723:4;26809:5;26839:8;26829:80;;-1:-1:-1;26880:1:1;26894:5;;26829:80;26928:4;26918:76;;-1:-1:-1;26965:1:1;26979:5;;26918:76;27010:4;27028:1;27023:59;;;;27096:1;27091:130;;;;27003:218;;27023:59;27053:1;27044:10;;27067:5;;;27091:130;27128:3;27118:8;27115:17;27112:43;;;27135:18;;:::i;:::-;-1:-1:-1;;27191:1:1;27177:16;;27206:5;;27003:218;;27305:2;27295:8;27292:16;27286:3;27280:4;27277:13;27273:36;27267:2;27257:8;27254:16;27249:2;27243:4;27240:12;27236:35;27233:77;27230:159;;;-1:-1:-1;27342:19:1;;;27374:5;;27230:159;27421:34;27446:8;27440:4;27421:34;:::i;:::-;27491:6;27487:1;27483:6;27479:19;27470:7;27467:32;27464:58;;;27502:18;;:::i;:::-;27540:20;;26760:806;-1:-1:-1;;;26760:806:1:o;27571:168::-;27611:7;27677:1;27673;27669:6;27665:14;27662:1;27659:21;27654:1;27647:9;27640:17;27636:45;27633:71;;;27684:18;;:::i;:::-;-1:-1:-1;27724:9:1;;27571:168::o;27744:125::-;27784:4;27812:1;27809;27806:8;27803:34;;;27817:18;;:::i;:::-;-1:-1:-1;27854:9:1;;27744:125::o;27874:258::-;27946:1;27956:113;27970:6;27967:1;27964:13;27956:113;;;28046:11;;;28040:18;28027:11;;;28020:39;27992:2;27985:10;27956:113;;;28087:6;28084:1;28081:13;28078:48;;;28122:1;28113:6;28108:3;28104:16;28097:27;28078:48;;27874:258;;;:::o;28137:380::-;28216:1;28212:12;;;;28259;;;28280:61;;28334:4;28326:6;28322:17;28312:27;;28280:61;28387:2;28379:6;28376:14;28356:18;28353:38;28350:161;;;28433:10;28428:3;28424:20;28421:1;28414:31;28468:4;28465:1;28458:15;28496:4;28493:1;28486:15;28350:161;;28137:380;;;:::o;28522:135::-;28561:3;-1:-1:-1;;28582:17:1;;28579:43;;;28602:18;;:::i;:::-;-1:-1:-1;28649:1:1;28638:13;;28522:135::o;28662:127::-;28723:10;28718:3;28714:20;28711:1;28704:31;28754:4;28751:1;28744:15;28778:4;28775:1;28768:15;28794:127;28855:10;28850:3;28846:20;28843:1;28836:31;28886:4;28883:1;28876:15;28910:4;28907:1;28900:15;28926:127;28987:10;28982:3;28978:20;28975:1;28968:31;29018:4;29015:1;29008:15;29042:4;29039:1;29032:15;29058:131;-1:-1:-1;;;;;29133:31:1;;29123:42;;29113:70;;29179:1;29176;29169:12;29194:118;29280:5;29273:13;29266:21;29259:5;29256:32;29246:60;;29302:1;29299;29292:12

Swarm Source

ipfs://316861761c36fbee5a3759542de0b3e8726f6acb57e0b4aa968cbfbbf883ce0a
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.