ETH Price: $3,557.23 (+0.60%)
 

Overview

Max Total Supply

100,000,000,000 APU

Holders

43,072

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
23 APU

Value
$0.00
0xdfd315c0304bc2a459a88b47380de0f2f89e448f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
ApuApustaja

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-04-09
*/

// SPDX-License-Identifier: MIT

/**

Telegram: https://t.me/BasedApustaja

Twitter: https://twitter.com/basedapustaja

Website: https://apuonbase.com/#

**/


pragma solidity 0.8.9;
 


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

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

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

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

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

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

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

        
        event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

}

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

        mapping(address => uint256) private _balances;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address public  devWallet;
    address private marketingWallet;

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

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


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

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

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

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

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 private taxTill;
    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

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


    constructor() ERC20("Apu Apustaja", "APU") {
 
        router = IUniswapV2Router02(0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24);


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

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

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


        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 100000000000e18;

        maxBuyAmount = totalSupply * 2 / 100;
        maxSellAmount = totalSupply * 2 / 100;
        maxWalletAmount = totalSupply * 2 / 100;
        thresholdSwapAmount = totalSupply * 4 / 10000; 

        _fees.buyMarketingFee = 30;
        _fees.buyLiquidityFee = 0;
        _fees.buyDevFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

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


        marketingWallet = address(0xb8c43e6C7bFb0D22de9afbD7B62d7F7F6148A818);
        devWallet = address(0xb8c43e6C7bFb0D22de9afbD7B62d7F7F6148A818);

        // exclude from paying fees or having max transaction amount

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

    receive() external payable {

    }

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



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


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


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    function updateFees(uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy,uint8 _devFeeBuy,uint8 _marketingFeeSell, uint8 _liquidityFeeSell,uint8 _devFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevFee = _devFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevFee = _devFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;
        require(_fees.buyTotalFees <= 30, "Must keep fees at 30% or less");   
        require(_fees.sellTotalFees <= 30, "Must keep fees at 30% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }
    function rescueETH(uint256 weiAmount) external onlyOwner {
        payable(owner()).transfer(weiAmount);
    }

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

    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

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

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

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

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

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

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

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

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

            amount -= fees;

        }

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

    function swapTokensForEth(uint256 tAmount) private {

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

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

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

    }

    function addLiquidity(uint256 tAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tAmount);

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

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

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

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

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

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


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


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

        (success,) = address(devWallet).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001ad57600080fd5b506040518060400160405280600c81526020017f417075204170757374616a6100000000000000000000000000000000000000008152506040518060400160405280600381526020017f415055000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200023292919062000f30565b5080600490805190602001906200024b92919062000f30565b50505060006200026062000be560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350734752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb91906200104a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043057600080fd5b505afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b91906200104a565b6040518363ffffffff1660e01b81526004016200048a9291906200108d565b602060405180830381600087803b158015620004a557600080fd5b505af1158015620004ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e091906200104a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016013600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620005dd62000bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260006200069c62000bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460006200075b62000bed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008ec6080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000c1760201b60201c565b5060006c01431e0fae6d7217caa000000090506064600282620009109190620010f3565b6200091c919062001183565b6008819055506064600282620009339190620010f3565b6200093f919062001183565b6009819055506064600282620009569190620010f3565b62000962919062001183565b600a819055506127106004826200097a9190620010f3565b62000986919062001183565b600b81905550601e600d60000160016101000a81548160ff021916908360ff1602179055506000600d60000160036101000a81548160ff021916908360ff1602179055506000600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff1662000a2e9190620011c8565b62000a3a9190620011c8565b600d60000160006101000a81548160ff021916908360ff160217905550601e600d60000160056101000a81548160ff021916908360ff1602179055506000600d60000160076101000a81548160ff021916908360ff1602179055506000600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1662000af99190620011c8565b62000b059190620011c8565b600d60000160046101000a81548160ff021916908360ff16021790555073b8c43e6c7bfb0d22de9afbd7b62d7f7f6148a818600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b8c43e6c7bfb0d22de9afbd7b62d7f7f6148a818600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000bde338262000c4560201b60201c565b50620013eb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000c3b62000c2d62000be560201b60201c565b848462000de060201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000caf9062001267565b60405180910390fd5b62000cd48160025462000ecd60201b620022421790919060201c565b60028190555062000d32816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ecd60201b620022421790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000dd491906200129a565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ec091906200129a565b60405180910390a3505050565b600080828462000ede9190620012b7565b90508381101562000f26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f1d9062001364565b60405180910390fd5b8091505092915050565b82805462000f3e90620013b5565b90600052602060002090601f01602090048101928262000f62576000855562000fae565b82601f1062000f7d57805160ff191683800117855562000fae565b8280016001018555821562000fae579182015b8281111562000fad57825182559160200191906001019062000f90565b5b50905062000fbd919062000fc1565b5090565b5b8082111562000fdc57600081600090555060010162000fc2565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010128262000fe5565b9050919050565b620010248162001005565b81146200103057600080fd5b50565b600081519050620010448162001019565b92915050565b60006020828403121562001063576200106262000fe0565b5b6000620010738482850162001033565b91505092915050565b620010878162001005565b82525050565b6000604082019050620010a460008301856200107c565b620010b360208301846200107c565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200110082620010ba565b91506200110d83620010ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011495762001148620010c4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200119082620010ba565b91506200119d83620010ba565b925082620011b057620011af62001154565b5b828204905092915050565b600060ff82169050919050565b6000620011d582620011bb565b9150620011e283620011bb565b92508260ff03821115620011fb57620011fa620010c4565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200124f601f8362001206565b91506200125c8262001217565b602082019050919050565b60006020820190508181036000830152620012828162001240565b9050919050565b6200129481620010ba565b82525050565b6000602082019050620012b1600083018462001289565b92915050565b6000620012c482620010ba565b9150620012d183620010ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620013095762001308620010c4565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200134c601b8362001206565b9150620013598262001314565b602082019050919050565b600060208201905081810360008301526200137f816200133d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013ce57607f821691505b60208210811415620013e557620013e462001386565b5b50919050565b60805160a051614a2f6200143b600039600081816110950152611ae601526000818161222001528181613513015281816136030152818161362a015281816136c601526136ed0152614a2f6000f3fe6080604052600436106102345760003560e01c80638da5cb5b1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610877578063e16830a8146108b4578063f2fde38b146108dd578063f5b3c3bf14610906578063f887ea40146109435761023b565b8063c0246668146107a1578063c16dd4a4146107ca578063c18bc195146107f3578063d212a69a1461081c578063d3f6a1571461084e5761023b565b80639fccce32116100f25780639fccce32146106ba578063a457c2d7146106e5578063a9059cbb14610722578063b88631151461075f578063b9e418e71461078a5761023b565b80638da5cb5b146105d35780638ea5220f146105fe57806395d89b411461062957806396880b17146106545780639e252f00146106915761023b565b80633265e846116101bc5780636ddd1713116101805780636ddd17131461050257806370a082311461052d578063715018a61461056a5780637571336a146105815780638cd4426d146105aa5761023b565b80633265e846146103f7578063395093511461042057806349bd5a5e1461045d5780634fbee19314610488578063555467a1146104c55761023b565b806318160ddd1161020357806318160ddd1461030e5780631a8145bb146103395780631f3fed8f1461036457806323b872dd1461038f578063313ce567146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806310d5de53146102a857806311a582c3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561096e565b60405161026291906138a5565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190613960565b610a00565b60405161029f91906139bb565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906139d6565b610a1e565b6040516102dc91906139bb565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613a03565b610a3e565b005b34801561031a57600080fd5b50610323610c0f565b6040516103309190613a52565b60405180910390f35b34801561034557600080fd5b5061034e610c19565b60405161035b9190613a52565b60405180910390f35b34801561037057600080fd5b50610379610c1f565b6040516103869190613a52565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613a6d565b610c25565b6040516103c391906139bb565b60405180910390f35b3480156103d857600080fd5b506103e1610cfe565b6040516103ee9190613adc565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613b23565b610d07565b005b34801561042c57600080fd5b5061044760048036038101906104429190613960565b610fe0565b60405161045491906139bb565b60405180910390f35b34801561046957600080fd5b50610472611093565b60405161047f9190613bbf565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906139d6565b6110b7565b6040516104bc91906139bb565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613bda565b61110d565b6040516104f991906139bb565b60405180910390f35b34801561050e57600080fd5b506105176111b6565b60405161052491906139bb565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906139d6565b6111c9565b6040516105619190613a52565b60405180910390f35b34801561057657600080fd5b5061057f611211565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613c33565b611369565b005b3480156105b657600080fd5b506105d160048036038101906105cc9190613960565b61145b565b005b3480156105df57600080fd5b506105e861158b565b6040516105f59190613bbf565b60405180910390f35b34801561060a57600080fd5b506106136115b5565b6040516106209190613bbf565b60405180910390f35b34801561063557600080fd5b5061063e6115db565b60405161064b91906138a5565b60405180910390f35b34801561066057600080fd5b5061067b600480360381019061067691906139d6565b61166d565b60405161068891906139bb565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613bda565b61168d565b005b3480156106c657600080fd5b506106cf611775565b6040516106dc9190613a52565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613960565b61177b565b60405161071991906139bb565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190613960565b611848565b60405161075691906139bb565b60405180910390f35b34801561076b57600080fd5b50610774611866565b60405161078191906139bb565b60405180910390f35b34801561079657600080fd5b5061079f611879565b005b3480156107ad57600080fd5b506107c860048036038101906107c39190613c33565b61195b565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613c33565b611a4d565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613bda565b611bce565b005b34801561082857600080fd5b50610831611d03565b604051610845989796959493929190613c73565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613cf1565b611da1565b005b34801561088357600080fd5b5061089e60048036038101906108999190613cf1565b611ebe565b6040516108ab9190613a52565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190613c33565b611f45565b005b3480156108e957600080fd5b5061090460048036038101906108ff91906139d6565b612037565b005b34801561091257600080fd5b5061092d600480360381019061092891906139d6565b6121fe565b60405161093a91906139bb565b60405180910390f35b34801561094f57600080fd5b5061095861221e565b6040516109659190613d90565b60405180910390f35b60606003805461097d90613dda565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990613dda565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a14610a0d6122a0565b84846122a8565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a466122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613e58565b60405180910390fd5b6064610adf610c0f565b610ae99190613ed6565b6103e883610af5610c0f565b610aff9190613f07565b610b099190613ed6565b1015610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190613fd3565b60405180910390fd5b6064610b54610c0f565b610b5e9190613ed6565b6103e882610b6a610c0f565b610b749190613f07565b610b7e9190613ed6565b1015610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690614065565b60405180910390fd5b6103e882610bcb610c0f565b610bd59190613f07565b610bdf9190613ed6565b6008819055506103e881610bf1610c0f565b610bfb9190613f07565b610c059190613ed6565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b6000610c32848484612393565b610cf384610c3e6122a0565b610cee856040518060600160405280602881526020016149d260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca46122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b600190509392505050565b60006012905090565b610d0f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e58565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610e3b9190614085565b610e459190614085565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610eff9190614085565b610f099190614085565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690614108565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614108565b60405180910390fd5b505050505050565b6000611089610fed6122a0565b846110848560016000610ffe6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6122a8565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111176122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e58565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112196122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113716122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613e58565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613e58565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61151661158b565b836040518363ffffffff1660e01b8152600401611534929190614128565b602060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190614166565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546115ea90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613dda565b80156116635780601f1061163857610100808354040283529160200191611663565b820191906000526020600020905b81548152906001019060200180831161164657829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b6116956122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613e58565b60405180910390fd5b61172c61158b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611771573d6000803e3d6000fd5b5050565b60105481565b600061183e6117886122a0565b846118398560405180606001604052806025815260200161498760259139600160006117b26122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b6001905092915050565b600061185c6118556122a0565b8484612393565b6001905092915050565b600c60029054906101000a900460ff1681565b6118816122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613e58565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600a436119539190614193565b601181905550565b6119636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990613e58565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a556122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90613e58565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614235565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bd66122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90613e58565b60405180910390fd5b6064611c6f610c0f565b611c799190613ed6565b6103e882611c85610c0f565b611c8f9190613f07565b611c999190613ed6565b1015611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906142c7565b60405180910390fd5b6103e881611ce6610c0f565b611cf09190613f07565b611cfa9190613ed6565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611da96122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613e58565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f4d6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613e58565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61203f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614359565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008082846122519190614193565b905083811015612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906143c5565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123869190613a52565b60405180910390a3505050565b60008114156123ad576123a883836000612ecd565b612e64565b6123b561158b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561242357506123f361158b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243c5750600c60029054906101000a900460ff16155b156127c257600c60009054906101000a900460ff1661253657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124f65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614431565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125d95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262857600854811115612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a9061449d565b60405180910390fd5b612717565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cb5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561271657600954811115612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614509565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127c157600a54612774836111c9565b8261277f9190614193565b11156127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790614575565b60405180910390fd5b5b5b60006127cd306111c9565b90506000600b5482101590508080156127f25750600c60019054906101000a900460ff165b801561280b5750600c60029054906101000a900460ff16155b80156128605750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128b65750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561290c5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612950576001600c60026101000a81548160ff021916908315150217905550612934613077565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a065750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a1057600090505b8015612e55576000601154431015612ab257612a496064612a3b60638861336590919063ffffffff16565b6133e090919063ffffffff16565b90506063605e82612a5a9190613f07565b612a649190613ed6565b600e6000828254612a759190614193565b925050819055506063600582612a8b9190613f07565b612a959190613ed6565b60106000828254612aa69190614193565b92505081905550612e30565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2057506000600d60000160049054906101000a900460ff1660ff16115b15612c7257612b606064612b52600d60000160049054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612b999190613f07565b612ba39190613ed6565b600f6000828254612bb49190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612bf29190613f07565b612bfc9190613ed6565b600e6000828254612c0d9190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612c4b9190613f07565b612c559190613ed6565b60106000828254612c669190614193565b92505081905550612e2f565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce057506000600d60000160009054906101000a900460ff1660ff16115b15612e2e57612d206064612d12600d60000160009054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612d599190613f07565b612d639190613ed6565b600f6000828254612d749190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612db29190613f07565b612dbc9190613ed6565b600e6000828254612dcd9190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612e0b9190613f07565b612e159190613ed6565b60106000828254612e269190614193565b925050819055505b5b5b6000811115612e4557612e44873083612ecd565b5b8085612e519190614595565b9450505b612e60868686612ecd565b5050505b505050565b6000838311158290612eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea891906138a5565b60405180910390fd5b5060008385612ec09190614595565b9050809150509392505050565b612f38816040518060600160405280602681526020016149ac602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fcb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306a9190613a52565b60405180910390a3505050565b6000613082306111c9565b90506000601054600e54600f546130999190614193565b6130a39190614193565b90506000808314806130b55750600082145b156130c257505050613363565b6014600b546130d19190613f07565b8311156130ea576014600b546130e79190613f07565b92505b6000600283600f54866130fd9190613f07565b6131079190613ed6565b6131119190613ed6565b90506000613128828661342a90919063ffffffff16565b9050600047905061313882613474565b600061314d824761342a90919063ffffffff16565b905060006131788761316a600e548561336590919063ffffffff16565b6133e090919063ffffffff16565b905060006131a3886131956010548661336590919063ffffffff16565b6133e090919063ffffffff16565b9050600081836131b39190614193565b846131be9190614595565b90506000600f819055506000600e8190555060006010819055506000871180156131e85750600081115b15613231576131f787826136c0565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516132289291906145c9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476132769190614595565b60405161328290614623565b60006040518083038185875af1925050503d80600081146132bf576040519150601f19603f3d011682016040523d82523d6000602084013e6132c4565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161331090614623565b60006040518083038185875af1925050503d806000811461334d576040519150601f19603f3d011682016040523d82523d6000602084013e613352565b606091505b505080985050505050505050505050505b565b60008083141561337857600090506133da565b600082846133869190613f07565b90508284826133959190613ed6565b146133d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc906146aa565b60405180910390fd5b809150505b92915050565b600061342283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a9565b905092915050565b600061346c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e69565b905092915050565b6000600267ffffffffffffffff811115613491576134906146ca565b5b6040519080825280602002602001820160405280156134bf5781602001602082028036833780820191505090505b50905030816000815181106134d7576134d66146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561357757600080fd5b505afa15801561358b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135af919061473d565b816001815181106135c3576135c26146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613628307f0000000000000000000000000000000000000000000000000000000000000000846122a8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161368a959493929190614863565b600060405180830381600087803b1580156136a457600080fd5b505af11580156136b8573d6000803e3d6000fd5b505050505050565b6136eb307f0000000000000000000000000000000000000000000000000000000000000000846122a8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613750969594939291906148bd565b6060604051808303818588803b15801561376957600080fd5b505af115801561377d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137a29190614933565b5050505050565b600080831182906137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e791906138a5565b60405180910390fd5b50600083856137ff9190613ed6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561384657808201518184015260208101905061382b565b83811115613855576000848401525b50505050565b6000601f19601f8301169050919050565b60006138778261380c565b6138818185613817565b9350613891818560208601613828565b61389a8161385b565b840191505092915050565b600060208201905081810360008301526138bf818461386c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f7826138cc565b9050919050565b613907816138ec565b811461391257600080fd5b50565b600081359050613924816138fe565b92915050565b6000819050919050565b61393d8161392a565b811461394857600080fd5b50565b60008135905061395a81613934565b92915050565b60008060408385031215613977576139766138c7565b5b600061398585828601613915565b92505060206139968582860161394b565b9150509250929050565b60008115159050919050565b6139b5816139a0565b82525050565b60006020820190506139d060008301846139ac565b92915050565b6000602082840312156139ec576139eb6138c7565b5b60006139fa84828501613915565b91505092915050565b60008060408385031215613a1a57613a196138c7565b5b6000613a288582860161394b565b9250506020613a398582860161394b565b9150509250929050565b613a4c8161392a565b82525050565b6000602082019050613a676000830184613a43565b92915050565b600080600060608486031215613a8657613a856138c7565b5b6000613a9486828701613915565b9350506020613aa586828701613915565b9250506040613ab68682870161394b565b9150509250925092565b600060ff82169050919050565b613ad681613ac0565b82525050565b6000602082019050613af16000830184613acd565b92915050565b613b0081613ac0565b8114613b0b57600080fd5b50565b600081359050613b1d81613af7565b92915050565b60008060008060008060c08789031215613b4057613b3f6138c7565b5b6000613b4e89828a01613b0e565b9650506020613b5f89828a01613b0e565b9550506040613b7089828a01613b0e565b9450506060613b8189828a01613b0e565b9350506080613b9289828a01613b0e565b92505060a0613ba389828a01613b0e565b9150509295509295509295565b613bb9816138ec565b82525050565b6000602082019050613bd46000830184613bb0565b92915050565b600060208284031215613bf057613bef6138c7565b5b6000613bfe8482850161394b565b91505092915050565b613c10816139a0565b8114613c1b57600080fd5b50565b600081359050613c2d81613c07565b92915050565b60008060408385031215613c4a57613c496138c7565b5b6000613c5885828601613915565b9250506020613c6985828601613c1e565b9150509250929050565b600061010082019050613c89600083018b613acd565b613c96602083018a613acd565b613ca36040830189613acd565b613cb06060830188613acd565b613cbd6080830187613acd565b613cca60a0830186613acd565b613cd760c0830185613acd565b613ce460e0830184613acd565b9998505050505050505050565b60008060408385031215613d0857613d076138c7565b5b6000613d1685828601613915565b9250506020613d2785828601613915565b9150509250929050565b6000819050919050565b6000613d56613d51613d4c846138cc565b613d31565b6138cc565b9050919050565b6000613d6882613d3b565b9050919050565b6000613d7a82613d5d565b9050919050565b613d8a81613d6f565b82525050565b6000602082019050613da56000830184613d81565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613df257607f821691505b60208210811415613e0657613e05613dab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e42602083613817565b9150613e4d82613e0c565b602082019050919050565b60006020820190508181036000830152613e7181613e35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ee18261392a565b9150613eec8361392a565b925082613efc57613efb613e78565b5b828204905092915050565b6000613f128261392a565b9150613f1d8361392a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5657613f55613ea7565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbd602383613817565b9150613fc882613f61565b604082019050919050565b60006020820190508181036000830152613fec81613fb0565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b600061404f602483613817565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b600061409082613ac0565b915061409b83613ac0565b92508260ff038211156140b1576140b0613ea7565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006140f2601d83613817565b91506140fd826140bc565b602082019050919050565b60006020820190508181036000830152614121816140e5565b9050919050565b600060408201905061413d6000830185613bb0565b61414a6020830184613a43565b9392505050565b60008151905061416081613c07565b92915050565b60006020828403121561417c5761417b6138c7565b5b600061418a84828501614151565b91505092915050565b600061419e8261392a565b91506141a98361392a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141de576141dd613ea7565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b600061421f601783613817565b915061422a826141e9565b602082019050919050565b6000602082019050818103600083015261424e81614212565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006142b1602283613817565b91506142bc82614255565b604082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614343602683613817565b915061434e826142e7565b604082019050919050565b6000602082019050818103600083015261437281614336565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006143af601b83613817565b91506143ba82614379565b602082019050919050565b600060208201905081810360008301526143de816143a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061441b601683613817565b9150614426826143e5565b602082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614487601c83613817565b915061449282614451565b602082019050919050565b600060208201905081810360008301526144b68161447a565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b60006144f3601d83613817565b91506144fe826144bd565b602082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061455f601383613817565b915061456a82614529565b602082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b60006145a08261392a565b91506145ab8361392a565b9250828210156145be576145bd613ea7565b5b828203905092915050565b60006040820190506145de6000830185613a43565b6145eb6020830184613a43565b9392505050565b600081905092915050565b50565b600061460d6000836145f2565b9150614618826145fd565b600082019050919050565b600061462e82614600565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614694602183613817565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614737816138fe565b92915050565b600060208284031215614753576147526138c7565b5b600061476184828501614728565b91505092915050565b6000819050919050565b600061478f61478a6147858461476a565b613d31565b61392a565b9050919050565b61479f81614774565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147da816138ec565b82525050565b60006147ec83836147d1565b60208301905092915050565b6000602082019050919050565b6000614810826147a5565b61481a81856147b0565b9350614825836147c1565b8060005b8381101561485657815161483d88826147e0565b9750614848836147f8565b925050600181019050614829565b5085935050505092915050565b600060a0820190506148786000830188613a43565b6148856020830187614796565b81810360408301526148978186614805565b90506148a66060830185613bb0565b6148b36080830184613a43565b9695505050505050565b600060c0820190506148d26000830189613bb0565b6148df6020830188613a43565b6148ec6040830187614796565b6148f96060830186614796565b6149066080830185613bb0565b61491360a0830184613a43565b979650505050505050565b60008151905061492d81613934565b92915050565b60008060006060848603121561494c5761494b6138c7565b5b600061495a8682870161491e565b935050602061496b8682870161491e565b925050604061497c8682870161491e565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b2ef6e0e995cb9697d30abd06617fb74d75982abe08997461b86ddd39eeeee3864736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80638da5cb5b1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610877578063e16830a8146108b4578063f2fde38b146108dd578063f5b3c3bf14610906578063f887ea40146109435761023b565b8063c0246668146107a1578063c16dd4a4146107ca578063c18bc195146107f3578063d212a69a1461081c578063d3f6a1571461084e5761023b565b80639fccce32116100f25780639fccce32146106ba578063a457c2d7146106e5578063a9059cbb14610722578063b88631151461075f578063b9e418e71461078a5761023b565b80638da5cb5b146105d35780638ea5220f146105fe57806395d89b411461062957806396880b17146106545780639e252f00146106915761023b565b80633265e846116101bc5780636ddd1713116101805780636ddd17131461050257806370a082311461052d578063715018a61461056a5780637571336a146105815780638cd4426d146105aa5761023b565b80633265e846146103f7578063395093511461042057806349bd5a5e1461045d5780634fbee19314610488578063555467a1146104c55761023b565b806318160ddd1161020357806318160ddd1461030e5780631a8145bb146103395780631f3fed8f1461036457806323b872dd1461038f578063313ce567146103cc5761023b565b806306fdde0314610240578063095ea7b31461026b57806310d5de53146102a857806311a582c3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561096e565b60405161026291906138a5565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190613960565b610a00565b60405161029f91906139bb565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906139d6565b610a1e565b6040516102dc91906139bb565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190613a03565b610a3e565b005b34801561031a57600080fd5b50610323610c0f565b6040516103309190613a52565b60405180910390f35b34801561034557600080fd5b5061034e610c19565b60405161035b9190613a52565b60405180910390f35b34801561037057600080fd5b50610379610c1f565b6040516103869190613a52565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613a6d565b610c25565b6040516103c391906139bb565b60405180910390f35b3480156103d857600080fd5b506103e1610cfe565b6040516103ee9190613adc565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613b23565b610d07565b005b34801561042c57600080fd5b5061044760048036038101906104429190613960565b610fe0565b60405161045491906139bb565b60405180910390f35b34801561046957600080fd5b50610472611093565b60405161047f9190613bbf565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906139d6565b6110b7565b6040516104bc91906139bb565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613bda565b61110d565b6040516104f991906139bb565b60405180910390f35b34801561050e57600080fd5b506105176111b6565b60405161052491906139bb565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906139d6565b6111c9565b6040516105619190613a52565b60405180910390f35b34801561057657600080fd5b5061057f611211565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613c33565b611369565b005b3480156105b657600080fd5b506105d160048036038101906105cc9190613960565b61145b565b005b3480156105df57600080fd5b506105e861158b565b6040516105f59190613bbf565b60405180910390f35b34801561060a57600080fd5b506106136115b5565b6040516106209190613bbf565b60405180910390f35b34801561063557600080fd5b5061063e6115db565b60405161064b91906138a5565b60405180910390f35b34801561066057600080fd5b5061067b600480360381019061067691906139d6565b61166d565b60405161068891906139bb565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613bda565b61168d565b005b3480156106c657600080fd5b506106cf611775565b6040516106dc9190613a52565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613960565b61177b565b60405161071991906139bb565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190613960565b611848565b60405161075691906139bb565b60405180910390f35b34801561076b57600080fd5b50610774611866565b60405161078191906139bb565b60405180910390f35b34801561079657600080fd5b5061079f611879565b005b3480156107ad57600080fd5b506107c860048036038101906107c39190613c33565b61195b565b005b3480156107d657600080fd5b506107f160048036038101906107ec9190613c33565b611a4d565b005b3480156107ff57600080fd5b5061081a60048036038101906108159190613bda565b611bce565b005b34801561082857600080fd5b50610831611d03565b604051610845989796959493929190613c73565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613cf1565b611da1565b005b34801561088357600080fd5b5061089e60048036038101906108999190613cf1565b611ebe565b6040516108ab9190613a52565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190613c33565b611f45565b005b3480156108e957600080fd5b5061090460048036038101906108ff91906139d6565b612037565b005b34801561091257600080fd5b5061092d600480360381019061092891906139d6565b6121fe565b60405161093a91906139bb565b60405180910390f35b34801561094f57600080fd5b5061095861221e565b6040516109659190613d90565b60405180910390f35b60606003805461097d90613dda565b80601f01602080910402602001604051908101604052809291908181526020018280546109a990613dda565b80156109f65780601f106109cb576101008083540402835291602001916109f6565b820191906000526020600020905b8154815290600101906020018083116109d957829003601f168201915b5050505050905090565b6000610a14610a0d6122a0565b84846122a8565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b610a466122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acc90613e58565b60405180910390fd5b6064610adf610c0f565b610ae99190613ed6565b6103e883610af5610c0f565b610aff9190613f07565b610b099190613ed6565b1015610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190613fd3565b60405180910390fd5b6064610b54610c0f565b610b5e9190613ed6565b6103e882610b6a610c0f565b610b749190613f07565b610b7e9190613ed6565b1015610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690614065565b60405180910390fd5b6103e882610bcb610c0f565b610bd59190613f07565b610bdf9190613ed6565b6008819055506103e881610bf1610c0f565b610bfb9190613f07565b610c059190613ed6565b6009819055505050565b6000600254905090565b600f5481565b600e5481565b6000610c32848484612393565b610cf384610c3e6122a0565b610cee856040518060600160405280602881526020016149d260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca46122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b600190509392505050565b60006012905090565b610d0f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613e58565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610e3b9190614085565b610e459190614085565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610eff9190614085565b610f099190614085565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690614108565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115610fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcf90614108565b60405180910390fd5b505050505050565b6000611089610fed6122a0565b846110848560016000610ffe6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6122a8565b6001905092915050565b7f000000000000000000000000cd3e65c4c84674f37c38c050162326a860a4013681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111176122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613e58565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112196122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113716122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613e58565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990613e58565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61151661158b565b836040518363ffffffff1660e01b8152600401611534929190614128565b602060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115869190614166565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600480546115ea90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461161690613dda565b80156116635780601f1061163857610100808354040283529160200191611663565b820191906000526020600020905b81548152906001019060200180831161164657829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b6116956122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613e58565b60405180910390fd5b61172c61158b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611771573d6000803e3d6000fd5b5050565b60105481565b600061183e6117886122a0565b846118398560405180606001604052806025815260200161498760259139600160006117b26122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6122a8565b6001905092915050565b600061185c6118556122a0565b8484612393565b6001905092915050565b600c60029054906101000a900460ff1681565b6118816122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613e58565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600a436119539190614193565b601181905550565b6119636122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e990613e58565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611a556122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90613e58565b60405180910390fd5b7f000000000000000000000000cd3e65c4c84674f37c38c050162326a860a4013673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90614235565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bd66122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90613e58565b60405180910390fd5b6064611c6f610c0f565b611c799190613ed6565b6103e882611c85610c0f565b611c8f9190613f07565b611c999190613ed6565b1015611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906142c7565b60405180910390fd5b6103e881611ce6610c0f565b611cf09190613f07565b611cfa9190613ed6565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611da96122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613e58565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f4d6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613e58565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61203f6122a0565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614359565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2481565b60008082846122519190614193565b905083811015612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906143c5565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123869190613a52565b60405180910390a3505050565b60008114156123ad576123a883836000612ecd565b612e64565b6123b561158b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561242357506123f361158b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561243c5750600c60029054906101000a900460ff16155b156127c257600c60009054906101000a900460ff1661253657601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124f65750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614431565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125d95750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262857600854811115612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a9061449d565b60405180910390fd5b612717565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cb5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561271657600954811115612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c90614509565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127c157600a54612774836111c9565b8261277f9190614193565b11156127c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b790614575565b60405180910390fd5b5b5b60006127cd306111c9565b90506000600b5482101590508080156127f25750600c60019054906101000a900460ff165b801561280b5750600c60029054906101000a900460ff16155b80156128605750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156128b65750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561290c5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612950576001600c60026101000a81548160ff021916908315150217905550612934613077565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a065750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a1057600090505b8015612e55576000601154431015612ab257612a496064612a3b60638861336590919063ffffffff16565b6133e090919063ffffffff16565b90506063605e82612a5a9190613f07565b612a649190613ed6565b600e6000828254612a759190614193565b925050819055506063600582612a8b9190613f07565b612a959190613ed6565b60106000828254612aa69190614193565b92505081905550612e30565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b2057506000600d60000160049054906101000a900460ff1660ff16115b15612c7257612b606064612b52600d60000160049054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff1682612b999190613f07565b612ba39190613ed6565b600f6000828254612bb49190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff1682612bf29190613f07565b612bfc9190613ed6565b600e6000828254612c0d9190614193565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612c4b9190613f07565b612c559190613ed6565b60106000828254612c669190614193565b92505081905550612e2f565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce057506000600d60000160009054906101000a900460ff1660ff16115b15612e2e57612d206064612d12600d60000160009054906101000a900460ff1660ff168861336590919063ffffffff16565b6133e090919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612d599190613f07565b612d639190613ed6565b600f6000828254612d749190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612db29190613f07565b612dbc9190613ed6565b600e6000828254612dcd9190614193565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612e0b9190613f07565b612e159190613ed6565b60106000828254612e269190614193565b925050819055505b5b5b6000811115612e4557612e44873083612ecd565b5b8085612e519190614595565b9450505b612e60868686612ecd565b5050505b505050565b6000838311158290612eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea891906138a5565b60405180910390fd5b5060008385612ec09190614595565b9050809150509392505050565b612f38816040518060600160405280602681526020016149ac602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e699092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fcb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161306a9190613a52565b60405180910390a3505050565b6000613082306111c9565b90506000601054600e54600f546130999190614193565b6130a39190614193565b90506000808314806130b55750600082145b156130c257505050613363565b6014600b546130d19190613f07565b8311156130ea576014600b546130e79190613f07565b92505b6000600283600f54866130fd9190613f07565b6131079190613ed6565b6131119190613ed6565b90506000613128828661342a90919063ffffffff16565b9050600047905061313882613474565b600061314d824761342a90919063ffffffff16565b905060006131788761316a600e548561336590919063ffffffff16565b6133e090919063ffffffff16565b905060006131a3886131956010548661336590919063ffffffff16565b6133e090919063ffffffff16565b9050600081836131b39190614193565b846131be9190614595565b90506000600f819055506000600e8190555060006010819055506000871180156131e85750600081115b15613231576131f787826136c0565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686826040516132289291906145c9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476132769190614595565b60405161328290614623565b60006040518083038185875af1925050503d80600081146132bf576040519150601f19603f3d011682016040523d82523d6000602084013e6132c4565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161331090614623565b60006040518083038185875af1925050503d806000811461334d576040519150601f19603f3d011682016040523d82523d6000602084013e613352565b606091505b505080985050505050505050505050505b565b60008083141561337857600090506133da565b600082846133869190613f07565b90508284826133959190613ed6565b146133d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cc906146aa565b60405180910390fd5b809150505b92915050565b600061342283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137a9565b905092915050565b600061346c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e69565b905092915050565b6000600267ffffffffffffffff811115613491576134906146ca565b5b6040519080825280602002602001820160405280156134bf5781602001602082028036833780820191505090505b50905030816000815181106134d7576134d66146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561357757600080fd5b505afa15801561358b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135af919061473d565b816001815181106135c3576135c26146f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613628307f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad24846122a8565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161368a959493929190614863565b600060405180830381600087803b1580156136a457600080fd5b505af11580156136b8573d6000803e3d6000fd5b505050505050565b6136eb307f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad24846122a8565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613750969594939291906148bd565b6060604051808303818588803b15801561376957600080fd5b505af115801561377d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137a29190614933565b5050505050565b600080831182906137f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e791906138a5565b60405180910390fd5b50600083856137ff9190613ed6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561384657808201518184015260208101905061382b565b83811115613855576000848401525b50505050565b6000601f19601f8301169050919050565b60006138778261380c565b6138818185613817565b9350613891818560208601613828565b61389a8161385b565b840191505092915050565b600060208201905081810360008301526138bf818461386c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f7826138cc565b9050919050565b613907816138ec565b811461391257600080fd5b50565b600081359050613924816138fe565b92915050565b6000819050919050565b61393d8161392a565b811461394857600080fd5b50565b60008135905061395a81613934565b92915050565b60008060408385031215613977576139766138c7565b5b600061398585828601613915565b92505060206139968582860161394b565b9150509250929050565b60008115159050919050565b6139b5816139a0565b82525050565b60006020820190506139d060008301846139ac565b92915050565b6000602082840312156139ec576139eb6138c7565b5b60006139fa84828501613915565b91505092915050565b60008060408385031215613a1a57613a196138c7565b5b6000613a288582860161394b565b9250506020613a398582860161394b565b9150509250929050565b613a4c8161392a565b82525050565b6000602082019050613a676000830184613a43565b92915050565b600080600060608486031215613a8657613a856138c7565b5b6000613a9486828701613915565b9350506020613aa586828701613915565b9250506040613ab68682870161394b565b9150509250925092565b600060ff82169050919050565b613ad681613ac0565b82525050565b6000602082019050613af16000830184613acd565b92915050565b613b0081613ac0565b8114613b0b57600080fd5b50565b600081359050613b1d81613af7565b92915050565b60008060008060008060c08789031215613b4057613b3f6138c7565b5b6000613b4e89828a01613b0e565b9650506020613b5f89828a01613b0e565b9550506040613b7089828a01613b0e565b9450506060613b8189828a01613b0e565b9350506080613b9289828a01613b0e565b92505060a0613ba389828a01613b0e565b9150509295509295509295565b613bb9816138ec565b82525050565b6000602082019050613bd46000830184613bb0565b92915050565b600060208284031215613bf057613bef6138c7565b5b6000613bfe8482850161394b565b91505092915050565b613c10816139a0565b8114613c1b57600080fd5b50565b600081359050613c2d81613c07565b92915050565b60008060408385031215613c4a57613c496138c7565b5b6000613c5885828601613915565b9250506020613c6985828601613c1e565b9150509250929050565b600061010082019050613c89600083018b613acd565b613c96602083018a613acd565b613ca36040830189613acd565b613cb06060830188613acd565b613cbd6080830187613acd565b613cca60a0830186613acd565b613cd760c0830185613acd565b613ce460e0830184613acd565b9998505050505050505050565b60008060408385031215613d0857613d076138c7565b5b6000613d1685828601613915565b9250506020613d2785828601613915565b9150509250929050565b6000819050919050565b6000613d56613d51613d4c846138cc565b613d31565b6138cc565b9050919050565b6000613d6882613d3b565b9050919050565b6000613d7a82613d5d565b9050919050565b613d8a81613d6f565b82525050565b6000602082019050613da56000830184613d81565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613df257607f821691505b60208210811415613e0657613e05613dab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e42602083613817565b9150613e4d82613e0c565b602082019050919050565b60006020820190508181036000830152613e7181613e35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ee18261392a565b9150613eec8361392a565b925082613efc57613efb613e78565b5b828204905092915050565b6000613f128261392a565b9150613f1d8361392a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5657613f55613ea7565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613fbd602383613817565b9150613fc882613f61565b604082019050919050565b60006020820190508181036000830152613fec81613fb0565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b600061404f602483613817565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b600061409082613ac0565b915061409b83613ac0565b92508260ff038211156140b1576140b0613ea7565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b60006140f2601d83613817565b91506140fd826140bc565b602082019050919050565b60006020820190508181036000830152614121816140e5565b9050919050565b600060408201905061413d6000830185613bb0565b61414a6020830184613a43565b9392505050565b60008151905061416081613c07565b92915050565b60006020828403121561417c5761417b6138c7565b5b600061418a84828501614151565b91505092915050565b600061419e8261392a565b91506141a98361392a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141de576141dd613ea7565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b600061421f601783613817565b915061422a826141e9565b602082019050919050565b6000602082019050818103600083015261424e81614212565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006142b1602283613817565b91506142bc82614255565b604082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614343602683613817565b915061434e826142e7565b604082019050919050565b6000602082019050818103600083015261437281614336565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006143af601b83613817565b91506143ba82614379565b602082019050919050565b600060208201905081810360008301526143de816143a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061441b601683613817565b9150614426826143e5565b602082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614487601c83613817565b915061449282614451565b602082019050919050565b600060208201905081810360008301526144b68161447a565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b60006144f3601d83613817565b91506144fe826144bd565b602082019050919050565b60006020820190508181036000830152614522816144e6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061455f601383613817565b915061456a82614529565b602082019050919050565b6000602082019050818103600083015261458e81614552565b9050919050565b60006145a08261392a565b91506145ab8361392a565b9250828210156145be576145bd613ea7565b5b828203905092915050565b60006040820190506145de6000830185613a43565b6145eb6020830184613a43565b9392505050565b600081905092915050565b50565b600061460d6000836145f2565b9150614618826145fd565b600082019050919050565b600061462e82614600565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614694602183613817565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614737816138fe565b92915050565b600060208284031215614753576147526138c7565b5b600061476184828501614728565b91505092915050565b6000819050919050565b600061478f61478a6147858461476a565b613d31565b61392a565b9050919050565b61479f81614774565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147da816138ec565b82525050565b60006147ec83836147d1565b60208301905092915050565b6000602082019050919050565b6000614810826147a5565b61481a81856147b0565b9350614825836147c1565b8060005b8381101561485657815161483d88826147e0565b9750614848836147f8565b925050600181019050614829565b5085935050505092915050565b600060a0820190506148786000830188613a43565b6148856020830187614796565b81810360408301526148978186614805565b90506148a66060830185613bb0565b6148b36080830184613a43565b9695505050505050565b600060c0820190506148d26000830189613bb0565b6148df6020830188613a43565b6148ec6040830187614796565b6148f96060830186614796565b6149066080830185613bb0565b61491360a0830184613a43565b979650505050505050565b60008151905061492d81613934565b92915050565b60008060006060848603121561494c5761494b6138c7565b5b600061495a8682870161491e565b935050602061496b8682870161491e565b925050604061497c8682870161491e565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b2ef6e0e995cb9697d30abd06617fb74d75982abe08997461b86ddd39eeeee3864736f6c63430008090033

Deployed Bytecode Sourcemap

13995:12837:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1949:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2896:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15370:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18287:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2283:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15154:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3078:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2178:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19034:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3446:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14125:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20940:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18119:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14497:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2404:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6970:148;;;;;;;;;;;;;:::i;:::-;;20163:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20620:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6666:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14192:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2061:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15440:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20500:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15194:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3677:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2544:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14535:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17901:144;;;;;;;;;;;;;:::i;:::-;;19873:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20317:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18755:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14842:251;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;20763:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2732:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20011:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7132:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15656:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14076;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1949:99;2002:13;2035:5;2028:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1949:99;:::o;2896:168::-;2978:4;2995:39;3004:12;:10;:12::i;:::-;3018:7;3027:6;2995:8;:39::i;:::-;3052:4;3045:11;;2896:168;;;;:::o;15370:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;18287:458::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18449:3:::1;18433:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18423:4;18410:9;18394:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18393:34;;;;:::i;:::-;18392:61;;18384:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;18570:3;18554:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18544:4;18530:10;18514:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18513:35;;;;:::i;:::-;18512:62;;18504:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;18671:4;18658:9;18642:13;:11;:13::i;:::-;:25;;;;:::i;:::-;18641:34;;;;:::i;:::-;18626:12;:49;;;;18733:4;18719:10;18703:13;:11;:13::i;:::-;:26;;;;:::i;:::-;18702:35;;;;:::i;:::-;18686:13;:51;;;;18287:458:::0;;:::o;2283:107::-;2343:7;2370:12;;2363:19;;2283:107;:::o;15154:33::-;;;;:::o;15114:::-;;;;:::o;3078:354::-;3217:4;3234:36;3244:6;3252:9;3263:6;3234:9;:36::i;:::-;3281:121;3290:6;3298:12;:10;:12::i;:::-;3312:89;3350:6;3312:89;;;;;;;;;;;;;;;;;:11;:19;3324:6;3312:19;;;;;;;;;;;;;;;:33;3332:12;:10;:12::i;:::-;3312:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3281:8;:121::i;:::-;3420:4;3413:11;;3078:354;;;;;:::o;2178:92::-;2235:5;2260:2;2253:9;;2178:92;:::o;19034:827::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19239:16:::1;19215:5;:21;;;:40;;;;;;;;;;;;;;;;;;19290:16;19266:5;:21;;;:40;;;;;;;;;;;;;;;;;;19335:10;19317:5;:15;;;:28;;;;;;;;;;;;;;;;;;19425:5;:15;;;;;;;;;;;;19401:5;:21;;;;;;;;;;;;19377:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;19356:5;:18;;;:84;;;;;;;;;;;;;;;;;;19478:17;19453:5;:22;;;:42;;;;;;;;;;;;;;;;;;19531:17;19506:5;:22;;;:42;;;;;;;;;;;;;;;;;;19578:11;19559:5;:16;;;:30;;;;;;;;;;;;;;;;;;19672:5;:16;;;;;;;;;;;;19647:5;:22;;;;;;;;;;;;19622:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;19600:5;:19;;;:88;;;;;;;;;;;;;;;;;;19729:2;19707:5;:18;;;;;;;;;;;;:24;;;;19699:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19810:2;19787:5;:19;;;;;;;;;;;;:25;;;;19779:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19034:827:::0;;;;;;:::o;3446:217::-;3533:4;3550:83;3559:12;:10;:12::i;:::-;3573:7;3582:50;3621:10;3582:11;:25;3594:12;:10;:12::i;:::-;3582:25;;;;;;;;;;;;;;;:34;3608:7;3582:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3550:8;:83::i;:::-;3651:4;3644:11;;3446:217;;;;:::o;14125:38::-;;;:::o;20940:125::-;21005:4;21029:19;:28;21049:7;21029:28;;;;;;;;;;;;;;;;;;;;;;;;;21022:35;;20940:125;;;:::o;18119:158::-;18200:4;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18238:9:::1;18216:19;:31;;;;18265:4;18258:11;;18119:158:::0;;;:::o;14497:31::-;;;;;;;;;;;;;:::o;2404:126::-;2477:7;2504:9;:18;2514:7;2504:18;;;;;;;;;;;;;;;;2497:25;;2404:126;;;:::o;6970:148::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7077:1:::1;7040:40;;7061:6;;;;;;;;;;;7040:40;;;;;;;;;;;;7108:1;7091:6;;:19;;;;;;;;;;;;;;;;;;6970:148::o:0;20163:144::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20295:4:::1;20253:31;:39;20285:6;20253:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20163:144:::0;;:::o;20620:135::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20712:8:::1;20705:25;;;20731:7;:5;:7::i;:::-;20740:6;20705:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20620:135:::0;;:::o;6666:78::-;6703:7;6730:6;;;;;;;;;;;6723:13;;6666:78;:::o;14192:25::-;;;;;;;;;;;;;:::o;2061:103::-;2116:13;2149:7;2142:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2061:103;:::o;15440:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;20500:112::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20576:7:::1;:5;:7::i;:::-;20568:25;;:36;20594:9;20568:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20500:112:::0;:::o;15194:27::-;;;;:::o;3677:268::-;3769:4;3786:129;3795:12;:10;:12::i;:::-;3809:7;3818:96;3857:15;3818:96;;;;;;;;;;;;;;;;;:11;:25;3830:12;:10;:12::i;:::-;3818:25;;;;;;;;;;;;;;;:34;3844:7;3818:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3786:8;:129::i;:::-;3933:4;3926:11;;3677:268;;;;:::o;2544:174::-;2629:4;2646:42;2656:12;:10;:12::i;:::-;2670:9;2681:6;2646:9;:42::i;:::-;2706:4;2699:11;;2544:174;;;;:::o;14535:22::-;;;;;;;;;;;;;:::o;17901:144::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17966:4:::1;17954:9;;:16;;;;;;;;;;;;;;;;;;17995:4;17981:11;;:18;;;;;;;;;;;;;;;;;;18035:2;18020:12;:17;;;;:::i;:::-;18010:7;:27;;;;17901:144::o:0;19873:132::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19989:8:::1;19958:19;:28;19978:7;19958:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19873:132:::0;;:::o;20317:177::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20410:13:::1;20402:21;;:4;:21;;;;20394:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20481:5;20462:10;:16;20473:4;20462:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;20317:177:::0;;:::o;18755:271::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18908:3:::1;18892:13;:11;:13::i;:::-;:19;;;;:::i;:::-;18882:4;18865:13;18849;:11;:13::i;:::-;:29;;;;:::i;:::-;18848:38;;;;:::i;:::-;18847:65;;18839:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;19014:4;18997:13;18981;:11;:13::i;:::-;:29;;;;:::i;:::-;18980:38;;;;:::i;:::-;18962:15;:56;;;;18755:271:::0;:::o;14842:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20763:169::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20875:16:::1;20857:15;;:34;;;;;;;;;;;;;;;;;;20914:10;20902:9;;:22;;;;;;;;;;;;;;;;;;20763:169:::0;;:::o;2732:150::-;2820:7;2847:11;:18;2859:5;2847:18;;;;;;;;;;;;;;;:27;2866:7;2847:27;;;;;;;;;;;;;;;;2840:34;;2732:150;;;;:::o;20011:146::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20141:8:::1;20103:26;:35;20130:7;20103:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20011:146:::0;;:::o;7132:244::-;6887:12;:10;:12::i;:::-;6877:22;;:6;;;;;;;;;;;:22;;;6869:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7241:1:::1;7221:22;;:8;:22;;;;7213:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7331:8;7302:38;;7323:6;;;;;;;;;;;7302:38;;;;;;;;;;;;7360:8;7351:6;;:17;;;;;;;;;;;;;;;;;;7132:244:::0;:::o;15656:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;14076:::-;;;:::o;4931:180::-;4988:7;5008:9;5024:1;5020;:5;;;;:::i;:::-;5008:17;;5049:1;5044;:6;;5036:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5102:1;5095:8;;;4931:180;;;;:::o;1381:97::-;1433:7;1460:10;1453:17;;1381:97;:::o;4666:220::-;4824:6;4794:11;:18;4806:5;4794:18;;;;;;;;;;;;;;;:27;4813:7;4794:27;;;;;;;;;;;;;;;:36;;;;4862:7;4846:32;;4855:5;4846:32;;;4871:6;4846:32;;;;;;:::i;:::-;;;;;;;;4666:220;;;:::o;21073:3261::-;21240:1;21230:6;:11;21226:102;;;21258:37;21274:6;21282:9;21293:1;21258:15;:37::i;:::-;21310:7;;21226:102;21368:7;:5;:7::i;:::-;21358:17;;:6;:17;;;;:54;;;;;21405:7;:5;:7::i;:::-;21392:20;;:9;:20;;;;21358:54;:82;;;;;21430:10;;;;;;;;;;;21429:11;21358:82;21340:849;;;21474:9;;;;;;;;;;;21469:147;;21512:19;:27;21532:6;21512:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;21543:19;:30;21563:9;21543:30;;;;;;;;;;;;;;;;;;;;;;;;;21512:61;21504:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;21469:147;21634:10;:18;21645:6;21634:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21657:31;:42;21689:9;21657:42;;;;;;;;;;;;;;;;;;;;;;;;;21656:43;21634:65;21630:360;;;21738:12;;21728:6;:22;;21720:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21630:360;;;21823:10;:21;21834:9;21823:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;21849:31;:39;21881:6;21849:39;;;;;;;;;;;;;;;;;;;;;;;;;21848:40;21823:65;21819:171;;;21927:13;;21917:6;:23;;21909:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21819:171;21630:360;22011:26;:37;22038:9;22011:37;;;;;;;;;;;;;;;;;;;;;;;;;22006:159;;22110:15;;22086:20;22096:9;22086;:20::i;:::-;22077:6;:29;;;;:::i;:::-;:48;;22069:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22006:159;21340:849;22215:28;22246:24;22264:4;22246:9;:24::i;:::-;22215:55;;22284:12;22323:19;;22299:20;:43;;22284:58;;22373:7;:35;;;;;22397:11;;;;;;;;;;;22373:35;:63;;;;;22426:10;;;;;;;;;;;22425:11;22373:63;:101;;;;;22453:10;:21;22464:9;22453:21;;;;;;;;;;;;;;;;;;;;;;;;;22373:101;:146;;;;;22492:19;:27;22512:6;22492:27;;;;;;;;;;;;;;;;;;;;;;;;;22491:28;22373:146;:194;;;;;22537:19;:30;22557:9;22537:30;;;;;;;;;;;;;;;;;;;;;;;;;22536:31;22373:194;22355:326;;;22607:4;22594:10;;:17;;;;;;;;;;;;;;;;;;22626:10;:8;:10::i;:::-;22664:5;22651:10;;:18;;;;;;;;;;;;;;;;;;22355:326;22694:12;22710:10;;;;;;;;;;;22709:11;22694:26;;22822:19;:27;22842:6;22822:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;22853:19;:30;22873:9;22853:30;;;;;;;;;;;;;;;;;;;;;;;;;22822:61;22818:109;;;22910:5;22900:15;;22818:109;23028:7;23024:1248;;;23052:12;23101:7;;23086:12;:22;23083:1036;;;23136:23;23155:3;23136:14;23147:2;23136:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;23129:30;;23214:2;23208;23201:4;:9;;;;:::i;:::-;23200:16;;;;:::i;:::-;23178:18;;:38;;;;;;;:::i;:::-;;;;;;;;23264:2;23259:1;23252:4;:8;;;;:::i;:::-;23251:15;;;;:::i;:::-;23235:12;;:31;;;;;;;:::i;:::-;;;;;;;;23083:1036;;;23292:10;:21;23303:9;23292:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;23339:1;23317:5;:19;;;;;;;;;;;;:23;;;23292:48;23288:831;;;23368:40;23404:3;23368:31;23379:5;:19;;;;;;;;;;;;23368:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;23361:47;;23481:5;:19;;;;;;;;;;;;23449:51;;23456:5;:22;;;;;;;;;;;;23449:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23427:18;;:73;;;;;;;:::i;:::-;;;;;;;;23573:5;:19;;;;;;;;;;;;23541:51;;23548:5;:22;;;;;;;;;;;;23541:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;23519:18;;:73;;;;;;;:::i;:::-;;;;;;;;23653:5;:19;;;;;;;;;;;;23627:45;;23634:5;:16;;;;;;;;;;;;23627:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;23611:12;;:61;;;;;;;:::i;:::-;;;;;;;;23288:831;;;23734:10;:18;23745:6;23734:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;23777:1;23756:5;:18;;;;;;;;;;;;:22;;;23734:44;23730:389;;;23806:39;23841:3;23806:30;23817:5;:18;;;;;;;;;;;;23806:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;23799:46;;23917:5;:18;;;;;;;;;;;;23886:49;;23893:5;:21;;;;;;;;;;;;23886:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;23864:18;;:71;;;;;;;:::i;:::-;;;;;;;;24007:5;:18;;;;;;;;;;;;23976:49;;23983:5;:21;;;;;;;;;;;;23976:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;23954:18;;:71;;;;;;;:::i;:::-;;;;;;;;24085:5;:18;;;;;;;;;;;;24060:43;;24067:5;:15;;;;;;;;;;;;24060:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;24044:12;;:59;;;;;;;:::i;:::-;;;;;;;;23730:389;23288:831;23083:1036;24146:1;24139:4;:8;24135:93;;;24168:44;24184:6;24200:4;24207;24168:15;:44::i;:::-;24135:93;24254:4;24244:14;;;;;:::i;:::-;;;23037:1235;23024:1248;24284:42;24300:6;24308:9;24319:6;24284:15;:42::i;:::-;21205:3129;;;21073:3261;;;;:::o;5272:191::-;5357:7;5390:1;5385;:6;;5393:12;5377:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5417:9;5433:1;5429;:5;;;;:::i;:::-;5417:17;;5454:1;5447:8;;;5272:191;;;;;:::o;3959:358::-;4121:71;4143:6;4121:71;;;;;;;;;;;;;;;;;:9;:17;4131:6;4121:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4101:9;:17;4111:6;4101:17;;;;;;;;;;;;;;;:91;;;;4226:32;4251:6;4226:9;:20;4236:9;4226:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4203:9;:20;4213:9;4203:20;;;;;;;;;;;;;;;:55;;;;4291:9;4274:35;;4283:6;4274:35;;;4302:6;4274:35;;;;;;:::i;:::-;;;;;;;;3959:358;;;:::o;25262:1565::-;25301:28;25332:24;25350:4;25332:9;:24::i;:::-;25301:55;;25367:14;25426:12;;25405:18;;25384;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;25367:71;;25449:12;25502:1;25478:20;:25;:40;;;;25517:1;25507:6;:11;25478:40;25474:57;;;25522:7;;;;;25474:57;25592:2;25570:19;;:24;;;;:::i;:::-;25547:20;:47;25543:127;;;25656:2;25634:19;;:24;;;;:::i;:::-;25611:47;;25543:127;25731:23;25810:1;25801:6;25780:18;;25757:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;25731:80;;25822:26;25851:41;25876:15;25851:20;:24;;:41;;;;:::i;:::-;25822:70;;25906:25;25934:21;25906:49;;25968:36;25985:18;25968:16;:36::i;:::-;26019:18;26040:44;26066:17;26040:21;:25;;:44;;;;:::i;:::-;26019:65;;26098:23;26124:46;26163:6;26124:34;26139:18;;26124:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;26098:72;;26181:17;26201:40;26234:6;26201:28;26216:12;;26201:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;26181:60;;26252:23;26310:9;26292:15;:27;;;;:::i;:::-;26278:10;:42;;;;:::i;:::-;26252:68;;26356:1;26335:18;:22;;;;26389:1;26368:18;:22;;;;26416:1;26401:12;:16;;;;26454:1;26436:15;:19;:42;;;;;26477:1;26459:15;:19;26436:42;26432:192;;;26495:46;26508:15;26525;26495:12;:46::i;:::-;26561:51;26576:18;26596:15;26561:51;;;;;;;:::i;:::-;;;;;;;;26432:192;26657:9;;;;;;;;;;;26649:23;;26706:15;26682:21;:39;;;;:::i;:::-;26649:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26636:93;;;;;26761:15;;;;;;;;;;;26753:29;;26791:21;26753:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26740:79;;;;;25290:1537;;;;;;;;;;25262:1565;:::o;5471:256::-;5528:7;5563:1;5558;:6;5554:47;;;5588:1;5581:8;;;;5554:47;5614:9;5630:1;5626;:5;;;;:::i;:::-;5614:17;;5659:1;5654;5650;:5;;;;:::i;:::-;:10;5642:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5718:1;5711:8;;;5471:256;;;;;:::o;5738:131::-;5795:7;5822:39;5826:1;5829;5822:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5815:46;;5738:131;;;;:::o;5124:135::-;5181:7;5208:43;5212:1;5215;5208:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5201:50;;5124:135;;;;:::o;24342:554::-;24466:21;24504:1;24490:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24466:40;;24535:4;24517;24522:1;24517:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24561:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24551:4;24556:1;24551:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24587:49;24604:4;24619:6;24628:7;24587:8;:49::i;:::-;24675:6;:57;;;24747:7;24769:1;24813:4;24840;24860:15;24675:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24393:503;24342:554;:::o;24904:350::-;25048:49;25065:4;25080:6;25089:7;25048:8;:49::i;:::-;25140:6;:22;;;25171:9;25192:4;25199:7;25208:1;25211;25223:4;25230:15;25140:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24904:350;;:::o;5881:277::-;5966:7;5998:1;5994;:5;6001:12;5986:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6025:9;6041:1;6037;:5;;;;:::i;:::-;6025:17;;6149:1;6142:8;;;5881:277;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:619::-;4738:6;4746;4754;4803:2;4791:9;4782:7;4778:23;4774:32;4771:119;;;4809:79;;:::i;:::-;4771:119;4929:1;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4900:117;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;5184:2;5210:53;5255:7;5246:6;5235:9;5231:22;5210:53;:::i;:::-;5200:63;;5155:118;4661:619;;;;;:::o;5286:86::-;5321:7;5361:4;5354:5;5350:16;5339:27;;5286:86;;;:::o;5378:112::-;5461:22;5477:5;5461:22;:::i;:::-;5456:3;5449:35;5378:112;;:::o;5496:214::-;5585:4;5623:2;5612:9;5608:18;5600:26;;5636:67;5700:1;5689:9;5685:17;5676:6;5636:67;:::i;:::-;5496:214;;;;:::o;5716:118::-;5787:22;5803:5;5787:22;:::i;:::-;5780:5;5777:33;5767:61;;5824:1;5821;5814:12;5767:61;5716:118;:::o;5840:135::-;5884:5;5922:6;5909:20;5900:29;;5938:31;5963:5;5938:31;:::i;:::-;5840:135;;;;:::o;5981:1033::-;6073:6;6081;6089;6097;6105;6113;6162:3;6150:9;6141:7;6137:23;6133:33;6130:120;;;6169:79;;:::i;:::-;6130:120;6289:1;6314:51;6357:7;6348:6;6337:9;6333:22;6314:51;:::i;:::-;6304:61;;6260:115;6414:2;6440:51;6483:7;6474:6;6463:9;6459:22;6440:51;:::i;:::-;6430:61;;6385:116;6540:2;6566:51;6609:7;6600:6;6589:9;6585:22;6566:51;:::i;:::-;6556:61;;6511:116;6666:2;6692:51;6735:7;6726:6;6715:9;6711:22;6692:51;:::i;:::-;6682:61;;6637:116;6792:3;6819:51;6862:7;6853:6;6842:9;6838:22;6819:51;:::i;:::-;6809:61;;6763:117;6919:3;6946:51;6989:7;6980:6;6969:9;6965:22;6946:51;:::i;:::-;6936:61;;6890:117;5981:1033;;;;;;;;:::o;7020:118::-;7107:24;7125:5;7107:24;:::i;:::-;7102:3;7095:37;7020:118;;:::o;7144:222::-;7237:4;7275:2;7264:9;7260:18;7252:26;;7288:71;7356:1;7345:9;7341:17;7332:6;7288:71;:::i;:::-;7144:222;;;;:::o;7372:329::-;7431:6;7480:2;7468:9;7459:7;7455:23;7451:32;7448:119;;;7486:79;;:::i;:::-;7448:119;7606:1;7631:53;7676:7;7667:6;7656:9;7652:22;7631:53;:::i;:::-;7621:63;;7577:117;7372:329;;;;:::o;7707:116::-;7777:21;7792:5;7777:21;:::i;:::-;7770:5;7767:32;7757:60;;7813:1;7810;7803:12;7757:60;7707:116;:::o;7829:133::-;7872:5;7910:6;7897:20;7888:29;;7926:30;7950:5;7926:30;:::i;:::-;7829:133;;;;:::o;7968:468::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:50;8411:7;8402:6;8391:9;8387:22;8369:50;:::i;:::-;8359:60;;8314:115;7968:468;;;;;:::o;8442:933::-;8699:4;8737:3;8726:9;8722:19;8714:27;;8751:67;8815:1;8804:9;8800:17;8791:6;8751:67;:::i;:::-;8828:68;8892:2;8881:9;8877:18;8868:6;8828:68;:::i;:::-;8906;8970:2;8959:9;8955:18;8946:6;8906:68;:::i;:::-;8984;9048:2;9037:9;9033:18;9024:6;8984:68;:::i;:::-;9062:69;9126:3;9115:9;9111:19;9102:6;9062:69;:::i;:::-;9141;9205:3;9194:9;9190:19;9181:6;9141:69;:::i;:::-;9220;9284:3;9273:9;9269:19;9260:6;9220:69;:::i;:::-;9299;9363:3;9352:9;9348:19;9339:6;9299:69;:::i;:::-;8442:933;;;;;;;;;;;:::o;9381:474::-;9449:6;9457;9506:2;9494:9;9485:7;9481:23;9477:32;9474:119;;;9512:79;;:::i;:::-;9474:119;9632:1;9657:53;9702:7;9693:6;9682:9;9678:22;9657:53;:::i;:::-;9647:63;;9603:117;9759:2;9785:53;9830:7;9821:6;9810:9;9806:22;9785:53;:::i;:::-;9775:63;;9730:118;9381:474;;;;;:::o;9861:60::-;9889:3;9910:5;9903:12;;9861:60;;;:::o;9927:142::-;9977:9;10010:53;10028:34;10037:24;10055:5;10037:24;:::i;:::-;10028:34;:::i;:::-;10010:53;:::i;:::-;9997:66;;9927:142;;;:::o;10075:126::-;10125:9;10158:37;10189:5;10158:37;:::i;:::-;10145:50;;10075:126;;;:::o;10207:153::-;10284:9;10317:37;10348:5;10317:37;:::i;:::-;10304:50;;10207:153;;;:::o;10366:185::-;10480:64;10538:5;10480:64;:::i;:::-;10475:3;10468:77;10366:185;;:::o;10557:276::-;10677:4;10715:2;10704:9;10700:18;10692:26;;10728:98;10823:1;10812:9;10808:17;10799:6;10728:98;:::i;:::-;10557:276;;;;:::o;10839:180::-;10887:77;10884:1;10877:88;10984:4;10981:1;10974:15;11008:4;11005:1;10998:15;11025:320;11069:6;11106:1;11100:4;11096:12;11086:22;;11153:1;11147:4;11143:12;11174:18;11164:81;;11230:4;11222:6;11218:17;11208:27;;11164:81;11292:2;11284:6;11281:14;11261:18;11258:38;11255:84;;;11311:18;;:::i;:::-;11255:84;11076:269;11025:320;;;:::o;11351:182::-;11491:34;11487:1;11479:6;11475:14;11468:58;11351:182;:::o;11539:366::-;11681:3;11702:67;11766:2;11761:3;11702:67;:::i;:::-;11695:74;;11778:93;11867:3;11778:93;:::i;:::-;11896:2;11891:3;11887:12;11880:19;;11539:366;;;:::o;11911:419::-;12077:4;12115:2;12104:9;12100:18;12092:26;;12164:9;12158:4;12154:20;12150:1;12139:9;12135:17;12128:47;12192:131;12318:4;12192:131;:::i;:::-;12184:139;;11911:419;;;:::o;12336:180::-;12384:77;12381:1;12374:88;12481:4;12478:1;12471:15;12505:4;12502:1;12495:15;12522:180;12570:77;12567:1;12560:88;12667:4;12664:1;12657:15;12691:4;12688:1;12681:15;12708:185;12748:1;12765:20;12783:1;12765:20;:::i;:::-;12760:25;;12799:20;12817:1;12799:20;:::i;:::-;12794:25;;12838:1;12828:35;;12843:18;;:::i;:::-;12828:35;12885:1;12882;12878:9;12873:14;;12708:185;;;;:::o;12899:348::-;12939:7;12962:20;12980:1;12962:20;:::i;:::-;12957:25;;12996:20;13014:1;12996:20;:::i;:::-;12991:25;;13184:1;13116:66;13112:74;13109:1;13106:81;13101:1;13094:9;13087:17;13083:105;13080:131;;;13191:18;;:::i;:::-;13080:131;13239:1;13236;13232:9;13221:20;;12899:348;;;;:::o;13253:222::-;13393:34;13389:1;13381:6;13377:14;13370:58;13462:5;13457:2;13449:6;13445:15;13438:30;13253:222;:::o;13481:366::-;13623:3;13644:67;13708:2;13703:3;13644:67;:::i;:::-;13637:74;;13720:93;13809:3;13720:93;:::i;:::-;13838:2;13833:3;13829:12;13822:19;;13481:366;;;:::o;13853:419::-;14019:4;14057:2;14046:9;14042:18;14034:26;;14106:9;14100:4;14096:20;14092:1;14081:9;14077:17;14070:47;14134:131;14260:4;14134:131;:::i;:::-;14126:139;;13853:419;;;:::o;14278:223::-;14418:34;14414:1;14406:6;14402:14;14395:58;14487:6;14482:2;14474:6;14470:15;14463:31;14278:223;:::o;14507:366::-;14649:3;14670:67;14734:2;14729:3;14670:67;:::i;:::-;14663:74;;14746:93;14835:3;14746:93;:::i;:::-;14864:2;14859:3;14855:12;14848:19;;14507:366;;;:::o;14879:419::-;15045:4;15083:2;15072:9;15068:18;15060:26;;15132:9;15126:4;15122:20;15118:1;15107:9;15103:17;15096:47;15160:131;15286:4;15160:131;:::i;:::-;15152:139;;14879:419;;;:::o;15304:237::-;15342:3;15361:18;15377:1;15361:18;:::i;:::-;15356:23;;15393:18;15409:1;15393:18;:::i;:::-;15388:23;;15483:1;15477:4;15473:12;15470:1;15467:19;15464:45;;;15489:18;;:::i;:::-;15464:45;15533:1;15530;15526:9;15519:16;;15304:237;;;;:::o;15547:179::-;15687:31;15683:1;15675:6;15671:14;15664:55;15547:179;:::o;15732:366::-;15874:3;15895:67;15959:2;15954:3;15895:67;:::i;:::-;15888:74;;15971:93;16060:3;15971:93;:::i;:::-;16089:2;16084:3;16080:12;16073:19;;15732:366;;;:::o;16104:419::-;16270:4;16308:2;16297:9;16293:18;16285:26;;16357:9;16351:4;16347:20;16343:1;16332:9;16328:17;16321:47;16385:131;16511:4;16385:131;:::i;:::-;16377:139;;16104:419;;;:::o;16529:332::-;16650:4;16688:2;16677:9;16673:18;16665:26;;16701:71;16769:1;16758:9;16754:17;16745:6;16701:71;:::i;:::-;16782:72;16850:2;16839:9;16835:18;16826:6;16782:72;:::i;:::-;16529:332;;;;;:::o;16867:137::-;16921:5;16952:6;16946:13;16937:22;;16968:30;16992:5;16968:30;:::i;:::-;16867:137;;;;:::o;17010:345::-;17077:6;17126:2;17114:9;17105:7;17101:23;17097:32;17094:119;;;17132:79;;:::i;:::-;17094:119;17252:1;17277:61;17330:7;17321:6;17310:9;17306:22;17277:61;:::i;:::-;17267:71;;17223:125;17010:345;;;;:::o;17361:305::-;17401:3;17420:20;17438:1;17420:20;:::i;:::-;17415:25;;17454:20;17472:1;17454:20;:::i;:::-;17449:25;;17608:1;17540:66;17536:74;17533:1;17530:81;17527:107;;;17614:18;;:::i;:::-;17527:107;17658:1;17655;17651:9;17644:16;;17361:305;;;;:::o;17672:173::-;17812:25;17808:1;17800:6;17796:14;17789:49;17672:173;:::o;17851:366::-;17993:3;18014:67;18078:2;18073:3;18014:67;:::i;:::-;18007:74;;18090:93;18179:3;18090:93;:::i;:::-;18208:2;18203:3;18199:12;18192:19;;17851:366;;;:::o;18223:419::-;18389:4;18427:2;18416:9;18412:18;18404:26;;18476:9;18470:4;18466:20;18462:1;18451:9;18447:17;18440:47;18504:131;18630:4;18504:131;:::i;:::-;18496:139;;18223:419;;;:::o;18648:221::-;18788:34;18784:1;18776:6;18772:14;18765:58;18857:4;18852:2;18844:6;18840:15;18833:29;18648:221;:::o;18875:366::-;19017:3;19038:67;19102:2;19097:3;19038:67;:::i;:::-;19031:74;;19114:93;19203:3;19114:93;:::i;:::-;19232:2;19227:3;19223:12;19216:19;;18875:366;;;:::o;19247:419::-;19413:4;19451:2;19440:9;19436:18;19428:26;;19500:9;19494:4;19490:20;19486:1;19475:9;19471:17;19464:47;19528:131;19654:4;19528:131;:::i;:::-;19520:139;;19247:419;;;:::o;19672:225::-;19812:34;19808:1;19800:6;19796:14;19789:58;19881:8;19876:2;19868:6;19864:15;19857:33;19672:225;:::o;19903:366::-;20045:3;20066:67;20130:2;20125:3;20066:67;:::i;:::-;20059:74;;20142:93;20231:3;20142:93;:::i;:::-;20260:2;20255:3;20251:12;20244:19;;19903:366;;;:::o;20275:419::-;20441:4;20479:2;20468:9;20464:18;20456:26;;20528:9;20522:4;20518:20;20514:1;20503:9;20499:17;20492:47;20556:131;20682:4;20556:131;:::i;:::-;20548:139;;20275:419;;;:::o;20700:177::-;20840:29;20836:1;20828:6;20824:14;20817:53;20700:177;:::o;20883:366::-;21025:3;21046:67;21110:2;21105:3;21046:67;:::i;:::-;21039:74;;21122:93;21211:3;21122:93;:::i;:::-;21240:2;21235:3;21231:12;21224:19;;20883:366;;;:::o;21255:419::-;21421:4;21459:2;21448:9;21444:18;21436:26;;21508:9;21502:4;21498:20;21494:1;21483:9;21479:17;21472:47;21536:131;21662:4;21536:131;:::i;:::-;21528:139;;21255:419;;;:::o;21680:172::-;21820:24;21816:1;21808:6;21804:14;21797:48;21680:172;:::o;21858:366::-;22000:3;22021:67;22085:2;22080:3;22021:67;:::i;:::-;22014:74;;22097:93;22186:3;22097:93;:::i;:::-;22215:2;22210:3;22206:12;22199:19;;21858:366;;;:::o;22230:419::-;22396:4;22434:2;22423:9;22419:18;22411:26;;22483:9;22477:4;22473:20;22469:1;22458:9;22454:17;22447:47;22511:131;22637:4;22511:131;:::i;:::-;22503:139;;22230:419;;;:::o;22655:178::-;22795:30;22791:1;22783:6;22779:14;22772:54;22655:178;:::o;22839:366::-;22981:3;23002:67;23066:2;23061:3;23002:67;:::i;:::-;22995:74;;23078:93;23167:3;23078:93;:::i;:::-;23196:2;23191:3;23187:12;23180:19;;22839:366;;;:::o;23211:419::-;23377:4;23415:2;23404:9;23400:18;23392:26;;23464:9;23458:4;23454:20;23450:1;23439:9;23435:17;23428:47;23492:131;23618:4;23492:131;:::i;:::-;23484:139;;23211:419;;;:::o;23636:179::-;23776:31;23772:1;23764:6;23760:14;23753:55;23636:179;:::o;23821:366::-;23963:3;23984:67;24048:2;24043:3;23984:67;:::i;:::-;23977:74;;24060:93;24149:3;24060:93;:::i;:::-;24178:2;24173:3;24169:12;24162:19;;23821:366;;;:::o;24193:419::-;24359:4;24397:2;24386:9;24382:18;24374:26;;24446:9;24440:4;24436:20;24432:1;24421:9;24417:17;24410:47;24474:131;24600:4;24474:131;:::i;:::-;24466:139;;24193:419;;;:::o;24618:169::-;24758:21;24754:1;24746:6;24742:14;24735:45;24618:169;:::o;24793:366::-;24935:3;24956:67;25020:2;25015:3;24956:67;:::i;:::-;24949:74;;25032:93;25121:3;25032:93;:::i;:::-;25150:2;25145:3;25141:12;25134:19;;24793:366;;;:::o;25165:419::-;25331:4;25369:2;25358:9;25354:18;25346:26;;25418:9;25412:4;25408:20;25404:1;25393:9;25389:17;25382:47;25446:131;25572:4;25446:131;:::i;:::-;25438:139;;25165:419;;;:::o;25590:191::-;25630:4;25650:20;25668:1;25650:20;:::i;:::-;25645:25;;25684:20;25702:1;25684:20;:::i;:::-;25679:25;;25723:1;25720;25717:8;25714:34;;;25728:18;;:::i;:::-;25714:34;25773:1;25770;25766:9;25758:17;;25590:191;;;;:::o;25787:332::-;25908:4;25946:2;25935:9;25931:18;25923:26;;25959:71;26027:1;26016:9;26012:17;26003:6;25959:71;:::i;:::-;26040:72;26108:2;26097:9;26093:18;26084:6;26040:72;:::i;:::-;25787:332;;;;;:::o;26125:147::-;26226:11;26263:3;26248:18;;26125:147;;;;:::o;26278:114::-;;:::o;26398:398::-;26557:3;26578:83;26659:1;26654:3;26578:83;:::i;:::-;26571:90;;26670:93;26759:3;26670:93;:::i;:::-;26788:1;26783:3;26779:11;26772:18;;26398:398;;;:::o;26802:379::-;26986:3;27008:147;27151:3;27008:147;:::i;:::-;27001:154;;27172:3;27165:10;;26802:379;;;:::o;27187:220::-;27327:34;27323:1;27315:6;27311:14;27304:58;27396:3;27391:2;27383:6;27379:15;27372:28;27187:220;:::o;27413:366::-;27555:3;27576:67;27640:2;27635:3;27576:67;:::i;:::-;27569:74;;27652:93;27741:3;27652:93;:::i;:::-;27770:2;27765:3;27761:12;27754:19;;27413:366;;;:::o;27785:419::-;27951:4;27989:2;27978:9;27974:18;27966:26;;28038:9;28032:4;28028:20;28024:1;28013:9;28009:17;28002:47;28066:131;28192:4;28066:131;:::i;:::-;28058:139;;27785:419;;;:::o;28210:180::-;28258:77;28255:1;28248:88;28355:4;28352:1;28345:15;28379:4;28376:1;28369:15;28396:180;28444:77;28441:1;28434:88;28541:4;28538:1;28531:15;28565:4;28562:1;28555:15;28582:143;28639:5;28670:6;28664:13;28655:22;;28686:33;28713:5;28686:33;:::i;:::-;28582:143;;;;:::o;28731:351::-;28801:6;28850:2;28838:9;28829:7;28825:23;28821:32;28818:119;;;28856:79;;:::i;:::-;28818:119;28976:1;29001:64;29057:7;29048:6;29037:9;29033:22;29001:64;:::i;:::-;28991:74;;28947:128;28731:351;;;;:::o;29088:85::-;29133:7;29162:5;29151:16;;29088:85;;;:::o;29179:158::-;29237:9;29270:61;29288:42;29297:32;29323:5;29297:32;:::i;:::-;29288:42;:::i;:::-;29270:61;:::i;:::-;29257:74;;29179:158;;;:::o;29343:147::-;29438:45;29477:5;29438:45;:::i;:::-;29433:3;29426:58;29343:147;;:::o;29496:114::-;29563:6;29597:5;29591:12;29581:22;;29496:114;;;:::o;29616:184::-;29715:11;29749:6;29744:3;29737:19;29789:4;29784:3;29780:14;29765:29;;29616:184;;;;:::o;29806:132::-;29873:4;29896:3;29888:11;;29926:4;29921:3;29917:14;29909:22;;29806:132;;;:::o;29944:108::-;30021:24;30039:5;30021:24;:::i;:::-;30016:3;30009:37;29944:108;;:::o;30058:179::-;30127:10;30148:46;30190:3;30182:6;30148:46;:::i;:::-;30226:4;30221:3;30217:14;30203:28;;30058:179;;;;:::o;30243:113::-;30313:4;30345;30340:3;30336:14;30328:22;;30243:113;;;:::o;30392:732::-;30511:3;30540:54;30588:5;30540:54;:::i;:::-;30610:86;30689:6;30684:3;30610:86;:::i;:::-;30603:93;;30720:56;30770:5;30720:56;:::i;:::-;30799:7;30830:1;30815:284;30840:6;30837:1;30834:13;30815:284;;;30916:6;30910:13;30943:63;31002:3;30987:13;30943:63;:::i;:::-;30936:70;;31029:60;31082:6;31029:60;:::i;:::-;31019:70;;30875:224;30862:1;30859;30855:9;30850:14;;30815:284;;;30819:14;31115:3;31108:10;;30516:608;;;30392:732;;;;:::o;31130:831::-;31393:4;31431:3;31420:9;31416:19;31408:27;;31445:71;31513:1;31502:9;31498:17;31489:6;31445:71;:::i;:::-;31526:80;31602:2;31591:9;31587:18;31578:6;31526:80;:::i;:::-;31653:9;31647:4;31643:20;31638:2;31627:9;31623:18;31616:48;31681:108;31784:4;31775:6;31681:108;:::i;:::-;31673:116;;31799:72;31867:2;31856:9;31852:18;31843:6;31799:72;:::i;:::-;31881:73;31949:3;31938:9;31934:19;31925:6;31881:73;:::i;:::-;31130:831;;;;;;;;:::o;31967:807::-;32216:4;32254:3;32243:9;32239:19;32231:27;;32268:71;32336:1;32325:9;32321:17;32312:6;32268:71;:::i;:::-;32349:72;32417:2;32406:9;32402:18;32393:6;32349:72;:::i;:::-;32431:80;32507:2;32496:9;32492:18;32483:6;32431:80;:::i;:::-;32521;32597:2;32586:9;32582:18;32573:6;32521:80;:::i;:::-;32611:73;32679:3;32668:9;32664:19;32655:6;32611:73;:::i;:::-;32694;32762:3;32751:9;32747:19;32738:6;32694:73;:::i;:::-;31967:807;;;;;;;;;:::o;32780:143::-;32837:5;32868:6;32862:13;32853:22;;32884:33;32911:5;32884:33;:::i;:::-;32780:143;;;;:::o;32929:663::-;33017:6;33025;33033;33082:2;33070:9;33061:7;33057:23;33053:32;33050:119;;;33088:79;;:::i;:::-;33050:119;33208:1;33233:64;33289:7;33280:6;33269:9;33265:22;33233:64;:::i;:::-;33223:74;;33179:128;33346:2;33372:64;33428:7;33419:6;33408:9;33404:22;33372:64;:::i;:::-;33362:74;;33317:129;33485:2;33511:64;33567:7;33558:6;33547:9;33543:22;33511:64;:::i;:::-;33501:74;;33456:129;32929:663;;;;;:::o

Swarm Source

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