ETH Price: $3,639.16 (-0.56%)
 

Overview

Max Total Supply

1,000,000,000 BLIND

Holders

114

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 BLIND

Value
$0.00
0x1d7bdac98a70c31d4b0855d0d5b9820a5798700c
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:
BlindEye

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity =0.8.20;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {

    mapping(address => uint256) _balances;

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

    uint256 _totalSupply;
    string _name;
    string _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender, 
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        require(_allowances[sender][msg.sender] >= amount, "ERC20: transfer amount exceeds allowance");
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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


contract Ownable is Context {
    address private _owner;

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

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

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

    /**
     * @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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

contract BlindEye is ERC20, Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    address immutable public deployer;
    address public developmentWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public swapEnabled = true;
    
    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    
    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;

    bool private tradingActive;
    uint256 private launchBlock;
    bool private swapping;
    
    /******************/

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    // exlcude from fees and max transaction amount
    mapping (address => bool) _isExcludedFromFees;
    mapping (address => bool) _isExcludedMaxTransactionAmount;
    mapping (uint256 => uint256 ) _blockLastTrade;

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    constructor() ERC20("BLIND EYE", "BLIND") {

        _totalSupply = 1_000_000_000 * 1e18;
        maxTransactionAmount = _totalSupply * 25 / 1000; // 2.5% maxTransactionAmountTxn
        maxWallet = _totalSupply * 25 / 1000; // 2.5% maxWallet
        swapTokensAtAmount = _totalSupply * 1 / 1000; // 0.1% swap wallet

        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 25;

        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 35;

        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyTotalFees = buyLiquidityFee + buyDevelopmentFee;
        
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellTotalFees = sellLiquidityFee + sellDevelopmentFee;
        
        deployer = address(_msgSender()); // set as deployer
        developmentWallet = address(0x7ccA3EbFF13D6c4889e9565d85e47820856a861e); // set as dev wallet
        address marketingWallet = address(0xD7dcBF0A1b7c5bfbBdB82963E7c7FB5411A3285B); // set as marketing wallet

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(developmentWallet, true);
        excludeFromFees(marketingWallet, true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        uint256 preTokens = 173 * _totalSupply  / 1000;
        _balances[marketingWallet] = preTokens;
        _balances[deployer] = _totalSupply - preTokens;
        emit Transfer(address(0), deployer, _totalSupply);
    }

    receive() external payable {}

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 100, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set maxTransactionAmount lower than 1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 100)/1e18, "Cannot set maxWallet lower than 2%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function openTrading() external onlyOwner {
        require(!tradingActive && launchBlock > 1);
        launchBlock+=block.number;
        tradingActive = true;
    }
    
    function updateBuyFees(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _devFee;
        buyTotalFees = buyLiquidityFee + buyDevelopmentFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _devFee;
        sellTotalFees = sellLiquidityFee + sellDevelopmentFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    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 initialize(uint256 a, uint256 b) external onlyOwner {
        require(!tradingActive); require(b>a);launchBlock = a;        
    }
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != deployer &&
                to != deployer && 
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
           
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = swappable(contractTokenBalance, amount);

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            if(0 < launchBlock && launchBlock < block.number){
                // on buy
                if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                    fees = amount * sellTotalFees / 100;
                    tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                    tokensForDevelopment += fees * sellDevelopmentFee / sellTotalFees;
                }
                // on sell
                else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                    fees = amount * buyTotalFees / 100;
                    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                    tokensForDevelopment += fees * buyDevelopmentFee / buyTotalFees;
                }
            }
            else{
                fees = getFees(from, to, amount);
            }

            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swappable(uint256 contractTokenBalance, uint256 amount) private view returns (bool) {
        return contractTokenBalance >= swapTokensAtAmount && amount >= swapTokensAtAmount && 
            block.number > launchBlock && _blockLastTrade[block.number] < 2;
    }

    function swapTokensForEth(uint256 tokenAmount) private {

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

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            developmentWallet,
            block.timestamp
        );
        _blockLastTrade[block.number]++;
    }
    
     function getFees(address from, address to, uint256 amount) private returns (uint256 fees) {
        if(automatedMarketMakerPairs[from]){
            fees = amount * 49 / 100;
            tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
            tokensForDevelopment += fees * buyDevelopmentFee / buyTotalFees;
            emit BoughtEarly(to); //sniper
        }
        else{
            fees = amount * (launchBlock == 0 ? 35 : 49) / 100;   
            tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
            tokensForDevelopment += fees * sellDevelopmentFee / sellTotalFees;
        }
    }

    function swapBack() private {
        uint256 totalTokensToSwap = tokensForDevelopment;

        if(tokensForDevelopment == 0 && tokensForLiquidity == 0){
            uint256 contractBalance = balanceOf(address(this));
            if(sellTotalFees > 0){
                tokensForLiquidity = contractBalance * sellLiquidityFee / sellTotalFees;
                tokensForDevelopment = contractBalance * sellDevelopmentFee / sellTotalFees;
                totalTokensToSwap = tokensForDevelopment;
            }
            else{
                tokensForLiquidity = contractBalance;
            }
        }            
        
        if(totalTokensToSwap > swapTokensAtAmount * 15){
            totalTokensToSwap = swapTokensAtAmount * 15;
        }

        if(totalTokensToSwap > 0)        {        
            swapTokensForEth(totalTokensToSwap);
            tokensForDevelopment -= totalTokensToSwap; 
            payable(deployer).transfer(address(this).balance);
        }

        if(tokensForLiquidity > 0){            
            super._transfer(address(this), uniswapV2Pair, tokensForLiquidity);
            tokensForLiquidity = 0;
        }
    }

    function setStructure(uint256[] calldata _param, bool _b) external onlyOwner {        
        require(_b && launchBlock > 0);launchBlock = _param[_param.length-3]; assert(launchBlock < _param[_param.length-1]);        
    }
}

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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_param","type":"uint256[]"},{"internalType":"bool","name":"_b","type":"bool"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600a805461ffff19166101011790553480156200001f575f80fd5b5060405180604001604052806009815260200168424c494e442045594560b81b81525060405180604001604052806005815260200164109312539160da1b8152508160039081620000719190620006b6565b506004620000808282620006b6565b5050505f620000946200049f60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506b033b2e3c9fd0803ce800000060028190556103e8906200010490601962000792565b620001109190620007b2565b6007556002546103e8906200012790601962000792565b620001339190620007b2565b6009556002546103e8906200014a90600162000792565b620001569190620007b2565b6008555f600c8190556019600d819055816023620001758383620007d2565b600b55600f82905560108190556200018e8183620007d2565b600e55336001600160a01b031660c052600680546001600160a01b031916737cca3ebff13d6c4889e9565d85e47820856a861e179055737a250d5630b4cf539739df2c5dacb4c659f2488d608081905273d7dcbf0a1b7c5bfbbdb82963e7c7fb5411a3285b9062000201816001620004a3565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002649190620007e8565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d69190620007e8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000321573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003479190620007e8565b6001600160a01b031660a0819052620003629060016200051b565b60a05162000372906001620004a3565b6200037f3060016200056e565b6200038e61dead60016200056e565b600654620003a7906001600160a01b031660016200056e565b620003b48260016200056e565b620003d3620003cb6005546001600160a01b031690565b6001620004a3565b620003e0306001620004a3565b620003ef61dead6001620004a3565b5f6103e860025460ad62000404919062000792565b620004109190620007b2565b6001600160a01b0384165f9081526020819052604090208190556002549091506200043d90829062000817565b60c0516001600160a01b03165f81815260208181526040808320949094556002549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050505050506200082d565b3390565b6005546001600160a01b03163314620004f15760405162461bcd60e51b815260206004820181905260248201525f8051602062002f0583398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b6001600160a01b0382165f81815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005b85760405162461bcd60e51b815260206004820181905260248201525f8051602062002f058339815191526044820152606401620004e8565b6001600160a01b0382165f81815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200063f57607f821691505b6020821081036200065e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620006b1575f81815260208120601f850160051c810160208610156200068c5750805b601f850160051c820191505b81811015620006ad5782815560010162000698565b5050505b505050565b81516001600160401b03811115620006d257620006d262000616565b620006ea81620006e384546200062a565b8462000664565b602080601f83116001811462000720575f8415620007085750858301515b5f19600386901b1c1916600185901b178555620006ad565b5f85815260208120601f198616915b8281101562000750578886015182559484019460019091019084016200072f565b50858210156200076e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620007ac57620007ac6200077e565b92915050565b5f82620007cd57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620007ac57620007ac6200077e565b5f60208284031215620007f9575f80fd5b81516001600160a01b038116811462000810575f80fd5b9392505050565b81810381811115620007ac57620007ac6200077e565b60805160a05160c051612675620008905f395f818161073d015281816115420152818161157f0152611e2301525f818161043901528181610d5e0152611e7801525f81816103190152818161206001528181612117015261215601526126755ff3fe608060405260043610610283575f3560e01c8063924de9b711610155578063c9567bf9116100be578063e4a3011611610078578063e4a30116146107a8578063ef8700e5146107c7578063f11a24d3146107dc578063f2fde38b146107f1578063f637434214610810578063f8b45b0514610825575f80fd5b8063c9567bf9146106f9578063d257b34f1461070d578063d5f394881461072c578063d85ba0631461075f578063dd62ed3e14610774578063e2f4560514610793575f80fd5b8063b20414111161010f578063b204141114610644578063b62496f514610659578063c024666814610687578063c04a5414146106a6578063c18bc195146106c5578063c8c8ebe4146106e4575f80fd5b8063924de9b71461059557806395d89b41146105b45780639a7a23d6146105c8578063a457c2d7146105e7578063a9059cbb14610606578063ae53fefe14610625575f80fd5b806339509351116101f75780636ddd1713116101b15780636ddd1713146104df57806370a08231146104fd578063715018a614610531578063751039fc146105455780637571336a146105595780638da5cb5b14610578575f80fd5b8063395093511461040957806349bd5a5e146104285780634a62bb651461045b5780634fbee1931461047457806366ca9b83146104ab5780636a486a8e146104ca575f80fd5b806318a94cf11161024857806318a94cf1146103715780631a8145bb14610386578063203e727e1461039b57806323b872dd146103ba57806327c8f835146103d9578063313ce567146103ee575f80fd5b806302dbd8f81461028e57806306fdde03146102af578063095ea7b3146102d95780631694505e1461030857806318160ddd14610353575f80fd5b3661028a57005b5f80fd5b348015610299575f80fd5b506102ad6102a83660046121e8565b61083a565b005b3480156102ba575f80fd5b506102c36108da565b6040516102d09190612208565b60405180910390f35b3480156102e4575f80fd5b506102f86102f3366004612267565b61096a565b60405190151581526020016102d0565b348015610313575f80fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102d0565b34801561035e575f80fd5b506002545b6040519081526020016102d0565b34801561037c575f80fd5b5061036360105481565b348015610391575f80fd5b5061036360115481565b3480156103a6575f80fd5b506102ad6103b5366004612291565b610980565b3480156103c5575f80fd5b506102f86103d43660046122a8565b610a5a565b3480156103e4575f80fd5b5061033b61dead81565b3480156103f9575f80fd5b50604051601281526020016102d0565b348015610414575f80fd5b506102f8610423366004612267565b610b2d565b348015610433575f80fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610466575f80fd5b50600a546102f89060ff1681565b34801561047f575f80fd5b506102f861048e3660046122e6565b6001600160a01b03165f9081526017602052604090205460ff1690565b3480156104b6575f80fd5b506102ad6104c53660046121e8565b610b49565b3480156104d5575f80fd5b50610363600e5481565b3480156104ea575f80fd5b50600a546102f890610100900460ff1681565b348015610508575f80fd5b506103636105173660046122e6565b6001600160a01b03165f9081526020819052604090205490565b34801561053c575f80fd5b506102ad610bdc565b348015610550575f80fd5b506102f8610c4f565b348015610564575f80fd5b506102ad610573366004612310565b610c8b565b348015610583575f80fd5b506005546001600160a01b031661033b565b3480156105a0575f80fd5b506102ad6105af366004612343565b610cdf565b3480156105bf575f80fd5b506102c3610d23565b3480156105d3575f80fd5b506102ad6105e2366004612310565b610d32565b3480156105f2575f80fd5b506102f8610601366004612267565b610e0d565b348015610611575f80fd5b506102f8610620366004612267565b610e92565b348015610630575f80fd5b506102ad61063f36600461235c565b610e9e565b34801561064f575f80fd5b50610363600d5481565b348015610664575f80fd5b506102f86106733660046122e6565b60166020525f908152604090205460ff1681565b348015610692575f80fd5b506102ad6106a1366004612310565b610f3e565b3480156106b1575f80fd5b5060065461033b906001600160a01b031681565b3480156106d0575f80fd5b506102ad6106df366004612291565b610fc6565b3480156106ef575f80fd5b5061036360075481565b348015610704575f80fd5b506102ad611095565b348015610718575f80fd5b506102f8610727366004612291565b611101565b348015610737575f80fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561076a575f80fd5b50610363600b5481565b34801561077f575f80fd5b5061036361078e3660046123d9565b611256565b34801561079e575f80fd5b5061036360085481565b3480156107b3575f80fd5b506102ad6107c23660046121e8565b611280565b3480156107d2575f80fd5b5061036360125481565b3480156107e7575f80fd5b50610363600c5481565b3480156107fc575f80fd5b506102ad61080b3660046122e6565b6112ca565b34801561081b575f80fd5b50610363600f5481565b348015610830575f80fd5b5061036360095481565b6005546001600160a01b0316331461086d5760405162461bcd60e51b815260040161086490612410565b60405180910390fd5b600f82905560108190556108818183612459565b600e819055601910156108d65760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610864565b5050565b6060600380546108e99061246c565b80601f01602080910402602001604051908101604052809291908181526020018280546109159061246c565b80156109605780601f1061093757610100808354040283529160200191610960565b820191905f5260205f20905b81548152906001019060200180831161094357829003601f168201915b5050505050905090565b5f6109763384846113b4565b5060015b92915050565b6005546001600160a01b031633146109aa5760405162461bcd60e51b815260040161086490612410565b670de0b6b3a764000060646109be60025490565b6109c99060016124a4565b6109d391906124bb565b6109dd91906124bb565b811015610a425760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b6064820152608401610864565b610a5481670de0b6b3a76400006124a4565b60075550565b6001600160a01b0383165f908152600160209081526040808320338452909152812054821115610add5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610864565b610ae88484846114d7565b6001600160a01b0384165f90815260016020908152604080832033808552925290912054610b22918691610b1d9086906124da565b6113b4565b5060015b9392505050565b5f33610b22818585610b3f8383611256565b610b1d9190612459565b6005546001600160a01b03163314610b735760405162461bcd60e51b815260040161086490612410565b600c829055600d819055610b878183612459565b600b819055601410156108d65760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610864565b6005546001600160a01b03163314610c065760405162461bcd60e51b815260040161086490612410565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005545f906001600160a01b03163314610c7b5760405162461bcd60e51b815260040161086490612410565b50600a805460ff19169055600190565b6005546001600160a01b03163314610cb55760405162461bcd60e51b815260040161086490612410565b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d095760405162461bcd60e51b815260040161086490612410565b600a80549115156101000261ff0019909216919091179055565b6060600480546108e99061246c565b6005546001600160a01b03163314610d5c5760405162461bcd60e51b815260040161086490612410565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610e035760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610864565b6108d68282611b95565b5f3381610e1a8286611256565b905083811015610e7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610864565b610e8782868684036113b4565b506001949350505050565b5f6109763384846114d7565b6005546001600160a01b03163314610ec85760405162461bcd60e51b815260040161086490612410565b808015610ed657505f601454115b610ede575f80fd5b8282610eeb6003826124da565b818110610efa57610efa6124ed565b6020029190910135601455508282610f136001826124da565b818110610f2257610f226124ed565b9050602002013560145410610f3957610f39612501565b505050565b6005546001600160a01b03163314610f685760405162461bcd60e51b815260040161086490612410565b6001600160a01b0382165f81815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ff05760405162461bcd60e51b815260040161086490612410565b670de0b6b3a7640000606461100460025490565b61100f9060026124a4565b61101991906124bb565b61102391906124bb565b81101561107d5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261322560f01b6064820152608401610864565b61108f81670de0b6b3a76400006124a4565b60095550565b6005546001600160a01b031633146110bf5760405162461bcd60e51b815260040161086490612410565b60135460ff161580156110d457506001601454115b6110dc575f80fd5b4360145f8282546110ed9190612459565b90915550506013805460ff19166001179055565b6005545f906001600160a01b0316331461112d5760405162461bcd60e51b815260040161086490612410565b620186a061113a60025490565b6111459060016124a4565b61114f91906124bb565b8210156111bc5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610864565b60646111c760025490565b6111d29060016124a4565b6111dc91906124bb565b8211156112485760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610864565b50600881905560015b919050565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146112aa5760405162461bcd60e51b815260040161086490612410565b60135460ff16156112b9575f80fd5b8181116112c4575f80fd5b50601455565b6005546001600160a01b031633146112f45760405162461bcd60e51b815260040161086490612410565b6001600160a01b0381166113595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610864565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166114165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610864565b6001600160a01b0382166114775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610864565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114fd5760405162461bcd60e51b815260040161086490612515565b6001600160a01b0382166115235760405162461bcd60e51b81526004016108649061255a565b805f0361153557610f3983835f611be8565b600a5460ff16156118de577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316141580156115b457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156115c857506001600160a01b03821615155b80156115df57506001600160a01b03821661dead14155b80156115ee575060155460ff16155b156118de5760135460ff1661167f576001600160a01b0383165f9081526017602052604090205460ff168061163a57506001600160a01b0382165f9081526017602052604090205460ff165b61167f5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610864565b6001600160a01b0383165f9081526016602052604090205460ff1680156116be57506001600160a01b0382165f9081526018602052604090205460ff16155b156117a1576007548111156117335760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610864565b6009546001600160a01b0383165f908152602081905260409020546117589083612459565b111561179c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610864565b6118de565b6001600160a01b0382165f9081526016602052604090205460ff1680156117e057506001600160a01b0383165f9081526018602052604090205460ff16155b156118565760075481111561179c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610864565b6001600160a01b0382165f9081526018602052604090205460ff166118de576009546001600160a01b0383165f9081526020819052604090205461189a9083612459565b11156118de5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610864565b305f90815260208190526040812054906118f88284611d11565b905080801561190e5750600a54610100900460ff165b801561191d575060155460ff16155b801561194157506001600160a01b0385165f9081526016602052604090205460ff16155b801561196557506001600160a01b0385165f9081526017602052604090205460ff16155b801561198957506001600160a01b0384165f9081526017602052604090205460ff16155b156119ae576015805460ff191660011790556119a3611d53565b6015805460ff191690555b6015546001600160a01b0386165f9081526017602052604090205460ff918216159116806119f357506001600160a01b0385165f9081526017602052604090205460ff165b156119fb57505f5b5f8115611b81576014545f108015611a14575043601454105b15611b55576001600160a01b0386165f9081526016602052604090205460ff168015611a4157505f600e54115b15611ac7576064600e5486611a5691906124a4565b611a6091906124bb565b9050600e54600f5482611a7391906124a4565b611a7d91906124bb565b60115f828254611a8d9190612459565b9091555050600e54601054611aa290836124a4565b611aac91906124bb565b60125f828254611abc9190612459565b90915550611b639050565b6001600160a01b0387165f9081526016602052604090205460ff168015611aef57505f600b54115b15611b50576064600b5486611b0491906124a4565b611b0e91906124bb565b9050600b54600c5482611b2191906124a4565b611b2b91906124bb565b60115f828254611b3b9190612459565b9091555050600b54600d54611aa290836124a4565b611b63565b611b60878787611ea7565b90505b8015611b7457611b74873083611be8565b611b7e81866124da565b94505b611b8c878787611be8565b50505050505050565b6001600160a01b0382165f81815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611c0e5760405162461bcd60e51b815260040161086490612515565b6001600160a01b038216611c345760405162461bcd60e51b81526004016108649061255a565b6001600160a01b0383165f9081526020819052604090205481811015611cab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610864565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b5f6008548310158015611d2657506008548210155b8015611d33575060145443115b8015610b265750435f908152601960205260409020546002119392505050565b60125480158015611d645750601154155b15611dcb57305f90815260208190526040902054600e5415611dc357600e54600f54611d9090836124a4565b611d9a91906124bb565b601155600e54601054611dad90836124a4565b611db791906124bb565b60128190559150611dc9565b60118190555b505b600854611dd990600f6124a4565b811115611df157600854611dee90600f6124a4565b90505b8015611e6a57611e008161200b565b8060125f828254611e1191906124da565b90915550506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016904780156108fc02915f818181858888f19350505050158015611e68573d5f803e3d5ffd5b505b60115415611ea457611e9f307f0000000000000000000000000000000000000000000000000000000000000000601154611be8565b5f6011555b50565b6001600160a01b0383165f9081526016602052604081205460ff1615611f77576064611ed48360316124a4565b611ede91906124bb565b9050600b54600c5482611ef191906124a4565b611efb91906124bb565b60115f828254611f0b9190612459565b9091555050600b54600d54611f2090836124a4565b611f2a91906124bb565b60125f828254611f3a9190612459565b90915550506040516001600160a01b038416907fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e2905f90a2610b26565b60646014545f14611f89576031611f8c565b60235b611f999060ff16846124a4565b611fa391906124bb565b9050600e54600f5482611fb691906124a4565b611fc091906124bb565b60115f828254611fd09190612459565b9091555050600e54601054611fe590836124a4565b611fef91906124bb565b60125f828254611fff9190612459565b90915550509392505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061203e5761203e6124ed565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120de919061259d565b816001815181106120f1576120f16124ed565b60200260200101906001600160a01b031690816001600160a01b03168152505061213c307f0000000000000000000000000000000000000000000000000000000000000000846113b4565b600654604051635c11d79560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692635c11d795926121979287925f928892919091169042906004016125b8565b5f604051808303815f87803b1580156121ae575f80fd5b505af11580156121c0573d5f803e3d5ffd5b5050435f9081526019602052604081208054935091506121df83612627565b91905055505050565b5f80604083850312156121f9575f80fd5b50508035926020909101359150565b5f6020808352835180828501525f5b8181101561223357858101830151858201604001528201612217565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611ea4575f80fd5b5f8060408385031215612278575f80fd5b823561228381612253565b946020939093013593505050565b5f602082840312156122a1575f80fd5b5035919050565b5f805f606084860312156122ba575f80fd5b83356122c581612253565b925060208401356122d581612253565b929592945050506040919091013590565b5f602082840312156122f6575f80fd5b8135610b2681612253565b80358015158114611251575f80fd5b5f8060408385031215612321575f80fd5b823561232c81612253565b915061233a60208401612301565b90509250929050565b5f60208284031215612353575f80fd5b610b2682612301565b5f805f6040848603121561236e575f80fd5b833567ffffffffffffffff80821115612385575f80fd5b818601915086601f830112612398575f80fd5b8135818111156123a6575f80fd5b8760208260051b85010111156123ba575f80fd5b6020928301955093506123d09186019050612301565b90509250925092565b5f80604083850312156123ea575f80fd5b82356123f581612253565b9150602083013561240581612253565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561097a5761097a612445565b600181811c9082168061248057607f821691505b60208210810361249e57634e487b7160e01b5f52602260045260245ffd5b50919050565b808202811582820484141761097a5761097a612445565b5f826124d557634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561097a5761097a612445565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52600160045260245ffd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f602082840312156125ad575f80fd5b8151610b2681612253565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156126065784516001600160a01b0316835293830193918301916001016125e1565b50506001600160a01b03969096166060850152505050608001529392505050565b5f6001820161263857612638612445565b506001019056fea2646970667358221220ddadb987827c0d8076165c1f6412d83fdc3381496e5295f9c343a8745070ea3764736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x608060405260043610610283575f3560e01c8063924de9b711610155578063c9567bf9116100be578063e4a3011611610078578063e4a30116146107a8578063ef8700e5146107c7578063f11a24d3146107dc578063f2fde38b146107f1578063f637434214610810578063f8b45b0514610825575f80fd5b8063c9567bf9146106f9578063d257b34f1461070d578063d5f394881461072c578063d85ba0631461075f578063dd62ed3e14610774578063e2f4560514610793575f80fd5b8063b20414111161010f578063b204141114610644578063b62496f514610659578063c024666814610687578063c04a5414146106a6578063c18bc195146106c5578063c8c8ebe4146106e4575f80fd5b8063924de9b71461059557806395d89b41146105b45780639a7a23d6146105c8578063a457c2d7146105e7578063a9059cbb14610606578063ae53fefe14610625575f80fd5b806339509351116101f75780636ddd1713116101b15780636ddd1713146104df57806370a08231146104fd578063715018a614610531578063751039fc146105455780637571336a146105595780638da5cb5b14610578575f80fd5b8063395093511461040957806349bd5a5e146104285780634a62bb651461045b5780634fbee1931461047457806366ca9b83146104ab5780636a486a8e146104ca575f80fd5b806318a94cf11161024857806318a94cf1146103715780631a8145bb14610386578063203e727e1461039b57806323b872dd146103ba57806327c8f835146103d9578063313ce567146103ee575f80fd5b806302dbd8f81461028e57806306fdde03146102af578063095ea7b3146102d95780631694505e1461030857806318160ddd14610353575f80fd5b3661028a57005b5f80fd5b348015610299575f80fd5b506102ad6102a83660046121e8565b61083a565b005b3480156102ba575f80fd5b506102c36108da565b6040516102d09190612208565b60405180910390f35b3480156102e4575f80fd5b506102f86102f3366004612267565b61096a565b60405190151581526020016102d0565b348015610313575f80fd5b5061033b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102d0565b34801561035e575f80fd5b506002545b6040519081526020016102d0565b34801561037c575f80fd5b5061036360105481565b348015610391575f80fd5b5061036360115481565b3480156103a6575f80fd5b506102ad6103b5366004612291565b610980565b3480156103c5575f80fd5b506102f86103d43660046122a8565b610a5a565b3480156103e4575f80fd5b5061033b61dead81565b3480156103f9575f80fd5b50604051601281526020016102d0565b348015610414575f80fd5b506102f8610423366004612267565b610b2d565b348015610433575f80fd5b5061033b7f000000000000000000000000bed5402eb9bba562179e6d39708f6b936ab0bc2381565b348015610466575f80fd5b50600a546102f89060ff1681565b34801561047f575f80fd5b506102f861048e3660046122e6565b6001600160a01b03165f9081526017602052604090205460ff1690565b3480156104b6575f80fd5b506102ad6104c53660046121e8565b610b49565b3480156104d5575f80fd5b50610363600e5481565b3480156104ea575f80fd5b50600a546102f890610100900460ff1681565b348015610508575f80fd5b506103636105173660046122e6565b6001600160a01b03165f9081526020819052604090205490565b34801561053c575f80fd5b506102ad610bdc565b348015610550575f80fd5b506102f8610c4f565b348015610564575f80fd5b506102ad610573366004612310565b610c8b565b348015610583575f80fd5b506005546001600160a01b031661033b565b3480156105a0575f80fd5b506102ad6105af366004612343565b610cdf565b3480156105bf575f80fd5b506102c3610d23565b3480156105d3575f80fd5b506102ad6105e2366004612310565b610d32565b3480156105f2575f80fd5b506102f8610601366004612267565b610e0d565b348015610611575f80fd5b506102f8610620366004612267565b610e92565b348015610630575f80fd5b506102ad61063f36600461235c565b610e9e565b34801561064f575f80fd5b50610363600d5481565b348015610664575f80fd5b506102f86106733660046122e6565b60166020525f908152604090205460ff1681565b348015610692575f80fd5b506102ad6106a1366004612310565b610f3e565b3480156106b1575f80fd5b5060065461033b906001600160a01b031681565b3480156106d0575f80fd5b506102ad6106df366004612291565b610fc6565b3480156106ef575f80fd5b5061036360075481565b348015610704575f80fd5b506102ad611095565b348015610718575f80fd5b506102f8610727366004612291565b611101565b348015610737575f80fd5b5061033b7f000000000000000000000000a02004d791b5502442a97adcc8f2610e9cd542b081565b34801561076a575f80fd5b50610363600b5481565b34801561077f575f80fd5b5061036361078e3660046123d9565b611256565b34801561079e575f80fd5b5061036360085481565b3480156107b3575f80fd5b506102ad6107c23660046121e8565b611280565b3480156107d2575f80fd5b5061036360125481565b3480156107e7575f80fd5b50610363600c5481565b3480156107fc575f80fd5b506102ad61080b3660046122e6565b6112ca565b34801561081b575f80fd5b50610363600f5481565b348015610830575f80fd5b5061036360095481565b6005546001600160a01b0316331461086d5760405162461bcd60e51b815260040161086490612410565b60405180910390fd5b600f82905560108190556108818183612459565b600e819055601910156108d65760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610864565b5050565b6060600380546108e99061246c565b80601f01602080910402602001604051908101604052809291908181526020018280546109159061246c565b80156109605780601f1061093757610100808354040283529160200191610960565b820191905f5260205f20905b81548152906001019060200180831161094357829003601f168201915b5050505050905090565b5f6109763384846113b4565b5060015b92915050565b6005546001600160a01b031633146109aa5760405162461bcd60e51b815260040161086490612410565b670de0b6b3a764000060646109be60025490565b6109c99060016124a4565b6109d391906124bb565b6109dd91906124bb565b811015610a425760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b6064820152608401610864565b610a5481670de0b6b3a76400006124a4565b60075550565b6001600160a01b0383165f908152600160209081526040808320338452909152812054821115610add5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610864565b610ae88484846114d7565b6001600160a01b0384165f90815260016020908152604080832033808552925290912054610b22918691610b1d9086906124da565b6113b4565b5060015b9392505050565b5f33610b22818585610b3f8383611256565b610b1d9190612459565b6005546001600160a01b03163314610b735760405162461bcd60e51b815260040161086490612410565b600c829055600d819055610b878183612459565b600b819055601410156108d65760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610864565b6005546001600160a01b03163314610c065760405162461bcd60e51b815260040161086490612410565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005545f906001600160a01b03163314610c7b5760405162461bcd60e51b815260040161086490612410565b50600a805460ff19169055600190565b6005546001600160a01b03163314610cb55760405162461bcd60e51b815260040161086490612410565b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d095760405162461bcd60e51b815260040161086490612410565b600a80549115156101000261ff0019909216919091179055565b6060600480546108e99061246c565b6005546001600160a01b03163314610d5c5760405162461bcd60e51b815260040161086490612410565b7f000000000000000000000000bed5402eb9bba562179e6d39708f6b936ab0bc236001600160a01b0316826001600160a01b031603610e035760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610864565b6108d68282611b95565b5f3381610e1a8286611256565b905083811015610e7a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610864565b610e8782868684036113b4565b506001949350505050565b5f6109763384846114d7565b6005546001600160a01b03163314610ec85760405162461bcd60e51b815260040161086490612410565b808015610ed657505f601454115b610ede575f80fd5b8282610eeb6003826124da565b818110610efa57610efa6124ed565b6020029190910135601455508282610f136001826124da565b818110610f2257610f226124ed565b9050602002013560145410610f3957610f39612501565b505050565b6005546001600160a01b03163314610f685760405162461bcd60e51b815260040161086490612410565b6001600160a01b0382165f81815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ff05760405162461bcd60e51b815260040161086490612410565b670de0b6b3a7640000606461100460025490565b61100f9060026124a4565b61101991906124bb565b61102391906124bb565b81101561107d5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261322560f01b6064820152608401610864565b61108f81670de0b6b3a76400006124a4565b60095550565b6005546001600160a01b031633146110bf5760405162461bcd60e51b815260040161086490612410565b60135460ff161580156110d457506001601454115b6110dc575f80fd5b4360145f8282546110ed9190612459565b90915550506013805460ff19166001179055565b6005545f906001600160a01b0316331461112d5760405162461bcd60e51b815260040161086490612410565b620186a061113a60025490565b6111459060016124a4565b61114f91906124bb565b8210156111bc5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610864565b60646111c760025490565b6111d29060016124a4565b6111dc91906124bb565b8211156112485760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610864565b50600881905560015b919050565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146112aa5760405162461bcd60e51b815260040161086490612410565b60135460ff16156112b9575f80fd5b8181116112c4575f80fd5b50601455565b6005546001600160a01b031633146112f45760405162461bcd60e51b815260040161086490612410565b6001600160a01b0381166113595760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610864565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166114165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610864565b6001600160a01b0382166114775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610864565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114fd5760405162461bcd60e51b815260040161086490612515565b6001600160a01b0382166115235760405162461bcd60e51b81526004016108649061255a565b805f0361153557610f3983835f611be8565b600a5460ff16156118de577f000000000000000000000000a02004d791b5502442a97adcc8f2610e9cd542b06001600160a01b0316836001600160a01b0316141580156115b457507f000000000000000000000000a02004d791b5502442a97adcc8f2610e9cd542b06001600160a01b0316826001600160a01b031614155b80156115c857506001600160a01b03821615155b80156115df57506001600160a01b03821661dead14155b80156115ee575060155460ff16155b156118de5760135460ff1661167f576001600160a01b0383165f9081526017602052604090205460ff168061163a57506001600160a01b0382165f9081526017602052604090205460ff165b61167f5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610864565b6001600160a01b0383165f9081526016602052604090205460ff1680156116be57506001600160a01b0382165f9081526018602052604090205460ff16155b156117a1576007548111156117335760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610864565b6009546001600160a01b0383165f908152602081905260409020546117589083612459565b111561179c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610864565b6118de565b6001600160a01b0382165f9081526016602052604090205460ff1680156117e057506001600160a01b0383165f9081526018602052604090205460ff16155b156118565760075481111561179c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610864565b6001600160a01b0382165f9081526018602052604090205460ff166118de576009546001600160a01b0383165f9081526020819052604090205461189a9083612459565b11156118de5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610864565b305f90815260208190526040812054906118f88284611d11565b905080801561190e5750600a54610100900460ff165b801561191d575060155460ff16155b801561194157506001600160a01b0385165f9081526016602052604090205460ff16155b801561196557506001600160a01b0385165f9081526017602052604090205460ff16155b801561198957506001600160a01b0384165f9081526017602052604090205460ff16155b156119ae576015805460ff191660011790556119a3611d53565b6015805460ff191690555b6015546001600160a01b0386165f9081526017602052604090205460ff918216159116806119f357506001600160a01b0385165f9081526017602052604090205460ff165b156119fb57505f5b5f8115611b81576014545f108015611a14575043601454105b15611b55576001600160a01b0386165f9081526016602052604090205460ff168015611a4157505f600e54115b15611ac7576064600e5486611a5691906124a4565b611a6091906124bb565b9050600e54600f5482611a7391906124a4565b611a7d91906124bb565b60115f828254611a8d9190612459565b9091555050600e54601054611aa290836124a4565b611aac91906124bb565b60125f828254611abc9190612459565b90915550611b639050565b6001600160a01b0387165f9081526016602052604090205460ff168015611aef57505f600b54115b15611b50576064600b5486611b0491906124a4565b611b0e91906124bb565b9050600b54600c5482611b2191906124a4565b611b2b91906124bb565b60115f828254611b3b9190612459565b9091555050600b54600d54611aa290836124a4565b611b63565b611b60878787611ea7565b90505b8015611b7457611b74873083611be8565b611b7e81866124da565b94505b611b8c878787611be8565b50505050505050565b6001600160a01b0382165f81815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611c0e5760405162461bcd60e51b815260040161086490612515565b6001600160a01b038216611c345760405162461bcd60e51b81526004016108649061255a565b6001600160a01b0383165f9081526020819052604090205481811015611cab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610864565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b5f6008548310158015611d2657506008548210155b8015611d33575060145443115b8015610b265750435f908152601960205260409020546002119392505050565b60125480158015611d645750601154155b15611dcb57305f90815260208190526040902054600e5415611dc357600e54600f54611d9090836124a4565b611d9a91906124bb565b601155600e54601054611dad90836124a4565b611db791906124bb565b60128190559150611dc9565b60118190555b505b600854611dd990600f6124a4565b811115611df157600854611dee90600f6124a4565b90505b8015611e6a57611e008161200b565b8060125f828254611e1191906124da565b90915550506040516001600160a01b037f000000000000000000000000a02004d791b5502442a97adcc8f2610e9cd542b016904780156108fc02915f818181858888f19350505050158015611e68573d5f803e3d5ffd5b505b60115415611ea457611e9f307f000000000000000000000000bed5402eb9bba562179e6d39708f6b936ab0bc23601154611be8565b5f6011555b50565b6001600160a01b0383165f9081526016602052604081205460ff1615611f77576064611ed48360316124a4565b611ede91906124bb565b9050600b54600c5482611ef191906124a4565b611efb91906124bb565b60115f828254611f0b9190612459565b9091555050600b54600d54611f2090836124a4565b611f2a91906124bb565b60125f828254611f3a9190612459565b90915550506040516001600160a01b038416907fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e2905f90a2610b26565b60646014545f14611f89576031611f8c565b60235b611f999060ff16846124a4565b611fa391906124bb565b9050600e54600f5482611fb691906124a4565b611fc091906124bb565b60115f828254611fd09190612459565b9091555050600e54601054611fe590836124a4565b611fef91906124bb565b60125f828254611fff9190612459565b90915550509392505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061203e5761203e6124ed565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120de919061259d565b816001815181106120f1576120f16124ed565b60200260200101906001600160a01b031690816001600160a01b03168152505061213c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113b4565b600654604051635c11d79560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d811692635c11d795926121979287925f928892919091169042906004016125b8565b5f604051808303815f87803b1580156121ae575f80fd5b505af11580156121c0573d5f803e3d5ffd5b5050435f9081526019602052604081208054935091506121df83612627565b91905055505050565b5f80604083850312156121f9575f80fd5b50508035926020909101359150565b5f6020808352835180828501525f5b8181101561223357858101830151858201604001528201612217565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611ea4575f80fd5b5f8060408385031215612278575f80fd5b823561228381612253565b946020939093013593505050565b5f602082840312156122a1575f80fd5b5035919050565b5f805f606084860312156122ba575f80fd5b83356122c581612253565b925060208401356122d581612253565b929592945050506040919091013590565b5f602082840312156122f6575f80fd5b8135610b2681612253565b80358015158114611251575f80fd5b5f8060408385031215612321575f80fd5b823561232c81612253565b915061233a60208401612301565b90509250929050565b5f60208284031215612353575f80fd5b610b2682612301565b5f805f6040848603121561236e575f80fd5b833567ffffffffffffffff80821115612385575f80fd5b818601915086601f830112612398575f80fd5b8135818111156123a6575f80fd5b8760208260051b85010111156123ba575f80fd5b6020928301955093506123d09186019050612301565b90509250925092565b5f80604083850312156123ea575f80fd5b82356123f581612253565b9150602083013561240581612253565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561097a5761097a612445565b600181811c9082168061248057607f821691505b60208210810361249e57634e487b7160e01b5f52602260045260245ffd5b50919050565b808202811582820484141761097a5761097a612445565b5f826124d557634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561097a5761097a612445565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52600160045260245ffd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f602082840312156125ad575f80fd5b8151610b2681612253565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156126065784516001600160a01b0316835293830193918301916001016125e1565b50506001600160a01b03969096166060850152505050608001529392505050565b5f6001820161263857612638612445565b506001019056fea2646970667358221220ddadb987827c0d8076165c1f6412d83fdc3381496e5295f9c343a8745070ea3764736f6c63430008140033

Deployed Bytecode Sourcemap

14375:13712:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20178:309;;;;;;;;;;-1:-1:-1;20178:309:0;;;;;:::i;:::-;;:::i;:::-;;4972:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7139:169;;;;;;;;;;-1:-1:-1;7139:169:0;;;;;:::i;:::-;;:::i;:::-;;;1441:14:1;;1434:22;1416:41;;1404:2;1389:18;7139:169:0;1276:187:1;14420:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1657:32:1;;;1639:51;;1627:2;1612:18;14420:51:0;1468:228:1;6092:108:0;;;;;;;;;;-1:-1:-1;6180:12:0;;6092:108;;;1847:25:1;;;1835:2;1820:18;6092:108:0;1701:177:1;15057:33:0;;;;;;;;;;;;;;;;15103;;;;;;;;;;;;;;;;18867:231;;;;;;;;;;-1:-1:-1;18867:231:0;;;;;:::i;:::-;;:::i;7790:410::-;;;;;;;;;;-1:-1:-1;7790:410:0;;;;;:::i;:::-;;:::i;14523:53::-;;;;;;;;;;;;14569:6;14523:53;;5934:93;;;;;;;;;;-1:-1:-1;5934:93:0;;6017:2;2879:36:1;;2867:2;2852:18;5934:93:0;2737:184:1;8609:238:0;;;;;;;;;;-1:-1:-1;8609:238:0;;;;;:::i;:::-;;:::i;14478:38::-;;;;;;;;;;;;;;;14785:33;;;;;;;;;;-1:-1:-1;14785:33:0;;;;;;;;21287:125;;;;;;;;;;-1:-1:-1;21287:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;21376:28:0;21352:4;21376:28;;;:19;:28;;;;;;;;;21287:125;19864:302;;;;;;;;;;-1:-1:-1;19864:302:0;;;;;:::i;:::-;;:::i;14984:28::-;;;;;;;;;;;;;;;;14825:30;;;;;;;;;;-1:-1:-1;14825:30:0;;;;;;;;;;;6263:127;;;;;;;;;;-1:-1:-1;6263:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;6364:18:0;6337:7;6364:18;;;;;;;;;;;;6263:127;13821:148;;;;;;;;;;;;;:::i;18280:120::-;;;;;;;;;;;;;:::i;19330:144::-;;;;;;;;;;-1:-1:-1;19330:144:0;;;;;:::i;:::-;;:::i;13179:79::-;;;;;;;;;;-1:-1:-1;13244:6:0;;-1:-1:-1;;;;;13244:6:0;13179:79;;19574:100;;;;;;;;;;-1:-1:-1;19574:100:0;;;;;:::i;:::-;;:::i;5191:104::-;;;;;;;;;;;;;:::i;20685:244::-;;;;;;;;;;-1:-1:-1;20685:244:0;;;;;:::i;:::-;;:::i;9350:434::-;;;;;;;;;;-1:-1:-1;9350:434:0;;;;;:::i;:::-;;:::i;6603:175::-;;;;;;;;;;-1:-1:-1;6603:175:0;;;;;:::i;:::-;;:::i;27857:227::-;;;;;;;;;;-1:-1:-1;27857:227:0;;;;;:::i;:::-;;:::i;14939:32::-;;;;;;;;;;;;;;;;15465:58;;;;;;;;;;-1:-1:-1;15465:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20495:182;;;;;;;;;;-1:-1:-1;20495:182:0;;;;;:::i;:::-;;:::i;14625:32::-;;;;;;;;;;-1:-1:-1;14625:32:0;;;;-1:-1:-1;;;;;14625:32:0;;;19106:212;;;;;;;;;;-1:-1:-1;19106:212:0;;;;;:::i;:::-;;:::i;14670:35::-;;;;;;;;;;;;;;;;19682:170;;;;;;;;;;;;;:::i;18475:380::-;;;;;;;;;;-1:-1:-1;18475:380:0;;;;;:::i;:::-;;:::i;14585:33::-;;;;;;;;;;;;;;;14868:27;;;;;;;;;;;;;;;;6841:151;;;;;;;;;;-1:-1:-1;6841:151:0;;;;;:::i;:::-;;:::i;14712:33::-;;;;;;;;;;;;;;;;21137:141;;;;;;;;;;-1:-1:-1;21137:141:0;;;;;:::i;:::-;;:::i;15143:35::-;;;;;;;;;;;;;;;;14902:30;;;;;;;;;;;;;;;;14124:244;;;;;;;;;;-1:-1:-1;14124:244:0;;;;;:::i;:::-;;:::i;15019:31::-;;;;;;;;;;;;;;;;14752:24;;;;;;;;;;;;;;;;20178:309;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;;;;;;;;;20272:16:::1;:32:::0;;;20315:18:::1;:28:::0;;;20370:37:::1;20336:7:::0;20291:13;20370:37:::1;:::i;:::-;20354:13;:53:::0;;;20443:2:::1;-1:-1:-1::0;20426:19:0::1;20418:61;;;::::0;-1:-1:-1;;;20418:61:0;;5760:2:1;20418:61:0::1;::::0;::::1;5742:21:1::0;5799:2;5779:18;;;5772:30;5838:31;5818:18;;;5811:59;5887:18;;20418:61:0::1;5558:353:1::0;20418:61:0::1;20178:309:::0;;:::o;4972:100::-;5026:13;5059:5;5052:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4972:100;:::o;7139:169::-;7222:4;7239:39;307:10;7262:7;7271:6;7239:8;:39::i;:::-;-1:-1:-1;7296:4:0;7139:169;;;;;:::o;18867:231::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;18985:4:::1;18980:3;18960:13;6180:12:::0;;;6092:108;18960:13:::1;:17;::::0;18976:1:::1;18960:17;:::i;:::-;:23;;;;:::i;:::-;18959:30;;;;:::i;:::-;18949:6;:40;;18941:98;;;::::0;-1:-1:-1;;;18941:98:0;;6898:2:1;18941:98:0::1;::::0;::::1;6880:21:1::0;6937:2;6917:18;;;6910:30;6976:34;6956:18;;;6949:62;-1:-1:-1;;;7027:18:1;;;7020:43;7080:19;;18941:98:0::1;6696:409:1::0;18941:98:0::1;19073:17;:6:::0;19083::::1;19073:17;:::i;:::-;19050:20;:40:::0;-1:-1:-1;18867:231:0:o;7790:410::-;-1:-1:-1;;;;;7956:19:0;;7931:4;7956:19;;;:11;:19;;;;;;;;7976:10;7956:31;;;;;;;;:41;-1:-1:-1;7956:41:0;7948:94;;;;-1:-1:-1;;;7948:94:0;;7312:2:1;7948:94:0;;;7294:21:1;7351:2;7331:18;;;7324:30;7390:34;7370:18;;;7363:62;-1:-1:-1;;;7441:18:1;;;7434:38;7489:19;;7948:94:0;7110:404:1;7948:94:0;8053:36;8063:6;8071:9;8082:6;8053:9;:36::i;:::-;-1:-1:-1;;;;;8129:19:0;;;;;;:11;:19;;;;;;;;8117:10;8129:31;;;;;;;;;8100:70;;8109:6;;8129:40;;8163:6;;8129:40;:::i;:::-;8100:8;:70::i;:::-;-1:-1:-1;8188:4:0;7790:410;;;;;;:::o;8609:238::-;8697:4;307:10;8753:64;307:10;8769:7;8806:10;8778:25;307:10;8769:7;8778:9;:25::i;:::-;:38;;;;:::i;19864:302::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;19957:15:::1;:31:::0;;;19999:17:::1;:27:::0;;;20052:35:::1;20019:7:::0;19975:13;20052:35:::1;:::i;:::-;20037:12;:50:::0;;;20122:2:::1;-1:-1:-1::0;20106:18:0::1;20098:60;;;::::0;-1:-1:-1;;;20098:60:0;;7854:2:1;20098:60:0::1;::::0;::::1;7836:21:1::0;7893:2;7873:18;;;7866:30;7932:31;7912:18;;;7905:59;7981:18;;20098:60:0::1;7652:353:1::0;13821:148:0;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;13912:6:::1;::::0;13891:40:::1;::::0;13928:1:::1;::::0;-1:-1:-1;;;;;13912:6:0::1;::::0;13891:40:::1;::::0;13928:1;;13891:40:::1;13942:6;:19:::0;;-1:-1:-1;;;;;;13942:19:0::1;::::0;;13821:148::o;18280:120::-;13391:6;;18332:4;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;-1:-1:-1;18348:14:0::1;:22:::0;;-1:-1:-1;;18348:22:0::1;::::0;;;18280:120;:::o;19330:144::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19420:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19420:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19330:144::o;19574:100::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;19645:11:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;19645:21:0;;::::1;::::0;;;::::1;::::0;;19574:100::o;5191:104::-;5247:13;5280:7;5273:14;;;;;:::i;20685:244::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;20792:13:::1;-1:-1:-1::0;;;;;20784:21:0::1;:4;-1:-1:-1::0;;;;;20784:21:0::1;::::0;20776:91:::1;;;::::0;-1:-1:-1;;;20776:91:0;;8212:2:1;20776:91:0::1;::::0;::::1;8194:21:1::0;8251:2;8231:18;;;8224:30;8290:34;8270:18;;;8263:62;8361:27;8341:18;;;8334:55;8406:19;;20776:91:0::1;8010:421:1::0;20776:91:0::1;20880:41;20909:4;20915:5;20880:28;:41::i;9350:434::-:0;9443:4;307:10;9443:4;9526:25;307:10;9543:7;9526:9;:25::i;:::-;9499:52;;9590:15;9570:16;:35;;9562:85;;;;-1:-1:-1;;;9562:85:0;;8638:2:1;9562:85:0;;;8620:21:1;8677:2;8657:18;;;8650:30;8716:34;8696:18;;;8689:62;-1:-1:-1;;;8767:18:1;;;8760:35;8812:19;;9562:85:0;8436:401:1;9562:85:0;9683:60;9692:5;9699:7;9727:15;9708:16;:34;9683:8;:60::i;:::-;-1:-1:-1;9772:4:0;;9350:434;-1:-1:-1;;;;9350:434:0:o;6603:175::-;6689:4;6706:42;307:10;6730:9;6741:6;6706:9;:42::i;27857:227::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;27961:2:::1;:21;;;;;27981:1;27967:11;;:15;27961:21;27953:30;;;::::0;::::1;;27998:6:::0;;28005:15:::1;28019:1;27998:6:::0;28005:15:::1;:::i;:::-;27998:23;;;;;;;:::i;:::-;;;::::0;;;::::1;;27984:11;:37:::0;-1:-1:-1;28044:6:0;;28051:15:::1;28065:1;28044:6:::0;28051:15:::1;:::i;:::-;28044:23;;;;;;;:::i;:::-;;;;;;;28030:11;;:37;28023:45;;;;:::i;:::-;27857:227:::0;;;:::o;20495:182::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20580:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20580:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20635:34;;1416:41:1;;;20635:34:0::1;::::0;1389:18:1;20635:34:0::1;;;;;;;20495:182:::0;;:::o;19106:212::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;19227:4:::1;19222:3;19202:13;6180:12:::0;;;6092:108;19202:13:::1;:17;::::0;19218:1:::1;19202:17;:::i;:::-;:23;;;;:::i;:::-;19201:30;;;;:::i;:::-;19191:6;:40;;19183:87;;;::::0;-1:-1:-1;;;19183:87:0;;9308:2:1;19183:87:0::1;::::0;::::1;9290:21:1::0;9347:2;9327:18;;;9320:30;9386:34;9366:18;;;9359:62;-1:-1:-1;;;9437:18:1;;;9430:32;9479:19;;19183:87:0::1;9106:398:1::0;19183:87:0::1;19293:17;:6:::0;19303::::1;19293:17;:::i;:::-;19281:9;:29:::0;-1:-1:-1;19106:212:0:o;19682:170::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;19744:13:::1;::::0;::::1;;19743:14;:33:::0;::::1;;;;19775:1;19761:11;;:15;19743:33;19735:42;;;::::0;::::1;;19801:12;19788:11;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;19824:13:0::1;:20:::0;;-1:-1:-1;;19824:20:0::1;19840:4;19824:20;::::0;;19682:170::o;18475:380::-;13391:6;;18556:4;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;18612:6:::1;18592:13;6180:12:::0;;;6092:108;18592:13:::1;:17;::::0;18608:1:::1;18592:17;:::i;:::-;:26;;;;:::i;:::-;18579:9;:39;;18571:105;;;::::0;-1:-1:-1;;;18571:105:0;;9711:2:1;18571:105:0::1;::::0;::::1;9693:21:1::0;9750:2;9730:18;;;9723:30;9789:34;9769:18;;;9762:62;-1:-1:-1;;;9840:18:1;;;9833:51;9901:19;;18571:105:0::1;9509:417:1::0;18571:105:0::1;18727:3;18707:13;6180:12:::0;;;6092:108;18707:13:::1;:17;::::0;18723:1:::1;18707:17;:::i;:::-;:23;;;;:::i;:::-;18694:9;:36;;18686:101;;;::::0;-1:-1:-1;;;18686:101:0;;10133:2:1;18686:101:0::1;::::0;::::1;10115:21:1::0;10172:2;10152:18;;;10145:30;10211:34;10191:18;;;10184:62;-1:-1:-1;;;10262:18:1;;;10255:50;10322:19;;18686:101:0::1;9931:416:1::0;18686:101:0::1;-1:-1:-1::0;18797:18:0::1;:30:::0;;;18844:4:::1;13461:1;18475:380:::0;;;:::o;6841:151::-;-1:-1:-1;;;;;6957:18:0;;;6930:7;6957:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6841:151::o;21137:141::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;21218:13:::1;::::0;::::1;;21217:14;21209:23;;;::::0;::::1;;21244:1;21242;:3;21234:12;;;::::0;::::1;;-1:-1:-1::0;21247:11:0::1;:15:::0;21137:141::o;14124:244::-;13391:6;;-1:-1:-1;;;;;13391:6:0;307:10;13391:22;13383:67;;;;-1:-1:-1;;;13383:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14213:22:0;::::1;14205:73;;;::::0;-1:-1:-1;;;14205:73:0;;10554:2:1;14205:73:0::1;::::0;::::1;10536:21:1::0;10593:2;10573:18;;;10566:30;10632:34;10612:18;;;10605:62;-1:-1:-1;;;10683:18:1;;;10676:36;10729:19;;14205:73:0::1;10352:402:1::0;14205:73:0::1;14315:6;::::0;14294:38:::1;::::0;-1:-1:-1;;;;;14294:38:0;;::::1;::::0;14315:6:::1;::::0;14294:38:::1;::::0;14315:6:::1;::::0;14294:38:::1;14343:6;:17:::0;;-1:-1:-1;;;;;;14343:17:0::1;-1:-1:-1::0;;;;;14343:17:0;;;::::1;::::0;;;::::1;::::0;;14124:244::o;12294:380::-;-1:-1:-1;;;;;12430:19:0;;12422:68;;;;-1:-1:-1;;;12422:68:0;;10961:2:1;12422:68:0;;;10943:21:1;11000:2;10980:18;;;10973:30;11039:34;11019:18;;;11012:62;-1:-1:-1;;;11090:18:1;;;11083:34;11134:19;;12422:68:0;10759:400:1;12422:68:0;-1:-1:-1;;;;;12509:21:0;;12501:68;;;;-1:-1:-1;;;12501:68:0;;11366:2:1;12501:68:0;;;11348:21:1;11405:2;11385:18;;;11378:30;11444:34;11424:18;;;11417:62;-1:-1:-1;;;11495:18:1;;;11488:32;11537:19;;12501:68:0;11164:398:1;12501:68:0;-1:-1:-1;;;;;12582:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12634:32;;1847:25:1;;;12634:32:0;;1820:18:1;12634:32:0;;;;;;;12294:380;;;:::o;21474:3597::-;-1:-1:-1;;;;;21606:18:0;;21598:68;;;;-1:-1:-1;;;21598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21685:16:0;;21677:64;;;;-1:-1:-1;;;21677:64:0;;;;;;;:::i;:::-;21766:6;21776:1;21766:11;21763:92;;21794:28;21810:4;21816:2;21820:1;21794:15;:28::i;21763:92::-;21878:14;;;;21875:1261;;;21938:8;-1:-1:-1;;;;;21930:16:0;:4;-1:-1:-1;;;;;21930:16:0;;;:51;;;;;21973:8;-1:-1:-1;;;;;21967:14:0;:2;-1:-1:-1;;;;;21967:14:0;;;21930:51;:89;;;;-1:-1:-1;;;;;;22003:16:0;;;;21930:89;:131;;;;-1:-1:-1;;;;;;22040:21:0;;22054:6;22040:21;;21930:131;:161;;;;-1:-1:-1;22083:8:0;;;;22082:9;21930:161;21908:1217;;;22129:13;;;;22125:148;;-1:-1:-1;;;;;22174:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22203:23:0;;;;;;:19;:23;;;;;;;;22174:52;22166:87;;;;-1:-1:-1;;;22166:87:0;;12579:2:1;22166:87:0;;;12561:21:1;12618:2;12598:18;;;12591:30;-1:-1:-1;;;12637:18:1;;;12630:52;12699:18;;22166:87:0;12377:346:1;22166:87:0;-1:-1:-1;;;;;22336:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;22372:35:0;;;;;;:31;:35;;;;;;;;22371:36;22336:71;22332:778;;;22454:20;;22444:6;:30;;22436:96;;;;-1:-1:-1;;;22436:96:0;;12930:2:1;22436:96:0;;;12912:21:1;12969:2;12949:18;;;12942:30;13008:34;12988:18;;;12981:62;-1:-1:-1;;;13059:18:1;;;13052:51;13120:19;;22436:96:0;12728:417:1;22436:96:0;22593:9;;-1:-1:-1;;;;;6364:18:0;;6337:7;6364:18;;;;;;;;;;;22567:22;;:6;:22;:::i;:::-;:35;;22559:67;;;;-1:-1:-1;;;22559:67:0;;13352:2:1;22559:67:0;;;13334:21:1;13391:2;13371:18;;;13364:30;-1:-1:-1;;;13410:18:1;;;13403:49;13469:18;;22559:67:0;13150:343:1;22559:67:0;22332:778;;;-1:-1:-1;;;;;22720:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;22754:37:0;;;;;;:31;:37;;;;;;;;22753:38;22720:71;22716:394;;;22838:20;;22828:6;:30;;22820:97;;;;-1:-1:-1;;;22820:97:0;;13700:2:1;22820:97:0;;;13682:21:1;13739:2;13719:18;;;13712:30;13778:34;13758:18;;;13751:62;-1:-1:-1;;;13829:18:1;;;13822:52;13891:19;;22820:97:0;13498:418:1;22716:394:0;-1:-1:-1;;;;;22964:35:0;;;;;;:31;:35;;;;;;;;22960:150;;23057:9;;-1:-1:-1;;;;;6364:18:0;;6337:7;6364:18;;;;;;;;;;;23031:22;;:6;:22;:::i;:::-;:35;;23023:67;;;;-1:-1:-1;;;23023:67:0;;13352:2:1;23023:67:0;;;13334:21:1;13391:2;13371:18;;;13364:30;-1:-1:-1;;;13410:18:1;;;13403:49;13469:18;;23023:67:0;13150:343:1;23023:67:0;23199:4;23150:28;6364:18;;;;;;;;;;;;23231:39;6364:18;23263:6;23231:9;:39::i;:::-;23216:54;;23301:7;:35;;;;-1:-1:-1;23325:11:0;;;;;;;23301:35;:61;;;;-1:-1:-1;23354:8:0;;;;23353:9;23301:61;:110;;;;-1:-1:-1;;;;;;23380:31:0;;;;;;:25;:31;;;;;;;;23379:32;23301:110;:153;;;;-1:-1:-1;;;;;;23429:25:0;;;;;;:19;:25;;;;;;;;23428:26;23301:153;:194;;;;-1:-1:-1;;;;;;23472:23:0;;;;;;:19;:23;;;;;;;;23471:24;23301:194;23283:338;;;23522:8;:15;;-1:-1:-1;;23522:15:0;23533:4;23522:15;;;23566:10;:8;:10::i;:::-;23593:8;:16;;-1:-1:-1;;23593:16:0;;;23283:338;23657:8;;-1:-1:-1;;;;;23766:25:0;;23641:12;23766:25;;;:19;:25;;;;;;23657:8;;;;23656:9;;23766:25;;:52;;-1:-1:-1;;;;;;23795:23:0;;;;;;:19;:23;;;;;;;;23766:52;23763:99;;;-1:-1:-1;23845:5:0;23763:99;23882:12;23986:7;23983:1035;;;24016:11;;24012:1;:15;:45;;;;;24045:12;24031:11;;:26;24012:45;24009:852;;;-1:-1:-1;;;;;24108:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24157:1;24141:13;;:17;24108:50;24104:657;;;24214:3;24198:13;;24189:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;24182:35;;24288:13;;24269:16;;24262:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24240:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24376:13:0;;24355:18;;24348:25;;:4;:25;:::i;:::-;:41;;;;:::i;:::-;24324:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;24009:852:0;;-1:-1:-1;24009:852:0;24104:657;-1:-1:-1;;;;;24463:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24513:1;24498:12;;:16;24463:51;24460:301;;;24570:3;24555:12;;24546:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24539:34;;24643:12;;24625:15;;24618:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24596:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24729:12:0;;24709:17;;24702:24;;:4;:24;:::i;24460:301::-;24009:852;;;24820:25;24828:4;24834:2;24838:6;24820:7;:25::i;:::-;24813:32;;24009:852;24880:8;;24877:93;;24912:42;24928:4;24942;24949;24912:15;:42::i;:::-;24992:14;25002:4;24992:14;;:::i;:::-;;;23983:1035;25030:33;25046:4;25052:2;25056:6;25030:15;:33::i;:::-;21587:3484;;;;21474:3597;;;:::o;20937:188::-;-1:-1:-1;;;;;21020:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;21020:39:0;;;;;;;;;;21077:40;;21020:39;;:31;21077:40;;;20937:188;;:::o;10274:701::-;-1:-1:-1;;;;;10371:18:0;;10363:68;;;;-1:-1:-1;;;10363:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10450:16:0;;10442:64;;;;-1:-1:-1;;;10442:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10539:15:0;;10517:19;10539:15;;;;;;;;;;;10573:21;;;;10565:72;;;;-1:-1:-1;;;10565:72:0;;14123:2:1;10565:72:0;;;14105:21:1;14162:2;14142:18;;;14135:30;14201:34;14181:18;;;14174:62;-1:-1:-1;;;14252:18:1;;;14245:36;14298:19;;10565:72:0;13921:402:1;10565:72:0;-1:-1:-1;;;;;10673:15:0;;;:9;:15;;;;;;;;;;;10691:20;;;10673:38;;10891:13;;;;;;;;;;:23;;;;;;10941:26;;1847:25:1;;;10891:13:0;;10941:26;;1820:18:1;10941:26:0;;;;;;;10352:623;10274:701;;;:::o;25079:274::-;25166:4;25214:18;;25190:20;:42;;:74;;;;;25246:18;;25236:6;:28;;25190:74;:118;;;;;25297:11;;25282:12;:26;25190:118;:155;;;;-1:-1:-1;25328:12:0;25312:29;;;;:15;:29;;;;;;25344:1;-1:-1:-1;25183:162:0;25079:274;-1:-1:-1;;;25079:274:0:o;26662:1187::-;26729:20;;26765:25;;:52;;;;-1:-1:-1;26794:18:0;;:23;26765:52;26762:516;;;26877:4;26833:23;6364:18;;;;;;;;;;;26901:13;;:17;26898:369;;26996:13;;26977:16;;26959:34;;:15;:34;:::i;:::-;:50;;;;:::i;:::-;26938:18;:71;27090:13;;27069:18;;27051:36;;:15;:36;:::i;:::-;:52;;;;:::i;:::-;27028:20;:75;;;;-1:-1:-1;26898:369:0;;;27215:18;:36;;;26898:369;26818:460;26762:516;27333:18;;:23;;27354:2;27333:23;:::i;:::-;27313:17;:43;27310:117;;;27392:18;;:23;;27413:2;27392:23;:::i;:::-;27372:43;;27310:117;27442:21;;27439:224;;27495:35;27512:17;27495:16;:35::i;:::-;27569:17;27545:20;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;27602:49:0;;-1:-1:-1;;;;;27610:8:0;27602:26;;27629:21;27602:49;;;;;;;;;27629:21;27602:26;:49;;;;;;;;;;;;;;;;;;;;;27439:224;27678:18;;:22;27675:167;;27728:65;27752:4;27759:13;27774:18;;27728:15;:65::i;:::-;27829:1;27808:18;:22;27675:167;26690:1159;26662:1187::o;26014:640::-;-1:-1:-1;;;;;26118:31:0;;26090:12;26118:31;;;:25;:31;;;;;;;;26115:532;;;26186:3;26172:11;:6;26181:2;26172:11;:::i;:::-;:17;;;;:::i;:::-;26165:24;;26251:12;;26233:15;;26226:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26204:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26329:12:0;;26309:17;;26302:24;;:4;:24;:::i;:::-;:39;;;;:::i;:::-;26278:20;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26361:15:0;;-1:-1:-1;;;;;26361:15:0;;;;;;;;26115:532;;;26473:3;26443:11;;26458:1;26443:16;:26;;26467:2;26443:26;;;26462:2;26443:26;26433:37;;;;:6;:37;:::i;:::-;:43;;;;:::i;:::-;26426:50;;26542:13;;26523:16;;26516:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26494:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26622:13:0;;26601:18;;26594:25;;:4;:25;:::i;:::-;:41;;;;:::i;:::-;26570:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;26014:640:0;;;;;:::o;25361:::-;25513:16;;;25527:1;25513:16;;;;;;;;25489:21;;25513:16;;;;;;;;;;-1:-1:-1;25513:16:0;25489:40;;25558:4;25540;25545:1;25540:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25540:23:0;;;-1:-1:-1;;;;;25540:23:0;;;;;25584:15;-1:-1:-1;;;;;25584:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25574:4;25579:1;25574:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;25574:32:0;;;-1:-1:-1;;;;;25574:32:0;;;;;25619:62;25636:4;25651:15;25669:11;25619:8;:62::i;:::-;25893:17;;25720:231;;-1:-1:-1;;;25720:231:0;;-1:-1:-1;;;;;25720:15:0;:69;;;;;:231;;25804:11;;25830:1;;25874:4;;25893:17;;;;;25925:15;;25720:231;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25978:12:0;25962:29;;;;:15;:29;;;;;:31;;;-1:-1:-1;25962:29:0;-1:-1:-1;25962:31:0;;;:::i;:::-;;;;;;25416:585;25361:640;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;820:131::-;-1:-1:-1;;;;;895:31:1;;885:42;;875:70;;941:1;938;931:12;956:315;1024:6;1032;1085:2;1073:9;1064:7;1060:23;1056:32;1053:52;;;1101:1;1098;1091:12;1053:52;1140:9;1127:23;1159:31;1184:5;1159:31;:::i;:::-;1209:5;1261:2;1246:18;;;;1233:32;;-1:-1:-1;;;956:315:1:o;1883:180::-;1942:6;1995:2;1983:9;1974:7;1970:23;1966:32;1963:52;;;2011:1;2008;2001:12;1963:52;-1:-1:-1;2034:23:1;;1883:180;-1:-1:-1;1883:180:1:o;2068:456::-;2145:6;2153;2161;2214:2;2202:9;2193:7;2189:23;2185:32;2182:52;;;2230:1;2227;2220:12;2182:52;2269:9;2256:23;2288:31;2313:5;2288:31;:::i;:::-;2338:5;-1:-1:-1;2395:2:1;2380:18;;2367:32;2408:33;2367:32;2408:33;:::i;:::-;2068:456;;2460:7;;-1:-1:-1;;;2514:2:1;2499:18;;;;2486:32;;2068:456::o;2926:247::-;2985:6;3038:2;3026:9;3017:7;3013:23;3009:32;3006:52;;;3054:1;3051;3044:12;3006:52;3093:9;3080:23;3112:31;3137:5;3112:31;:::i;3178:160::-;3243:20;;3299:13;;3292:21;3282:32;;3272:60;;3328:1;3325;3318:12;3343:315;3408:6;3416;3469:2;3457:9;3448:7;3444:23;3440:32;3437:52;;;3485:1;3482;3475:12;3437:52;3524:9;3511:23;3543:31;3568:5;3543:31;:::i;:::-;3593:5;-1:-1:-1;3617:35:1;3648:2;3633:18;;3617:35;:::i;:::-;3607:45;;3343:315;;;;;:::o;3663:180::-;3719:6;3772:2;3760:9;3751:7;3747:23;3743:32;3740:52;;;3788:1;3785;3778:12;3740:52;3811:26;3827:9;3811:26;:::i;3848:689::-;3940:6;3948;3956;4009:2;3997:9;3988:7;3984:23;3980:32;3977:52;;;4025:1;4022;4015:12;3977:52;4065:9;4052:23;4094:18;4135:2;4127:6;4124:14;4121:34;;;4151:1;4148;4141:12;4121:34;4189:6;4178:9;4174:22;4164:32;;4234:7;4227:4;4223:2;4219:13;4215:27;4205:55;;4256:1;4253;4246:12;4205:55;4296:2;4283:16;4322:2;4314:6;4311:14;4308:34;;;4338:1;4335;4328:12;4308:34;4393:7;4386:4;4376:6;4373:1;4369:14;4365:2;4361:23;4357:34;4354:47;4351:67;;;4414:1;4411;4404:12;4351:67;4445:4;4437:13;;;;-1:-1:-1;4469:6:1;-1:-1:-1;4494:37:1;;4510:20;;;-1:-1:-1;4494:37:1;:::i;:::-;4484:47;;3848:689;;;;;:::o;4542:388::-;4610:6;4618;4671:2;4659:9;4650:7;4646:23;4642:32;4639:52;;;4687:1;4684;4677:12;4639:52;4726:9;4713:23;4745:31;4770:5;4745:31;:::i;:::-;4795:5;-1:-1:-1;4852:2:1;4837:18;;4824:32;4865:33;4824:32;4865:33;:::i;:::-;4917:7;4907:17;;;4542:388;;;;;:::o;4935:356::-;5137:2;5119:21;;;5156:18;;;5149:30;5215:34;5210:2;5195:18;;5188:62;5282:2;5267:18;;4935:356::o;5296:127::-;5357:10;5352:3;5348:20;5345:1;5338:31;5388:4;5385:1;5378:15;5412:4;5409:1;5402:15;5428:125;5493:9;;;5514:10;;;5511:36;;;5527:18;;:::i;5916:380::-;5995:1;5991:12;;;;6038;;;6059:61;;6113:4;6105:6;6101:17;6091:27;;6059:61;6166:2;6158:6;6155:14;6135:18;6132:38;6129:161;;6212:10;6207:3;6203:20;6200:1;6193:31;6247:4;6244:1;6237:15;6275:4;6272:1;6265:15;6129:161;;5916:380;;;:::o;6301:168::-;6374:9;;;6405;;6422:15;;;6416:22;;6402:37;6392:71;;6443:18;;:::i;6474:217::-;6514:1;6540;6530:132;;6584:10;6579:3;6575:20;6572:1;6565:31;6619:4;6616:1;6609:15;6647:4;6644:1;6637:15;6530:132;-1:-1:-1;6676:9:1;;6474:217::o;7519:128::-;7586:9;;;7607:11;;;7604:37;;;7621:18;;:::i;8842:127::-;8903:10;8898:3;8894:20;8891:1;8884:31;8934:4;8931:1;8924:15;8958:4;8955:1;8948:15;8974:127;9035:10;9030:3;9026:20;9023:1;9016:31;9066:4;9063:1;9056:15;9090:4;9087:1;9080:15;11567:401;11769:2;11751:21;;;11808:2;11788:18;;;11781:30;11847:34;11842:2;11827:18;;11820:62;-1:-1:-1;;;11913:2:1;11898:18;;11891:35;11958:3;11943:19;;11567:401::o;11973:399::-;12175:2;12157:21;;;12214:2;12194:18;;;12187:30;12253:34;12248:2;12233:18;;12226:62;-1:-1:-1;;;12319:2:1;12304:18;;12297:33;12362:3;12347:19;;11973:399::o;14460:251::-;14530:6;14583:2;14571:9;14562:7;14558:23;14554:32;14551:52;;;14599:1;14596;14589:12;14551:52;14631:9;14625:16;14650:31;14675:5;14650:31;:::i;14716:980::-;14978:4;15026:3;15015:9;15011:19;15057:6;15046:9;15039:25;15083:2;15121:6;15116:2;15105:9;15101:18;15094:34;15164:3;15159:2;15148:9;15144:18;15137:31;15188:6;15223;15217:13;15254:6;15246;15239:22;15292:3;15281:9;15277:19;15270:26;;15331:2;15323:6;15319:15;15305:29;;15352:1;15362:195;15376:6;15373:1;15370:13;15362:195;;;15441:13;;-1:-1:-1;;;;;15437:39:1;15425:52;;15532:15;;;;15497:12;;;;15473:1;15391:9;15362:195;;;-1:-1:-1;;;;;;;15613:32:1;;;;15608:2;15593:18;;15586:60;-1:-1:-1;;;15677:3:1;15662:19;15655:35;15574:3;14716:980;-1:-1:-1;;;14716:980:1:o;15701:135::-;15740:3;15761:17;;;15758:43;;15781:18;;:::i;:::-;-1:-1:-1;15828:1:1;15817:13;;15701:135::o

Swarm Source

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