ETH Price: $2,523.27 (-0.41%)
Gas: 2.72 Gwei

Token

MbapPepe (PePe7)
 

Overview

Max Total Supply

7,777,777 PePe7

Holders

67

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
MBAPPEPE

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-21
*/

// SPDX-License-Identifier: MIT
// File: contracts/Mbappepe/Libraries.sol


//   _____ __________    _____ ___________________________________________________                                                                                        
//  /     \\______   \  /  _  \\______   \______   \_   _____|______   \_   _____/                                                                                        
//  /  \ /  \|    |  _/ /  /_\  \|     ___/|     ___/|    __)_ |     ___/|    __)_                                                                                         
// /    Y    \    |   \/    |    \    |    |    |    |        \|    |    |        \                                                                                        
// \____|__  /______  /\____|__  /____|    |____|   /_______  /|____|   /_______  /                                                                                        
// __________________/   ______________ ______________    _____   ________   ________    _______                                                                           
// \__    ___|_____  \   \__    ___/   |   \_   _____/   /     \  \_____  \  \_____  \   \      \                                                                          
//   |    |   /   |   \    |    | /    ~    \    __)_   /  \ /  \  /   |   \  /   |   \  /   |   \                                                                         
//   |    |  /    |    \   |    | \    Y    /        \ /    Y    \/    |    \/    |    \/    |    \                                                                        
//   |____|  \_______  /   |____|  \___|_  /_______  / \____|__  /\_______  /\_______  /\____|__  /                                                                        
//   ___ ___    _____\__________._____________.___ \_________ ________    \/_____    \/_____  ___________ __________________    __________  _____ __________.___  _________
//  /   |   \  /  _  \\______   \   \______   \   | \_   ___ \\_____  \    /     \    /     \ \_   _____/ \__    ___|_____  \   \______   \/  _  \\______   \   |/   _____/
// /    ~    \/  /_\  \|    |  _/   ||    |  _/   | /    \  \/ /   |   \  /  \ /  \  /  \ /  \ |    __)_    |    |   /   |   \   |     ___/  /_\  \|       _/   |\_____  \ 
// \    Y    /    |    \    |   \   ||    |   \   | \     \___/    |    \/    Y    \/    Y    \|        \   |    |  /    |    \  |    |  /    |    \    |   \   |/        \
//  \___|_  /\____|__  /______  /___||______  /___|  \______  |_______  /\____|__  /\____|__  /_______  /   |____|  \_______  /  |____|  \____|__  /____|_  /___/_______  /
//        \/         \/       \/            \/              \/        \/         \/         \/        \/                    \/                   \/       \/            \/ 

pragma solidity ^0.8.4;

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

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

interface IUniswapRouter {
   
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

}

abstract contract Ownable {
    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 = msg.sender;
        _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() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}





// File: contracts/Mbappepe/Mbappepe.sol



//   _____ __________    _____ ___________________________________________________                                                                                        
//  /     \\______   \  /  _  \\______   \______   \_   _____|______   \_   _____/                                                                                        
//  /  \ /  \|    |  _/ /  /_\  \|     ___/|     ___/|    __)_ |     ___/|    __)_                                                                                         
// /    Y    \    |   \/    |    \    |    |    |    |        \|    |    |        \                                                                                        
// \____|__  /______  /\____|__  /____|    |____|   /_______  /|____|   /_______  /                                                                                        
// __________________/   ______________ ______________    _____   ________   ________    _______                                                                           
// \__    ___|_____  \   \__    ___/   |   \_   _____/   /     \  \_____  \  \_____  \   \      \                                                                          
//   |    |   /   |   \    |    | /    ~    \    __)_   /  \ /  \  /   |   \  /   |   \  /   |   \                                                                         
//   |    |  /    |    \   |    | \    Y    /        \ /    Y    \/    |    \/    |    \/    |    \                                                                        
//   |____|  \_______  /   |____|  \___|_  /_______  / \____|__  /\_______  /\_______  /\____|__  /                                                                        
//   ___ ___    _____\__________._____________.___ \_________ ________    \/_____    \/_____  ___________ __________________    __________  _____ __________.___  _________
//  /   |   \  /  _  \\______   \   \______   \   | \_   ___ \\_____  \    /     \    /     \ \_   _____/ \__    ___|_____  \   \______   \/  _  \\______   \   |/   _____/
// /    ~    \/  /_\  \|    |  _/   ||    |  _/   | /    \  \/ /   |   \  /  \ /  \  /  \ /  \ |    __)_    |    |   /   |   \   |     ___/  /_\  \|       _/   |\_____  \ 
// \    Y    /    |    \    |   \   ||    |   \   | \     \___/    |    \/    Y    \/    Y    \|        \   |    |  /    |    \  |    |  /    |    \    |   \   |/        \
//  \___|_  /\____|__  /______  /___||______  /___|  \______  |_______  /\____|__  /\____|__  /_______  /   |____|  \_______  /  |____|  \____|__  /____|_  /___/_______  /
//        \/         \/       \/            \/              \/        \/         \/         \/        \/                    \/                   \/       \/            \/ 

pragma solidity ^0.8.4;

contract MBAPPEPE is IERC20Metadata, Ownable
{
  
    mapping (address => uint) private _balances;
    mapping (address => mapping (address => uint)) private _allowances;
    mapping(address => bool) public excludedFromFees;
    mapping(address => bool) public excludedFromLimit;
    mapping(address=>bool) public isAMM;
    //Token Info
    string private constant _name = 'MbapPepe';
    string private constant _symbol = 'PePe7';
    uint8 private constant _decimals = 18;
    uint public constant InitialSupply= 7777777*10**_decimals;

    uint private constant DefaultLiquidityLockTime=7 days;
    //0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3 testnet router
    //0x10ED43C718714eb63d5aA57B78B54704E256024E mainnet router

    address private constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    //variables that track balanceLimit and sellLimit,
    //can be updated based on circulating supply and Sell- and BalanceLimitDividers
    uint private _circulatingSupply =InitialSupply;
    
    //Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer
    uint public buyTax = 50;
    uint public sellTax = 50;
    uint public transferTax = 0;
    uint public burnTax=0;
    uint public liquidityTax=0;
    uint public marketingTax=1000;
    uint constant TAX_DENOMINATOR=1000;
    uint constant MAXTAXDENOMINATOR=10;
    uint public LimitV = 1;
    uint public LimitSell = 1;
    

    address private _uniswapPairAddress; 
    IUniswapRouter private  _uniswapRouter;
    
    
    //TODO: marketingWallet
    address public marketingWallet;
    //Only marketingWallet can change marketingWallet
    function ChangeMarketingWallet(address newWallet) public{
        require(msg.sender==marketingWallet);
        marketingWallet=newWallet;
    }
    //modifier for functions only the team can call
    modifier onlyTeam() {
        require(_isTeam(msg.sender), "Caller not Team or Owner");
        _;
    }
    //Checks if address is in Team, is needed to give Team access even if contract is renounced
    //Team doesn't have access to critical Functions that could turn this into a Rugpull(Exept liquidity unlocks)
    function _isTeam(address addr) private view returns (bool){
        return addr==owner()||addr==marketingWallet;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Constructor///////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    constructor () {
        uint deployerBalance=_circulatingSupply;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);

        // Uniswap Router
        _uniswapRouter = IUniswapRouter(UniswapRouter);
        //Creates a Uniswap Pair
        _uniswapPairAddress = IUniswapFactory(_uniswapRouter.factory()).createPair(address(this), _uniswapRouter.WETH());
        isAMM[_uniswapPairAddress]=true;
        
        //contract creator is by default marketing wallet
        marketingWallet=msg.sender;
        //owner uniswap router and contract is excluded from Taxes
        excludedFromFees[msg.sender]=true;
        excludedFromFees[UniswapRouter]=true;
        excludedFromFees[address(this)]=true;
    }
    




    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Transfer functionality////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    //transfer function, every transfer runs through this function
    function _transfer(address sender, address recipient, uint amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");


        //Pick transfer
        if(excludedFromFees[sender] || excludedFromFees[recipient])
            _feelessTransfer(sender, recipient, amount);
        else if(excludedFromLimit[recipient]){ 
            //once trading is enabled, it can't be turned off again
            require(LaunchTimestamp>0,"trading not yet enabled");
            _LimitlessFonctionTransfer(sender,recipient,amount);                  
        }
        else { 
            //once trading is enabled, it can't be turned off again
            require(LaunchTimestamp>0,"trading not yet enabled");
            _taxedTransfer(sender,recipient,amount);                  
        }
    }
    
    //applies taxes, checks for limits, locks generates autoLP and stakingETH, and autostakes
    function _taxedTransfer(address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        uint recipientBalance = _balances[recipient];
        require(senderBalance >= amount, "Transfer exceeds balance");
        require(senderBalance/LimitSell >= amount, "Transfer exceeds authorise sell");
        require((recipientBalance + amount ) <= InitialSupply/LimitV, "Wallet contain more than certain % Total Supply");

        bool isBuy=isAMM[sender];
        bool isSell=isAMM[recipient];

        uint tax;
        if(isSell){  
            uint SellTaxDuration=180 seconds;          
            if(block.timestamp<LaunchTimestamp+SellTaxDuration){
                tax=_getStartTax(SellTaxDuration,999);
                }else tax=sellTax;
            }
        else if(isBuy){
            uint BuyTaxDuration=60 seconds;
            if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
                tax=_getStartTax(BuyTaxDuration,999);
            }else tax=buyTax;
        } else tax=transferTax;

        if((sender!=_uniswapPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
            _swapContractToken(false);

        //Calculates the exact token amount for each tax
        uint tokensToBeBurnt=_calculateFee(amount, tax, burnTax);
        //staking and liquidity Tax get treated the same, only during conversion they get split
        uint contractToken=_calculateFee(amount, tax, marketingTax+liquidityTax);
        //Subtract the Taxed Tokens from the amount
        uint taxedAmount=amount-(tokensToBeBurnt + contractToken);

        _balances[sender]-=amount;
        //Adds the taxed tokens to the contract wallet
        _balances[address(this)] += contractToken;
        //Burns tokens
        _circulatingSupply-=tokensToBeBurnt;
        _balances[recipient]+=taxedAmount;
        
        emit Transfer(sender,recipient,taxedAmount);
    }
    //Start tax drops depending on the time since launch, enables bot protection and Dump protection
    function _getStartTax(uint duration, uint maxTax) private view returns (uint){
        uint timeSinceLaunch=block.timestamp-LaunchTimestamp;
        return maxTax-((maxTax-50)*timeSinceLaunch/duration);
    }
    //Calculates the token that should be taxed
    function _calculateFee(uint amount, uint tax, uint taxPercent) private pure returns (uint) {
        return (amount*tax*taxPercent) / (TAX_DENOMINATOR*TAX_DENOMINATOR);
    }


    //Feeless transfer only transfers and autostakes
    function _feelessTransfer(address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        _balances[sender]-=amount;
        _balances[recipient]+=amount;      
        emit Transfer(sender,recipient,amount);
    }
///////////////////////////////YeaaaahBrooooooo//////////addd
    function _LimitlessFonctionTransfer (address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");

        bool isBuy=isAMM[sender];
        bool isSell=isAMM[recipient];

        uint tax;
        if(isSell){  
            uint SellTaxDuration=180 seconds;          
            if(block.timestamp<LaunchTimestamp+SellTaxDuration){
                tax=_getStartTax(SellTaxDuration,999);
                }else tax=sellTax;
            }
        else if(isBuy){
            uint BuyTaxDuration=60 seconds;
            if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
                tax=_getStartTax(BuyTaxDuration,999);
            }else tax=buyTax;
        } else tax=transferTax;

        if((sender!=_uniswapPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
            _swapContractToken(false);

        //Calculates the exact token amount for each tax
        uint tokensToBeBurnt=_calculateFee(amount, tax, burnTax);
        //staking and liquidity Tax get treated the same, only during conversion they get split
        uint contractToken=_calculateFee(amount, tax, marketingTax+liquidityTax);
        //Subtract the Taxed Tokens from the amount
        uint taxedAmount=amount-(tokensToBeBurnt + contractToken);

        _balances[sender]-=amount;
        //Adds the taxed tokens to the contract wallet
        _balances[address(this)] += contractToken;
        //Burns tokens
        _circulatingSupply-=tokensToBeBurnt;
        _balances[recipient]+=taxedAmount;
        
        emit Transfer(sender,recipient,taxedAmount);
    }
    

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Swap Contract Tokens yeaaaaah Broo//////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    //Locks the swap if already swapping
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    //Sets the permille of uniswap pair to trigger liquifying taxed token
    uint public swapTreshold=2;
    function setSwapTreshold(uint newSwapTresholdPermille) public onlyTeam{
        require(newSwapTresholdPermille<=15);//MaxTreshold= 1.5%
        swapTreshold=newSwapTresholdPermille;
    }
    //Sets the max Liquidity where swaps for Liquidity still happen
    uint public overLiquifyTreshold=150;
    function SetOverLiquifiedTreshold(uint newOverLiquifyTresholdPermille) public onlyTeam{
        require(newOverLiquifyTresholdPermille<=1000);
        overLiquifyTreshold=newOverLiquifyTresholdPermille;
    }
    //Sets the taxes Burn+marketing+liquidity tax needs to equal the TAX_DENOMINATOR (1000)
    //buy, sell and transfer tax are limited by the MAXTAXDENOMINATOR
    event OnSetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint marketing,uint liquidity);
    function SetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint marketing,uint liquidity) public onlyTeam{
        uint maxTax=(TAX_DENOMINATOR/MAXTAXDENOMINATOR)/2;
        require(buy<=maxTax&&sell<=maxTax&&transfer_<=maxTax,"Tax exceeds maxTax");
        require(burn+marketing+liquidity==TAX_DENOMINATOR,"Taxes don't add up to denominator");
        
        buyTax=buy;
        sellTax=sell;
        transferTax=transfer_;
        marketingTax=marketing;
        liquidityTax=liquidity;
        burnTax=burn;
        emit OnSetTaxes(buy, sell, transfer_, burn, marketing,liquidity);
    }
    
    event OnSetLimit(uint LimitV2);
    function SetLimit(uint LimitV2) public onlyTeam{
        require(LimitV2<=50,"Max wallet  can't be under 2% of the total supply");
        LimitV=LimitV2;
       
        emit OnSetLimit(LimitV2);
    }

    event OnSetSell(uint LimitSell2);
    function SetSell(uint LimitSell2) public onlyTeam{
        require(LimitSell2<=2,"Dump measure can't be under 50% of the wallet");
        LimitSell=LimitSell2;
       
        emit OnSetSell(LimitSell2);
    }



    //If liquidity is over the treshold, convert 100% of Token to Marketing ETH to avoid overliquifying
    function isOverLiquified() public view returns(bool){
        return _balances[_uniswapPairAddress]>_circulatingSupply*overLiquifyTreshold/1000;
    }


    //swaps the token on the contract for Marketing ETH and LP Token.
    //always swaps a percentage of the LP pair balance to avoid price impact
    function _swapContractToken(bool ignoreLimits) private lockTheSwap{
        uint contractBalance=_balances[address(this)];
        uint totalTax=liquidityTax+marketingTax;
        //swaps each time it reaches swapTreshold of uniswap pair to avoid large prize impact
        uint tokenToSwap=_balances[_uniswapPairAddress]*swapTreshold/1000;

        //nothing to swap at no tax
        if(totalTax==0)return;
        //only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0
        //Ignore limits swaps 100% of the contractBalance
        if(ignoreLimits)
            tokenToSwap=_balances[address(this)];
        else if(contractBalance<tokenToSwap)
            return;

        //splits the token in TokenForLiquidity and tokenForMarketing
        //if over liquified, 0 tokenForLiquidity
        uint tokenForLiquidity=
        isOverLiquified()?0
        :(tokenToSwap*liquidityTax)/totalTax;

        uint tokenForMarketing= tokenToSwap-tokenForLiquidity;

        uint LiqHalf=tokenForLiquidity/2;
        //swaps marktetingToken and the liquidity token half for ETH
        uint swapToken=LiqHalf+tokenForMarketing;
        //Gets the initial ETH balance, so swap won't touch any contract ETH
        uint initialETHBalance = address(this).balance;
        _swapTokenForETH(swapToken);
        uint newETH=(address(this).balance - initialETHBalance);

        //calculates the amount of ETH belonging to the LP-Pair and converts them to LP
        if(tokenForLiquidity>0){
            uint liqETH = (newETH*LiqHalf)/swapToken;
            _addLiquidity(LiqHalf, liqETH);
        }
        //Sends all the marketing ETH to the marketingWallet
        (bool sent,)=marketingWallet.call{value:address(this).balance}("");
        sent=true;
    }
    //swaps tokens on the contract for ETH
    function _swapTokenForETH(uint amount) private {
        _approve(address(this), address(_uniswapRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapRouter.WETH();

        try _uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        ){}
        catch{}
    }
    //Adds Liquidity directly to the contract where LP are locked
    function _addLiquidity(uint tokenamount, uint ethamount) private {
        _approve(address(this), address(_uniswapRouter), tokenamount);
        _uniswapRouter.addLiquidityETH{value: ethamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //public functions /////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////// 
    function getLiquidityReleaseTimeInSeconds() public view returns (uint){
        if(block.timestamp<_liquidityUnlockTime)
            return _liquidityUnlockTime-block.timestamp;
        return 0;
    }
    function getBurnedTokens() public view returns(uint){
        return (InitialSupply-_circulatingSupply)+_balances[address(0xdead)];
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Settings//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //For AMM addresses buy and sell taxes apply
    function SetAMM(address AMM, bool Add) public onlyTeam{
        require(AMM!=_uniswapPairAddress,"can't change uniswap");
        isAMM[AMM]=Add;
    }
    
    bool public manualSwap;
    //switches autoLiquidity and marketing ETH generation during transfers
    function SwitchManualSwap(bool manual) public onlyTeam{
        manualSwap=manual;
    }
    //manually converts contract token to LP and staking ETH
    function SwapContractToken() public onlyTeam{
    _swapContractToken(true);
    }
    event ExcludeAccount(address account, bool exclude);
    //Exclude/Include account from fees (eg. CEX)
    function ExcludeAccountFromFees(address account, bool exclude) public onlyTeam{
        require(account!=address(this),"can't Include the contract");
        excludedFromFees[account]=exclude;
        emit ExcludeAccount(account,exclude);
    }

    /////////////moussss///////////
     event ExcludeAccountLimit(address account, bool exclude);
    //Exclude/Include account from fees (eg. CEX)
    function ExcludedFromLimit(address account, bool exclude) public onlyTeam{
        require(account!=address(this),"can't Include the contract");
        excludedFromLimit[account]=exclude;
        emit ExcludeAccountLimit(account,exclude);
    }



    //Enables trading. Sets the launch timestamp to the given Value
    event OnEnableTrading();
    uint public LaunchTimestamp;
    function SetupEnableTrading() public onlyTeam{
        require(LaunchTimestamp==0,"AlreadyLaunched");
        LaunchTimestamp=block.timestamp;
        emit OnEnableTrading();
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Liquidity Lock////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //the timestamp when Liquidity unlocks
    uint _liquidityUnlockTime;
    bool public LPReleaseLimitedTo20Percent;
    //Sets Liquidity Release to 20% at a time and prolongs liquidity Lock for a Week after Release. 
    //That way autoLiquidity can be slowly released 
    function limitLiquidityReleaseTo20Percent() public onlyTeam{
        LPReleaseLimitedTo20Percent=true;
    }
    //Locks Liquidity for seconds. can only be prolonged
    function LockLiquidityForSeconds(uint secondsUntilUnlock) public onlyTeam{
        _prolongLiquidityLock(secondsUntilUnlock+block.timestamp);
    }
    event OnProlongLPLock(uint UnlockTimestamp);
    function _prolongLiquidityLock(uint newUnlockTime) private{
        // require new unlock time to be longer than old one
        require(newUnlockTime>_liquidityUnlockTime);
        _liquidityUnlockTime=newUnlockTime;
        emit OnProlongLPLock(_liquidityUnlockTime);
    }
    event OnReleaseLP();
    //Release Liquidity Tokens once unlock time is over
    function LiquidityRelease() public onlyTeam {
        //Only callable if liquidity Unlock time is over
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");

        IERC20 liquidityToken = IERC20(_uniswapPairAddress);
        uint amount = liquidityToken.balanceOf(address(this));
        if(LPReleaseLimitedTo20Percent)
        {
            _liquidityUnlockTime=block.timestamp+DefaultLiquidityLockTime;
            //regular liquidity release, only releases 50% at a time and locks liquidity for another week
            amount=amount*2/10;
        }
        liquidityToken.transfer(msg.sender, amount);
        emit OnReleaseLP();
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //external//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    receive() external payable {}

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

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

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view override returns (uint) {
        return _circulatingSupply;
    }

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

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

    function allowance(address _owner, address spender) external view override returns (uint) {
        return _allowances[_owner][spender];
    }

    function approve(address spender, uint amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function transferFrom(address sender, address recipient, uint amount) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    // IERC20 - Helpers

    function increaseAllowance(address spender, uint addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint subtractedValue) external returns (bool) {
        uint currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountLimit","type":"event"},{"anonymous":false,"inputs":[],"name":"OnEnableTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"UnlockTimestamp","type":"uint256"}],"name":"OnProlongLPLock","type":"event"},{"anonymous":false,"inputs":[],"name":"OnReleaseLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"LimitV2","type":"uint256"}],"name":"OnSetLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"LimitSell2","type":"uint256"}],"name":"OnSetSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"OnSetTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"ChangeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludedFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPReleaseLimitedTo20Percent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LaunchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LimitSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LimitV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquidityRelease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"secondsUntilUnlock","type":"uint256"}],"name":"LockLiquidityForSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AMM","type":"address"},{"internalType":"bool","name":"Add","type":"bool"}],"name":"SetAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"LimitV2","type":"uint256"}],"name":"SetLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newOverLiquifyTresholdPermille","type":"uint256"}],"name":"SetOverLiquifiedTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"LimitSell2","type":"uint256"}],"name":"SetSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"transfer_","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SwapContractToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"SwitchManualSwap","outputs":[],"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":"burnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReleaseTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"isAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitLiquidityReleaseTo20Percent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"overLiquifyTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapTresholdPermille","type":"uint256"}],"name":"setSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"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":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526012600a62000014919062000718565b6276adf162000024919062000855565b6006556032600755603260085560006009556000600a556000600b556103e8600c556001600d556001600e55600260125560966013553480156200006757600080fd5b506000339050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000600654905080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001b49190620006a0565b60405180910390a3737a250d5630b4cf539739df2c5dacb4c659f2488d601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027a57600080fd5b505afa1580156200028f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b591906200061f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033a57600080fd5b505afa1580156200034f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037591906200061f565b6040518363ffffffff1660e01b81526004016200039492919062000673565b602060405180830381600087803b158015620003af57600080fd5b505af1158015620003c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ea91906200061f565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200095c565b600081519050620006198162000942565b92915050565b60006020828403121562000638576200063762000930565b5b6000620006488482850162000608565b91505092915050565b6200065c81620008b6565b82525050565b6200066d81620008ea565b82525050565b60006040820190506200068a600083018562000651565b62000699602083018462000651565b9392505050565b6000602082019050620006b7600083018462000662565b92915050565b6000808291508390505b60018511156200070f57808604811115620006e757620006e662000901565b5b6001851615620006f75780820291505b8081029050620007078562000935565b9450620006c7565b94509492505050565b60006200072582620008ea565b91506200073283620008f4565b9250620007617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000769565b905092915050565b6000826200077b57600190506200084e565b816200078b57600090506200084e565b8160018114620007a45760028114620007af57620007e5565b60019150506200084e565b60ff841115620007c457620007c362000901565b5b8360020a915084821115620007de57620007dd62000901565b5b506200084e565b5060208310610133831016604e8410600b84101617156200081f5782820a90508381111562000819576200081862000901565b5b6200084e565b6200082e8484846001620006bd565b9250905081840481111562000848576200084762000901565b5b81810290505b9392505050565b60006200086282620008ea565b91506200086f83620008ea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008ab57620008aa62000901565b5b828202905092915050565b6000620008c382620008ca565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b60008160011c9050919050565b6200094d81620008b6565b81146200095957600080fd5b50565b614d75806200096c6000396000f3fe6080604052600436106102cd5760003560e01c80638124f7ac11610175578063be617fa0116100dc578063d8bd2dd111610095578063e0d2f9eb1161006f578063e0d2f9eb14610acf578063e52fb9ec14610af8578063f2fde38b14610b23578063f5fb756f14610b4c576102d4565b8063d8bd2dd114610a18578063dbe66ca014610a55578063dd62ed3e14610a92576102d4565b8063be617fa014610906578063c3a3c03214610931578063c3f4f54f1461095c578063cc1776d314610987578063cfd1940e146109b2578063d46b6a30146109db576102d4565b8063a457c2d71161012e578063a457c2d7146107f8578063a68bdac714610835578063a9059cbb1461084c578063ab64cfdc14610889578063b40d09e2146108b2578063bc43d849146108dd576102d4565b80638124f7ac146106fa578063817d4bff14610725578063868b01411461074e5780638da5cb5b1461077757806395d89b41146107a25780639b39b65f146107cd576102d4565b806333ae8325116102345780635149f984116101ed57806370a08231116101c757806370a0823114610664578063715018a6146106a157806375f0a874146106b85780637b9e987a146106e3576102d4565b80635149f984146105e557806351bc3c851461060e578063629ece4914610639576102d4565b806333ae8325146104e9578063395093511461051257806341aec3571461054f57806346e35f0314610566578063479881bf146105915780634f7041a5146105ba576102d4565b80631d4eaead116102865780631d4eaead146103d95780631eb25d131461040457806323b872dd1461042f5780632d48f84f1461046c578063313ce567146104955780633227925f146104c0576102d4565b80630612f39d146102d957806306fdde03146102f0578063095ea7b31461031b5780630eff4c641461035857806318160ddd146103835780631d2cb02d146103ae576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610b77565b005b3480156102fc57600080fd5b50610305610dbc565b60405161031291906140ca565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906139ed565b610df9565b60405161034f91906140af565b60405180910390f35b34801561036457600080fd5b5061036d610e10565b60405161037a919061438c565b60405180910390f35b34801561038f57600080fd5b50610398610e16565b6040516103a5919061438c565b60405180910390f35b3480156103ba57600080fd5b506103c3610e20565b6040516103d0919061438c565b60405180910390f35b3480156103e557600080fd5b506103ee610e26565b6040516103fb919061438c565b60405180910390f35b34801561041057600080fd5b50610419610e2c565b604051610426919061438c565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061395a565b610e4b565b60405161046391906140af565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613b34565b610f3e565b005b3480156104a157600080fd5b506104aa6110ce565b6040516104b79190614462565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613a87565b6110d7565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613a87565b611136565b005b34801561051e57600080fd5b50610539600480360381019061053491906139ed565b611203565b60405161054691906140af565b60405180910390f35b34801561055b57600080fd5b506105646112a1565b005b34801561057257600080fd5b5061057b6112f5565b60405161058891906140af565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190613a87565b61137c565b005b3480156105c657600080fd5b506105cf611449565b6040516105dc919061438c565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906139ad565b61144f565b005b34801561061a57600080fd5b50610623611583565b60405161063091906140af565b60405180910390f35b34801561064557600080fd5b5061064e611596565b60405161065b919061438c565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906138c0565b61159c565b604051610698919061438c565b60405180910390f35b3480156106ad57600080fd5b506106b66115e5565b005b3480156106c457600080fd5b506106cd611718565b6040516106da9190613fe1565b60405180910390f35b3480156106ef57600080fd5b506106f861173e565b005b34801561070657600080fd5b5061070f611800565b60405161071c919061438c565b60405180910390f35b34801561073157600080fd5b5061074c600480360381019061074791906138c0565b611806565b005b34801561075a57600080fd5b5061077560048036038101906107709190613a2d565b6118a4565b005b34801561078357600080fd5b5061078c611909565b6040516107999190613fe1565b60405180910390f35b3480156107ae57600080fd5b506107b7611932565b6040516107c491906140ca565b60405180910390f35b3480156107d957600080fd5b506107e261196f565b6040516107ef91906140af565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a91906139ed565b611982565b60405161082c91906140af565b60405180910390f35b34801561084157600080fd5b5061084a611a68565b005b34801561085857600080fd5b50610873600480360381019061086e91906139ed565b611acd565b60405161088091906140af565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906139ad565b611ae4565b005b3480156108be57600080fd5b506108c7611c2f565b6040516108d4919061438c565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190613a87565b611c35565b005b34801561091257600080fd5b5061091b611c96565b604051610928919061438c565b60405180910390f35b34801561093d57600080fd5b50610946611c9c565b604051610953919061438c565b60405180910390f35b34801561096857600080fd5b50610971611cc5565b60405161097e919061438c565b60405180910390f35b34801561099357600080fd5b5061099c611d41565b6040516109a9919061438c565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190613a87565b611d47565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906138c0565b611da7565b604051610a0f91906140af565b60405180910390f35b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906138c0565b611dc7565b604051610a4c91906140af565b60405180910390f35b348015610a6157600080fd5b50610a7c6004803603810190610a7791906138c0565b611de7565b604051610a8991906140af565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab4919061391a565b611e07565b604051610ac6919061438c565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af191906139ad565b611e8e565b005b348015610b0457600080fd5b50610b0d611fd9565b604051610b1a919061438c565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906138c0565b611fdf565b005b348015610b5857600080fd5b50610b61612181565b604051610b6e919061438c565b60405180910390f35b610b8033612187565b610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb6906141ec565b60405180910390fd5b601654421015610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb9061410c565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c669190613fe1565b60206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb69190613ab4565b9050601760009054906101000a900460ff1615610cfe5762093a8042610cdc91906144dd565b601681905550600a600282610cf191906146d5565b610cfb9190614533565b90505b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610d39929190614025565b602060405180830381600087803b158015610d5357600080fd5b505af1158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190613a5a565b507f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67560405160405180910390a15050565b60606040518060400160405280600881526020017f4d62617050657065000000000000000000000000000000000000000000000000815250905090565b6000610e0633848461221e565b6001905092915050565b60135481565b6000600654905090565b600c5481565b600a5481565b6012600a610e3a91906145b7565b6276adf1610e4891906146d5565b81565b6000610e588484846123e9565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f13906141cc565b60405180910390fd5b610f3285338584610f2d919061472f565b61221e565b60019150509392505050565b610f4733612187565b610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d906141ec565b60405180910390fd5b60006002600a6103e8610f999190614533565b610fa39190614533565b9050808711158015610fb55750808611155b8015610fc15750808511155b611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061420c565b60405180910390fd5b6103e882848661101091906144dd565b61101a91906144dd565b1461105a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110519061436c565b60405180910390fd5b86600781905550856008819055508460098190555082600c8190555081600b8190555083600a819055507f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c98787878787876040516110bd96959493929190614401565b60405180910390a150505050505050565b60006012905090565b6110e033612187565b61111f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611116906141ec565b60405180910390fd5b611133428261112e91906144dd565b61267d565b50565b61113f33612187565b61117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906141ec565b60405180910390fd5b60028111156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906142ec565b60405180910390fd5b80600e819055507fdfcf82c64ef2a938975f4ad1599e559af165a244802754595fcbffcf5ffdd0d9816040516111f8919061438c565b60405180910390a150565b6000611297338484600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129291906144dd565b61221e565b6001905092915050565b6112aa33612187565b6112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e0906141ec565b60405180910390fd5b6112f360016126ce565b565b60006103e860135460065461130a91906146d5565b6113149190614533565b60016000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411905090565b61138533612187565b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906141ec565b60405180910390fd5b6032811115611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff9061416c565b60405180910390fd5b80600d819055507fd1db3c8f76ced548252ac593ebef6129c122ab13cce5b9367eb4421cebe388558160405161143e919061438c565b60405180910390a150565b60075481565b61145833612187565b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e906141ec565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061430c565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601460009054906101000a900460ff1681565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16611604611909565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116519061428c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61174733612187565b611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906141ec565b60405180910390fd5b6000601554146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906142cc565b60405180910390fd5b426015819055507f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc160405160405180910390a1565b60095481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186057600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118ad33612187565b6118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906141ec565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f5065506537000000000000000000000000000000000000000000000000000000815250905090565b601760009054906101000a900460ff1681565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e9061434c565b60405180910390fd5b611a5d33858584611a58919061472f565b61221e565b600191505092915050565b611a7133612187565b611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa7906141ec565b60405180910390fd5b6001601760006101000a81548160ff021916908315150217905550565b6000611ada3384846123e9565b6001905092915050565b611aed33612187565b611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b23906141ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b929061432c565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9a547f2adf55e10d7297ec9f54496d4044ad440b7cd8f5b5d5700778377d71d38282604051611c23929190613ffc565b60405180910390a15050565b60155481565b611c3e33612187565b611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c74906141ec565b60405180910390fd5b6103e8811115611c8c57600080fd5b8060138190555050565b600b5481565b6000601654421015611cbd5742601654611cb6919061472f565b9050611cc2565b600090505b90565b60006001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546006546012600a611d1a91906145b7565b6276adf1611d2891906146d5565b611d32919061472f565b611d3c91906144dd565b905090565b60085481565b611d5033612187565b611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d86906141ec565b60405180910390fd5b600f811115611d9d57600080fd5b8060128190555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e9733612187565b611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd906141ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c9061432c565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed48282604051611fcd929190613ffc565b60405180910390a15050565b60125481565b3373ffffffffffffffffffffffffffffffffffffffff16611ffe611909565b73ffffffffffffffffffffffffffffffffffffffff1614612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b9061428c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb9061414c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b6000612191611909565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806122175750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561228e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122859061418c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f59061424c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123dc919061438c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612450906140ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c0906141ac565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061256a5750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561257f5761257a83838361299b565b612678565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561262657600060155411612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906142ac565b60405180910390fd5b612621838383612b39565b612677565b60006015541161266b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612662906142ac565b60405180910390fd5b612676838383612f55565b5b5b505050565b601654811161268b57600080fd5b806016819055507f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e6016546040516126c3919061438c565b60405180910390a150565b6001601160146101000a81548160ff0219169083151502179055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600c54600b5461273f91906144dd565b905060006103e860125460016000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b591906146d5565b6127bf9190614533565b905060008214156127d25750505061297d565b831561281f57600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612830565b8083101561282f5750505061297d565b5b600061283a6112f5565b61285c5782600b548361284d91906146d5565b6128579190614533565b61285f565b60005b90506000818361286f919061472f565b905060006002836128809190614533565b90506000828261289091906144dd565b905060004790506128a08261347c565b600081476128ae919061472f565b905060008611156128e05760008385836128c891906146d5565b6128d29190614533565b90506128de85826136d1565b505b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161292890613fcc565b60006040518083038185875af1925050503d8060008114612965576040519150601f19603f3d011682016040523d82523d6000602084013e61296a565b606091505b5050905060019050505050505050505050505b6000601160146101000a81548160ff02191690831515021790555050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a199061412c565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a71919061472f565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac791906144dd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b2b919061438c565b60405180910390a350505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb79061412c565b60405180910390fd5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008115612ca457600060b4905080601554612c7e91906144dd565b421015612c9857612c91816103e76137be565b9150612c9e565b60085491505b50612ceb565b8215612ce4576000603c905080601554612cbe91906144dd565b421015612cd857612cd1816103e76137be565b9150612cde565b60075491505b50612cea565b60095490505b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015612d565750601460009054906101000a900460ff16155b8015612d6f5750601160149054906101000a900460ff16155b15612d7f57612d7e60006126ce565b5b6000612d8e8683600a54613808565b90506000612dac8784600b54600c54612da791906144dd565b613808565b905060008183612dbc91906144dd565b88612dc7919061472f565b905087600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e18919061472f565b9250508190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6e91906144dd565b925050819055508260066000828254612e87919061472f565b9250508190555080600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612edd91906144dd565b925050819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f41919061438c565b60405180910390a350505050505050505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082821015613020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130179061412c565b60405180910390fd5b82600e548361302f9190614533565b1015613070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130679061426c565b60405180910390fd5b600d546012600a61308191906145b7565b6276adf161308f91906146d5565b6130999190614533565b83826130a591906144dd565b11156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd9061422c565b60405180910390fd5b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600081156131ca57600060b49050806015546131a491906144dd565b4210156131be576131b7816103e76137be565b91506131c4565b60085491505b50613211565b821561320a576000603c9050806015546131e491906144dd565b4210156131fe576131f7816103e76137be565b9150613204565b60075491505b50613210565b60095490505b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415801561327c5750601460009054906101000a900460ff16155b80156132955750601160149054906101000a900460ff16155b156132a5576132a460006126ce565b5b60006132b48783600a54613808565b905060006132d28884600b54600c546132cd91906144dd565b613808565b9050600081836132e291906144dd565b896132ed919061472f565b905088600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461333e919061472f565b9250508190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339491906144dd565b9250508190555082600660008282546133ad919061472f565b9250508190555080600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461340391906144dd565b925050819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613467919061438c565b60405180910390a35050505050505050505050565b6134a930601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361221e565b6000600267ffffffffffffffff8111156134c6576134c561488a565b5b6040519080825280602002602001820160405280156134f45781602001602082028036833780820191505090505b509050308160008151811061350c5761350b61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135ae57600080fd5b505afa1580156135c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e691906138ed565b816001815181106135fa576135f961485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136989594939291906143a7565b600060405180830381600087803b1580156136b257600080fd5b505af19250505080156136c3575060015b6136cc576136cd565b5b5050565b6136fe30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461221e565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016137659695949392919061404e565b6060604051808303818588803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137b79190613ae1565b5050505050565b600080601554426137cf919061472f565b905083816032856137e0919061472f565b6137ea91906146d5565b6137f49190614533565b836137ff919061472f565b91505092915050565b60006103e88061381891906146d5565b82848661382591906146d5565b61382f91906146d5565b6138399190614533565b90509392505050565b60008135905061385181614cfa565b92915050565b60008151905061386681614cfa565b92915050565b60008135905061387b81614d11565b92915050565b60008151905061389081614d11565b92915050565b6000813590506138a581614d28565b92915050565b6000815190506138ba81614d28565b92915050565b6000602082840312156138d6576138d56148b9565b5b60006138e484828501613842565b91505092915050565b600060208284031215613903576139026148b9565b5b600061391184828501613857565b91505092915050565b60008060408385031215613931576139306148b9565b5b600061393f85828601613842565b925050602061395085828601613842565b9150509250929050565b600080600060608486031215613973576139726148b9565b5b600061398186828701613842565b935050602061399286828701613842565b92505060406139a386828701613896565b9150509250925092565b600080604083850312156139c4576139c36148b9565b5b60006139d285828601613842565b92505060206139e38582860161386c565b9150509250929050565b60008060408385031215613a0457613a036148b9565b5b6000613a1285828601613842565b9250506020613a2385828601613896565b9150509250929050565b600060208284031215613a4357613a426148b9565b5b6000613a518482850161386c565b91505092915050565b600060208284031215613a7057613a6f6148b9565b5b6000613a7e84828501613881565b91505092915050565b600060208284031215613a9d57613a9c6148b9565b5b6000613aab84828501613896565b91505092915050565b600060208284031215613aca57613ac96148b9565b5b6000613ad8848285016138ab565b91505092915050565b600080600060608486031215613afa57613af96148b9565b5b6000613b08868287016138ab565b9350506020613b19868287016138ab565b9250506040613b2a868287016138ab565b9150509250925092565b60008060008060008060c08789031215613b5157613b506148b9565b5b6000613b5f89828a01613896565b9650506020613b7089828a01613896565b9550506040613b8189828a01613896565b9450506060613b9289828a01613896565b9350506080613ba389828a01613896565b92505060a0613bb489828a01613896565b9150509295509295509295565b6000613bcd8383613bd9565b60208301905092915050565b613be281614763565b82525050565b613bf181614763565b82525050565b6000613c028261448d565b613c0c81856144b0565b9350613c178361447d565b8060005b83811015613c48578151613c2f8882613bc1565b9750613c3a836144a3565b925050600181019050613c1b565b5085935050505092915050565b613c5e81614775565b82525050565b613c6d816147b8565b82525050565b6000613c7e82614498565b613c8881856144cc565b9350613c988185602086016147ca565b613ca1816148be565b840191505092915050565b6000613cb96012836144cc565b9150613cc4826148dc565b602082019050919050565b6000613cdc6010836144cc565b9150613ce782614905565b602082019050919050565b6000613cff6018836144cc565b9150613d0a8261492e565b602082019050919050565b6000613d226026836144cc565b9150613d2d82614957565b604082019050919050565b6000613d456031836144cc565b9150613d50826149a6565b604082019050919050565b6000613d686011836144cc565b9150613d73826149f5565b602082019050919050565b6000613d8b6010836144cc565b9150613d9682614a1e565b602082019050919050565b6000613dae6014836144cc565b9150613db982614a47565b602082019050919050565b6000613dd16018836144cc565b9150613ddc82614a70565b602082019050919050565b6000613df46012836144cc565b9150613dff82614a99565b602082019050919050565b6000613e17602f836144cc565b9150613e2282614ac2565b604082019050919050565b6000613e3a600f836144cc565b9150613e4582614b11565b602082019050919050565b6000613e5d601f836144cc565b9150613e6882614b3a565b602082019050919050565b6000613e806020836144cc565b9150613e8b82614b63565b602082019050919050565b6000613ea36017836144cc565b9150613eae82614b8c565b602082019050919050565b6000613ec6600f836144cc565b9150613ed182614bb5565b602082019050919050565b6000613ee96000836144c1565b9150613ef482614bde565b600082019050919050565b6000613f0c602d836144cc565b9150613f1782614be1565b604082019050919050565b6000613f2f6014836144cc565b9150613f3a82614c30565b602082019050919050565b6000613f52601a836144cc565b9150613f5d82614c59565b602082019050919050565b6000613f75600c836144cc565b9150613f8082614c82565b602082019050919050565b6000613f986021836144cc565b9150613fa382614cab565b604082019050919050565b613fb7816147a1565b82525050565b613fc6816147ab565b82525050565b6000613fd782613edc565b9150819050919050565b6000602082019050613ff66000830184613be8565b92915050565b60006040820190506140116000830185613be8565b61401e6020830184613c55565b9392505050565b600060408201905061403a6000830185613be8565b6140476020830184613fae565b9392505050565b600060c0820190506140636000830189613be8565b6140706020830188613fae565b61407d6040830187613c64565b61408a6060830186613c64565b6140976080830185613be8565b6140a460a0830184613fae565b979650505050505050565b60006020820190506140c46000830184613c55565b92915050565b600060208201905081810360008301526140e48184613c73565b905092915050565b6000602082019050818103600083015261410581613cac565b9050919050565b6000602082019050818103600083015261412581613ccf565b9050919050565b6000602082019050818103600083015261414581613cf2565b9050919050565b6000602082019050818103600083015261416581613d15565b9050919050565b6000602082019050818103600083015261418581613d38565b9050919050565b600060208201905081810360008301526141a581613d5b565b9050919050565b600060208201905081810360008301526141c581613d7e565b9050919050565b600060208201905081810360008301526141e581613da1565b9050919050565b6000602082019050818103600083015261420581613dc4565b9050919050565b6000602082019050818103600083015261422581613de7565b9050919050565b6000602082019050818103600083015261424581613e0a565b9050919050565b6000602082019050818103600083015261426581613e2d565b9050919050565b6000602082019050818103600083015261428581613e50565b9050919050565b600060208201905081810360008301526142a581613e73565b9050919050565b600060208201905081810360008301526142c581613e96565b9050919050565b600060208201905081810360008301526142e581613eb9565b9050919050565b6000602082019050818103600083015261430581613eff565b9050919050565b6000602082019050818103600083015261432581613f22565b9050919050565b6000602082019050818103600083015261434581613f45565b9050919050565b6000602082019050818103600083015261436581613f68565b9050919050565b6000602082019050818103600083015261438581613f8b565b9050919050565b60006020820190506143a16000830184613fae565b92915050565b600060a0820190506143bc6000830188613fae565b6143c96020830187613c64565b81810360408301526143db8186613bf7565b90506143ea6060830185613be8565b6143f76080830184613fae565b9695505050505050565b600060c0820190506144166000830189613fae565b6144236020830188613fae565b6144306040830187613fae565b61443d6060830186613fae565b61444a6080830185613fae565b61445760a0830184613fae565b979650505050505050565b60006020820190506144776000830184613fbd565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006144e8826147a1565b91506144f3836147a1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614528576145276147fd565b5b828201905092915050565b600061453e826147a1565b9150614549836147a1565b9250826145595761455861482c565b5b828204905092915050565b6000808291508390505b60018511156145ae5780860481111561458a576145896147fd565b5b60018516156145995780820291505b80810290506145a7856148cf565b945061456e565b94509492505050565b60006145c2826147a1565b91506145cd836147ab565b92506145fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614602565b905092915050565b60008261461257600190506146ce565b8161462057600090506146ce565b816001811461463657600281146146405761466f565b60019150506146ce565b60ff841115614652576146516147fd565b5b8360020a915084821115614669576146686147fd565b5b506146ce565b5060208310610133831016604e8410600b84101617156146a45782820a90508381111561469f5761469e6147fd565b5b6146ce565b6146b18484846001614564565b925090508184048111156146c8576146c76147fd565b5b81810290505b9392505050565b60006146e0826147a1565b91506146eb836147a1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614724576147236147fd565b5b828202905092915050565b600061473a826147a1565b9150614745836147a1565b925082821015614758576147576147fd565b5b828203905092915050565b600061476e82614781565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147c3826147a1565b9050919050565b60005b838110156147e85780820151818401526020810190506147cd565b838111156147f7576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f5472616e736665722066726f6d207a65726f0000000000000000000000000000600082015250565b7f4e6f742079657420756e6c6f636b656400000000000000000000000000000000600082015250565b7f5472616e7366657220657863656564732062616c616e63650000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c6574202063616e277420626520756e646572203225206f6660008201527f2074686520746f74616c20737570706c79000000000000000000000000000000602082015250565b7f417070726f76652066726f6d207a65726f000000000000000000000000000000600082015250565b7f5472616e7366657220746f207a65726f00000000000000000000000000000000600082015250565b7f5472616e73666572203e20616c6c6f77616e6365000000000000000000000000600082015250565b7f43616c6c6572206e6f74205465616d206f72204f776e65720000000000000000600082015250565b7f5461782065786365656473206d61785461780000000000000000000000000000600082015250565b7f57616c6c657420636f6e7461696e206d6f7265207468616e206365727461696e60008201527f202520546f74616c20537570706c790000000000000000000000000000000000602082015250565b7f417070726f766520746f207a65726f0000000000000000000000000000000000600082015250565b7f5472616e73666572206578636565647320617574686f726973652073656c6c00600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74726164696e67206e6f742079657420656e61626c6564000000000000000000600082015250565b7f416c72656164794c61756e636865640000000000000000000000000000000000600082015250565b50565b7f44756d70206d6561737572652063616e277420626520756e646572203530252060008201527f6f66207468652077616c6c657400000000000000000000000000000000000000602082015250565b7f63616e2774206368616e676520756e6973776170000000000000000000000000600082015250565b7f63616e277420496e636c7564652074686520636f6e7472616374000000000000600082015250565b7f3c3020616c6c6f77616e63650000000000000000000000000000000000000000600082015250565b7f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f60008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b614d0381614763565b8114614d0e57600080fd5b50565b614d1a81614775565b8114614d2557600080fd5b50565b614d31816147a1565b8114614d3c57600080fd5b5056fea2646970667358221220d41a800fa5d6bcf856059ae4a0908c86fa4492e020bb2020121aabed7a43d7a564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80638124f7ac11610175578063be617fa0116100dc578063d8bd2dd111610095578063e0d2f9eb1161006f578063e0d2f9eb14610acf578063e52fb9ec14610af8578063f2fde38b14610b23578063f5fb756f14610b4c576102d4565b8063d8bd2dd114610a18578063dbe66ca014610a55578063dd62ed3e14610a92576102d4565b8063be617fa014610906578063c3a3c03214610931578063c3f4f54f1461095c578063cc1776d314610987578063cfd1940e146109b2578063d46b6a30146109db576102d4565b8063a457c2d71161012e578063a457c2d7146107f8578063a68bdac714610835578063a9059cbb1461084c578063ab64cfdc14610889578063b40d09e2146108b2578063bc43d849146108dd576102d4565b80638124f7ac146106fa578063817d4bff14610725578063868b01411461074e5780638da5cb5b1461077757806395d89b41146107a25780639b39b65f146107cd576102d4565b806333ae8325116102345780635149f984116101ed57806370a08231116101c757806370a0823114610664578063715018a6146106a157806375f0a874146106b85780637b9e987a146106e3576102d4565b80635149f984146105e557806351bc3c851461060e578063629ece4914610639576102d4565b806333ae8325146104e9578063395093511461051257806341aec3571461054f57806346e35f0314610566578063479881bf146105915780634f7041a5146105ba576102d4565b80631d4eaead116102865780631d4eaead146103d95780631eb25d131461040457806323b872dd1461042f5780632d48f84f1461046c578063313ce567146104955780633227925f146104c0576102d4565b80630612f39d146102d957806306fdde03146102f0578063095ea7b31461031b5780630eff4c641461035857806318160ddd146103835780631d2cb02d146103ae576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610b77565b005b3480156102fc57600080fd5b50610305610dbc565b60405161031291906140ca565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906139ed565b610df9565b60405161034f91906140af565b60405180910390f35b34801561036457600080fd5b5061036d610e10565b60405161037a919061438c565b60405180910390f35b34801561038f57600080fd5b50610398610e16565b6040516103a5919061438c565b60405180910390f35b3480156103ba57600080fd5b506103c3610e20565b6040516103d0919061438c565b60405180910390f35b3480156103e557600080fd5b506103ee610e26565b6040516103fb919061438c565b60405180910390f35b34801561041057600080fd5b50610419610e2c565b604051610426919061438c565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061395a565b610e4b565b60405161046391906140af565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613b34565b610f3e565b005b3480156104a157600080fd5b506104aa6110ce565b6040516104b79190614462565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613a87565b6110d7565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613a87565b611136565b005b34801561051e57600080fd5b50610539600480360381019061053491906139ed565b611203565b60405161054691906140af565b60405180910390f35b34801561055b57600080fd5b506105646112a1565b005b34801561057257600080fd5b5061057b6112f5565b60405161058891906140af565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190613a87565b61137c565b005b3480156105c657600080fd5b506105cf611449565b6040516105dc919061438c565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906139ad565b61144f565b005b34801561061a57600080fd5b50610623611583565b60405161063091906140af565b60405180910390f35b34801561064557600080fd5b5061064e611596565b60405161065b919061438c565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906138c0565b61159c565b604051610698919061438c565b60405180910390f35b3480156106ad57600080fd5b506106b66115e5565b005b3480156106c457600080fd5b506106cd611718565b6040516106da9190613fe1565b60405180910390f35b3480156106ef57600080fd5b506106f861173e565b005b34801561070657600080fd5b5061070f611800565b60405161071c919061438c565b60405180910390f35b34801561073157600080fd5b5061074c600480360381019061074791906138c0565b611806565b005b34801561075a57600080fd5b5061077560048036038101906107709190613a2d565b6118a4565b005b34801561078357600080fd5b5061078c611909565b6040516107999190613fe1565b60405180910390f35b3480156107ae57600080fd5b506107b7611932565b6040516107c491906140ca565b60405180910390f35b3480156107d957600080fd5b506107e261196f565b6040516107ef91906140af565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a91906139ed565b611982565b60405161082c91906140af565b60405180910390f35b34801561084157600080fd5b5061084a611a68565b005b34801561085857600080fd5b50610873600480360381019061086e91906139ed565b611acd565b60405161088091906140af565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906139ad565b611ae4565b005b3480156108be57600080fd5b506108c7611c2f565b6040516108d4919061438c565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190613a87565b611c35565b005b34801561091257600080fd5b5061091b611c96565b604051610928919061438c565b60405180910390f35b34801561093d57600080fd5b50610946611c9c565b604051610953919061438c565b60405180910390f35b34801561096857600080fd5b50610971611cc5565b60405161097e919061438c565b60405180910390f35b34801561099357600080fd5b5061099c611d41565b6040516109a9919061438c565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190613a87565b611d47565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906138c0565b611da7565b604051610a0f91906140af565b60405180910390f35b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906138c0565b611dc7565b604051610a4c91906140af565b60405180910390f35b348015610a6157600080fd5b50610a7c6004803603810190610a7791906138c0565b611de7565b604051610a8991906140af565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab4919061391a565b611e07565b604051610ac6919061438c565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af191906139ad565b611e8e565b005b348015610b0457600080fd5b50610b0d611fd9565b604051610b1a919061438c565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906138c0565b611fdf565b005b348015610b5857600080fd5b50610b61612181565b604051610b6e919061438c565b60405180910390f35b610b8033612187565b610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb6906141ec565b60405180910390fd5b601654421015610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb9061410c565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c669190613fe1565b60206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb69190613ab4565b9050601760009054906101000a900460ff1615610cfe5762093a8042610cdc91906144dd565b601681905550600a600282610cf191906146d5565b610cfb9190614533565b90505b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610d39929190614025565b602060405180830381600087803b158015610d5357600080fd5b505af1158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190613a5a565b507f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67560405160405180910390a15050565b60606040518060400160405280600881526020017f4d62617050657065000000000000000000000000000000000000000000000000815250905090565b6000610e0633848461221e565b6001905092915050565b60135481565b6000600654905090565b600c5481565b600a5481565b6012600a610e3a91906145b7565b6276adf1610e4891906146d5565b81565b6000610e588484846123e9565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f13906141cc565b60405180910390fd5b610f3285338584610f2d919061472f565b61221e565b60019150509392505050565b610f4733612187565b610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d906141ec565b60405180910390fd5b60006002600a6103e8610f999190614533565b610fa39190614533565b9050808711158015610fb55750808611155b8015610fc15750808511155b611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061420c565b60405180910390fd5b6103e882848661101091906144dd565b61101a91906144dd565b1461105a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110519061436c565b60405180910390fd5b86600781905550856008819055508460098190555082600c8190555081600b8190555083600a819055507f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c98787878787876040516110bd96959493929190614401565b60405180910390a150505050505050565b60006012905090565b6110e033612187565b61111f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611116906141ec565b60405180910390fd5b611133428261112e91906144dd565b61267d565b50565b61113f33612187565b61117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906141ec565b60405180910390fd5b60028111156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906142ec565b60405180910390fd5b80600e819055507fdfcf82c64ef2a938975f4ad1599e559af165a244802754595fcbffcf5ffdd0d9816040516111f8919061438c565b60405180910390a150565b6000611297338484600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129291906144dd565b61221e565b6001905092915050565b6112aa33612187565b6112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e0906141ec565b60405180910390fd5b6112f360016126ce565b565b60006103e860135460065461130a91906146d5565b6113149190614533565b60016000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411905090565b61138533612187565b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906141ec565b60405180910390fd5b6032811115611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff9061416c565b60405180910390fd5b80600d819055507fd1db3c8f76ced548252ac593ebef6129c122ab13cce5b9367eb4421cebe388558160405161143e919061438c565b60405180910390a150565b60075481565b61145833612187565b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e906141ec565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061430c565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601460009054906101000a900460ff1681565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16611604611909565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116519061428c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61174733612187565b611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906141ec565b60405180910390fd5b6000601554146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906142cc565b60405180910390fd5b426015819055507f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc160405160405180910390a1565b60095481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186057600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118ad33612187565b6118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906141ec565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f5065506537000000000000000000000000000000000000000000000000000000815250905090565b601760009054906101000a900460ff1681565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e9061434c565b60405180910390fd5b611a5d33858584611a58919061472f565b61221e565b600191505092915050565b611a7133612187565b611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa7906141ec565b60405180910390fd5b6001601760006101000a81548160ff021916908315150217905550565b6000611ada3384846123e9565b6001905092915050565b611aed33612187565b611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b23906141ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b929061432c565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9a547f2adf55e10d7297ec9f54496d4044ad440b7cd8f5b5d5700778377d71d38282604051611c23929190613ffc565b60405180910390a15050565b60155481565b611c3e33612187565b611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c74906141ec565b60405180910390fd5b6103e8811115611c8c57600080fd5b8060138190555050565b600b5481565b6000601654421015611cbd5742601654611cb6919061472f565b9050611cc2565b600090505b90565b60006001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546006546012600a611d1a91906145b7565b6276adf1611d2891906146d5565b611d32919061472f565b611d3c91906144dd565b905090565b60085481565b611d5033612187565b611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d86906141ec565b60405180910390fd5b600f811115611d9d57600080fd5b8060128190555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e9733612187565b611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd906141ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c9061432c565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed48282604051611fcd929190613ffc565b60405180910390a15050565b60125481565b3373ffffffffffffffffffffffffffffffffffffffff16611ffe611909565b73ffffffffffffffffffffffffffffffffffffffff1614612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b9061428c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb9061414c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b6000612191611909565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806122175750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561228e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122859061418c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f59061424c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123dc919061438c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612450906140ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c0906141ac565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061256a5750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561257f5761257a83838361299b565b612678565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561262657600060155411612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906142ac565b60405180910390fd5b612621838383612b39565b612677565b60006015541161266b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612662906142ac565b60405180910390fd5b612676838383612f55565b5b5b505050565b601654811161268b57600080fd5b806016819055507f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e6016546040516126c3919061438c565b60405180910390a150565b6001601160146101000a81548160ff0219169083151502179055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600c54600b5461273f91906144dd565b905060006103e860125460016000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b591906146d5565b6127bf9190614533565b905060008214156127d25750505061297d565b831561281f57600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612830565b8083101561282f5750505061297d565b5b600061283a6112f5565b61285c5782600b548361284d91906146d5565b6128579190614533565b61285f565b60005b90506000818361286f919061472f565b905060006002836128809190614533565b90506000828261289091906144dd565b905060004790506128a08261347c565b600081476128ae919061472f565b905060008611156128e05760008385836128c891906146d5565b6128d29190614533565b90506128de85826136d1565b505b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161292890613fcc565b60006040518083038185875af1925050503d8060008114612965576040519150601f19603f3d011682016040523d82523d6000602084013e61296a565b606091505b5050905060019050505050505050505050505b6000601160146101000a81548160ff02191690831515021790555050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a199061412c565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a71919061472f565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac791906144dd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b2b919061438c565b60405180910390a350505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb79061412c565b60405180910390fd5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008115612ca457600060b4905080601554612c7e91906144dd565b421015612c9857612c91816103e76137be565b9150612c9e565b60085491505b50612ceb565b8215612ce4576000603c905080601554612cbe91906144dd565b421015612cd857612cd1816103e76137be565b9150612cde565b60075491505b50612cea565b60095490505b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015612d565750601460009054906101000a900460ff16155b8015612d6f5750601160149054906101000a900460ff16155b15612d7f57612d7e60006126ce565b5b6000612d8e8683600a54613808565b90506000612dac8784600b54600c54612da791906144dd565b613808565b905060008183612dbc91906144dd565b88612dc7919061472f565b905087600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e18919061472f565b9250508190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6e91906144dd565b925050819055508260066000828254612e87919061472f565b9250508190555080600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612edd91906144dd565b925050819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f41919061438c565b60405180910390a350505050505050505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082821015613020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130179061412c565b60405180910390fd5b82600e548361302f9190614533565b1015613070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130679061426c565b60405180910390fd5b600d546012600a61308191906145b7565b6276adf161308f91906146d5565b6130999190614533565b83826130a591906144dd565b11156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd9061422c565b60405180910390fd5b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600081156131ca57600060b49050806015546131a491906144dd565b4210156131be576131b7816103e76137be565b91506131c4565b60085491505b50613211565b821561320a576000603c9050806015546131e491906144dd565b4210156131fe576131f7816103e76137be565b9150613204565b60075491505b50613210565b60095490505b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415801561327c5750601460009054906101000a900460ff16155b80156132955750601160149054906101000a900460ff16155b156132a5576132a460006126ce565b5b60006132b48783600a54613808565b905060006132d28884600b54600c546132cd91906144dd565b613808565b9050600081836132e291906144dd565b896132ed919061472f565b905088600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461333e919061472f565b9250508190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339491906144dd565b9250508190555082600660008282546133ad919061472f565b9250508190555080600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461340391906144dd565b925050819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613467919061438c565b60405180910390a35050505050505050505050565b6134a930601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361221e565b6000600267ffffffffffffffff8111156134c6576134c561488a565b5b6040519080825280602002602001820160405280156134f45781602001602082028036833780820191505090505b509050308160008151811061350c5761350b61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135ae57600080fd5b505afa1580156135c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e691906138ed565b816001815181106135fa576135f961485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136989594939291906143a7565b600060405180830381600087803b1580156136b257600080fd5b505af19250505080156136c3575060015b6136cc576136cd565b5b5050565b6136fe30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461221e565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016137659695949392919061404e565b6060604051808303818588803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137b79190613ae1565b5050505050565b600080601554426137cf919061472f565b905083816032856137e0919061472f565b6137ea91906146d5565b6137f49190614533565b836137ff919061472f565b91505092915050565b60006103e88061381891906146d5565b82848661382591906146d5565b61382f91906146d5565b6138399190614533565b90509392505050565b60008135905061385181614cfa565b92915050565b60008151905061386681614cfa565b92915050565b60008135905061387b81614d11565b92915050565b60008151905061389081614d11565b92915050565b6000813590506138a581614d28565b92915050565b6000815190506138ba81614d28565b92915050565b6000602082840312156138d6576138d56148b9565b5b60006138e484828501613842565b91505092915050565b600060208284031215613903576139026148b9565b5b600061391184828501613857565b91505092915050565b60008060408385031215613931576139306148b9565b5b600061393f85828601613842565b925050602061395085828601613842565b9150509250929050565b600080600060608486031215613973576139726148b9565b5b600061398186828701613842565b935050602061399286828701613842565b92505060406139a386828701613896565b9150509250925092565b600080604083850312156139c4576139c36148b9565b5b60006139d285828601613842565b92505060206139e38582860161386c565b9150509250929050565b60008060408385031215613a0457613a036148b9565b5b6000613a1285828601613842565b9250506020613a2385828601613896565b9150509250929050565b600060208284031215613a4357613a426148b9565b5b6000613a518482850161386c565b91505092915050565b600060208284031215613a7057613a6f6148b9565b5b6000613a7e84828501613881565b91505092915050565b600060208284031215613a9d57613a9c6148b9565b5b6000613aab84828501613896565b91505092915050565b600060208284031215613aca57613ac96148b9565b5b6000613ad8848285016138ab565b91505092915050565b600080600060608486031215613afa57613af96148b9565b5b6000613b08868287016138ab565b9350506020613b19868287016138ab565b9250506040613b2a868287016138ab565b9150509250925092565b60008060008060008060c08789031215613b5157613b506148b9565b5b6000613b5f89828a01613896565b9650506020613b7089828a01613896565b9550506040613b8189828a01613896565b9450506060613b9289828a01613896565b9350506080613ba389828a01613896565b92505060a0613bb489828a01613896565b9150509295509295509295565b6000613bcd8383613bd9565b60208301905092915050565b613be281614763565b82525050565b613bf181614763565b82525050565b6000613c028261448d565b613c0c81856144b0565b9350613c178361447d565b8060005b83811015613c48578151613c2f8882613bc1565b9750613c3a836144a3565b925050600181019050613c1b565b5085935050505092915050565b613c5e81614775565b82525050565b613c6d816147b8565b82525050565b6000613c7e82614498565b613c8881856144cc565b9350613c988185602086016147ca565b613ca1816148be565b840191505092915050565b6000613cb96012836144cc565b9150613cc4826148dc565b602082019050919050565b6000613cdc6010836144cc565b9150613ce782614905565b602082019050919050565b6000613cff6018836144cc565b9150613d0a8261492e565b602082019050919050565b6000613d226026836144cc565b9150613d2d82614957565b604082019050919050565b6000613d456031836144cc565b9150613d50826149a6565b604082019050919050565b6000613d686011836144cc565b9150613d73826149f5565b602082019050919050565b6000613d8b6010836144cc565b9150613d9682614a1e565b602082019050919050565b6000613dae6014836144cc565b9150613db982614a47565b602082019050919050565b6000613dd16018836144cc565b9150613ddc82614a70565b602082019050919050565b6000613df46012836144cc565b9150613dff82614a99565b602082019050919050565b6000613e17602f836144cc565b9150613e2282614ac2565b604082019050919050565b6000613e3a600f836144cc565b9150613e4582614b11565b602082019050919050565b6000613e5d601f836144cc565b9150613e6882614b3a565b602082019050919050565b6000613e806020836144cc565b9150613e8b82614b63565b602082019050919050565b6000613ea36017836144cc565b9150613eae82614b8c565b602082019050919050565b6000613ec6600f836144cc565b9150613ed182614bb5565b602082019050919050565b6000613ee96000836144c1565b9150613ef482614bde565b600082019050919050565b6000613f0c602d836144cc565b9150613f1782614be1565b604082019050919050565b6000613f2f6014836144cc565b9150613f3a82614c30565b602082019050919050565b6000613f52601a836144cc565b9150613f5d82614c59565b602082019050919050565b6000613f75600c836144cc565b9150613f8082614c82565b602082019050919050565b6000613f986021836144cc565b9150613fa382614cab565b604082019050919050565b613fb7816147a1565b82525050565b613fc6816147ab565b82525050565b6000613fd782613edc565b9150819050919050565b6000602082019050613ff66000830184613be8565b92915050565b60006040820190506140116000830185613be8565b61401e6020830184613c55565b9392505050565b600060408201905061403a6000830185613be8565b6140476020830184613fae565b9392505050565b600060c0820190506140636000830189613be8565b6140706020830188613fae565b61407d6040830187613c64565b61408a6060830186613c64565b6140976080830185613be8565b6140a460a0830184613fae565b979650505050505050565b60006020820190506140c46000830184613c55565b92915050565b600060208201905081810360008301526140e48184613c73565b905092915050565b6000602082019050818103600083015261410581613cac565b9050919050565b6000602082019050818103600083015261412581613ccf565b9050919050565b6000602082019050818103600083015261414581613cf2565b9050919050565b6000602082019050818103600083015261416581613d15565b9050919050565b6000602082019050818103600083015261418581613d38565b9050919050565b600060208201905081810360008301526141a581613d5b565b9050919050565b600060208201905081810360008301526141c581613d7e565b9050919050565b600060208201905081810360008301526141e581613da1565b9050919050565b6000602082019050818103600083015261420581613dc4565b9050919050565b6000602082019050818103600083015261422581613de7565b9050919050565b6000602082019050818103600083015261424581613e0a565b9050919050565b6000602082019050818103600083015261426581613e2d565b9050919050565b6000602082019050818103600083015261428581613e50565b9050919050565b600060208201905081810360008301526142a581613e73565b9050919050565b600060208201905081810360008301526142c581613e96565b9050919050565b600060208201905081810360008301526142e581613eb9565b9050919050565b6000602082019050818103600083015261430581613eff565b9050919050565b6000602082019050818103600083015261432581613f22565b9050919050565b6000602082019050818103600083015261434581613f45565b9050919050565b6000602082019050818103600083015261436581613f68565b9050919050565b6000602082019050818103600083015261438581613f8b565b9050919050565b60006020820190506143a16000830184613fae565b92915050565b600060a0820190506143bc6000830188613fae565b6143c96020830187613c64565b81810360408301526143db8186613bf7565b90506143ea6060830185613be8565b6143f76080830184613fae565b9695505050505050565b600060c0820190506144166000830189613fae565b6144236020830188613fae565b6144306040830187613fae565b61443d6060830186613fae565b61444a6080830185613fae565b61445760a0830184613fae565b979650505050505050565b60006020820190506144776000830184613fbd565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006144e8826147a1565b91506144f3836147a1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614528576145276147fd565b5b828201905092915050565b600061453e826147a1565b9150614549836147a1565b9250826145595761455861482c565b5b828204905092915050565b6000808291508390505b60018511156145ae5780860481111561458a576145896147fd565b5b60018516156145995780820291505b80810290506145a7856148cf565b945061456e565b94509492505050565b60006145c2826147a1565b91506145cd836147ab565b92506145fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614602565b905092915050565b60008261461257600190506146ce565b8161462057600090506146ce565b816001811461463657600281146146405761466f565b60019150506146ce565b60ff841115614652576146516147fd565b5b8360020a915084821115614669576146686147fd565b5b506146ce565b5060208310610133831016604e8410600b84101617156146a45782820a90508381111561469f5761469e6147fd565b5b6146ce565b6146b18484846001614564565b925090508184048111156146c8576146c76147fd565b5b81810290505b9392505050565b60006146e0826147a1565b91506146eb836147a1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614724576147236147fd565b5b828202905092915050565b600061473a826147a1565b9150614745836147a1565b925082821015614758576147576147fd565b5b828203905092915050565b600061476e82614781565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147c3826147a1565b9050919050565b60005b838110156147e85780820151818401526020810190506147cd565b838111156147f7576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f5472616e736665722066726f6d207a65726f0000000000000000000000000000600082015250565b7f4e6f742079657420756e6c6f636b656400000000000000000000000000000000600082015250565b7f5472616e7366657220657863656564732062616c616e63650000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c6574202063616e277420626520756e646572203225206f6660008201527f2074686520746f74616c20737570706c79000000000000000000000000000000602082015250565b7f417070726f76652066726f6d207a65726f000000000000000000000000000000600082015250565b7f5472616e7366657220746f207a65726f00000000000000000000000000000000600082015250565b7f5472616e73666572203e20616c6c6f77616e6365000000000000000000000000600082015250565b7f43616c6c6572206e6f74205465616d206f72204f776e65720000000000000000600082015250565b7f5461782065786365656473206d61785461780000000000000000000000000000600082015250565b7f57616c6c657420636f6e7461696e206d6f7265207468616e206365727461696e60008201527f202520546f74616c20537570706c790000000000000000000000000000000000602082015250565b7f417070726f766520746f207a65726f0000000000000000000000000000000000600082015250565b7f5472616e73666572206578636565647320617574686f726973652073656c6c00600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74726164696e67206e6f742079657420656e61626c6564000000000000000000600082015250565b7f416c72656164794c61756e636865640000000000000000000000000000000000600082015250565b50565b7f44756d70206d6561737572652063616e277420626520756e646572203530252060008201527f6f66207468652077616c6c657400000000000000000000000000000000000000602082015250565b7f63616e2774206368616e676520756e6973776170000000000000000000000000600082015250565b7f63616e277420496e636c7564652074686520636f6e7472616374000000000000600082015250565b7f3c3020616c6c6f77616e63650000000000000000000000000000000000000000600082015250565b7f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f60008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b614d0381614763565b8114614d0e57600080fd5b50565b614d1a81614775565b8114614d2557600080fd5b50565b614d31816147a1565b8114614d3c57600080fd5b5056fea2646970667358221220d41a800fa5d6bcf856059ae4a0908c86fa4492e020bb2020121aabed7a43d7a564736f6c63430008070033

Deployed Bytecode Sourcemap

9092:22804:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28527:679;;;;;;;;;;;;;:::i;:::-;;29583:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30456:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19618:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29893:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10374:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10313:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9584:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30924:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20143:612;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29791:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27953:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21058:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31345:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25981:83;;;;;;;;;;;;;:::i;:::-;;21390:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20804:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10218:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25552:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25718:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10521:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30006:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5703:140;;;;;;;;;;;;;:::i;:::-;;10690:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26981:184;;;;;;;;;;;;;:::i;:::-;;10279:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10782:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25823:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5062:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29685:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27577:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31555:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27779:110;;;;;;;;;;;;;:::i;:::-;;30132:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26587:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26947:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19660:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10341:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24816:205;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25027:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10248:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19352:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9383:35;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9327:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9272:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30304:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26179:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19319:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5998:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10492:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28527:679;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28667:20:::1;;28648:15;:39;;28640:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28721:21;28752:19;;;;;;;;;;;28721:51;;28783:11;28797:14;:24;;;28830:4;28797:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28783:53;;28850:27;;;;;;;;;;;28847:269;;;9697:6;28924:15;:40;;;;:::i;:::-;28903:20;:61;;;;29102:2;29100:1;29093:6;:8;;;;:::i;:::-;:11;;;;:::i;:::-;29086:18;;28847:269;29126:14;:23;;;29150:10;29162:6;29126:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29185:13;;;;;;;;;;28571:635;;28527:679::o:0;29583:94::-;29631:13;29664:5;;;;;;;;;;;;;;;;;29657:12;;29583:94;:::o;30456:158::-;30530:4;30547:37;30556:10;30568:7;30577:6;30547:8;:37::i;:::-;30602:4;30595:11;;30456:158;;;;:::o;19618:35::-;;;;:::o;29893:105::-;29948:4;29972:18;;29965:25;;29893:105;:::o;10374:29::-;;;;:::o;10313:21::-;;;;:::o;9584:57::-;9575:2;9628;:13;;;;:::i;:::-;9620:7;:21;;;;:::i;:::-;9584:57;:::o;30924:386::-;31021:4;31038:36;31048:6;31056:9;31067:6;31038:9;:36::i;:::-;31087:21;31111:11;:19;31123:6;31111:19;;;;;;;;;;;;;;;:31;31131:10;31111:31;;;;;;;;;;;;;;;;31087:55;;31181:6;31161:16;:26;;31153:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;31225:55;31234:6;31242:10;31273:6;31254:16;:25;;;;:::i;:::-;31225:8;:55::i;:::-;31298:4;31291:11;;;30924:386;;;;;:::o;20143:612::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20266:11:::1;20314:1;10483:2;10440:4;20279:33;;;;:::i;:::-;20278:37;;;;:::i;:::-;20266:49;;20339:6;20334:3;:11;;:25;;;;;20353:6;20347:4;:12;;20334:25;:44;;;;;20372:6;20361:9;:17;;20334:44;20326:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10440:4;20434:9;20424;20419:4;:14;;;;:::i;:::-;:24;;;;:::i;:::-;:41;20411:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;20525:3;20518:6;:10;;;;20547:4;20539:7;:12;;;;20574:9;20562:11;:21;;;;20607:9;20594:12;:22;;;;20640:9;20627:12;:22;;;;20668:4;20660:7;:12;;;;20688:59;20699:3;20704:4;20710:9;20721:4;20727:9;20737;20688:59;;;;;;;;;;;:::i;:::-;;;;;;;;20255:500;20143:612:::0;;;;;;:::o;29791:94::-;29843:5;9575:2;29861:16;;29791:94;:::o;27953:149::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28037:57:::1;28078:15;28059:18;:34;;;;:::i;:::-;28037:21;:57::i;:::-;27953:149:::0;:::o;21058:215::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;21138:1:::1;21126:10;:13;;21118:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;21209:10;21199:9;:20;;;;21244:21;21254:10;21244:21;;;;;;:::i;:::-;;;;;;;;21058:215:::0;:::o;31345:202::-;31424:4;31441:76;31450:10;31462:7;31506:10;31471:11;:23;31483:10;31471:23;;;;;;;;;;;;;;;:32;31495:7;31471:32;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;31441:8;:76::i;:::-;31535:4;31528:11;;31345:202;;;;:::o;25981:83::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26032:24:::1;26051:4;26032:18;:24::i;:::-;25981:83::o:0;21390:152::-;21437:4;21530;21510:19;;21491:18;;:38;;;;:::i;:::-;:43;;;;:::i;:::-;21460:9;:30;21470:19;;;;;;;;;;;21460:30;;;;;;;;;;;;;;;;:74;21453:81;;21390:152;:::o;20804:207::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20879:2:::1;20870:7;:11;;20862:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;20952:7;20945:6;:14;;;;20984:19;20995:7;20984:19;;;;;;:::i;:::-;;;;;;;;20804:207:::0;:::o;10218:23::-;;;;:::o;25552:154::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25630:19:::1;;;;;;;;;;;25625:24;;:3;:24;;;;25617:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25695:3;25684:5;:10;25690:3;25684:10;;;;;;;;;;;;;;;;:14;;;;;;;;;;;;;;;;;;25552:154:::0;;:::o;25718:22::-;;;;;;;;;;;;;:::o;10521:25::-;;;;:::o;30006:118::-;30074:4;30098:9;:18;30108:7;30098:18;;;;;;;;;;;;;;;;30091:25;;30006:118;;;:::o;5703:140::-;5285:10;5274:21;;:7;:5;:7::i;:::-;:21;;;5266:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5802:1:::1;5765:40;;5786:6;::::0;::::1;;;;;;;;5765:40;;;;;;;;;;;;5833:1;5816:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5703:140::o:0;10690:30::-;;;;;;;;;;;;;:::o;26981:184::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27062:1:::1;27045:15;;:18;27037:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;27109:15;27093;:31;;;;27140:17;;;;;;;;;;26981:184::o:0;10279:27::-;;;;:::o;10782:147::-;10869:15;;;;;;;;;;;10857:27;;:10;:27;;;10849:36;;;;;;10912:9;10896:15;;:25;;;;;;;;;;;;;;;;;;10782:147;:::o;25823:90::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25899:6:::1;25888:10;;:17;;;;;;;;;;;;;;;;;;25823:90:::0;:::o;5062:79::-;5100:7;5127:6;;;;;;;;;;;5120:13;;5062:79;:::o;29685:98::-;29735:13;29768:7;;;;;;;;;;;;;;;;;29761:14;;29685:98;:::o;27577:39::-;;;;;;;;;;;;;:::o;31555:336::-;31639:4;31656:21;31680:11;:23;31692:10;31680:23;;;;;;;;;;;;;;;:32;31704:7;31680:32;;;;;;;;;;;;;;;;31656:56;;31751:15;31731:16;:35;;31723:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31796:65;31805:10;31817:7;31845:15;31826:16;:34;;;;:::i;:::-;31796:8;:65::i;:::-;31879:4;31872:11;;;31555:336;;;;:::o;27779:110::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27877:4:::1;27849:27;;:32;;;;;;;;;;;;;;;;;;27779:110::o:0;30132:164::-;30209:4;30226:40;30236:10;30248:9;30259:6;30226:9;:40::i;:::-;30284:4;30277:11;;30132:164;;;;:::o;26587:249::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26696:4:::1;26679:22;;:7;:22;;;;26671:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26769:7;26742:17;:26;26760:7;26742:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;26792:36;26812:7;26820;26792:36;;;;;;;:::i;:::-;;;;;;;;26587:249:::0;;:::o;26947:27::-;;;;:::o;19660:211::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19797:4:::1;19765:30;:36;;19757:45;;;::::0;::::1;;19833:30;19813:19;:50;;;;19660:211:::0;:::o;10341:26::-;;;;:::o;24816:205::-;24881:4;24916:20;;24900:15;:36;24897:97;;;24979:15;24958:20;;:36;;;;:::i;:::-;24951:43;;;;24897:97;25012:1;25005:8;;24816:205;;:::o;25027:139::-;25074:4;25132:9;:26;25150:6;25132:26;;;;;;;;;;;;;;;;25112:18;;9575:2;9628;:13;;;;:::i;:::-;9620:7;:21;;;;:::i;:::-;25098:32;;;;:::i;:::-;25097:61;;;;:::i;:::-;25090:68;;25027:139;:::o;10248:24::-;;;;:::o;19352:191::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19466:2:::1;19441:23;:27;;19433:36;;;::::0;::::1;;19512:23;19499:12;:36;;;;19352:191:::0;:::o;9383:35::-;;;;;;;;;;;;;;;;;;;;;;:::o;9327:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;9272:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;30304:144::-;30388:4;30412:11;:19;30424:6;30412:19;;;;;;;;;;;;;;;:28;30432:7;30412:28;;;;;;;;;;;;;;;;30405:35;;30304:144;;;;:::o;26179:248::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26293:4:::1;26276:22;;:7;:22;;;;26268:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26365:7;26339:16;:25;26356:7;26339:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;26388:31;26403:7;26411;26388:31;;;;;;;:::i;:::-;;;;;;;;26179:248:::0;;:::o;19319:26::-;;;;:::o;5998:236::-;5285:10;5274:21;;:7;:5;:7::i;:::-;:21;;;5266:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6099:1:::1;6079:22;;:8;:22;;;;6071:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6189:8;6160:38;;6181:6;::::0;::::1;;;;;;;;6160:38;;;;;;;;;;;;6218:8;6209:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5998:236:::0;:::o;10492:22::-;;;;:::o;11313:120::-;11366:4;11395:7;:5;:7::i;:::-;11389:13;;:4;:13;;;:36;;;;11410:15;;;;;;;;;;;11404:21;;:4;:21;;;11389:36;11382:43;;11313:120;;;:::o;30620:296::-;30727:1;30710:19;;:5;:19;;;;30702:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30789:1;30770:21;;:7;:21;;;;30762:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30854:6;30824:11;:18;30836:5;30824:18;;;;;;;;;;;;;;;:27;30843:7;30824:27;;;;;;;;;;;;;;;:36;;;;30892:7;30876:32;;30885:5;30876:32;;;30901:6;30876:32;;;;;;:::i;:::-;;;;;;;;30620:296;;;:::o;12974:879::-;13085:1;13067:20;;:6;:20;;;;13059:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;13150:1;13129:23;;:9;:23;;;;13121:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;13216:16;:24;13233:6;13216:24;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;13244:16;:27;13261:9;13244:27;;;;;;;;;;;;;;;;;;;;;;;;;13216:55;13213:633;;;13286:43;13303:6;13311:9;13322:6;13286:16;:43::i;:::-;13213:633;;;13348:17;:28;13366:9;13348:28;;;;;;;;;;;;;;;;;;;;;;;;;13345:501;;;13486:1;13470:15;;:17;13462:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;13529:51;13556:6;13563:9;13573:6;13529:26;:51::i;:::-;13345:501;;;13734:1;13718:15;;:17;13710:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;13777:39;13792:6;13799:9;13809:6;13777:14;:39::i;:::-;13345:501;13213:633;12974:879;;;:::o;28158:280::-;28311:20;;28297:13;:34;28289:43;;;;;;28364:13;28343:20;:34;;;;28393:37;28409:20;;28393:37;;;;;;:::i;:::-;;;;;;;;28158:280;:::o;21701:1820::-;19166:4;19136:27;;:34;;;;;;;;;;;;;;;;;;21778:20:::1;21799:9;:24;21817:4;21799:24;;;;;;;;;;;;;;;;21778:45;;21834:13;21861:12;;21848;;:25;;;;:::i;:::-;21834:39;;21979:16;22040:4;22027:12;;21996:9;:30;22006:19;;;;;;;;;;;21996:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:48;;;;:::i;:::-;21979:65;;22107:1;22097:8;:11;22094:22;;;22109:7;;;;;22094:22;22285:12;22282:134;;;22324:9;:24;22342:4;22324:24;;;;;;;;;;;;;;;;22312:36;;22282:134;;;22383:11;22367:15;:27;22364:52;;;22409:7;;;;;22364:52;22282:134;22549:22;22582:17;:15;:17::i;:::-;:65;;22639:8;22625:12;;22613:11;:24;;;;:::i;:::-;22612:35;;;;:::i;:::-;22582:65;;;22600:1;22582:65;22549:98;;22660:22;22696:17;22684:11;:29;;;;:::i;:::-;22660:53;;22726:12;22757:1;22739:17;:19;;;;:::i;:::-;22726:32;;22839:14;22862:17;22854:7;:25;;;;:::i;:::-;22839:40;;22968:22;22993:21;22968:46;;23025:27;23042:9;23025:16;:27::i;:::-;23063:11;23100:17;23076:21;:41;;;;:::i;:::-;23063:55;;23241:1;23223:17;:19;23220:135;;;23258:11;23289:9;23280:7;23273:6;:14;;;;:::i;:::-;23272:26;;;;:::i;:::-;23258:40;;23313:30;23327:7;23336:6;23313:13;:30::i;:::-;23243:112;23220:135;23428:9;23440:15;;;;;;;;;;;:20;;23467:21;23440:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23427:66;;;23509:4;23504:9;;21767:1754;;;;;;;;;;19181:1;19223:5:::0;19193:27;;:35;;;;;;;;;;;;;;;;;;21701:1820;:::o;16535:339::-;16627:18;16648:9;:17;16658:6;16648:17;;;;;;;;;;;;;;;;16627:38;;16701:6;16684:13;:23;;16676:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;16766:6;16747:9;:17;16757:6;16747:17;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;16805:6;16783:9;:20;16793:9;16783:20;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;16849:9;16833:33;;16842:6;16833:33;;;16859:6;16833:33;;;;;;:::i;:::-;;;;;;;;16616:258;16535:339;;;:::o;16943:1708::-;17046:18;17067:9;:17;17077:6;17067:17;;;;;;;;;;;;;;;;17046:38;;17120:6;17103:13;:23;;17095:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17168:10;17179:5;:13;17185:6;17179:13;;;;;;;;;;;;;;;;;;;;;;;;;17168:24;;17203:11;17215:5;:16;17221:9;17215:16;;;;;;;;;;;;;;;;;;;;;;;;;17203:28;;17244:8;17266:6;17263:496;;;17290:20;17311:11;17290:32;;17382:15;17366;;:31;;;;:::i;:::-;17350:15;:47;17347:143;;;17421:33;17434:15;17450:3;17421:12;:33::i;:::-;17417:37;;17347:143;;;17483:7;;17479:11;;17347:143;17273:233;17263:496;;;17524:5;17521:238;;;17545:19;17565:10;17545:30;;17625:14;17609:15;;:30;;;;:::i;:::-;17593:15;:46;17590:136;;;17663:32;17676:14;17691:3;17663:12;:32::i;:::-;17659:36;;17590:136;;;17720:6;;17716:10;;17590:136;17530:208;17521:238;;;17748:11;;17744:15;;17521:238;17263:496;17784:19;;;;;;;;;;;17776:27;;:6;:27;;;;17775:44;;;;;17808:10;;;;;;;;;;;17807:11;17775:44;:76;;;;;17823:27;;;;;;;;;;;17822:28;17775:76;17772:119;;;17866:25;17885:5;17866:18;:25::i;:::-;17772:119;17962:20;17983:35;17997:6;18005:3;18010:7;;17983:13;:35::i;:::-;17962:56;;18126:18;18145:53;18159:6;18167:3;18185:12;;18172;;:25;;;;:::i;:::-;18145:13;:53::i;:::-;18126:72;;18262:16;18305:13;18287:15;:31;;;;:::i;:::-;18279:6;:40;;;;:::i;:::-;18262:57;;18351:6;18332:9;:17;18342:6;18332:17;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;18452:13;18424:9;:24;18442:4;18424:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;18520:15;18500:18;;:35;;;;;;;:::i;:::-;;;;;;;;18568:11;18546:9;:20;18556:9;18546:20;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;18621:9;18605:38;;18614:6;18605:38;;;18631:11;18605:38;;;;;;:::i;:::-;;;;;;;;17035:1616;;;;;;;16943:1708;;;:::o;13960:1961::-;14050:18;14071:9;:17;14081:6;14071:17;;;;;;;;;;;;;;;;14050:38;;14099:21;14123:9;:20;14133:9;14123:20;;;;;;;;;;;;;;;;14099:44;;14179:6;14162:13;:23;;14154:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;14260:6;14247:9;;14233:13;:23;;;;:::i;:::-;:33;;14225:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;14367:6;;9575:2;9628;:13;;;;:::i;:::-;9620:7;:21;;;;:::i;:::-;14353:20;;;;:::i;:::-;14341:6;14322:16;:25;;;;:::i;:::-;14321:52;;14313:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;14438:10;14449:5;:13;14455:6;14449:13;;;;;;;;;;;;;;;;;;;;;;;;;14438:24;;14473:11;14485:5;:16;14491:9;14485:16;;;;;;;;;;;;;;;;;;;;;;;;;14473:28;;14514:8;14536:6;14533:496;;;14560:20;14581:11;14560:32;;14652:15;14636;;:31;;;;:::i;:::-;14620:15;:47;14617:143;;;14691:33;14704:15;14720:3;14691:12;:33::i;:::-;14687:37;;14617:143;;;14753:7;;14749:11;;14617:143;14543:233;14533:496;;;14794:5;14791:238;;;14815:19;14835:10;14815:30;;14895:14;14879:15;;:30;;;;:::i;:::-;14863:15;:46;14860:136;;;14933:32;14946:14;14961:3;14933:12;:32::i;:::-;14929:36;;14860:136;;;14990:6;;14986:10;;14860:136;14800:208;14791:238;;;15018:11;;15014:15;;14791:238;14533:496;15054:19;;;;;;;;;;;15046:27;;:6;:27;;;;15045:44;;;;;15078:10;;;;;;;;;;;15077:11;15045:44;:76;;;;;15093:27;;;;;;;;;;;15092:28;15045:76;15042:119;;;15136:25;15155:5;15136:18;:25::i;:::-;15042:119;15232:20;15253:35;15267:6;15275:3;15280:7;;15253:13;:35::i;:::-;15232:56;;15396:18;15415:53;15429:6;15437:3;15455:12;;15442;;:25;;;;:::i;:::-;15415:13;:53::i;:::-;15396:72;;15532:16;15575:13;15557:15;:31;;;;:::i;:::-;15549:6;:40;;;;:::i;:::-;15532:57;;15621:6;15602:9;:17;15612:6;15602:17;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;15722:13;15694:9;:24;15712:4;15694:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;15790:15;15770:18;;:35;;;;;;;:::i;:::-;;;;;;;;15838:11;15816:9;:20;15826:9;15816:20;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;15891:9;15875:38;;15884:6;15875:38;;;15901:11;15875:38;;;;;;:::i;:::-;;;;;;;;14039:1882;;;;;;;;13960:1961;;;:::o;23571:474::-;23629:56;23646:4;23661:14;;;;;;;;;;;23678:6;23629:8;:56::i;:::-;23696:21;23734:1;23720:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23696:40;;23765:4;23747;23752:1;23747:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23791:14;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23781:4;23786:1;23781:7;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;;;23829:14;;;;;;;;;;;:65;;;23909:6;23930:1;23946:4;23973;23993:15;23829:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23825:213;;;;;;23618:427;23571:474;:::o;24118:359::-;24194:61;24211:4;24226:14;;;;;;;;;;;24243:11;24194:8;:61::i;:::-;24266:14;;;;;;;;;;;:30;;;24304:9;24337:4;24357:11;24383:1;24399;24423:4;24443:15;24266:203;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24118:359;;:::o;16029:211::-;16101:4;16117:20;16154:15;;16138;:31;;;;:::i;:::-;16117:52;;16223:8;16207:15;16203:2;16196:6;:9;;;;:::i;:::-;16195:27;;;;:::i;:::-;:36;;;;:::i;:::-;16187:6;:45;;;;:::i;:::-;16180:52;;;16029:211;;;;:::o;16295:176::-;16380:4;10440;;16431:31;;;;:::i;:::-;16416:10;16412:3;16405:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;16404:59;;;;:::i;:::-;16397:66;;16295:176;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:137::-;494:5;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;440:137;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;583:139;;;;:::o;728:143::-;785:5;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;728:143;;;;:::o;877:329::-;936:6;985:2;973:9;964:7;960:23;956:32;953:119;;;991:79;;:::i;:::-;953:119;1111:1;1136:53;1181:7;1172:6;1161:9;1157:22;1136:53;:::i;:::-;1126:63;;1082:117;877:329;;;;:::o;1212:351::-;1282:6;1331:2;1319:9;1310:7;1306:23;1302:32;1299:119;;;1337:79;;:::i;:::-;1299:119;1457:1;1482:64;1538:7;1529:6;1518:9;1514:22;1482:64;:::i;:::-;1472:74;;1428:128;1212:351;;;;:::o;1569:474::-;1637:6;1645;1694:2;1682:9;1673:7;1669:23;1665:32;1662:119;;;1700:79;;:::i;:::-;1662:119;1820:1;1845:53;1890:7;1881:6;1870:9;1866:22;1845:53;:::i;:::-;1835:63;;1791:117;1947:2;1973:53;2018:7;2009:6;1998:9;1994:22;1973:53;:::i;:::-;1963:63;;1918:118;1569:474;;;;;:::o;2049:619::-;2126:6;2134;2142;2191:2;2179:9;2170:7;2166:23;2162:32;2159:119;;;2197:79;;:::i;:::-;2159:119;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2444:2;2470:53;2515:7;2506:6;2495:9;2491:22;2470:53;:::i;:::-;2460:63;;2415:118;2572:2;2598:53;2643:7;2634:6;2623:9;2619:22;2598:53;:::i;:::-;2588:63;;2543:118;2049:619;;;;;:::o;2674:468::-;2739:6;2747;2796:2;2784:9;2775:7;2771:23;2767:32;2764:119;;;2802:79;;:::i;:::-;2764:119;2922:1;2947:53;2992:7;2983:6;2972:9;2968:22;2947:53;:::i;:::-;2937:63;;2893:117;3049:2;3075:50;3117:7;3108:6;3097:9;3093:22;3075:50;:::i;:::-;3065:60;;3020:115;2674:468;;;;;:::o;3148:474::-;3216:6;3224;3273:2;3261:9;3252:7;3248:23;3244:32;3241:119;;;3279:79;;:::i;:::-;3241:119;3399:1;3424:53;3469:7;3460:6;3449:9;3445:22;3424:53;:::i;:::-;3414:63;;3370:117;3526:2;3552:53;3597:7;3588:6;3577:9;3573:22;3552:53;:::i;:::-;3542:63;;3497:118;3148:474;;;;;:::o;3628:323::-;3684:6;3733:2;3721:9;3712:7;3708:23;3704:32;3701:119;;;3739:79;;:::i;:::-;3701:119;3859:1;3884:50;3926:7;3917:6;3906:9;3902:22;3884:50;:::i;:::-;3874:60;;3830:114;3628:323;;;;:::o;3957:345::-;4024:6;4073:2;4061:9;4052:7;4048:23;4044:32;4041:119;;;4079:79;;:::i;:::-;4041:119;4199:1;4224:61;4277:7;4268:6;4257:9;4253:22;4224:61;:::i;:::-;4214:71;;4170:125;3957:345;;;;:::o;4308:329::-;4367:6;4416:2;4404:9;4395:7;4391:23;4387:32;4384:119;;;4422:79;;:::i;:::-;4384:119;4542:1;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4513:117;4308:329;;;;:::o;4643:351::-;4713:6;4762:2;4750:9;4741:7;4737:23;4733:32;4730:119;;;4768:79;;:::i;:::-;4730:119;4888:1;4913:64;4969:7;4960:6;4949:9;4945:22;4913:64;:::i;:::-;4903:74;;4859:128;4643:351;;;;:::o;5000:663::-;5088:6;5096;5104;5153:2;5141:9;5132:7;5128:23;5124:32;5121:119;;;5159:79;;:::i;:::-;5121:119;5279:1;5304:64;5360:7;5351:6;5340:9;5336:22;5304:64;:::i;:::-;5294:74;;5250:128;5417:2;5443:64;5499:7;5490:6;5479:9;5475:22;5443:64;:::i;:::-;5433:74;;5388:129;5556:2;5582:64;5638:7;5629:6;5618:9;5614:22;5582:64;:::i;:::-;5572:74;;5527:129;5000:663;;;;;:::o;5669:1057::-;5773:6;5781;5789;5797;5805;5813;5862:3;5850:9;5841:7;5837:23;5833:33;5830:120;;;5869:79;;:::i;:::-;5830:120;5989:1;6014:53;6059:7;6050:6;6039:9;6035:22;6014:53;:::i;:::-;6004:63;;5960:117;6116:2;6142:53;6187:7;6178:6;6167:9;6163:22;6142:53;:::i;:::-;6132:63;;6087:118;6244:2;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6215:118;6372:2;6398:53;6443:7;6434:6;6423:9;6419:22;6398:53;:::i;:::-;6388:63;;6343:118;6500:3;6527:53;6572:7;6563:6;6552:9;6548:22;6527:53;:::i;:::-;6517:63;;6471:119;6629:3;6656:53;6701:7;6692:6;6681:9;6677:22;6656:53;:::i;:::-;6646:63;;6600:119;5669:1057;;;;;;;;:::o;6732:179::-;6801:10;6822:46;6864:3;6856:6;6822:46;:::i;:::-;6900:4;6895:3;6891:14;6877:28;;6732:179;;;;:::o;6917:108::-;6994:24;7012:5;6994:24;:::i;:::-;6989:3;6982:37;6917:108;;:::o;7031:118::-;7118:24;7136:5;7118:24;:::i;:::-;7113:3;7106:37;7031:118;;:::o;7185:732::-;7304:3;7333:54;7381:5;7333:54;:::i;:::-;7403:86;7482:6;7477:3;7403:86;:::i;:::-;7396:93;;7513:56;7563:5;7513:56;:::i;:::-;7592:7;7623:1;7608:284;7633:6;7630:1;7627:13;7608:284;;;7709:6;7703:13;7736:63;7795:3;7780:13;7736:63;:::i;:::-;7729:70;;7822:60;7875:6;7822:60;:::i;:::-;7812:70;;7668:224;7655:1;7652;7648:9;7643:14;;7608:284;;;7612:14;7908:3;7901:10;;7309:608;;;7185:732;;;;:::o;7923:109::-;8004:21;8019:5;8004:21;:::i;:::-;7999:3;7992:34;7923:109;;:::o;8038:147::-;8133:45;8172:5;8133:45;:::i;:::-;8128:3;8121:58;8038:147;;:::o;8191:364::-;8279:3;8307:39;8340:5;8307:39;:::i;:::-;8362:71;8426:6;8421:3;8362:71;:::i;:::-;8355:78;;8442:52;8487:6;8482:3;8475:4;8468:5;8464:16;8442:52;:::i;:::-;8519:29;8541:6;8519:29;:::i;:::-;8514:3;8510:39;8503:46;;8283:272;8191:364;;;;:::o;8561:366::-;8703:3;8724:67;8788:2;8783:3;8724:67;:::i;:::-;8717:74;;8800:93;8889:3;8800:93;:::i;:::-;8918:2;8913:3;8909:12;8902:19;;8561:366;;;:::o;8933:::-;9075:3;9096:67;9160:2;9155:3;9096:67;:::i;:::-;9089:74;;9172:93;9261:3;9172:93;:::i;:::-;9290:2;9285:3;9281:12;9274:19;;8933:366;;;:::o;9305:::-;9447:3;9468:67;9532:2;9527:3;9468:67;:::i;:::-;9461:74;;9544:93;9633:3;9544:93;:::i;:::-;9662:2;9657:3;9653:12;9646:19;;9305:366;;;:::o;9677:::-;9819:3;9840:67;9904:2;9899:3;9840:67;:::i;:::-;9833:74;;9916:93;10005:3;9916:93;:::i;:::-;10034:2;10029:3;10025:12;10018:19;;9677:366;;;:::o;10049:::-;10191:3;10212:67;10276:2;10271:3;10212:67;:::i;:::-;10205:74;;10288:93;10377:3;10288:93;:::i;:::-;10406:2;10401:3;10397:12;10390:19;;10049:366;;;:::o;10421:::-;10563:3;10584:67;10648:2;10643:3;10584:67;:::i;:::-;10577:74;;10660:93;10749:3;10660:93;:::i;:::-;10778:2;10773:3;10769:12;10762:19;;10421:366;;;:::o;10793:::-;10935:3;10956:67;11020:2;11015:3;10956:67;:::i;:::-;10949:74;;11032:93;11121:3;11032:93;:::i;:::-;11150:2;11145:3;11141:12;11134:19;;10793:366;;;:::o;11165:::-;11307:3;11328:67;11392:2;11387:3;11328:67;:::i;:::-;11321:74;;11404:93;11493:3;11404:93;:::i;:::-;11522:2;11517:3;11513:12;11506:19;;11165:366;;;:::o;11537:::-;11679:3;11700:67;11764:2;11759:3;11700:67;:::i;:::-;11693:74;;11776:93;11865:3;11776:93;:::i;:::-;11894:2;11889:3;11885:12;11878:19;;11537:366;;;:::o;11909:::-;12051:3;12072:67;12136:2;12131:3;12072:67;:::i;:::-;12065:74;;12148:93;12237:3;12148:93;:::i;:::-;12266:2;12261:3;12257:12;12250:19;;11909:366;;;:::o;12281:::-;12423:3;12444:67;12508:2;12503:3;12444:67;:::i;:::-;12437:74;;12520:93;12609:3;12520:93;:::i;:::-;12638:2;12633:3;12629:12;12622:19;;12281:366;;;:::o;12653:::-;12795:3;12816:67;12880:2;12875:3;12816:67;:::i;:::-;12809:74;;12892:93;12981:3;12892:93;:::i;:::-;13010:2;13005:3;13001:12;12994:19;;12653:366;;;:::o;13025:::-;13167:3;13188:67;13252:2;13247:3;13188:67;:::i;:::-;13181:74;;13264:93;13353:3;13264:93;:::i;:::-;13382:2;13377:3;13373:12;13366:19;;13025:366;;;:::o;13397:::-;13539:3;13560:67;13624:2;13619:3;13560:67;:::i;:::-;13553:74;;13636:93;13725:3;13636:93;:::i;:::-;13754:2;13749:3;13745:12;13738:19;;13397:366;;;:::o;13769:::-;13911:3;13932:67;13996:2;13991:3;13932:67;:::i;:::-;13925:74;;14008:93;14097:3;14008:93;:::i;:::-;14126:2;14121:3;14117:12;14110:19;;13769:366;;;:::o;14141:::-;14283:3;14304:67;14368:2;14363:3;14304:67;:::i;:::-;14297:74;;14380:93;14469:3;14380:93;:::i;:::-;14498:2;14493:3;14489:12;14482:19;;14141:366;;;:::o;14513:398::-;14672:3;14693:83;14774:1;14769:3;14693:83;:::i;:::-;14686:90;;14785:93;14874:3;14785:93;:::i;:::-;14903:1;14898:3;14894:11;14887:18;;14513:398;;;:::o;14917:366::-;15059:3;15080:67;15144:2;15139:3;15080:67;:::i;:::-;15073:74;;15156:93;15245:3;15156:93;:::i;:::-;15274:2;15269:3;15265:12;15258:19;;14917:366;;;:::o;15289:::-;15431:3;15452:67;15516:2;15511:3;15452:67;:::i;:::-;15445:74;;15528:93;15617:3;15528:93;:::i;:::-;15646:2;15641:3;15637:12;15630:19;;15289:366;;;:::o;15661:::-;15803:3;15824:67;15888:2;15883:3;15824:67;:::i;:::-;15817:74;;15900:93;15989:3;15900:93;:::i;:::-;16018:2;16013:3;16009:12;16002:19;;15661:366;;;:::o;16033:::-;16175:3;16196:67;16260:2;16255:3;16196:67;:::i;:::-;16189:74;;16272:93;16361:3;16272:93;:::i;:::-;16390:2;16385:3;16381:12;16374:19;;16033:366;;;:::o;16405:::-;16547:3;16568:67;16632:2;16627:3;16568:67;:::i;:::-;16561:74;;16644:93;16733:3;16644:93;:::i;:::-;16762:2;16757:3;16753:12;16746:19;;16405:366;;;:::o;16777:118::-;16864:24;16882:5;16864:24;:::i;:::-;16859:3;16852:37;16777:118;;:::o;16901:112::-;16984:22;17000:5;16984:22;:::i;:::-;16979:3;16972:35;16901:112;;:::o;17019:379::-;17203:3;17225:147;17368:3;17225:147;:::i;:::-;17218:154;;17389:3;17382:10;;17019:379;;;:::o;17404:222::-;17497:4;17535:2;17524:9;17520:18;17512:26;;17548:71;17616:1;17605:9;17601:17;17592:6;17548:71;:::i;:::-;17404:222;;;;:::o;17632:320::-;17747:4;17785:2;17774:9;17770:18;17762:26;;17798:71;17866:1;17855:9;17851:17;17842:6;17798:71;:::i;:::-;17879:66;17941:2;17930:9;17926:18;17917:6;17879:66;:::i;:::-;17632:320;;;;;:::o;17958:332::-;18079:4;18117:2;18106:9;18102:18;18094:26;;18130:71;18198:1;18187:9;18183:17;18174:6;18130:71;:::i;:::-;18211:72;18279:2;18268:9;18264:18;18255:6;18211:72;:::i;:::-;17958:332;;;;;:::o;18296:807::-;18545:4;18583:3;18572:9;18568:19;18560:27;;18597:71;18665:1;18654:9;18650:17;18641:6;18597:71;:::i;:::-;18678:72;18746:2;18735:9;18731:18;18722:6;18678:72;:::i;:::-;18760:80;18836:2;18825:9;18821:18;18812:6;18760:80;:::i;:::-;18850;18926:2;18915:9;18911:18;18902:6;18850:80;:::i;:::-;18940:73;19008:3;18997:9;18993:19;18984:6;18940:73;:::i;:::-;19023;19091:3;19080:9;19076:19;19067:6;19023:73;:::i;:::-;18296:807;;;;;;;;;:::o;19109:210::-;19196:4;19234:2;19223:9;19219:18;19211:26;;19247:65;19309:1;19298:9;19294:17;19285:6;19247:65;:::i;:::-;19109:210;;;;:::o;19325:313::-;19438:4;19476:2;19465:9;19461:18;19453:26;;19525:9;19519:4;19515:20;19511:1;19500:9;19496:17;19489:47;19553:78;19626:4;19617:6;19553:78;:::i;:::-;19545:86;;19325:313;;;;:::o;19644:419::-;19810:4;19848:2;19837:9;19833:18;19825:26;;19897:9;19891:4;19887:20;19883:1;19872:9;19868:17;19861:47;19925:131;20051:4;19925:131;:::i;:::-;19917:139;;19644:419;;;:::o;20069:::-;20235:4;20273:2;20262:9;20258:18;20250:26;;20322:9;20316:4;20312:20;20308:1;20297:9;20293:17;20286:47;20350:131;20476:4;20350:131;:::i;:::-;20342:139;;20069:419;;;:::o;20494:::-;20660:4;20698:2;20687:9;20683:18;20675:26;;20747:9;20741:4;20737:20;20733:1;20722:9;20718:17;20711:47;20775:131;20901:4;20775:131;:::i;:::-;20767:139;;20494:419;;;:::o;20919:::-;21085:4;21123:2;21112:9;21108:18;21100:26;;21172:9;21166:4;21162:20;21158:1;21147:9;21143:17;21136:47;21200:131;21326:4;21200:131;:::i;:::-;21192:139;;20919:419;;;:::o;21344:::-;21510:4;21548:2;21537:9;21533:18;21525:26;;21597:9;21591:4;21587:20;21583:1;21572:9;21568:17;21561:47;21625:131;21751:4;21625:131;:::i;:::-;21617:139;;21344:419;;;:::o;21769:::-;21935:4;21973:2;21962:9;21958:18;21950:26;;22022:9;22016:4;22012:20;22008:1;21997:9;21993:17;21986:47;22050:131;22176:4;22050:131;:::i;:::-;22042:139;;21769:419;;;:::o;22194:::-;22360:4;22398:2;22387:9;22383:18;22375:26;;22447:9;22441:4;22437:20;22433:1;22422:9;22418:17;22411:47;22475:131;22601:4;22475:131;:::i;:::-;22467:139;;22194:419;;;:::o;22619:::-;22785:4;22823:2;22812:9;22808:18;22800:26;;22872:9;22866:4;22862:20;22858:1;22847:9;22843:17;22836:47;22900:131;23026:4;22900:131;:::i;:::-;22892:139;;22619:419;;;:::o;23044:::-;23210:4;23248:2;23237:9;23233:18;23225:26;;23297:9;23291:4;23287:20;23283:1;23272:9;23268:17;23261:47;23325:131;23451:4;23325:131;:::i;:::-;23317:139;;23044:419;;;:::o;23469:::-;23635:4;23673:2;23662:9;23658:18;23650:26;;23722:9;23716:4;23712:20;23708:1;23697:9;23693:17;23686:47;23750:131;23876:4;23750:131;:::i;:::-;23742:139;;23469:419;;;:::o;23894:::-;24060:4;24098:2;24087:9;24083:18;24075:26;;24147:9;24141:4;24137:20;24133:1;24122:9;24118:17;24111:47;24175:131;24301:4;24175:131;:::i;:::-;24167:139;;23894:419;;;:::o;24319:::-;24485:4;24523:2;24512:9;24508:18;24500:26;;24572:9;24566:4;24562:20;24558:1;24547:9;24543:17;24536:47;24600:131;24726:4;24600:131;:::i;:::-;24592:139;;24319:419;;;:::o;24744:::-;24910:4;24948:2;24937:9;24933:18;24925:26;;24997:9;24991:4;24987:20;24983:1;24972:9;24968:17;24961:47;25025:131;25151:4;25025:131;:::i;:::-;25017:139;;24744:419;;;:::o;25169:::-;25335:4;25373:2;25362:9;25358:18;25350:26;;25422:9;25416:4;25412:20;25408:1;25397:9;25393:17;25386:47;25450:131;25576:4;25450:131;:::i;:::-;25442:139;;25169:419;;;:::o;25594:::-;25760:4;25798:2;25787:9;25783:18;25775:26;;25847:9;25841:4;25837:20;25833:1;25822:9;25818:17;25811:47;25875:131;26001:4;25875:131;:::i;:::-;25867:139;;25594:419;;;:::o;26019:::-;26185:4;26223:2;26212:9;26208:18;26200:26;;26272:9;26266:4;26262:20;26258:1;26247:9;26243:17;26236:47;26300:131;26426:4;26300:131;:::i;:::-;26292:139;;26019:419;;;:::o;26444:::-;26610:4;26648:2;26637:9;26633:18;26625:26;;26697:9;26691:4;26687:20;26683:1;26672:9;26668:17;26661:47;26725:131;26851:4;26725:131;:::i;:::-;26717:139;;26444:419;;;:::o;26869:::-;27035:4;27073:2;27062:9;27058:18;27050:26;;27122:9;27116:4;27112:20;27108:1;27097:9;27093:17;27086:47;27150:131;27276:4;27150:131;:::i;:::-;27142:139;;26869:419;;;:::o;27294:::-;27460:4;27498:2;27487:9;27483:18;27475:26;;27547:9;27541:4;27537:20;27533:1;27522:9;27518:17;27511:47;27575:131;27701:4;27575:131;:::i;:::-;27567:139;;27294:419;;;:::o;27719:::-;27885:4;27923:2;27912:9;27908:18;27900:26;;27972:9;27966:4;27962:20;27958:1;27947:9;27943:17;27936:47;28000:131;28126:4;28000:131;:::i;:::-;27992:139;;27719:419;;;:::o;28144:::-;28310:4;28348:2;28337:9;28333:18;28325:26;;28397:9;28391:4;28387:20;28383:1;28372:9;28368:17;28361:47;28425:131;28551:4;28425:131;:::i;:::-;28417:139;;28144:419;;;:::o;28569:222::-;28662:4;28700:2;28689:9;28685:18;28677:26;;28713:71;28781:1;28770:9;28766:17;28757:6;28713:71;:::i;:::-;28569:222;;;;:::o;28797:831::-;29060:4;29098:3;29087:9;29083:19;29075:27;;29112:71;29180:1;29169:9;29165:17;29156:6;29112:71;:::i;:::-;29193:80;29269:2;29258:9;29254:18;29245:6;29193:80;:::i;:::-;29320:9;29314:4;29310:20;29305:2;29294:9;29290:18;29283:48;29348:108;29451:4;29442:6;29348:108;:::i;:::-;29340:116;;29466:72;29534:2;29523:9;29519:18;29510:6;29466:72;:::i;:::-;29548:73;29616:3;29605:9;29601:19;29592:6;29548:73;:::i;:::-;28797:831;;;;;;;;:::o;29634:775::-;29867:4;29905:3;29894:9;29890:19;29882:27;;29919:71;29987:1;29976:9;29972:17;29963:6;29919:71;:::i;:::-;30000:72;30068:2;30057:9;30053:18;30044:6;30000:72;:::i;:::-;30082;30150:2;30139:9;30135:18;30126:6;30082:72;:::i;:::-;30164;30232:2;30221:9;30217:18;30208:6;30164:72;:::i;:::-;30246:73;30314:3;30303:9;30299:19;30290:6;30246:73;:::i;:::-;30329;30397:3;30386:9;30382:19;30373:6;30329:73;:::i;:::-;29634:775;;;;;;;;;:::o;30415:214::-;30504:4;30542:2;30531:9;30527:18;30519:26;;30555:67;30619:1;30608:9;30604:17;30595:6;30555:67;:::i;:::-;30415:214;;;;:::o;30716:132::-;30783:4;30806:3;30798:11;;30836:4;30831:3;30827:14;30819:22;;30716:132;;;:::o;30854:114::-;30921:6;30955:5;30949:12;30939:22;;30854:114;;;:::o;30974:99::-;31026:6;31060:5;31054:12;31044:22;;30974:99;;;:::o;31079:113::-;31149:4;31181;31176:3;31172:14;31164:22;;31079:113;;;:::o;31198:184::-;31297:11;31331:6;31326:3;31319:19;31371:4;31366:3;31362:14;31347:29;;31198:184;;;;:::o;31388:147::-;31489:11;31526:3;31511:18;;31388:147;;;;:::o;31541:169::-;31625:11;31659:6;31654:3;31647:19;31699:4;31694:3;31690:14;31675:29;;31541:169;;;;:::o;31716:305::-;31756:3;31775:20;31793:1;31775:20;:::i;:::-;31770:25;;31809:20;31827:1;31809:20;:::i;:::-;31804:25;;31963:1;31895:66;31891:74;31888:1;31885:81;31882:107;;;31969:18;;:::i;:::-;31882:107;32013:1;32010;32006:9;31999:16;;31716:305;;;;:::o;32027:185::-;32067:1;32084:20;32102:1;32084:20;:::i;:::-;32079:25;;32118:20;32136:1;32118:20;:::i;:::-;32113:25;;32157:1;32147:35;;32162:18;;:::i;:::-;32147:35;32204:1;32201;32197:9;32192:14;;32027:185;;;;:::o;32218:848::-;32279:5;32286:4;32310:6;32301:15;;32334:5;32325:14;;32348:712;32369:1;32359:8;32356:15;32348:712;;;32464:4;32459:3;32455:14;32449:4;32446:24;32443:50;;;32473:18;;:::i;:::-;32443:50;32523:1;32513:8;32509:16;32506:451;;;32938:4;32931:5;32927:16;32918:25;;32506:451;32988:4;32982;32978:15;32970:23;;33018:32;33041:8;33018:32;:::i;:::-;33006:44;;32348:712;;;32218:848;;;;;;;:::o;33072:281::-;33130:5;33154:23;33172:4;33154:23;:::i;:::-;33146:31;;33198:25;33214:8;33198:25;:::i;:::-;33186:37;;33242:104;33279:66;33269:8;33263:4;33242:104;:::i;:::-;33233:113;;33072:281;;;;:::o;33359:1073::-;33413:5;33604:8;33594:40;;33625:1;33616:10;;33627:5;;33594:40;33653:4;33643:36;;33670:1;33661:10;;33672:5;;33643:36;33739:4;33787:1;33782:27;;;;33823:1;33818:191;;;;33732:277;;33782:27;33800:1;33791:10;;33802:5;;;33818:191;33863:3;33853:8;33850:17;33847:43;;;33870:18;;:::i;:::-;33847:43;33919:8;33916:1;33912:16;33903:25;;33954:3;33947:5;33944:14;33941:40;;;33961:18;;:::i;:::-;33941:40;33994:5;;;33732:277;;34118:2;34108:8;34105:16;34099:3;34093:4;34090:13;34086:36;34068:2;34058:8;34055:16;34050:2;34044:4;34041:12;34037:35;34021:111;34018:246;;;34174:8;34168:4;34164:19;34155:28;;34209:3;34202:5;34199:14;34196:40;;;34216:18;;:::i;:::-;34196:40;34249:5;;34018:246;34289:42;34327:3;34317:8;34311:4;34308:1;34289:42;:::i;:::-;34274:57;;;;34363:4;34358:3;34354:14;34347:5;34344:25;34341:51;;;34372:18;;:::i;:::-;34341:51;34421:4;34414:5;34410:16;34401:25;;33359:1073;;;;;;:::o;34438:348::-;34478:7;34501:20;34519:1;34501:20;:::i;:::-;34496:25;;34535:20;34553:1;34535:20;:::i;:::-;34530:25;;34723:1;34655:66;34651:74;34648:1;34645:81;34640:1;34633:9;34626:17;34622:105;34619:131;;;34730:18;;:::i;:::-;34619:131;34778:1;34775;34771:9;34760:20;;34438:348;;;;:::o;34792:191::-;34832:4;34852:20;34870:1;34852:20;:::i;:::-;34847:25;;34886:20;34904:1;34886:20;:::i;:::-;34881:25;;34925:1;34922;34919:8;34916:34;;;34930:18;;:::i;:::-;34916:34;34975:1;34972;34968:9;34960:17;;34792:191;;;;:::o;34989:96::-;35026:7;35055:24;35073:5;35055:24;:::i;:::-;35044:35;;34989:96;;;:::o;35091:90::-;35125:7;35168:5;35161:13;35154:21;35143:32;;35091:90;;;:::o;35187:126::-;35224:7;35264:42;35257:5;35253:54;35242:65;;35187:126;;;:::o;35319:77::-;35356:7;35385:5;35374:16;;35319:77;;;:::o;35402:86::-;35437:7;35477:4;35470:5;35466:16;35455:27;;35402:86;;;:::o;35494:121::-;35552:9;35585:24;35603:5;35585:24;:::i;:::-;35572:37;;35494:121;;;:::o;35621:307::-;35689:1;35699:113;35713:6;35710:1;35707:13;35699:113;;;35798:1;35793:3;35789:11;35783:18;35779:1;35774:3;35770:11;35763:39;35735:2;35732:1;35728:10;35723:15;;35699:113;;;35830:6;35827:1;35824:13;35821:101;;;35910:1;35901:6;35896:3;35892:16;35885:27;35821:101;35670:258;35621:307;;;:::o;35934:180::-;35982:77;35979:1;35972:88;36079:4;36076:1;36069:15;36103:4;36100:1;36093:15;36120:180;36168:77;36165:1;36158:88;36265:4;36262:1;36255:15;36289:4;36286:1;36279:15;36306:180;36354:77;36351:1;36344:88;36451:4;36448:1;36441:15;36475:4;36472:1;36465:15;36492:180;36540:77;36537:1;36530:88;36637:4;36634:1;36627:15;36661:4;36658:1;36651:15;36801:117;36910:1;36907;36900:12;36924:102;36965:6;37016:2;37012:7;37007:2;37000:5;36996:14;36992:28;36982:38;;36924:102;;;:::o;37032:::-;37074:8;37121:5;37118:1;37114:13;37093:34;;37032:102;;;:::o;37140:168::-;37280:20;37276:1;37268:6;37264:14;37257:44;37140:168;:::o;37314:166::-;37454:18;37450:1;37442:6;37438:14;37431:42;37314:166;:::o;37486:174::-;37626:26;37622:1;37614:6;37610:14;37603:50;37486:174;:::o;37666:225::-;37806:34;37802:1;37794:6;37790:14;37783:58;37875:8;37870:2;37862:6;37858:15;37851:33;37666:225;:::o;37897:236::-;38037:34;38033:1;38025:6;38021:14;38014:58;38106:19;38101:2;38093:6;38089:15;38082:44;37897:236;:::o;38139:167::-;38279:19;38275:1;38267:6;38263:14;38256:43;38139:167;:::o;38312:166::-;38452:18;38448:1;38440:6;38436:14;38429:42;38312:166;:::o;38484:170::-;38624:22;38620:1;38612:6;38608:14;38601:46;38484:170;:::o;38660:174::-;38800:26;38796:1;38788:6;38784:14;38777:50;38660:174;:::o;38840:168::-;38980:20;38976:1;38968:6;38964:14;38957:44;38840:168;:::o;39014:234::-;39154:34;39150:1;39142:6;39138:14;39131:58;39223:17;39218:2;39210:6;39206:15;39199:42;39014:234;:::o;39254:165::-;39394:17;39390:1;39382:6;39378:14;39371:41;39254:165;:::o;39425:181::-;39565:33;39561:1;39553:6;39549:14;39542:57;39425:181;:::o;39612:182::-;39752:34;39748:1;39740:6;39736:14;39729:58;39612:182;:::o;39800:173::-;39940:25;39936:1;39928:6;39924:14;39917:49;39800:173;:::o;39979:165::-;40119:17;40115:1;40107:6;40103:14;40096:41;39979:165;:::o;40150:114::-;;:::o;40270:232::-;40410:34;40406:1;40398:6;40394:14;40387:58;40479:15;40474:2;40466:6;40462:15;40455:40;40270:232;:::o;40508:170::-;40648:22;40644:1;40636:6;40632:14;40625:46;40508:170;:::o;40684:176::-;40824:28;40820:1;40812:6;40808:14;40801:52;40684:176;:::o;40866:162::-;41006:14;41002:1;40994:6;40990:14;40983:38;40866:162;:::o;41034:220::-;41174:34;41170:1;41162:6;41158:14;41151:58;41243:3;41238:2;41230:6;41226:15;41219:28;41034:220;:::o;41260:122::-;41333:24;41351:5;41333:24;:::i;:::-;41326:5;41323:35;41313:63;;41372:1;41369;41362:12;41313:63;41260:122;:::o;41388:116::-;41458:21;41473:5;41458:21;:::i;:::-;41451:5;41448:32;41438:60;;41494:1;41491;41484:12;41438:60;41388:116;:::o;41510:122::-;41583:24;41601:5;41583:24;:::i;:::-;41576:5;41573:35;41563:63;;41622:1;41619;41612:12;41563:63;41510:122;:::o

Swarm Source

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