ETH Price: $3,284.36 (-0.86%)
Gas: 6 Gwei

Token

HANNYA (HANNYA)
 

Overview

Max Total Supply

1,000,000,000,000 HANNYA

Holders

51

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,973,925,211.948489713157348647 HANNYA

Value
$0.00
0x719aE4f6ed9220caDfE869Fa44dF189053DE7b8D
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
HANNYA

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-25
*/

// SPDX-License-Identifier: MIT
//Hannya 
pragma solidity ^0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


abstract 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() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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");
        _;
    }

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}




contract HANNYA is Context,IERC20, Ownable{
    using Address for address;

    string private _name = "HANNYA";
    string private _symbol = "HANNYA";
    uint8 private _decimals = 18;
    uint256 totalFeeFortx = 0;
      uint256 maxWalletTreshold = 1;
    uint256 maxTxTreshold = 1;
    uint256 private swapTreshold =2;

    uint256 private currentThreshold = 20; 
    uint256 private _totalSupply = (100000000 * 10**4) * 10**_decimals; 
    uint256 public requiredTokensToSwap = _totalSupply * swapTreshold /1000;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _excludedFromFees;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public automatedMarketMakerPairs;
    address _owner;
    address payable public marketingAddress = payable(0x19d7103Ac2a3083114823d9E1f918be87bA05D83);
    uint256 maxWalletAmount = _totalSupply*maxWalletTreshold/100; 
    uint256 maxTxAmount = _totalSupply*maxTxTreshold/100;
    mapping (address => bool) botWallets;
    bool botTradeEnabled = false;
    bool checkWalletSize = true;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private presaleAddresses;
   

    uint256 private buyliqFee = 2; 
    uint256 private buyprevLiqFee = 2;
    uint256 private buymktFee = 8;
    uint256 private buyPrevmktFee = 8;
    uint256 HANNYADaycooldown = 0;
    bool private tradeEnabled = false;

    
    uint256 private sellliqFee = 2;
    uint256 private sellprevLiqFee = 2;
    uint256 private sellmktFee = 8;
    uint256 private sellPrevmktFee = 8;
    


    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private mktTokens = 0;
    uint256 private liqTokens = 0;

    
    event SwapAndLiquify(uint256 tokensSwapped,
		uint256 ethReceived,
		uint256 tokensIntoLiquidity
	);
    event tokensSwappedDuringTokenomics(uint256 amount);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    
    // 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
    IUniswapV2Router02 _router;
    address public uniswapV2Pair;

    //Balances tracker

    modifier lockTheSwap{
		inSwapAndLiquify = true;
		_;
		inSwapAndLiquify = false;
	}
    

    constructor(){
        _balances[_msgSender()] = _totalSupply;
        //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        IUniswapV2Router02 _uniRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        uniswapV2Pair = IUniswapV2Factory(_uniRouter.factory())
            .createPair(address(this), _uniRouter.WETH());
        
        _excludedFromFees[owner()] = true;         
        _excludedFromFees[address(this)] = true;
        _router = _uniRouter;
        _liquidityHolders[address(_router)] = true;
        _liquidityHolders[owner()] = true;
        _liquidityHolders[address(this)] = true;
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        emit Transfer(address(0),_msgSender(),_totalSupply);




    }
    receive() external payable{}


    
    function getOwner()external view returns(address){
            return owner();
    }
    function currentmktTokens() external view returns (uint256){
            return mktTokens;
     }

     function currentLiqTokens() external view returns (uint256){
            return liqTokens;
     }

     function totalSupply() external view override returns (uint256){
            return _totalSupply;
     }
   
    function balanceOf(address account) public view override returns (uint256){
        return _balances[account];
    }
   
    function transfer(address recipient, uint256 amount) external override returns (bool){
            _transfer(_msgSender(),recipient,amount);
            return true;

    }
   
    function allowance(address owner, address spender) external view override returns (uint256){
            return _allowances[owner][spender];
    }
 
    function approve(address spender, uint256 amount) external override returns (bool){
            _approve(_msgSender(),spender,amount);
            return true;
    }

    function decimals()external view returns(uint256){
        return _decimals;
    }
    function name() external view returns (string memory) {
		return _name;
	}
    function symbol() external view returns (string memory){
        return _symbol;
    }
        function updateMaxTxTreshold(uint256 newVal) public onlyOwner{
        maxTxTreshold = newVal;
        maxTxAmount = _totalSupply*maxTxTreshold/100;// 2%

    }
     function updateMaxWalletTreshold(uint256 newVal) public onlyOwner{
        maxWalletTreshold = newVal;
        maxWalletAmount = _totalSupply*maxWalletTreshold/100;

    }
    

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



    //Tokenomics related functions
    
    function HANNYADay() public onlyOwner{
         require(block.timestamp > HANNYADaycooldown, "You cant call HANNYADay more than once per day");
         buyPrevmktFee = buymktFee;
         buyprevLiqFee = buyliqFee;
       
         buyliqFee = 0;
         buymktFee = 0;
    }
    function HANNYADayOver() public onlyOwner{
         buyliqFee = buyprevLiqFee;
         buymktFee = buyPrevmktFee;
         HANNYADaycooldown = block.timestamp + 86400;
    }

    function addBotWallet (address payable detectedBot, bool isBot) public onlyOwner{
        botWallets[detectedBot] = isBot;
    }
    function currentbuyliqFee() public view returns (uint256){
            return buyliqFee;
    }
    function currentbuymktfee() public view returns (uint256){
            return buymktFee;
    }

      function currentsellLiqFee() public view returns (uint256){
            return sellliqFee;
    }
    function currentsellmktfee() public view returns (uint256){
            return sellmktFee;
    }

    function currentThresholdInt()public view returns (uint256){
        return currentThreshold;
    }
    function isExcluded(address toCheck)public view returns (bool){
            return _excludedFromFees[toCheck];
    }

    function _transfer(address from, address to, uint256 amount) internal{
        
        require(from != address(0), "ERC20: transfer from the zero address");
		require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0,"ERC20: transfered amount must be greater than zero");
        uint256 senderBalance = _balances[from];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        if(tradeEnabled == false){
            require(_liquidityHolders[to] || _liquidityHolders[from],"Cant trade, trade is disabled");
        }
        if(_liquidityHolders[to]==false && _liquidityHolders[from]==false){
        require(amount <= maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
         if(from == uniswapV2Pair){
                require(balanceOf(to)+amount <= maxWalletAmount);
            }
        }
        uint256 inContractBalance = balanceOf(address(this));
        if(inContractBalance >=requiredTokensToSwap && 
			!inSwapAndLiquify && 
			from != uniswapV2Pair && 
			swapAndLiquifyEnabled){
                if(inContractBalance >= requiredTokensToSwap ){
                    inContractBalance = requiredTokensToSwap;
                    swapForTokenomics(inContractBalance);
                }
            }

            bool takeFees = true;
            
            
            if(_excludedFromFees[from] || _excludedFromFees[to]) {
                totalFeeFortx = 0;
                takeFees = false;
               

            }
            uint256 mktAmount = 0;
		    uint256 liqAmount = 0;  // Amount to be added to liquidity.

            if(takeFees){
                
                
                //bot fees
                if(botWallets[from] == true||botWallets[to]==true){
                    revert("No bots can trade");
                }
                //Selling fees
                if (automatedMarketMakerPairs[to] && to != address(_router) ){
                        totalFeeFortx = 0;
                        mktAmount = amount * sellmktFee/100;
                        liqAmount = amount * sellliqFee/100;
                        totalFeeFortx = mktAmount + liqAmount;
                }
                //Buy Fees
                else if(automatedMarketMakerPairs[from] && from != address(_router)) {
                
                    totalFeeFortx = 0;
                    mktAmount = amount * buymktFee/100;
                    liqAmount = amount * buyliqFee/100;
                    totalFeeFortx = mktAmount + liqAmount ;
                }

                
            }

            _balances[from] = senderBalance - amount;
            _balances[to] += amount - mktAmount - liqAmount;

          if(liqAmount != 0) {
			_balances[address(this)] += totalFeeFortx;
			
            liqTokens += liqAmount;
            mktTokens += mktAmount;
			emit Transfer(from, address(this), totalFeeFortx);
            
		    }
            emit Transfer(from, to,amount-totalFeeFortx);
            
        
    }
    function swapForTokenomics(uint256 balanceToswap) private lockTheSwap{
        swapAndLiquify(liqTokens);
        swapTokensForETHmkt(mktTokens);
        emit tokensSwappedDuringTokenomics(balanceToswap);
        mktTokens = 0;
        liqTokens = 0;
    }
     function addLimitExempt(address newAddress)external onlyOwner{
        _liquidityHolders[newAddress] = true;
     
    }
    function swapTokensForETHmkt(uint256 amount)private {
        address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _router.WETH();
		_approve(address(this), address(_router), amount);

		
		_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			amount,
			0, // Accept any amount of ETH.
			path,
			marketingAddress,
			block.timestamp
		);

    }

    function unstuckTokens (IERC20 tokenToClear, address payable destination, uint256 amount) public onlyOwner{
        
        tokenToClear.transfer(destination, amount);
    }

    function unstuckETH(address payable destination) public onlyOwner{
        uint256 ethBalance = address(this).balance;
        payable(destination).transfer(ethBalance);
    }

    function tradeStatus(bool status) public onlyOwner{
        tradeEnabled = status;
    }

    function swapAndLiquify(uint256 liqTokensPassed) private {
		uint256 half = liqTokensPassed / 2;
		uint256 otherHalf = liqTokensPassed - half;
		uint256 initialBalance = address(this).balance;

		swapTokensForETH(half);
		uint256 newBalance = address(this).balance - (initialBalance); 

		addLiquidity(otherHalf, newBalance);
		emit SwapAndLiquify(half,newBalance,otherHalf);
	}

    function swapTokensForETH(uint256 tokenAmount) private{
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _router.WETH();
		_approve(address(this), address(_router), tokenAmount);

		
		_router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			0, // Accept any amount of ETH.
			path,
			address(this),
			block.timestamp
		);
	}
    
    function addLiquidity(uint256 tokenAmount,uint256 ethAmount) private{
		_approve(address(this), address(_router), tokenAmount);

		_router.addLiquidityETH{value:ethAmount}(
			address(this),
			tokenAmount,
			0,
			0,
			deadAddress,// tr
			block.timestamp
		);
	}

    function _approve(address owner,address spender, uint256 amount) internal{
        require(owner != address(0), "ERC20: approve from the zero address");
		require(spender != address(0), "ERC20: approve to the zero address");

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


    }




    //Fees related functions

    function addToExcluded(address toExclude) public onlyOwner{  
        _excludedFromFees[toExclude] = true;
    }

    function removeFromExcluded(address toRemove) public onlyOwner{
        _excludedFromFees[toRemove] = false;
    }
      function excludePresaleAddresses(address router, address presale) external onlyOwner {
        
        _liquidityHolders[address(router)] = true;
        _liquidityHolders[presale] = true;
        presaleAddresses[address(router)] = true;
        presaleAddresses[presale] = true;
       
    }

    function updateThreshold(uint newThreshold) public onlyOwner{
        currentThreshold = newThreshold;

    }

    function setSwapAndLiquify(bool _enabled) public onlyOwner{
            swapAndLiquifyEnabled = _enabled;
    }


    //Marketing related 

    function setMktAddress(address newAddress) external onlyOwner{
        marketingAddress = payable(newAddress);
    }
    function transferAssetsETH(address payable to, uint256 amount) internal{
            to.transfer(amount);
    }
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updatecurrentbuyliqFee(uint256 newAmount) public onlyOwner{
            buyliqFee = newAmount;
    }
    function updatecurrentbuymktfee(uint256 newAmount) public onlyOwner{
             buymktFee= newAmount;
    }


      function updatecurrentsellLiqFee(uint256 newAmount) public onlyOwner{
             sellliqFee= newAmount;
    }
    function updatecurrentsellmktfee(uint256 newAmount)public onlyOwner{
             sellmktFee= newAmount;
    }
    function currentMaxWallet() public view returns(uint256){
        return maxWalletAmount;
    }
    function currentMaxTx() public view returns(uint256){
        return maxTxAmount;
    }
    function updateSwapTreshold(uint256 newVal) public onlyOwner{
        swapTreshold = newVal;
        requiredTokensToSwap = _totalSupply*swapTreshold/1000;
        
    }
    function currentTradeStatus() public view returns (bool){
        return tradeEnabled;   
    }
    function currentSwapTreshold() public view returns(uint256){
        return swapTreshold;
    }
    function currentTokensToSwap() public view returns(uint256){
        return requiredTokensToSwap;
    }
}


interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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 Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensSwappedDuringTokenomics","type":"event"},{"inputs":[],"name":"HANNYADay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"HANNYADayOver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"detectedBot","type":"address"},{"internalType":"bool","name":"isBot","type":"bool"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"addLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toExclude","type":"address"}],"name":"addToExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentLiqTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMaxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSwapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentThresholdInt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTradeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentbuyliqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentbuymktfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentmktTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentsellLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentsellmktfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toCheck","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeFromExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMktAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"tradeStatus","outputs":[],"stateMutability":"nonpayable","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":"address payable","name":"destination","type":"address"}],"name":"unstuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenToClear","type":"address"},{"internalType":"address payable","name":"destination","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxTxTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxWalletTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentbuyliqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentbuymktfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentsellLiqFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatecurrentsellmktfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600660a08190526548414e4e594160d01b60c0908152620000299160019190620005a6565b506040805180820190915260068082526548414e4e594160d01b60209092019182526200005991600291620005a6565b506003805460ff19166012179081905560006004556001600581905560065560026007556014600855620000929060ff16600a6200070d565b620000a39064e8d4a51000620007f8565b6009556103e8600754600954620000bb9190620007f8565b620000c791906200069f565b600a55601080546001600160a01b0319167319d7103ac2a3083114823d9e1f918be87ba05d831790556005546009546064916200010491620007f8565b6200011091906200069f565b6011556064600654600954620001279190620007f8565b6200013391906200069f565b6012556014805461ffff191661010090811790915560026017819055601881905560086019819055601a8190556000601b819055601c805460ff19169055601d839055601e92909255601f8190556020556021805461ff0019169092179091556ddead0000000000000000000000006080526022819055602355348015620001ba57600080fd5b50620001cf620001c9620004ef565b620004f3565b600954600b6000620001e0620004ef565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025757600080fd5b505afa1580156200026c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029291906200064c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002db57600080fd5b505afa158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031691906200064c565b6040518363ffffffff1660e01b8152600401620003359291906200067c565b602060405180830381600087803b1580156200035057600080fd5b505af115801562000365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038b91906200064c565b602580546001600160a01b0319166001600160a01b03929092169190911790556001600c6000620003bb62000543565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600c8452828120805486166001908117909155602480548885166001600160a01b031990911617908190559092168152601593849052918220805490941681179093556200043962000543565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260159093529120805490921660019081179092556025546200048f9291169062000552565b62000499620004ef565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620004e0919062000696565b60405180910390a3506200086d565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b6001600160a01b0382166000818152600e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b828054620005b4906200081a565b90600052602060002090601f016020900481019282620005d8576000855562000623565b82601f10620005f357805160ff191683800117855562000623565b8280016001018555821562000623579182015b828111156200062357825182559160200191906001019062000606565b506200063192915062000635565b5090565b5b8082111562000631576000815560010162000636565b6000602082840312156200065e578081fd5b81516001600160a01b038116811462000675578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b600082620006bb57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611620006d4575062000704565b818704821115620006e957620006e962000857565b80861615620006f757918102915b9490941c938002620006c3565b94509492505050565b60006200067560001960ff8516846000826200072c5750600162000675565b816200073b5750600062000675565b81600181146200075457600281146200075f5762000793565b600191505062000675565b60ff84111562000773576200077362000857565b6001841b9150848211156200078c576200078c62000857565b5062000675565b5060208310610133831016604e8410600b8410161715620007cb575081810a83811115620007c557620007c562000857565b62000675565b620007da8484846001620006c0565b808604821115620007ef57620007ef62000857565b02949350505050565b600081600019048311821515161562000815576200081562000857565b500290565b6002810460018216806200082f57607f821691505b602082108114156200085157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c6128586200089360003960008181610bfe0152611fe901526128586000f3fe6080604052600436106103395760003560e01c80638cd0260c116101ab578063bf9b0159116100f7578063dd62ed3e11610095578063eb1574e21161006f578063eb1574e2146108a6578063edcf19b2146108bb578063f2fde38b146108db578063f7da6785146108fb57610340565b8063dd62ed3e1461085c578063ddcf9b981461087c578063e1370dd31461089157610340565b8063cba0e996116100d1578063cba0e996146107e7578063d1294d4c14610807578063d15bcf0f14610827578063d7d7442f1461083c57610340565b8063bf9b015914610792578063bf9eb540146107a7578063cb664534146107c757610340565b8063a04bdc8111610164578063a7a074521161013e578063a7a0745214610712578063a9059cbb14610732578063b4d95a9314610752578063b62496f51461077257610340565b8063a04bdc81146106c8578063a5ece941146106dd578063a6c38f59146106f257610340565b80638cd0260c146106345780638da5cb5b1461065457806390f502831461066957806395d89b411461067e5780639a7a23d6146106935780639b136da4146106b357610340565b806349bd5a5e116102855780636573c4df11610223578063715018a6116101fd578063715018a6146105ca578063801527ce146105df5780638628c23f146105ff578063893d20e81461061f57610340565b80636573c4df146105755780636df3333a1461059557806370a08231146105aa57610340565b80634bd7ace51161025f5780634bd7ace5146105165780635297defd1461052b5780635be76f111461054057806364c161631461056057610340565b806349bd5a5e146104cc5780634a0e963c146104e15780634a74bb021461050157610340565b8063220f6696116102f257806327c8f835116102cc57806327c8f835146104605780632d03420b14610482578063313ce567146104a2578063487a6905146104b757610340565b8063220f66961461041657806322788f861461042b57806323b872dd1461044057610340565b806306fdde03146103455780630882a86314610370578063095ea7b3146103925780630e50ce54146103bf57806313b4a7f4146103d457806318160ddd146103f457610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a61091b565b60405161036791906122d4565b60405180910390f35b34801561037c57600080fd5b5061039061038b3660046121d9565b6109ad565b005b34801561039e57600080fd5b506103b26103ad366004612162565b6109fa565b60405161036791906122c9565b3480156103cb57600080fd5b50610390610a17565b3480156103e057600080fd5b506103906103ef3660046120e3565b610a74565b34801561040057600080fd5b50610409610b13565b60405161036791906126e5565b34801561042257600080fd5b506103b2610b19565b34801561043757600080fd5b50610409610b22565b34801561044c57600080fd5b506103b261045b366004612110565b610b28565b34801561046c57600080fd5b50610475610bfc565b6040516103679190612261565b34801561048e57600080fd5b5061039061049d36600461218d565b610c20565b3480156104ae57600080fd5b50610409610c72565b3480156104c357600080fd5b50610409610c7b565b3480156104d857600080fd5b50610475610c81565b3480156104ed57600080fd5b506103906104fc36600461206c565b610c90565b34801561050d57600080fd5b506103b2610cf3565b34801561052257600080fd5b50610409610d01565b34801561053757600080fd5b50610409610d07565b34801561054c57600080fd5b5061039061055b36600461206c565b610d0d565b34801561056c57600080fd5b50610409610d89565b34801561058157600080fd5b506103906105903660046121d9565b610d8f565b3480156105a157600080fd5b50610409610df4565b3480156105b657600080fd5b506104096105c536600461206c565b610dfa565b3480156105d657600080fd5b50610390610e15565b3480156105eb57600080fd5b506103906105fa36600461218d565b610e60565b34801561060b57600080fd5b5061039061061a3660046121d9565b610eb9565b34801561062b57600080fd5b50610475610efd565b34801561064057600080fd5b5061039061064f3660046121d9565b610f0c565b34801561066057600080fd5b50610475610f50565b34801561067557600080fd5b50610409610f5f565b34801561068a57600080fd5b5061035a610f65565b34801561069f57600080fd5b506103906106ae366004612150565b610f74565b3480156106bf57600080fd5b50610409610fef565b3480156106d457600080fd5b50610409610ff5565b3480156106e957600080fd5b50610475610ffb565b3480156106fe57600080fd5b5061039061070d3660046120ab565b61100a565b34801561071e57600080fd5b5061039061072d3660046121d9565b611074565b34801561073e57600080fd5b506103b261074d366004612162565b6110d9565b34801561075e57600080fd5b5061039061076d36600461206c565b6110ed565b34801561077e57600080fd5b506103b261078d36600461206c565b61114d565b34801561079e57600080fd5b50610409611162565b3480156107b357600080fd5b506103906107c236600461206c565b611168565b3480156107d357600080fd5b506103906107e236600461206c565b6111c9565b3480156107f357600080fd5b506103b261080236600461206c565b61122c565b34801561081357600080fd5b506103906108223660046121d9565b61124a565b34801561083357600080fd5b506103b26112b0565b34801561084857600080fd5b506103906108573660046121d9565b6112b9565b34801561086857600080fd5b506104096108773660046120e3565b6112fd565b34801561088857600080fd5b50610409611328565b34801561089d57600080fd5b5061040961132e565b3480156108b257600080fd5b50610390611334565b3480156108c757600080fd5b506103906108d63660046121d9565b6113ac565b3480156108e757600080fd5b506103906108f636600461206c565b6113f0565b34801561090757600080fd5b506103906109163660046121c5565b611461565b60606001805461092a906127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610956906127ae565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905090565b6109b5611526565b6001600160a01b03166109c6610f50565b6001600160a01b0316146109f55760405162461bcd60e51b81526004016109ec906125fc565b60405180910390fd5b601755565b6000610a0e610a07611526565b848461152a565b50600192915050565b610a1f611526565b6001600160a01b0316610a30610f50565b6001600160a01b031614610a565760405162461bcd60e51b81526004016109ec906125fc565b601854601755601a54601955610a6f4262015180612740565b601b55565b610a7c611526565b6001600160a01b0316610a8d610f50565b6001600160a01b031614610ab35760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b0391821660008181526015602090815260408083208054600160ff199182168117909255959096168084528184208054871688179055938352601690915280822080548516861790559181522080549091169091179055565b60095490565b60215460ff1681565b60085490565b6001600160a01b0383166000908152600d6020526040812081610b49611526565b6001600160a01b03166001600160a01b0316815260200190815260200160002054821115610b895760405162461bcd60e51b81526004016109ec906125b4565b610b948484846115de565b610bf284610ba0611526565b6001600160a01b0387166000908152600d602052604081208691610bc2611526565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610bed9190612797565b61152a565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610c28611526565b6001600160a01b0316610c39610f50565b6001600160a01b031614610c5f5760405162461bcd60e51b81526004016109ec906125fc565b601c805460ff1916911515919091179055565b60035460ff1690565b600a5490565b6025546001600160a01b031681565b610c98611526565b6001600160a01b0316610ca9610f50565b6001600160a01b031614610ccf5760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b602154610100900460ff1681565b60175490565b601f5490565b610d15611526565b6001600160a01b0316610d26610f50565b6001600160a01b031614610d4c5760405162461bcd60e51b81526004016109ec906125fc565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610d84573d6000803e3d6000fd5b505050565b60235490565b610d97611526565b6001600160a01b0316610da8610f50565b6001600160a01b031614610dce5760405162461bcd60e51b81526004016109ec906125fc565b6005819055600954606490610de4908390612778565b610dee9190612758565b60115550565b60075490565b6001600160a01b03166000908152600b602052604090205490565b610e1d611526565b6001600160a01b0316610e2e610f50565b6001600160a01b031614610e545760405162461bcd60e51b81526004016109ec906125fc565b610e5e6000611b2f565b565b610e68611526565b6001600160a01b0316610e79610f50565b6001600160a01b031614610e9f5760405162461bcd60e51b81526004016109ec906125fc565b602180549115156101000261ff0019909216919091179055565b610ec1611526565b6001600160a01b0316610ed2610f50565b6001600160a01b031614610ef85760405162461bcd60e51b81526004016109ec906125fc565b601f55565b6000610f07610f50565b905090565b610f14611526565b6001600160a01b0316610f25610f50565b6001600160a01b031614610f4b5760405162461bcd60e51b81526004016109ec906125fc565b601d55565b6000546001600160a01b031690565b601d5490565b60606002805461092a906127ae565b610f7c611526565b6001600160a01b0316610f8d610f50565b6001600160a01b031614610fb35760405162461bcd60e51b81526004016109ec906125fc565b6025546001600160a01b0383811691161415610fe15760405162461bcd60e51b81526004016109ec906123f2565b610feb8282611b7f565b5050565b60195490565b600a5481565b6010546001600160a01b031681565b611012611526565b6001600160a01b0316611023610f50565b6001600160a01b0316146110495760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b61107c611526565b6001600160a01b031661108d610f50565b6001600160a01b0316146110b35760405162461bcd60e51b81526004016109ec906125fc565b60068190556009546064906110c9908390612778565b6110d39190612758565b60125550565b6000610a0e6110e6611526565b84846115de565b6110f5611526565b6001600160a01b0316611106610f50565b6001600160a01b03161461112c5760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b600e6020526000908152604090205460ff1681565b60125490565b611170611526565b6001600160a01b0316611181610f50565b6001600160a01b0316146111a75760405162461bcd60e51b81526004016109ec906125fc565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6111d1611526565b6001600160a01b03166111e2610f50565b6001600160a01b0316146112085760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6001600160a01b03166000908152600c602052604090205460ff1690565b611252611526565b6001600160a01b0316611263610f50565b6001600160a01b0316146112895760405162461bcd60e51b81526004016109ec906125fc565b60078190556009546103e8906112a0908390612778565b6112aa9190612758565b600a5550565b601c5460ff1690565b6112c1611526565b6001600160a01b03166112d2610f50565b6001600160a01b0316146112f85760405162461bcd60e51b81526004016109ec906125fc565b600855565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b60225490565b60115490565b61133c611526565b6001600160a01b031661134d610f50565b6001600160a01b0316146113735760405162461bcd60e51b81526004016109ec906125fc565b601b5442116113945760405162461bcd60e51b81526004016109ec9061244f565b60198054601a55601780546018556000908190559055565b6113b4611526565b6001600160a01b03166113c5610f50565b6001600160a01b0316146113eb5760405162461bcd60e51b81526004016109ec906125fc565b601955565b6113f8611526565b6001600160a01b0316611409610f50565b6001600160a01b03161461142f5760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b0381166114555760405162461bcd60e51b81526004016109ec9061236a565b61145e81611b2f565b50565b611469611526565b6001600160a01b031661147a610f50565b6001600160a01b0316146114a05760405162461bcd60e51b81526004016109ec906125fc565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906114ce9085908590600401612275565b602060405180830381600087803b1580156114e857600080fd5b505af11580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152091906121a9565b50505050565b3390565b6001600160a01b0383166115505760405162461bcd60e51b81526004016109ec90612676565b6001600160a01b0382166115765760405162461bcd60e51b81526004016109ec906123b0565b6001600160a01b038084166000818152600d602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906115d19085906126e5565b60405180910390a3505050565b6001600160a01b0383166116045760405162461bcd60e51b81526004016109ec90612631565b6001600160a01b03821661162a5760405162461bcd60e51b81526004016109ec90612327565b6000811161164a5760405162461bcd60e51b81526004016109ec9061252b565b6001600160a01b0383166000908152600b6020526040902054818110156116835760405162461bcd60e51b81526004016109ec9061249d565b601c5460ff166116e8576001600160a01b03831660009081526015602052604090205460ff16806116cc57506001600160a01b03841660009081526015602052604090205460ff165b6116e85760405162461bcd60e51b81526004016109ec9061257d565b6001600160a01b03831660009081526015602052604090205460ff1615801561172a57506001600160a01b03841660009081526015602052604090205460ff16155b15611789576012548211156117515760405162461bcd60e51b81526004016109ec906124e3565b6025546001600160a01b0385811691161415611789576011548261177485610dfa565b61177e9190612740565b111561178957600080fd5b600061179430610dfa565b9050600a5481101580156117ab575060215460ff16155b80156117c557506025546001600160a01b03868116911614155b80156117d85750602154610100900460ff165b156117f357600a5481106117f35750600a546117f381611bd3565b6001600160a01b0385166000908152600c602052604090205460019060ff168061183557506001600160a01b0385166000908152600c602052604090205460ff165b156118435750600060048190555b60008082156119c2576001600160a01b03881660009081526013602052604090205460ff1615156001148061189557506001600160a01b03871660009081526013602052604090205460ff1615156001145b156118b25760405162461bcd60e51b81526004016109ec906126ba565b6001600160a01b0387166000908152600e602052604090205460ff1680156118e857506024546001600160a01b03888116911614155b1561193c576000600455601f546064906119029088612778565b61190c9190612758565b91506064601d548761191e9190612778565b6119289190612758565b90506119348183612740565b6004556119c2565b6001600160a01b0388166000908152600e602052604090205460ff16801561197257506024546001600160a01b03898116911614155b156119c257600060045560195460649061198c9088612778565b6119969190612758565b91506064601754876119a89190612778565b6119b29190612758565b90506119be8183612740565b6004555b6119cc8686612797565b6001600160a01b0389166000908152600b6020526040902055806119f08388612797565b6119fa9190612797565b6001600160a01b0388166000908152600b602052604081208054909190611a22908490612740565b90915550508015611acd57600454306000908152600b602052604081208054909190611a4f908490612740565b925050819055508060236000828254611a689190612740565b925050819055508160226000828254611a819190612740565b909155505060045460405130916001600160a01b038b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611ac4916126e5565b60405180910390a35b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045489611b109190612797565b604051611b1d91906126e5565b60405180910390a35050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000818152600e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6021805460ff19166001179055602354611bec90611c45565b611bf7602254611cc6565b7f4596ef7337c1c88bb740707471cfc0ec6d0212036b05ab1bdbb09cf3e3f0190481604051611c2691906126e5565b60405180910390a150600060228190556023556021805460ff19169055565b6000611c52600283612758565b90506000611c608284612797565b905047611c6c83611e4f565b6000611c788247612797565b9050611c848382611f9e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611cb79392919061272a565b60405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d0957634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d5d57600080fd5b505afa158015611d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d95919061208f565b81600181518110611db657634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602454611ddc913091168461152a565b60245460105460405163791ac94760e01b81526001600160a01b039283169263791ac94792611e19928792600092889291169042906004016126ee565b600060405180830381600087803b158015611e3357600080fd5b505af1158015611e47573d6000803e3d6000fd5b505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e9257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611ee657600080fd5b505afa158015611efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1e919061208f565b81600181518110611f3f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602454611f65913091168461152a565b60245460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e199085906000908690309042906004016126ee565b602454611fb69030906001600160a01b03168461152a565b60245460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612013903090879060009081907f000000000000000000000000000000000000000000000000000000000000000090429060040161228e565b6060604051808303818588803b15801561202c57600080fd5b505af1158015612040573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061206591906121f1565b5050505050565b60006020828403121561207d578081fd5b8135612088816127ff565b9392505050565b6000602082840312156120a0578081fd5b8151612088816127ff565b600080604083850312156120bd578081fd5b82356120c8816127ff565b915060208301356120d881612814565b809150509250929050565b600080604083850312156120f5578182fd5b8235612100816127ff565b915060208301356120d8816127ff565b600080600060608486031215612124578081fd5b833561212f816127ff565b9250602084013561213f816127ff565b929592945050506040919091013590565b600080604083850312156120bd578182fd5b60008060408385031215612174578182fd5b823561217f816127ff565b946020939093013593505050565b60006020828403121561219e578081fd5b813561208881612814565b6000602082840312156121ba578081fd5b815161208881612814565b600080600060608486031215612124578283fd5b6000602082840312156121ea578081fd5b5035919050565b600080600060608486031215612205578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156122565781516001600160a01b031687529582019590820190600101612231565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612300578581018301518582016040015282016122e4565b818111156123115783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526039908201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060408201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606082015260800190565b6020808252602e908201527f596f752063616e742063616c6c2048414e4e5941446179206d6f72652074686160408201526d6e206f6e6365207065722064617960901b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b60208082526032908201527f45524332303a207472616e73666572656420616d6f756e74206d7573742062656040820152712067726561746572207468616e207a65726f60701b606082015260800190565b6020808252601d908201527f43616e742074726164652c2074726164652069732064697361626c6564000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601190820152704e6f20626f74732063616e20747261646560781b604082015260600190565b90815260200190565b600086825285602083015260a0604083015261270d60a083018661221e565b6001600160a01b0394909416606083015250608001529392505050565b9283526020830191909152604082015260600190565b60008219821115612753576127536127e9565b500190565b60008261277357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612792576127926127e9565b500290565b6000828210156127a9576127a96127e9565b500390565b6002810460018216806127c257607f821691505b602082108114156127e357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461145e57600080fd5b801515811461145e57600080fdfea26469706673582212202bacb9849440471cd61a5630fd142d83b11a97a47b15163c2e3573423ebad83164736f6c63430008000033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638cd0260c116101ab578063bf9b0159116100f7578063dd62ed3e11610095578063eb1574e21161006f578063eb1574e2146108a6578063edcf19b2146108bb578063f2fde38b146108db578063f7da6785146108fb57610340565b8063dd62ed3e1461085c578063ddcf9b981461087c578063e1370dd31461089157610340565b8063cba0e996116100d1578063cba0e996146107e7578063d1294d4c14610807578063d15bcf0f14610827578063d7d7442f1461083c57610340565b8063bf9b015914610792578063bf9eb540146107a7578063cb664534146107c757610340565b8063a04bdc8111610164578063a7a074521161013e578063a7a0745214610712578063a9059cbb14610732578063b4d95a9314610752578063b62496f51461077257610340565b8063a04bdc81146106c8578063a5ece941146106dd578063a6c38f59146106f257610340565b80638cd0260c146106345780638da5cb5b1461065457806390f502831461066957806395d89b411461067e5780639a7a23d6146106935780639b136da4146106b357610340565b806349bd5a5e116102855780636573c4df11610223578063715018a6116101fd578063715018a6146105ca578063801527ce146105df5780638628c23f146105ff578063893d20e81461061f57610340565b80636573c4df146105755780636df3333a1461059557806370a08231146105aa57610340565b80634bd7ace51161025f5780634bd7ace5146105165780635297defd1461052b5780635be76f111461054057806364c161631461056057610340565b806349bd5a5e146104cc5780634a0e963c146104e15780634a74bb021461050157610340565b8063220f6696116102f257806327c8f835116102cc57806327c8f835146104605780632d03420b14610482578063313ce567146104a2578063487a6905146104b757610340565b8063220f66961461041657806322788f861461042b57806323b872dd1461044057610340565b806306fdde03146103455780630882a86314610370578063095ea7b3146103925780630e50ce54146103bf57806313b4a7f4146103d457806318160ddd146103f457610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a61091b565b60405161036791906122d4565b60405180910390f35b34801561037c57600080fd5b5061039061038b3660046121d9565b6109ad565b005b34801561039e57600080fd5b506103b26103ad366004612162565b6109fa565b60405161036791906122c9565b3480156103cb57600080fd5b50610390610a17565b3480156103e057600080fd5b506103906103ef3660046120e3565b610a74565b34801561040057600080fd5b50610409610b13565b60405161036791906126e5565b34801561042257600080fd5b506103b2610b19565b34801561043757600080fd5b50610409610b22565b34801561044c57600080fd5b506103b261045b366004612110565b610b28565b34801561046c57600080fd5b50610475610bfc565b6040516103679190612261565b34801561048e57600080fd5b5061039061049d36600461218d565b610c20565b3480156104ae57600080fd5b50610409610c72565b3480156104c357600080fd5b50610409610c7b565b3480156104d857600080fd5b50610475610c81565b3480156104ed57600080fd5b506103906104fc36600461206c565b610c90565b34801561050d57600080fd5b506103b2610cf3565b34801561052257600080fd5b50610409610d01565b34801561053757600080fd5b50610409610d07565b34801561054c57600080fd5b5061039061055b36600461206c565b610d0d565b34801561056c57600080fd5b50610409610d89565b34801561058157600080fd5b506103906105903660046121d9565b610d8f565b3480156105a157600080fd5b50610409610df4565b3480156105b657600080fd5b506104096105c536600461206c565b610dfa565b3480156105d657600080fd5b50610390610e15565b3480156105eb57600080fd5b506103906105fa36600461218d565b610e60565b34801561060b57600080fd5b5061039061061a3660046121d9565b610eb9565b34801561062b57600080fd5b50610475610efd565b34801561064057600080fd5b5061039061064f3660046121d9565b610f0c565b34801561066057600080fd5b50610475610f50565b34801561067557600080fd5b50610409610f5f565b34801561068a57600080fd5b5061035a610f65565b34801561069f57600080fd5b506103906106ae366004612150565b610f74565b3480156106bf57600080fd5b50610409610fef565b3480156106d457600080fd5b50610409610ff5565b3480156106e957600080fd5b50610475610ffb565b3480156106fe57600080fd5b5061039061070d3660046120ab565b61100a565b34801561071e57600080fd5b5061039061072d3660046121d9565b611074565b34801561073e57600080fd5b506103b261074d366004612162565b6110d9565b34801561075e57600080fd5b5061039061076d36600461206c565b6110ed565b34801561077e57600080fd5b506103b261078d36600461206c565b61114d565b34801561079e57600080fd5b50610409611162565b3480156107b357600080fd5b506103906107c236600461206c565b611168565b3480156107d357600080fd5b506103906107e236600461206c565b6111c9565b3480156107f357600080fd5b506103b261080236600461206c565b61122c565b34801561081357600080fd5b506103906108223660046121d9565b61124a565b34801561083357600080fd5b506103b26112b0565b34801561084857600080fd5b506103906108573660046121d9565b6112b9565b34801561086857600080fd5b506104096108773660046120e3565b6112fd565b34801561088857600080fd5b50610409611328565b34801561089d57600080fd5b5061040961132e565b3480156108b257600080fd5b50610390611334565b3480156108c757600080fd5b506103906108d63660046121d9565b6113ac565b3480156108e757600080fd5b506103906108f636600461206c565b6113f0565b34801561090757600080fd5b506103906109163660046121c5565b611461565b60606001805461092a906127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610956906127ae565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905090565b6109b5611526565b6001600160a01b03166109c6610f50565b6001600160a01b0316146109f55760405162461bcd60e51b81526004016109ec906125fc565b60405180910390fd5b601755565b6000610a0e610a07611526565b848461152a565b50600192915050565b610a1f611526565b6001600160a01b0316610a30610f50565b6001600160a01b031614610a565760405162461bcd60e51b81526004016109ec906125fc565b601854601755601a54601955610a6f4262015180612740565b601b55565b610a7c611526565b6001600160a01b0316610a8d610f50565b6001600160a01b031614610ab35760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b0391821660008181526015602090815260408083208054600160ff199182168117909255959096168084528184208054871688179055938352601690915280822080548516861790559181522080549091169091179055565b60095490565b60215460ff1681565b60085490565b6001600160a01b0383166000908152600d6020526040812081610b49611526565b6001600160a01b03166001600160a01b0316815260200190815260200160002054821115610b895760405162461bcd60e51b81526004016109ec906125b4565b610b948484846115de565b610bf284610ba0611526565b6001600160a01b0387166000908152600d602052604081208691610bc2611526565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610bed9190612797565b61152a565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b610c28611526565b6001600160a01b0316610c39610f50565b6001600160a01b031614610c5f5760405162461bcd60e51b81526004016109ec906125fc565b601c805460ff1916911515919091179055565b60035460ff1690565b600a5490565b6025546001600160a01b031681565b610c98611526565b6001600160a01b0316610ca9610f50565b6001600160a01b031614610ccf5760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b602154610100900460ff1681565b60175490565b601f5490565b610d15611526565b6001600160a01b0316610d26610f50565b6001600160a01b031614610d4c5760405162461bcd60e51b81526004016109ec906125fc565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610d84573d6000803e3d6000fd5b505050565b60235490565b610d97611526565b6001600160a01b0316610da8610f50565b6001600160a01b031614610dce5760405162461bcd60e51b81526004016109ec906125fc565b6005819055600954606490610de4908390612778565b610dee9190612758565b60115550565b60075490565b6001600160a01b03166000908152600b602052604090205490565b610e1d611526565b6001600160a01b0316610e2e610f50565b6001600160a01b031614610e545760405162461bcd60e51b81526004016109ec906125fc565b610e5e6000611b2f565b565b610e68611526565b6001600160a01b0316610e79610f50565b6001600160a01b031614610e9f5760405162461bcd60e51b81526004016109ec906125fc565b602180549115156101000261ff0019909216919091179055565b610ec1611526565b6001600160a01b0316610ed2610f50565b6001600160a01b031614610ef85760405162461bcd60e51b81526004016109ec906125fc565b601f55565b6000610f07610f50565b905090565b610f14611526565b6001600160a01b0316610f25610f50565b6001600160a01b031614610f4b5760405162461bcd60e51b81526004016109ec906125fc565b601d55565b6000546001600160a01b031690565b601d5490565b60606002805461092a906127ae565b610f7c611526565b6001600160a01b0316610f8d610f50565b6001600160a01b031614610fb35760405162461bcd60e51b81526004016109ec906125fc565b6025546001600160a01b0383811691161415610fe15760405162461bcd60e51b81526004016109ec906123f2565b610feb8282611b7f565b5050565b60195490565b600a5481565b6010546001600160a01b031681565b611012611526565b6001600160a01b0316611023610f50565b6001600160a01b0316146110495760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b61107c611526565b6001600160a01b031661108d610f50565b6001600160a01b0316146110b35760405162461bcd60e51b81526004016109ec906125fc565b60068190556009546064906110c9908390612778565b6110d39190612758565b60125550565b6000610a0e6110e6611526565b84846115de565b6110f5611526565b6001600160a01b0316611106610f50565b6001600160a01b03161461112c5760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b600e6020526000908152604090205460ff1681565b60125490565b611170611526565b6001600160a01b0316611181610f50565b6001600160a01b0316146111a75760405162461bcd60e51b81526004016109ec906125fc565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6111d1611526565b6001600160a01b03166111e2610f50565b6001600160a01b0316146112085760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6001600160a01b03166000908152600c602052604090205460ff1690565b611252611526565b6001600160a01b0316611263610f50565b6001600160a01b0316146112895760405162461bcd60e51b81526004016109ec906125fc565b60078190556009546103e8906112a0908390612778565b6112aa9190612758565b600a5550565b601c5460ff1690565b6112c1611526565b6001600160a01b03166112d2610f50565b6001600160a01b0316146112f85760405162461bcd60e51b81526004016109ec906125fc565b600855565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b60225490565b60115490565b61133c611526565b6001600160a01b031661134d610f50565b6001600160a01b0316146113735760405162461bcd60e51b81526004016109ec906125fc565b601b5442116113945760405162461bcd60e51b81526004016109ec9061244f565b60198054601a55601780546018556000908190559055565b6113b4611526565b6001600160a01b03166113c5610f50565b6001600160a01b0316146113eb5760405162461bcd60e51b81526004016109ec906125fc565b601955565b6113f8611526565b6001600160a01b0316611409610f50565b6001600160a01b03161461142f5760405162461bcd60e51b81526004016109ec906125fc565b6001600160a01b0381166114555760405162461bcd60e51b81526004016109ec9061236a565b61145e81611b2f565b50565b611469611526565b6001600160a01b031661147a610f50565b6001600160a01b0316146114a05760405162461bcd60e51b81526004016109ec906125fc565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906114ce9085908590600401612275565b602060405180830381600087803b1580156114e857600080fd5b505af11580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152091906121a9565b50505050565b3390565b6001600160a01b0383166115505760405162461bcd60e51b81526004016109ec90612676565b6001600160a01b0382166115765760405162461bcd60e51b81526004016109ec906123b0565b6001600160a01b038084166000818152600d602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906115d19085906126e5565b60405180910390a3505050565b6001600160a01b0383166116045760405162461bcd60e51b81526004016109ec90612631565b6001600160a01b03821661162a5760405162461bcd60e51b81526004016109ec90612327565b6000811161164a5760405162461bcd60e51b81526004016109ec9061252b565b6001600160a01b0383166000908152600b6020526040902054818110156116835760405162461bcd60e51b81526004016109ec9061249d565b601c5460ff166116e8576001600160a01b03831660009081526015602052604090205460ff16806116cc57506001600160a01b03841660009081526015602052604090205460ff165b6116e85760405162461bcd60e51b81526004016109ec9061257d565b6001600160a01b03831660009081526015602052604090205460ff1615801561172a57506001600160a01b03841660009081526015602052604090205460ff16155b15611789576012548211156117515760405162461bcd60e51b81526004016109ec906124e3565b6025546001600160a01b0385811691161415611789576011548261177485610dfa565b61177e9190612740565b111561178957600080fd5b600061179430610dfa565b9050600a5481101580156117ab575060215460ff16155b80156117c557506025546001600160a01b03868116911614155b80156117d85750602154610100900460ff165b156117f357600a5481106117f35750600a546117f381611bd3565b6001600160a01b0385166000908152600c602052604090205460019060ff168061183557506001600160a01b0385166000908152600c602052604090205460ff165b156118435750600060048190555b60008082156119c2576001600160a01b03881660009081526013602052604090205460ff1615156001148061189557506001600160a01b03871660009081526013602052604090205460ff1615156001145b156118b25760405162461bcd60e51b81526004016109ec906126ba565b6001600160a01b0387166000908152600e602052604090205460ff1680156118e857506024546001600160a01b03888116911614155b1561193c576000600455601f546064906119029088612778565b61190c9190612758565b91506064601d548761191e9190612778565b6119289190612758565b90506119348183612740565b6004556119c2565b6001600160a01b0388166000908152600e602052604090205460ff16801561197257506024546001600160a01b03898116911614155b156119c257600060045560195460649061198c9088612778565b6119969190612758565b91506064601754876119a89190612778565b6119b29190612758565b90506119be8183612740565b6004555b6119cc8686612797565b6001600160a01b0389166000908152600b6020526040902055806119f08388612797565b6119fa9190612797565b6001600160a01b0388166000908152600b602052604081208054909190611a22908490612740565b90915550508015611acd57600454306000908152600b602052604081208054909190611a4f908490612740565b925050819055508060236000828254611a689190612740565b925050819055508160226000828254611a819190612740565b909155505060045460405130916001600160a01b038b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611ac4916126e5565b60405180910390a35b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045489611b109190612797565b604051611b1d91906126e5565b60405180910390a35050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000818152600e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6021805460ff19166001179055602354611bec90611c45565b611bf7602254611cc6565b7f4596ef7337c1c88bb740707471cfc0ec6d0212036b05ab1bdbb09cf3e3f0190481604051611c2691906126e5565b60405180910390a150600060228190556023556021805460ff19169055565b6000611c52600283612758565b90506000611c608284612797565b905047611c6c83611e4f565b6000611c788247612797565b9050611c848382611f9e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611cb79392919061272a565b60405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d0957634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d5d57600080fd5b505afa158015611d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d95919061208f565b81600181518110611db657634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602454611ddc913091168461152a565b60245460105460405163791ac94760e01b81526001600160a01b039283169263791ac94792611e19928792600092889291169042906004016126ee565b600060405180830381600087803b158015611e3357600080fd5b505af1158015611e47573d6000803e3d6000fd5b505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e9257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611ee657600080fd5b505afa158015611efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1e919061208f565b81600181518110611f3f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602454611f65913091168461152a565b60245460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e199085906000908690309042906004016126ee565b602454611fb69030906001600160a01b03168461152a565b60245460405163f305d71960e01b81526001600160a01b039091169063f305d719908390612013903090879060009081907f000000000000000000000000000000000000000000000000000000000000dead90429060040161228e565b6060604051808303818588803b15801561202c57600080fd5b505af1158015612040573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061206591906121f1565b5050505050565b60006020828403121561207d578081fd5b8135612088816127ff565b9392505050565b6000602082840312156120a0578081fd5b8151612088816127ff565b600080604083850312156120bd578081fd5b82356120c8816127ff565b915060208301356120d881612814565b809150509250929050565b600080604083850312156120f5578182fd5b8235612100816127ff565b915060208301356120d8816127ff565b600080600060608486031215612124578081fd5b833561212f816127ff565b9250602084013561213f816127ff565b929592945050506040919091013590565b600080604083850312156120bd578182fd5b60008060408385031215612174578182fd5b823561217f816127ff565b946020939093013593505050565b60006020828403121561219e578081fd5b813561208881612814565b6000602082840312156121ba578081fd5b815161208881612814565b600080600060608486031215612124578283fd5b6000602082840312156121ea578081fd5b5035919050565b600080600060608486031215612205578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156122565781516001600160a01b031687529582019590820190600101612231565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612300578581018301518582016040015282016122e4565b818111156123115783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526039908201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060408201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606082015260800190565b6020808252602e908201527f596f752063616e742063616c6c2048414e4e5941446179206d6f72652074686160408201526d6e206f6e6365207065722064617960901b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b60208082526032908201527f45524332303a207472616e73666572656420616d6f756e74206d7573742062656040820152712067726561746572207468616e207a65726f60701b606082015260800190565b6020808252601d908201527f43616e742074726164652c2074726164652069732064697361626c6564000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601190820152704e6f20626f74732063616e20747261646560781b604082015260600190565b90815260200190565b600086825285602083015260a0604083015261270d60a083018661221e565b6001600160a01b0394909416606083015250608001529392505050565b9283526020830191909152604082015260600190565b60008219821115612753576127536127e9565b500190565b60008261277357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612792576127926127e9565b500290565b6000828210156127a9576127a96127e9565b500390565b6002810460018216806127c257607f821691505b602082108114156127e357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461145e57600080fd5b801515811461145e57600080fdfea26469706673582212202bacb9849440471cd61a5630fd142d83b11a97a47b15163c2e3573423ebad83164736f6c63430008000033

Deployed Bytecode Sourcemap

5428:15199:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9862:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19458:111;;;;;;;;;;-1:-1:-1;19458:111:0;;;;;:::i;:::-;;:::i;:::-;;9596:168;;;;;;;;;;-1:-1:-1;9596:168:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11134:178::-;;;;;;;;;;;;;:::i;18190:302::-;;;;;;;;;;-1:-1:-1;18190:302:0;;;;;:::i;:::-;;:::i;9006:106::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7100:28::-;;;;;;;;;;;;;:::i;11874:101::-;;;;;;;;;;;;;:::i;10402:388::-;;;;;;;;;;-1:-1:-1;10402:388:0;;;;;:::i;:::-;;:::i;7182:81::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16388:90::-;;;;;;;;;;-1:-1:-1;16388:90:0;;;;;:::i;:::-;;:::i;9772:84::-;;;;;;;;;;;;;:::i;20519:105::-;;;;;;;;;;;;;:::i;7689:28::-;;;;;;;;;;;;;:::i;17944:114::-;;;;;;;;;;-1:-1:-1;17944:114:0;;;;;:::i;:::-;;:::i;7135:40::-;;;;;;;;;;;;;:::i;11456:96::-;;;;;;;;;;;;;:::i;11768:98::-;;;;;;;;;;;;;:::i;16202:178::-;;;;;;;;;;-1:-1:-1;16202:178:0;;;;;:::i;:::-;;:::i;8898:99::-;;;;;;;;;;;;;:::i;10213:175::-;;;;;;;;;;-1:-1:-1;10213:175:0;;;;;:::i;:::-;;:::i;20416:97::-;;;;;;;;;;;;;:::i;9123:118::-;;;;;;;;;;-1:-1:-1;9123:118:0;;;;;:::i;:::-;;:::i;4793:94::-;;;;;;;;;;;;;:::i;18620:113::-;;;;;;;;;;-1:-1:-1;18620:113:0;;;;;:::i;:::-;;:::i;19817:112::-;;;;;;;;;;-1:-1:-1;19817:112:0;;;;;:::i;:::-;;:::i;8698:86::-;;;;;;;;;;;;;:::i;19698:113::-;;;;;;;;;;-1:-1:-1;19698:113:0;;;;;:::i;:::-;;:::i;4142:87::-;;;;;;;;;;;;;:::i;11664:98::-;;;;;;;;;;;;;:::i;9944:88::-;;;;;;;;;;;;;:::i;19014:242::-;;;;;;;;;;-1:-1:-1;19014:242:0;;;;;:::i;:::-;;:::i;11558:96::-;;;;;;;;;;;;;:::i;5885:71::-;;;;;;;;;;;;;:::i;6236:93::-;;;;;;;;;;;;;:::i;11320:130::-;;;;;;;;;;-1:-1:-1;11320:130:0;;;;;:::i;:::-;;:::i;10042:164::-;;;;;;;;;;-1:-1:-1;10042:164:0;;;;;:::i;:::-;;:::i;9252:176::-;;;;;;;;;;-1:-1:-1;9252:176:0;;;;;:::i;:::-;;:::i;18066:116::-;;;;;;;;;;-1:-1:-1;18066:116:0;;;;;:::i;:::-;;:::i;6150:58::-;;;;;;;;;;-1:-1:-1;6150:58:0;;;;;:::i;:::-;;:::i;20038:89::-;;;;;;;;;;;;;:::i;18771:118::-;;;;;;;;;;-1:-1:-1;18771:118:0;;;;;:::i;:::-;;:::i;15481:123::-;;;;;;;;;;-1:-1:-1;15481:123:0;;;;;:::i;:::-;;:::i;11981:118::-;;;;;;;;;;-1:-1:-1;11981:118:0;;;;;:::i;:::-;;:::i;20133:174::-;;;;;;;;;;-1:-1:-1;20133:174:0;;;;;:::i;:::-;;:::i;20313:97::-;;;;;;;;;;;;;:::i;18500:112::-;;;;;;;;;;-1:-1:-1;18500:112:0;;;;;:::i;:::-;;:::i;9439:148::-;;;;;;;;;;-1:-1:-1;9439:148:0;;;;;:::i;:::-;;:::i;8790:99::-;;;;;;;;;;;;;:::i;19935:97::-;;;;;;;;;;;;;:::i;10844:284::-;;;;;;;;;;;;;:::i;19575:111::-;;;;;;;;;;-1:-1:-1;19575:111:0;;;;;:::i;:::-;;:::i;5042:192::-;;;;;;;;;;-1:-1:-1;5042:192:0;;;;;:::i;:::-;;:::i;16017:177::-;;;;;;;;;;-1:-1:-1;16017:177:0;;;;;:::i;:::-;;:::i;9862:76::-;9901:13;9928:5;9921:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9862:76;:::o;19458:111::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;;;;;;;;;19540:9:::1;:21:::0;19458:111::o;9596:168::-;9673:4;9693:37;9702:12;:10;:12::i;:::-;9715:7;9723:6;9693:8;:37::i;:::-;-1:-1:-1;9752:4:0;9596:168;;;;:::o;11134:178::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;11199:13:::1;::::0;11187:9:::1;:25:::0;11236:13:::1;::::0;11224:9:::1;:25:::0;11281:23:::1;:15;11299:5;11281:23;:::i;:::-;11261:17;:43:::0;11134:178::o;18190:302::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18296:34:0;;::::1;;::::0;;;:17:::1;:34;::::0;;;;;;;:41;;18333:4:::1;-1:-1:-1::0;;18296:41:0;;::::1;::::0;::::1;::::0;;;18348:26;;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;18392;;;:16:::1;:33:::0;;;;;;:40;;;::::1;::::0;::::1;::::0;;18443:25;;;;:32;;;;::::1;::::0;;::::1;::::0;;18190:302::o;9006:106::-;9091:12;;9006:106;:::o;7100:28::-;;;;;;:::o;11874:101::-;11951:16;;11874:101;:::o;10402:388::-;-1:-1:-1;;;;;10568:19:0;;10534:4;10568:19;;;:11;:19;;;;;10534:4;10588:12;:10;:12::i;:::-;-1:-1:-1;;;;;10568:33:0;-1:-1:-1;;;;;10568:33:0;;;;;;;;;;;;;10558:6;:43;;10550:96;;;;-1:-1:-1;;;10550:96:0;;;;;;;:::i;:::-;10651:36;10661:6;10669:9;10680:6;10651:9;:36::i;:::-;10692:74;10701:6;10709:12;:10;:12::i;:::-;-1:-1:-1;;;;;10723:19:0;;;;;;:11;:19;;;;;10759:6;;10743:12;:10;:12::i;:::-;-1:-1:-1;;;;;10723:33:0;-1:-1:-1;;;;;10723:33:0;;;;;;;;;;;;;:42;;;;:::i;:::-;10692:8;:74::i;:::-;-1:-1:-1;10778:4:0;10402:388;;;;;:::o;7182:81::-;;;:::o;16388:90::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;16449:12:::1;:21:::0;;-1:-1:-1;;16449:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16388:90::o;9772:84::-;9839:9;;;;9772:84;:::o;20519:105::-;20596:20;;20519:105;:::o;7689:28::-;;;-1:-1:-1;;;;;7689:28:0;;:::o;17944:114::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18015:28:0::1;;::::0;;;:17:::1;:28;::::0;;;;:35;;-1:-1:-1;;18015:35:0::1;18046:4;18015:35;::::0;;17944:114::o;7135:40::-;;;;;;;;;:::o;11456:96::-;11535:9;;11456:96;:::o;11768:98::-;11848:10;;11768:98;:::o;16202:178::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;16331:41:::1;::::0;16299:21:::1;::::0;-1:-1:-1;;;;;16331:29:0;::::1;::::0;:41;::::1;;;::::0;16299:21;;16278:18:::1;16331:41:::0;16278:18;16331:41;16299:21;16331:29;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;4433:1;16202:178:::0;:::o;8898:99::-;8979:9;;8898:99;:::o;10213:175::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;10289:17:::1;:26:::0;;;10344:12:::1;::::0;10375:3:::1;::::0;10344:30:::1;::::0;10309:6;;10344:30:::1;:::i;:::-;:34;;;;:::i;:::-;10326:15;:52:::0;-1:-1:-1;10213:175:0:o;20416:97::-;20493:12;;20416:97;:::o;9123:118::-;-1:-1:-1;;;;;9215:18:0;9189:7;9215:18;;;:9;:18;;;;;;;9123:118::o;4793:94::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;4858:21:::1;4876:1;4858:9;:21::i;:::-;4793:94::o:0;18620:113::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;18693:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;18693:32:0;;::::1;::::0;;;::::1;::::0;;18620:113::o;19817:112::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;19900:10:::1;:21:::0;19817:112::o;8698:86::-;8739:7;8769;:5;:7::i;:::-;8762:14;;8698:86;:::o;19698:113::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;19782:10:::1;:21:::0;19698:113::o;4142:87::-;4188:7;4215:6;-1:-1:-1;;;;;4215:6:0;4142:87;:::o;11664:98::-;11744:10;;11664:98;:::o;9944:88::-;9985:13;10017:7;10010:14;;;;;:::i;19014:242::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;19121:13:::1;::::0;-1:-1:-1;;;;;19113:21:0;;::::1;19121:13:::0;::::1;19113:21;;19105:91;;;;-1:-1:-1::0;;;19105:91:0::1;;;;;;;:::i;:::-;19207:41;19236:4;19242:5;19207:28;:41::i;:::-;19014:242:::0;;:::o;11558:96::-;11637:9;;11558:96;:::o;5885:71::-;;;;:::o;6236:93::-;;;-1:-1:-1;;;;;6236:93:0;;:::o;11320:130::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11411:23:0;;;::::1;;::::0;;;:10:::1;:23;::::0;;;;:31;;-1:-1:-1;;11411:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11320:130::o;10042:164::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;10114:13:::1;:22:::0;;;10161:12:::1;::::0;10188:3:::1;::::0;10161:26:::1;::::0;10130:6;;10161:26:::1;:::i;:::-;:30;;;;:::i;:::-;10147:11;:44:::0;-1:-1:-1;10042:164:0:o;9252:176::-;9332:4;9352:40;9362:12;:10;:12::i;:::-;9375:9;9385:6;9352:9;:40::i;18066:116::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18139:27:0::1;18169:5;18139:27:::0;;;:17:::1;:27;::::0;;;;:35;;-1:-1:-1;;18139:35:0::1;::::0;;18066:116::o;6150:58::-;;;;;;;;;;;;;;;:::o;20038:89::-;20108:11;;20038:89;:::o;18771:118::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;18843:16:::1;:38:::0;;-1:-1:-1;;;;;;18843:38:0::1;-1:-1:-1::0;;;;;18843:38:0;;;::::1;::::0;;;::::1;::::0;;18771:118::o;15481:123::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15553:29:0::1;;::::0;;;:17:::1;:29;::::0;;;;:36;;-1:-1:-1;;15553:36:0::1;15585:4;15553:36;::::0;;15481:123::o;11981:118::-;-1:-1:-1;;;;;12065:26:0;12038:4;12065:26;;;:17;:26;;;;;;;;;11981:118::o;20133:174::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;20204:12:::1;:21:::0;;;20259:12:::1;::::0;20285:4:::1;::::0;20259:25:::1;::::0;20219:6;;20259:25:::1;:::i;:::-;:30;;;;:::i;:::-;20236:20;:53:::0;-1:-1:-1;20133:174:0:o;20313:97::-;20387:12;;;;20313:97;:::o;18500:112::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;18571:16:::1;:31:::0;18500:112::o;9439:148::-;-1:-1:-1;;;;;9552:18:0;;;9522:7;9552:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9439:148::o;8790:99::-;8871:9;;8790:99;:::o;19935:97::-;20009:15;;19935:97;:::o;10844:284::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;10919:17:::1;;10901:15;:35;10893:94;;;;-1:-1:-1::0;;;10893:94:0::1;;;;;;;:::i;:::-;11015:9;::::0;;10999:13:::1;:25:::0;11052:9:::1;::::0;;11036:13:::1;:25:::0;-1:-1:-1;11082:13:0;;;;11107;;10844:284::o;19575:111::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;19658:9:::1;:20:::0;19575:111::o;5042:192::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5131:22:0;::::1;5123:73;;;;-1:-1:-1::0;;;5123:73:0::1;;;;;;;:::i;:::-;5207:19;5217:8;5207:9;:19::i;:::-;5042:192:::0;:::o;16017:177::-;4373:12;:10;:12::i;:::-;-1:-1:-1;;;;;4362:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4362:23:0;;4354:68;;;;-1:-1:-1;;;4354:68:0;;;;;;;:::i;:::-;16144:42:::1;::::0;-1:-1:-1;;;16144:42:0;;-1:-1:-1;;;;;16144:21:0;::::1;::::0;::::1;::::0;:42:::1;::::0;16166:11;;16179:6;;16144:42:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16017:177:::0;;;:::o;102:98::-;182:10;102:98;:::o;17576:322::-;-1:-1:-1;;;;;17668:19:0;;17660:68;;;;-1:-1:-1;;;17660:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17741:21:0;;17733:68;;;;-1:-1:-1;;;17733:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17808:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;17854:32;;;;;17838:6;;17854:32;:::i;:::-;;;;;;;;17576:322;;;:::o;12107:3099::-;-1:-1:-1;;;;;12205:18:0;;12197:68;;;;-1:-1:-1;;;12197:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12278:16:0;;12270:64;;;;-1:-1:-1;;;12270:64:0;;;;;;;:::i;:::-;12362:1;12353:6;:10;12345:72;;;;-1:-1:-1;;;12345:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12452:15:0;;12428:21;12452:15;;;:9;:15;;;;;;12486:23;;;;12478:74;;;;-1:-1:-1;;;12478:74:0;;;;;;;:::i;:::-;12566:12;;;;12563:141;;-1:-1:-1;;;;;12611:21:0;;;;;;:17;:21;;;;;;;;;:48;;-1:-1:-1;;;;;;12636:23:0;;;;;;:17;:23;;;;;;;;12611:48;12603:89;;;;-1:-1:-1;;;12603:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12717:21:0;;;;;;:17;:21;;;;;;;;:28;;;:62;;-1:-1:-1;;;;;;12749:23:0;;;;;;:17;:23;;;;;;;;:30;12717:62;12714:282;;;12809:11;;12799:6;:21;;12791:74;;;;-1:-1:-1;;;12791:74:0;;;;;;;:::i;:::-;12888:13;;-1:-1:-1;;;;;12880:21:0;;;12888:13;;12880:21;12877:108;;;12953:15;;12943:6;12929:13;12939:2;12929:9;:13::i;:::-;:20;;;;:::i;:::-;:39;;12921:48;;;;;;13006:25;13034:24;13052:4;13034:9;:24::i;:::-;13006:52;;13092:20;;13072:17;:40;;:66;;;;-1:-1:-1;13122:16:0;;;;13121:17;13072:66;:96;;;;-1:-1:-1;13155:13:0;;-1:-1:-1;;;;;13147:21:0;;;13155:13;;13147:21;;13072:96;:126;;;;-1:-1:-1;13177:21:0;;;;;;;13072:126;13069:352;;;13242:20;;13221:17;:41;13218:188;;-1:-1:-1;13307:20:0;;13350:36;13307:20;13350:17;:36::i;:::-;-1:-1:-1;;;;;13503:23:0;;13437:13;13503:23;;;:17;:23;;;;;;13453:4;;13503:23;;;:48;;-1:-1:-1;;;;;;13530:21:0;;;;;;:17;:21;;;;;;;;13503:48;13500:159;;;-1:-1:-1;13588:1:0;13572:13;:17;;;13500:159;13673:17;13703;13781:8;13778:981;;;-1:-1:-1;;;;;13876:16:0;;;;;;:10;:16;;;;;;;;:24;;:16;:24;;:46;;-1:-1:-1;;;;;;13902:14:0;;;;;;:10;:14;;;;;;;;:20;;:14;:20;13876:46;13873:120;;;13946:27;;-1:-1:-1;;;13946:27:0;;;;;;;:::i;13873:120::-;-1:-1:-1;;;;;14047:29:0;;;;;;:25;:29;;;;;;;;:55;;;;-1:-1:-1;14094:7:0;;-1:-1:-1;;;;;14080:22:0;;;14094:7;;14080:22;;14047:55;14043:681;;;14147:1;14131:13;:17;14196:10;;14207:3;;14187:19;;:6;:19;:::i;:::-;:23;;;;:::i;:::-;14175:35;;14269:3;14258:10;;14249:6;:19;;;;:::i;:::-;:23;;;;:::i;:::-;14237:35;-1:-1:-1;14315:21:0;14237:35;14315:9;:21;:::i;:::-;14299:13;:37;14043:681;;;-1:-1:-1;;;;;14410:31:0;;;;;;:25;:31;;;;;;;;:59;;;;-1:-1:-1;14461:7:0;;-1:-1:-1;;;;;14445:24:0;;;14461:7;;14445:24;;14410:59;14407:317;;;14528:1;14512:13;:17;14573:9;;14583:3;;14564:18;;:6;:18;:::i;:::-;:22;;;;:::i;:::-;14552:34;;14640:3;14630:9;;14621:6;:18;;;;:::i;:::-;:22;;;;:::i;:::-;14609:34;-1:-1:-1;14682:21:0;14609:34;14682:9;:21;:::i;:::-;14666:13;:37;14407:317;14793:22;14809:6;14793:13;:22;:::i;:::-;-1:-1:-1;;;;;14775:15:0;;;;;;:9;:15;;;;;:40;14868:9;14847:18;14856:9;14847:6;:18;:::i;:::-;:30;;;;:::i;:::-;-1:-1:-1;;;;;14830:13:0;;;;;;:9;:13;;;;;:47;;:13;;;:47;;;;;:::i;:::-;;;;-1:-1:-1;;14895:14:0;;14892:224;;14945:13;;14935:4;14917:24;;;;:9;:24;;;;;:41;;:24;;;:41;;14945:13;;14917:41;:::i;:::-;;;;;;;;14991:9;14978;;:22;;;;;;;:::i;:::-;;;;;;;;15028:9;15015;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;15078:13:0;;15048:44;;15071:4;;-1:-1:-1;;;;;15048:44:0;;;;;;;;:::i;:::-;;;;;;;;14892:224;15150:2;-1:-1:-1;;;;;15135:39:0;15144:4;-1:-1:-1;;;;;15135:39:0;;15160:13;;15153:6;:20;;;;:::i;:::-;15135:39;;;;;;:::i;:::-;;;;;;;;12107:3099;;;;;;;;:::o;5242:173::-;5298:16;5317:6;;-1:-1:-1;;;;;5334:17:0;;;-1:-1:-1;;;;;;5334:17:0;;;;;;5367:40;;5317:6;;;;;;;5367:40;;5298:16;5367:40;5242:173;;:::o;19262:188::-;-1:-1:-1;;;;;19345:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;19345:39:0;;;;;;;;;;19402:40;;19345:39;;:31;19402:40;;;19262:188;;:::o;15212:262::-;7777:16;:23;;-1:-1:-1;;7777:23:0;7796:4;7777:23;;;15307:9:::1;::::0;15292:25:::1;::::0;:14:::1;:25::i;:::-;15328:30;15348:9;;15328:19;:30::i;:::-;15374:44;15404:13;15374:44;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;15441:1:0::1;15429:9;:13:::0;;;15453:9:::1;:13:::0;7811:16;:24;;-1:-1:-1;;7811:24:0;;;15212:262::o;16486:388::-;16548:12;16563:19;16581:1;16563:15;:19;:::i;:::-;16548:34;-1:-1:-1;16587:17:0;16607:22;16548:34;16607:15;:22;:::i;:::-;16587:42;-1:-1:-1;16659:21:0;16687:22;16704:4;16687:16;:22::i;:::-;16714:18;16735:40;16760:14;16735:21;:40;:::i;:::-;16714:61;;16783:35;16796:9;16807:10;16783:12;:35::i;:::-;16828:41;16843:4;16848:10;16859:9;16828:41;;;;;;;;:::i;:::-;;;;;;;;16486:388;;;;;:::o;15610:399::-;15697:16;;;15711:1;15697:16;;;;;;;;15673:21;;15697:16;;;;;;;;;;-1:-1:-1;15697:16:0;15673:40;;15736:4;15718;15723:1;15718:7;;;;;;-1:-1:-1;;;15718:7:0;;;;;;;;;-1:-1:-1;;;;;15718:23:0;;;:7;;;;;;;;;;:23;;;;15756:7;;:14;;;-1:-1:-1;;;15756:14:0;;;;:7;;;;;:12;;:14;;;;;15718:7;;15756:14;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15746:4;15751:1;15746:7;;;;;;-1:-1:-1;;;15746:7:0;;;;;;;;;-1:-1:-1;;;;;15746:24:0;;;:7;;;;;;;;;:24;15807:7;;15775:49;;15792:4;;15807:7;15817:6;15775:8;:49::i;:::-;15835:7;;15957:16;;15835:164;;-1:-1:-1;;;15835:164:0;;-1:-1:-1;;;;;15835:7:0;;;;:58;;:164;;15899:6;;15835:7;;15947:4;;15957:16;;;15979:15;;15835:164;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15610:399;;:::o;16882:397::-;16965:16;;;16979:1;16965:16;;;;;;;;16941:21;;16965:16;;;;;;;;;;-1:-1:-1;16965:16:0;16941:40;;17004:4;16986;16991:1;16986:7;;;;;;-1:-1:-1;;;16986:7:0;;;;;;;;;-1:-1:-1;;;;;16986:23:0;;;:7;;;;;;;;;;:23;;;;17024:7;;:14;;;-1:-1:-1;;;17024:14:0;;;;:7;;;;;:12;;:14;;;;;16986:7;;17024:14;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17014:4;17019:1;17014:7;;;;;;-1:-1:-1;;;17014:7:0;;;;;;;;;-1:-1:-1;;;;;17014:24:0;;;:7;;;;;;;;;:24;17075:7;;17043:54;;17060:4;;17075:7;17085:11;17043:8;:54::i;:::-;17108:7;;:166;;-1:-1:-1;;;17108:166:0;;-1:-1:-1;;;;;17108:7:0;;;;:58;;:166;;17172:11;;17108:7;;17225:4;;17243;;17254:15;;17108:166;;;:::i;17291:277::-;17396:7;;17364:54;;17381:4;;-1:-1:-1;;;;;17396:7:0;17406:11;17364:8;:54::i;:::-;17425:7;;:138;;-1:-1:-1;;;17425:138:0;;-1:-1:-1;;;;;17425:7:0;;;;:23;;17455:9;;17425:138;;17479:4;;17490:11;;17425:7;;;;17521:11;;17543:15;;17425:138;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17291:277;;:::o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;:::-;262:5;84:189;-1:-1:-1;;;84:189:1:o;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;818:404::-;;;952:2;940:9;931:7;927:23;923:32;920:2;;;973:6;965;958:22;920:2;1017:9;1004:23;1036:33;1063:5;1036:33;:::i;:::-;1088:5;-1:-1:-1;1145:2:1;1130:18;;1117:32;1158;1117;1158;:::i;:::-;1209:7;1199:17;;;910:312;;;;;:::o;1227:402::-;;;1356:2;1344:9;1335:7;1331:23;1327:32;1324:2;;;1377:6;1369;1362:22;1324:2;1421:9;1408:23;1440:33;1467:5;1440:33;:::i;:::-;1492:5;-1:-1:-1;1549:2:1;1534:18;;1521:32;1562:35;1521:32;1562:35;:::i;1634:470::-;;;;1780:2;1768:9;1759:7;1755:23;1751:32;1748:2;;;1801:6;1793;1786:22;1748:2;1845:9;1832:23;1864:33;1891:5;1864:33;:::i;:::-;1916:5;-1:-1:-1;1973:2:1;1958:18;;1945:32;1986:35;1945:32;1986:35;:::i;:::-;1738:366;;2040:7;;-1:-1:-1;;;2094:2:1;2079:18;;;;2066:32;;1738:366::o;2109:396::-;;;2235:2;2223:9;2214:7;2210:23;2206:32;2203:2;;;2256:6;2248;2241:22;2510:327;;;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2660:6;2652;2645:22;2607:2;2704:9;2691:23;2723:33;2750:5;2723:33;:::i;:::-;2775:5;2827:2;2812:18;;;;2799:32;;-1:-1:-1;;;2597:240:1:o;2842:253::-;;2951:2;2939:9;2930:7;2926:23;2922:32;2919:2;;;2972:6;2964;2957:22;2919:2;3016:9;3003:23;3035:30;3059:5;3035:30;:::i;3100:257::-;;3220:2;3208:9;3199:7;3195:23;3191:32;3188:2;;;3241:6;3233;3226:22;3188:2;3278:9;3272:16;3297:30;3321:5;3297:30;:::i;3362:491::-;;;;3529:2;3517:9;3508:7;3504:23;3500:32;3497:2;;;3550:6;3542;3535:22;3858:190;;3970:2;3958:9;3949:7;3945:23;3941:32;3938:2;;;3991:6;3983;3976:22;3938:2;-1:-1:-1;4019:23:1;;3928:120;-1:-1:-1;3928:120:1:o;4053:316::-;;;;4210:2;4198:9;4189:7;4185:23;4181:32;4178:2;;;4231:6;4223;4216:22;4178:2;4265:9;4259:16;4249:26;;4315:2;4304:9;4300:18;4294:25;4284:35;;4359:2;4348:9;4344:18;4338:25;4328:35;;4168:201;;;;;:::o;4374:469::-;;4471:5;4465:12;4498:6;4493:3;4486:19;4524:4;4553:2;4548:3;4544:12;4537:19;;4590:2;4583:5;4579:14;4611:3;4623:195;4637:6;4634:1;4631:13;4623:195;;;4702:13;;-1:-1:-1;;;;;4698:39:1;4686:52;;4758:12;;;;4793:15;;;;4734:1;4652:9;4623:195;;;-1:-1:-1;4834:3:1;;4441:402;-1:-1:-1;;;;;4441:402:1:o;4848:203::-;-1:-1:-1;;;;;5012:32:1;;;;4994:51;;4982:2;4967:18;;4949:102::o;5280:282::-;-1:-1:-1;;;;;5480:32:1;;;;5462:51;;5544:2;5529:18;;5522:34;5450:2;5435:18;;5417:145::o;5567:607::-;-1:-1:-1;;;;;5926:15:1;;;5908:34;;5973:2;5958:18;;5951:34;;;;6016:2;6001:18;;5994:34;;;;6059:2;6044:18;;6037:34;;;;6108:15;;;6102:3;6087:19;;6080:44;5888:3;6140:19;;6133:35;;;;5857:3;5842:19;;5824:350::o;6179:187::-;6344:14;;6337:22;6319:41;;6307:2;6292:18;;6274:92::o;6371:603::-;;6512:2;6541;6530:9;6523:21;6573:6;6567:13;6616:6;6611:2;6600:9;6596:18;6589:34;6641:4;6654:140;6668:6;6665:1;6662:13;6654:140;;;6763:14;;;6759:23;;6753:30;6729:17;;;6748:2;6725:26;6718:66;6683:10;;6654:140;;;6812:6;6809:1;6806:13;6803:2;;;6882:4;6877:2;6868:6;6857:9;6853:22;6849:31;6842:45;6803:2;-1:-1:-1;6958:2:1;6937:15;-1:-1:-1;;6933:29:1;6918:45;;;;6965:2;6914:54;;6492:482;-1:-1:-1;;;6492:482:1:o;6979:399::-;7181:2;7163:21;;;7220:2;7200:18;;;7193:30;7259:34;7254:2;7239:18;;7232:62;-1:-1:-1;;;7325:2:1;7310:18;;7303:33;7368:3;7353:19;;7153:225::o;7383:402::-;7585:2;7567:21;;;7624:2;7604:18;;;7597:30;7663:34;7658:2;7643:18;;7636:62;-1:-1:-1;;;7729:2:1;7714:18;;7707:36;7775:3;7760:19;;7557:228::o;7790:398::-;7992:2;7974:21;;;8031:2;8011:18;;;8004:30;8070:34;8065:2;8050:18;;8043:62;-1:-1:-1;;;8136:2:1;8121:18;;8114:32;8178:3;8163:19;;7964:224::o;8193:421::-;8395:2;8377:21;;;8434:2;8414:18;;;8407:30;8473:34;8468:2;8453:18;;8446:62;8544:27;8539:2;8524:18;;8517:55;8604:3;8589:19;;8367:247::o;8619:410::-;8821:2;8803:21;;;8860:2;8840:18;;;8833:30;8899:34;8894:2;8879:18;;8872:62;-1:-1:-1;;;8965:2:1;8950:18;;8943:44;9019:3;9004:19;;8793:236::o;9034:402::-;9236:2;9218:21;;;9275:2;9255:18;;;9248:30;9314:34;9309:2;9294:18;;9287:62;-1:-1:-1;;;9380:2:1;9365:18;;9358:36;9426:3;9411:19;;9208:228::o;9441:404::-;9643:2;9625:21;;;9682:2;9662:18;;;9655:30;9721:34;9716:2;9701:18;;9694:62;-1:-1:-1;;;9787:2:1;9772:18;;9765:38;9835:3;9820:19;;9615:230::o;9850:414::-;10052:2;10034:21;;;10091:2;10071:18;;;10064:30;10130:34;10125:2;10110:18;;10103:62;-1:-1:-1;;;10196:2:1;10181:18;;10174:48;10254:3;10239:19;;10024:240::o;10269:353::-;10471:2;10453:21;;;10510:2;10490:18;;;10483:30;10549:31;10544:2;10529:18;;10522:59;10613:2;10598:18;;10443:179::o;10627:404::-;10829:2;10811:21;;;10868:2;10848:18;;;10841:30;10907:34;10902:2;10887:18;;10880:62;-1:-1:-1;;;10973:2:1;10958:18;;10951:38;11021:3;11006:19;;10801:230::o;11036:356::-;11238:2;11220:21;;;11257:18;;;11250:30;11316:34;11311:2;11296:18;;11289:62;11383:2;11368:18;;11210:182::o;11397:401::-;11599:2;11581:21;;;11638:2;11618:18;;;11611:30;11677:34;11672:2;11657:18;;11650:62;-1:-1:-1;;;11743:2:1;11728:18;;11721:35;11788:3;11773:19;;11571:227::o;11803:400::-;12005:2;11987:21;;;12044:2;12024:18;;;12017:30;12083:34;12078:2;12063:18;;12056:62;-1:-1:-1;;;12149:2:1;12134:18;;12127:34;12193:3;12178:19;;11977:226::o;12208:341::-;12410:2;12392:21;;;12449:2;12429:18;;;12422:30;-1:-1:-1;;;12483:2:1;12468:18;;12461:47;12540:2;12525:18;;12382:167::o;12554:177::-;12700:25;;;12688:2;12673:18;;12655:76::o;12736:596::-;;13043:6;13032:9;13025:25;13086:6;13081:2;13070:9;13066:18;13059:34;13129:3;13124:2;13113:9;13109:18;13102:31;13150:63;13208:3;13197:9;13193:19;13185:6;13150:63;:::i;:::-;-1:-1:-1;;;;;13249:32:1;;;;13244:2;13229:18;;13222:60;-1:-1:-1;13313:3:1;13298:19;13291:35;13142:71;13015:317;-1:-1:-1;;;13015:317:1:o;13930:319::-;14132:25;;;14188:2;14173:18;;14166:34;;;;14231:2;14216:18;;14209:34;14120:2;14105:18;;14087:162::o;14254:128::-;;14325:1;14321:6;14318:1;14315:13;14312:2;;;14331:18;;:::i;:::-;-1:-1:-1;14367:9:1;;14302:80::o;14387:217::-;;14453:1;14443:2;;-1:-1:-1;;;14478:31:1;;14532:4;14529:1;14522:15;14560:4;14485:1;14550:15;14443:2;-1:-1:-1;14589:9:1;;14433:171::o;14609:168::-;;14715:1;14711;14707:6;14703:14;14700:1;14697:21;14692:1;14685:9;14678:17;14674:45;14671:2;;;14722:18;;:::i;:::-;-1:-1:-1;14762:9:1;;14661:116::o;14782:125::-;;14850:1;14847;14844:8;14841:2;;;14855:18;;:::i;:::-;-1:-1:-1;14892:9:1;;14831:76::o;14912:380::-;14997:1;14987:12;;15044:1;15034:12;;;15055:2;;15109:4;15101:6;15097:17;15087:27;;15055:2;15162;15154:6;15151:14;15131:18;15128:38;15125:2;;;15208:10;15203:3;15199:20;15196:1;15189:31;15243:4;15240:1;15233:15;15271:4;15268:1;15261:15;15125:2;;14967:325;;;:::o;15297:127::-;15358:10;15353:3;15349:20;15346:1;15339:31;15389:4;15386:1;15379:15;15413:4;15410:1;15403:15;15429:133;-1:-1:-1;;;;;15506:31:1;;15496:42;;15486:2;;15552:1;15549;15542:12;15567:120;15655:5;15648:13;15641:21;15634:5;15631:32;15621:2;;15677:1;15674;15667:12

Swarm Source

ipfs://2bacb9849440471cd61a5630fd142d83b11a97a47b15163c2e3573423ebad831
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.