ETH Price: $3,103.19 (+1.12%)
Gas: 7 Gwei

Token

KiwiDefi (KIWI)
 

Overview

Max Total Supply

1,000,000,000 KIWI

Holders

354

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
cryptichowie.eth
Balance
5,922,938.343875165380208241 KIWI

Value
$0.00
0xb4959a23a4ed04304eab9a1c1ed565710fea4175
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:
KiwiDeFi

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-08
*/

/**
 *Submitted for verification at Etherscan.io on 2024-05-08
 */
 //

 // Telegram: https://t.me/KiwiDefiPortal
 // Website: https://kiwidefi.app/
 // Twitter: https://twitter.com/KiwiDefi_
 // Gitbook: https://kiwidefiapp.gitbook.io/kiwi-defi/

 //@@@  @@@  @@@  @@@  @@@  @@@  @@@     @@@@@@@   @@@@@@@@  @@@@@@@@  @@@  
 //@@@  @@@  @@@  @@@  @@@  @@@  @@@     @@@@@@@@  @@@@@@@@  @@@@@@@@  @@@  
 //@@!  !@@  @@!  @@!  @@!  @@!  @@!     @@!  @@@  @@!       @@!       @@!  
 //!@!  @!!  !@!  !@!  !@!  !@!  !@!     !@!  @!@  !@!       !@!       !@!  
 //@!@@!@!   !!@  @!!  !!@  @!@  !!@     @!@  !@!  @!!!:!    @!!!:!    !!@  
 //!!@!!!    !!!  !@!  !!!  !@!  !!!     !@!  !!!  !!!!!:    !!!!!:    !!!  
 //!!: :!!   !!:  !!:  !!:  !!:  !!:     !!:  !!!  !!:       !!:       !!:  
 //:!:  !:!  :!:  :!:  :!:  :!:  :!:     :!:  !:!  :!:       :!:       :!:  
 //::  :::   ::   :::: :: :::    ::      :::: ::   :: ::::   ::        ::  
 //:   :::  :      :: :  : :    :       :: :  :   : :: ::    :        :    
                                                                        

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;

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

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

interface 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 _createInitialSupply(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(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 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 airdrop
        );
}

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

contract KiwiDeFi is ERC20, Ownable {
    uint256 public maxBuyLimit;
    uint256 public maxSellLimit;
    uint256 public maxWalletSize;

    IDexRouter public dexRouter;
    address public dexPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address marketingAddress;
    address devAddress;
    address airdropAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public boughtEarly;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalTaxes;
    uint256 public buyMarketingTax;
    uint256 public buyAirdropTax;
    uint256 public buyDevTax;

    uint256 public sellTotalTaxes;
    uint256 public sellMarketingsTax;
    uint256 public sellAirdropTax;
    uint256 public sellDevTax;
    mapping(address => bool) public blacklist;

    /******************/
    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromTaxes;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

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

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

    event Launched();

    event RemovedLimits();

    event ExcludeFromTaxes(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool exempted);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("KiwiDefi", "KIWI") {
        address newOwner = msg.sender;
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _dexRouter;

        // create pair
        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _exemptFromMaxTransaction(address(dexPair), true);
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxBuyLimit = (totalSupply * 1) / 100;
        maxSellLimit = (totalSupply * 1) / 100;
        maxWalletSize = (totalSupply * 1) / 100;
        swapTokensAtAmount = 2500000 * 1e18;

        buyMarketingTax = 2;
        buyAirdropTax = 1;
        buyDevTax = 2;
        buyTotalTaxes = buyMarketingTax + buyAirdropTax + buyDevTax;

        sellMarketingsTax = 2;
        sellAirdropTax = 1;
        sellDevTax = 2;
        sellTotalTaxes = sellMarketingsTax + sellAirdropTax + sellDevTax;

        _exemptFromMaxTransaction(newOwner, true);
        _exemptFromMaxTransaction(address(this), true);
        _exemptFromMaxTransaction(address(0xdead), true);

        exemptFromTaxes(newOwner, true);
        exemptFromTaxes(address(this), true);
        exemptFromTaxes(address(0xdead), true);
        // Change Here

        marketingAddress = 0x79624E2D1e11bD12AE971fcEeF0230Fd5Ee241c3;
        devAddress = 0xc9b4cfe5fa7a3CA62019E346601eF060Ff752238;
        airdropAddress = 0x37B6b991DF5d674F387B20A6CF0476e21c92ec61;

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

    receive() external payable {}

    // only enable if no plan to airdrop

    function enableTrading(uint256 _deadblocks) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + _deadblocks;
        emit Launched();
    }

    function disableTrading() external onlyOwner {
        require(tradingActive, "Cannot redisable trading");
        tradingActive = false;
        swapEnabled = false;
    }

    function enableTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash                
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        tradingActive = true;
        swapEnabled = true;

        emit Launched();

    }

    function addRemoveBlacklist(address _address) public onlyOwner {
        require(address(_address) != address(0), "Address is not valid");  
        if (blacklist[_address]) {
            blacklist[_address] = false;
        } else {
            blacklist[_address] = true;
        }
    }

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

    function manageEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

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

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

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

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        swapTokensAtAmount = newAmount;
    }

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

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

    function setAMM(address pair, bool value) external onlyOwner {
        require(pair != dexPair, "The pair cannot be removed");

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

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

    function updateTaxes(
        uint256 _marketingsTax,
        uint256 _airdropTax,
        uint256 _DevTax
    ) external onlyOwner {
        sellMarketingsTax = _marketingsTax;
        sellAirdropTax = _airdropTax;
        sellDevTax = _DevTax;

        buyMarketingTax = _marketingsTax;
        buyAirdropTax = _airdropTax;
        buyDevTax = _DevTax;

        buyTotalTaxes = buyMarketingTax + buyAirdropTax + buyDevTax;
        sellTotalTaxes = sellMarketingsTax + sellAirdropTax + sellDevTax;
        require(sellTotalTaxes <= 25, "Must keep fees at 25% or less");
    }

    function exemptFromTaxes(address account, bool exempted) public onlyOwner {
        _isExcludedFromTaxes[account] = exempted;
        emit ExcludeFromTaxes(account, exempted);
    }

    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");
        require(!blacklist[from] && !blacklist[to], "Address is blacklisted.");

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

        if (blockForPenaltyEnd > 0) {
            require(
                !boughtEarly[from] || to == owner() || to == address(0xdead),
                "Bots cannot transfer tokens in or out except to owner or dead address."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromTaxes[from] &&
                !_isExcludedFromTaxes[to]
            ) {
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(dexPair)) {
                                                _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyLimit,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWalletSize,
                        "Cannot Exceed max wallet"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellLimit,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWalletSize,
                        "Cannot Exceed max wallet"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeTax = true;
        // if any account belongs to _isExcludedFromTax account then remove the fee
        if (_isExcludedFromTaxes[from] || _isExcludedFromTaxes[to]) {
            takeTax = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeTax) {
            // bot/sniper penalty.
            if (
                earlyBuyPenaltyInEffect() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalTaxes > 0
            ) {
                if (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

                fees = (amount * 99) / 100;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalTaxes > 0) {
                fees = (amount * sellTotalTaxes) / 100;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalTaxes > 0) {
                fees = (amount * buyTotalTaxes) / 100;
            }

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

            amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool) {
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = 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
        );
    }

    function swapBack() private {
        bool success;
        swapTokensForEth(swapTokensAtAmount);

        uint256 ethBalance = address(this).balance;
        uint256 ethForAirdrop = (ethBalance * buyAirdropTax) / buyTotalTaxes;
        uint256 ethForMarketings = (ethBalance * buyMarketingTax) /
            buyTotalTaxes;
        uint256 ethForDev = (ethBalance * buyDevTax) / buyTotalTaxes;

        (success, ) = address(devAddress).call{value: ethForDev}("");
        (success, ) = address(airdropAddress).call{value: ethForAirdrop}("");
        (success, ) = address(marketingAddress).call{value: ethForMarketings}(
            ""
        );
    }

    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

    function setTaxAddresses(
        address _marketingAddress,
        address _devAddress,
        address _airdropAddress
    ) external onlyOwner {
        require(
            _marketingAddress != address(0) &&
                _devAddress != address(0) &&
                _airdropAddress != address(0),
            "Addresses cannot be 0"
        );
        marketingAddress = payable(_marketingAddress);
        devAddress = payable(_devAddress);
        airdropAddress = payable(_airdropAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBack(uint256 amountInWei) external onlyOwner {
        require(
            amountInWei <= 10 ether,
            "May not buy more than 10 ETH in a single buy to reduce sandwich attacks"
        );

        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amountInWei
        }(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
        emit BuyBackTriggered(amountInWei);
    }
}

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":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromTaxes","type":"event"},{"anonymous":false,"inputs":[],"name":"Launched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"exempted","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":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoAirdrop","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":"UpdatedMarketingsAddress","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addRemoveBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAirdropTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTaxes","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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadblocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"enableTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"exemptFromMaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exempted","type":"bool"}],"name":"exemptFromTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","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":"sellAirdropTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingsTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_devAddress","type":"address"},{"internalType":"address","name":"_airdropAddress","type":"address"}],"name":"setTaxAddresses","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":"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newValue","type":"uint256"}],"name":"updateMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingsTax","type":"uint256"},{"internalType":"uint256","name":"_airdropTax","type":"uint256"},{"internalType":"uint256","name":"_DevTax","type":"uint256"}],"name":"updateTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600f556013805462ffffff191660019081179091556015805460ff191690911790553480156200003557600080fd5b50604051806040016040528060088152602001674b6977694465666960c01b815250604051806040016040528060048152602001634b49574960e01b815250816003908162000085919062000853565b50600462000094828262000853565b5050506000620000a96200044d60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003c41833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017691906200091f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ea91906200091f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000238573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025e91906200091f565b600a80546001600160a01b0319166001600160a01b039290921691821790556200028a90600162000451565b600a54620002a3906001600160a01b03166001620004b2565b6b033b2e3c9fd0803ce80000006064620002bf82600162000967565b620002cb919062000989565b6006556064620002dd82600162000967565b620002e9919062000989565b6007556064620002fb82600162000967565b62000307919062000989565b6008556a0211654585005212800000600b5560026017819055600160188190556019829055620003389082620009ac565b620003449190620009ac565b6016556002601b8190556001601c819055601d829055620003669082620009ac565b620003729190620009ac565b601a556200038283600162000451565b6200038f30600162000451565b6200039e61dead600162000451565b620003ab8360016200051e565b620003b83060016200051e565b620003c761dead60016200051e565b600c80546001600160a01b03199081167379624e2d1e11bd12ae971fceef0230fd5ee241c317909155600d8054821673c9b4cfe5fa7a3ca62019e346601ef060ff752238179055600e80549091167337b6b991df5d674f387b20a6cf0476e21c92ec61179055620004398382620005cc565b6200044483620006b1565b505050620009c7565b3390565b6001600160a01b03821660008181526020808052604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602160205260409020805460ff1916821515179055620004e2828262000451565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200056d5760405162461bcd60e51b8152602060048201819052602482015260008051602062003c2183398151915260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527fd371c6889ff9ad7371053463dc978366919ead66819324c51f6ac3ab76353506910160405180910390a25050565b6001600160a01b038216620006245760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000564565b8060026000828254620006389190620009ac565b90915550506001600160a01b0382166000908152602081905260408120805483929062000667908490620009ac565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006fc5760405162461bcd60e51b8152602060048201819052602482015260008051602062003c21833981519152604482015260640162000564565b6001600160a01b038116620007635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000564565b6005546040516001600160a01b0380841692169060008051602062003c4183398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d957607f821691505b602082108103620007fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084e57600081815260208120601f850160051c81016020861015620008295750805b601f850160051c820191505b818110156200084a5782815560010162000835565b5050505b505050565b81516001600160401b038111156200086f576200086f620007ae565b6200088781620008808454620007c4565b8462000800565b602080601f831160018114620008bf5760008415620008a65750858301515b600019600386901b1c1916600185901b1785556200084a565b600085815260208120601f198616915b82811015620008f057888601518255948401946001909101908401620008cf565b50858210156200090f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200093257600080fd5b81516001600160a01b03811681146200094a57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000984576200098462000951565b500290565b600082620009a757634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009c257620009c262000951565b500190565b61324a80620009d76000396000f3fe60806040526004361061038f5760003560e01c80638da5cb5b116101dc578063bbc0c74211610102578063e2f45605116100a0578063f2e76c251161006f578063f2e76c2514610a26578063f2fde38b14610a46578063f5648a4f14610a66578063f9f92be414610a7b57600080fd5b8063e2f45605146109c5578063e884f260146109db578063ee40166e146109f0578063f242ab4114610a0657600080fd5b8063c876d0b9116100dc578063c876d0b914610925578063d257b34f1461093f578063dd62ed3e1461095f578063e25061b8146109a557600080fd5b8063bbc0c742146108da578063be691883146108f9578063c3cc18f51461090f57600080fd5b8063a457c2d71161017a578063a9d3cd8a11610149578063a9d3cd8a14610854578063af8f26e714610874578063b62496f51461088a578063b94279ea146108ba57600080fd5b8063a457c2d7146107de578063a62068ce146107fe578063a9059cbb14610814578063a90eab8c1461083457600080fd5b80639164f9db116101b65780639164f9db1461077d57806395d89b411461079d5780639fe23f16146107b2578063a3124a7e146107c857600080fd5b80638da5cb5b146107335780638f3fa860146107515780639087ab751461076757600080fd5b806346576ddb116102c15780636b0a894c1161025f578063751039fc1161022e578063751039fc146106ae57806382aa7c68146106c357806385ecfd28146106e3578063887d63171461071357600080fd5b80636b0a894c1461062d5780636ddd17131461064357806370a0823114610663578063715018a61461069957600080fd5b8063588813041161029b57806358881304146105ca57806358a6d531146105ea578063652e2f04146106015780636aa5b37f1461061757600080fd5b806346576ddb1461057b5780634a62bb651461059b57806351f205e4146105b557600080fd5b806318160ddd1161032e57806323b872dd1161030857806323b872dd14610509578063313ce567146105295780633301241114610545578063395093511461055b57600080fd5b806318160ddd146104b45780631c499ab0146104c95780632191349e146104e957600080fd5b80630758d9241161036a5780630758d92414610408578063095ea7b31461044057806310d5de531461047057806317700f011461049f57600080fd5b806204ff691461039b578063053f9040146103c457806306fdde03146103e657600080fd5b3661039657005b600080fd5b3480156103a757600080fd5b506103b160185481565b6040519081526020015b60405180910390f35b3480156103d057600080fd5b506103e46103df366004612d7d565b610aab565b005b3480156103f257600080fd5b506103fb610cf8565b6040516103bb9190612d96565b34801561041457600080fd5b50600954610428906001600160a01b031681565b6040516001600160a01b0390911681526020016103bb565b34801561044c57600080fd5b5061046061045b366004612e00565b610d8a565b60405190151581526020016103bb565b34801561047c57600080fd5b5061046061048b366004612e2c565b602080526000908152604090205460ff1681565b3480156104ab57600080fd5b506103e4610da0565b3480156104c057600080fd5b506002546103b1565b3480156104d557600080fd5b506103e46104e4366004612d7d565b610e2f565b3480156104f557600080fd5b506103e4610504366004612e2c565b610f3f565b34801561051557600080fd5b50610460610524366004612e50565b61101f565b34801561053557600080fd5b50604051601281526020016103bb565b34801561055157600080fd5b506103b160175481565b34801561056757600080fd5b50610460610576366004612e00565b6110c9565b34801561058757600080fd5b506103e4610596366004612e91565b611105565b3480156105a757600080fd5b506013546104609060ff1681565b3480156105c157600080fd5b506103e46111cc565b3480156105d657600080fd5b506103e46105e5366004612d7d565b611253565b3480156105f657600080fd5b506010544310610460565b34801561060d57600080fd5b506103b160075481565b34801561062357600080fd5b506103b160065481565b34801561063957600080fd5b506103b160125481565b34801561064f57600080fd5b506013546104609062010000900460ff1681565b34801561066f57600080fd5b506103b161067e366004612e2c565b6001600160a01b031660009081526020819052604090205490565b3480156106a557600080fd5b506103e4611359565b3480156106ba57600080fd5b506103e46113cd565b3480156106cf57600080fd5b506103e46106de366004612d7d565b611438565b3480156106ef57600080fd5b506104606106fe366004612e2c565b60116020526000908152604090205460ff1681565b34801561071f57600080fd5b506103e461072e366004612ecf565b61150b565b34801561073f57600080fd5b506005546001600160a01b0316610428565b34801561075d57600080fd5b506103b160085481565b34801561077357600080fd5b506103b160165481565b34801561078957600080fd5b506103e4610798366004612d7d565b6115ec565b3480156107a957600080fd5b506103fb6116f3565b3480156107be57600080fd5b506103b1601c5481565b3480156107d457600080fd5b506103b1601b5481565b3480156107ea57600080fd5b506104606107f9366004612e00565b611702565b34801561080a57600080fd5b506103b160105481565b34801561082057600080fd5b5061046061082f366004612e00565b61179b565b34801561084057600080fd5b506103e461084f366004612f1a565b6117a8565b34801561086057600080fd5b506103e461086f366004612e91565b611a68565b34801561088057600080fd5b506103b160195481565b34801561089657600080fd5b506104606108a5366004612e2c565b60216020526000908152604090205460ff1681565b3480156108c657600080fd5b506103e46108d5366004612e91565b611b36565b3480156108e657600080fd5b5060135461046090610100900460ff1681565b34801561090557600080fd5b506103b1601d5481565b34801561091b57600080fd5b506103b1601a5481565b34801561093157600080fd5b506015546104609060ff1681565b34801561094b57600080fd5b506103e461095a366004612d7d565b611b8b565b34801561096b57600080fd5b506103b161097a366004612f55565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109b157600080fd5b506103e46109c0366004612e91565b611bba565b3480156109d157600080fd5b506103b1600b5481565b3480156109e757600080fd5b506103e4611c43565b3480156109fc57600080fd5b506103b1600f5481565b348015610a1257600080fd5b50600a54610428906001600160a01b031681565b348015610a3257600080fd5b506103e4610a41366004612f83565b611c79565b348015610a5257600080fd5b506103e4610a61366004612e2c565b611d50565b348015610a7257600080fd5b506103e4611e3b565b348015610a8757600080fd5b50610460610a96366004612e2c565b601e6020526000908152604090205460ff1681565b6005546001600160a01b03163314610ade5760405162461bcd60e51b8152600401610ad590612faf565b60405180910390fd5b678ac7230489e80000811115610b6c5760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610ad5565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfa9190612fe4565b81600081518110610c0d57610c0d613001565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610c4157610c41613001565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de95908490610c8990600090869061dead90429060040161305b565b6000604051808303818588803b158015610ca257600080fd5b505af1158015610cb6573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051610cec91815260200190565b60405180910390a15050565b606060038054610d0790613090565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3390613090565b8015610d805780601f10610d5557610100808354040283529160200191610d80565b820191906000526020600020905b815481529060010190602001808311610d6357829003601f168201915b5050505050905090565b6000610d97338484611eb2565b50600192915050565b6005546001600160a01b03163314610dca5760405162461bcd60e51b8152600401610ad590612faf565b601354610100900460ff16610e215760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726564697361626c652074726164696e6700000000000000006044820152606401610ad5565b6013805462ffff0019169055565b6005546001600160a01b03163314610e595760405162461bcd60e51b8152600401610ad590612faf565b670de0b6b3a76400006103e8610e6e60025490565b610e799060036130e0565b610e8391906130ff565b610e8d91906130ff565b811015610ef15760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610ad5565b610f0381670de0b6b3a76400006130e0565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610f695760405162461bcd60e51b8152600401610ad590612faf565b6001600160a01b038116610fb65760405162461bcd60e51b81526020600482015260146024820152731059191c995cdcc81a5cc81b9bdd081d985b1a5960621b6044820152606401610ad5565b6001600160a01b0381166000908152601e602052604090205460ff1615610ff8576001600160a01b03166000908152601e60205260409020805460ff19169055565b6001600160a01b0381166000908152601e60205260409020805460ff191660011790555b50565b600061102c848484611fd6565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156110b15760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ad5565b6110be8533858403611eb2565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d97918590611100908690613121565b611eb2565b6005546001600160a01b0316331461112f5760405162461bcd60e51b8152600401610ad590612faf565b806111a257600a546001600160a01b03908116908316036111a25760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ad5565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111f65760405162461bcd60e51b8152600401610ad590612faf565b600a805460ff60a01b1916600160a01b1790556112116128d5565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461127d5760405162461bcd60e51b8152600401610ad590612faf565b670de0b6b3a76400006103e861129260025490565b61129d9060026130e0565b6112a791906130ff565b6112b191906130ff565b8110156113125760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610ad5565b61132481670de0b6b3a76400006130e0565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610f34565b6005546001600160a01b031633146113835760405162461bcd60e51b8152600401610ad590612faf565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113f75760405162461bcd60e51b8152600401610ad590612faf565b6013805460ff199081169091556015805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114625760405162461bcd60e51b8152600401610ad590612faf565b601354610100900460ff16156114ba5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ad5565b6013805462ffff0019166201010017905543600f8190556114dc908290613121565b6010556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a150565b6005546001600160a01b031633146115355760405162461bcd60e51b8152600401610ad590612faf565b6001600160a01b0383161580159061155557506001600160a01b03821615155b801561156957506001600160a01b03811615155b6115ad5760405162461bcd60e51b815260206004820152601560248201527404164647265737365732063616e6e6f74206265203605c1b6044820152606401610ad5565b600c80546001600160a01b039485166001600160a01b031991821617909155600d805493851693821693909317909255600e8054919093169116179055565b6005546001600160a01b031633146116165760405162461bcd60e51b8152600401610ad590612faf565b670de0b6b3a76400006103e861162b60025490565b6116369060026130e0565b61164091906130ff565b61164a91906130ff565b8110156116ac5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610ad5565b6116be81670de0b6b3a76400006130e0565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f34565b606060048054610d0790613090565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117845760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ad5565b6117913385858403611eb2565b5060019392505050565b6000610d97338484611fd6565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df3918101919091526000606082018190529192506080016040516020818303038152906040528051906020012090506000828260405160200161194892919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156119b3573d6000803e3d6000fd5b5050506020604051035190506119d16005546001600160a01b031690565b6001600160a01b0316816001600160a01b031614611a255760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610ad5565b6013805462ffff001916620101001790556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a150505050505050565b6005546001600160a01b03163314611a925760405162461bcd60e51b8152600401610ad590612faf565b600a546001600160a01b0390811690831603611af05760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f7665640000000000006044820152606401610ad5565b611afa8282612a46565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611b605760405162461bcd60e51b8152600401610ad590612faf565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611bb55760405162461bcd60e51b8152600401610ad590612faf565b600b55565b6005546001600160a01b03163314611be45760405162461bcd60e51b8152600401610ad590612faf565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527fd371c6889ff9ad7371053463dc978366919ead66819324c51f6ac3ab76353506910160405180910390a25050565b6005546001600160a01b03163314611c6d5760405162461bcd60e51b8152600401610ad590612faf565b6015805460ff19169055565b6005546001600160a01b03163314611ca35760405162461bcd60e51b8152600401610ad590612faf565b601b839055601c829055601d81905560178390556018829055601981905580611ccc8385613121565b611cd69190613121565b601655601d54601c54601b54611cec9190613121565b611cf69190613121565b601a81905560191015611d4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610ad5565b505050565b6005546001600160a01b03163314611d7a5760405162461bcd60e51b8152600401610ad590612faf565b6001600160a01b038116611ddf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad5565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611e655760405162461bcd60e51b8152600401610ad590612faf565b604051600090339047908381818185875af1925050503d8060008114611ea7576040519150601f19603f3d011682016040523d82523d6000602084013e611eac565b606091505b50505050565b6001600160a01b038316611f145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ad5565b6001600160a01b038216611f755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ad5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ffc5760405162461bcd60e51b8152600401610ad590613139565b6001600160a01b0382166120225760405162461bcd60e51b8152600401610ad59061317e565b600081116120725760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ad5565b6001600160a01b0383166000908152601e602052604090205460ff161580156120b457506001600160a01b0382166000908152601e602052604090205460ff16155b6121005760405162461bcd60e51b815260206004820152601760248201527f4164647265737320697320626c61636b6c69737465642e0000000000000000006044820152606401610ad5565b601354610100900460ff16612193576001600160a01b0383166000908152601f602052604090205460ff168061214e57506001600160a01b0382166000908152601f602052604090205460ff165b6121935760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ad5565b60105415612266576001600160a01b03831660009081526011602052604090205460ff1615806121d057506005546001600160a01b038381169116145b806121e557506001600160a01b03821661dead145b6122665760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ad5565b60135460ff16156125cc576005546001600160a01b0384811691161480159061229d57506005546001600160a01b03838116911614155b80156122b157506001600160a01b03821615155b80156122c857506001600160a01b03821661dead14155b80156122ed57506001600160a01b0383166000908152601f602052604090205460ff16155b801561231257506001600160a01b0382166000908152601f602052604090205460ff16155b156125cc5760155460ff1615612378576009546001600160a01b0383811691161480159061234e5750600a546001600160a01b03838116911614155b15612378573260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526021602052604090205460ff1680156123b857506001600160a01b038216600090815260208052604090205460ff16155b15612494576006548111156124205760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ad5565b6008546001600160a01b0383166000908152602081905260409020546124469083613121565b111561248f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610ad5565b6125cc565b6001600160a01b03821660009081526021602052604090205460ff1680156124d457506001600160a01b038316600090815260208052604090205460ff16155b1561253e5760075481111561248f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ad5565b6001600160a01b038216600090815260208052604090205460ff166125cc576008546001600160a01b0383166000908152602081905260409020546125839083613121565b11156125cc5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610ad5565b30600090815260208190526040902054600b54811080159081906125f8575060135462010000900460ff165b801561260e5750600a54600160a01b900460ff16155b801561263357506001600160a01b03851660009081526021602052604090205460ff16155b801561265857506001600160a01b0385166000908152601f602052604090205460ff16155b801561267d57506001600160a01b0384166000908152601f602052604090205460ff16155b156126ab57600a805460ff60a01b1916600160a01b17905561269d6128d5565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601f602052604090205460019060ff16806126ed57506001600160a01b0385166000908152601f602052604090205460ff165b156126f6575060005b600081156128c1576010544310801561272757506001600160a01b03871660009081526021602052604090205460ff165b801561274c57506001600160a01b03861660009081526021602052604090205460ff16155b801561275a57506000601654115b15612818576001600160a01b03861660009081526011602052604090205460ff166127fa576001600160a01b0386166000908152601160205260408120805460ff1916600190811790915560128054919290916127b8908490613121565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646128078660636130e0565b61281191906130ff565b90506128a3565b6001600160a01b03861660009081526021602052604090205460ff16801561284257506000601a54115b15612857576064601a548661280791906130e0565b6001600160a01b03871660009081526021602052604090205460ff16801561288157506000601654115b156128a35760646016548661289691906130e0565b6128a091906130ff565b90505b80156128b4576128b4873083612a74565b6128be81866131c1565b94505b6128cc878787612a74565b50505050505050565b60006128e2600b54612bc9565b60165460185447916000916128f790846130e0565b61290191906130ff565b905060006016546017548461291691906130e0565b61292091906130ff565b905060006016546019548561293591906130e0565b61293f91906130ff565b600d546040519192506001600160a01b0316908290600081818185875af1925050503d806000811461298d576040519150601f19603f3d011682016040523d82523d6000602084013e612992565b606091505b5050600e546040519196506001600160a01b0316908490600081818185875af1925050503d80600081146129e2576040519150601f19603f3d011682016040523d82523d6000602084013e6129e7565b606091505b5050600c546040519196506001600160a01b0316908390600081818185875af1925050503d8060008114612a37576040519150601f19603f3d011682016040523d82523d6000602084013e612a3c565b606091505b5050505050505050565b6001600160a01b0382166000908152602160205260409020805460ff1916821515179055611afa8282612d23565b6001600160a01b038316612a9a5760405162461bcd60e51b8152600401610ad590613139565b6001600160a01b038216612ac05760405162461bcd60e51b8152600401610ad59061317e565b6001600160a01b03831660009081526020819052604090205481811015612b385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ad5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612b6f908490613121565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bbb91815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bfe57612bfe613001565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7b9190612fe4565b81600181518110612c8e57612c8e613001565b6001600160a01b039283166020918202929092010152600954612cb49130911684611eb2565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ced9085906000908690309042906004016131d8565b600060405180830381600087803b158015612d0757600080fd5b505af1158015612d1b573d6000803e3d6000fd5b505050505050565b6001600160a01b03821660008181526020808052604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101610cec565b600060208284031215612d8f57600080fd5b5035919050565b600060208083528351808285015260005b81811015612dc357858101830151858201604001528201612da7565b81811115612dd5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461101c57600080fd5b60008060408385031215612e1357600080fd5b8235612e1e81612deb565b946020939093013593505050565b600060208284031215612e3e57600080fd5b8135612e4981612deb565b9392505050565b600080600060608486031215612e6557600080fd5b8335612e7081612deb565b92506020840135612e8081612deb565b929592945050506040919091013590565b60008060408385031215612ea457600080fd5b8235612eaf81612deb565b915060208301358015158114612ec457600080fd5b809150509250929050565b600080600060608486031215612ee457600080fd5b8335612eef81612deb565b92506020840135612eff81612deb565b91506040840135612f0f81612deb565b809150509250925092565b600080600060608486031215612f2f57600080fd5b833560ff81168114612f4057600080fd5b95602085013595506040909401359392505050565b60008060408385031215612f6857600080fd5b8235612f7381612deb565b91506020830135612ec481612deb565b600080600060608486031215612f9857600080fd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612ff657600080fd5b8151612e4981612deb565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156130505781516001600160a01b03168752958201959082019060010161302b565b509495945050505050565b8481526080602082015260006130746080830186613017565b6001600160a01b03949094166040830152506060015292915050565b600181811c908216806130a457607f821691505b6020821081036130c457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156130fa576130fa6130ca565b500290565b60008261311c57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613134576131346130ca565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156131d3576131d36130ca565b500390565b85815284602082015260a0604082015260006131f760a0830186613017565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122040aca830399f9d9cc4ec9d0048b586afea3f3525efa7c375051fe00efb1dc90e64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x60806040526004361061038f5760003560e01c80638da5cb5b116101dc578063bbc0c74211610102578063e2f45605116100a0578063f2e76c251161006f578063f2e76c2514610a26578063f2fde38b14610a46578063f5648a4f14610a66578063f9f92be414610a7b57600080fd5b8063e2f45605146109c5578063e884f260146109db578063ee40166e146109f0578063f242ab4114610a0657600080fd5b8063c876d0b9116100dc578063c876d0b914610925578063d257b34f1461093f578063dd62ed3e1461095f578063e25061b8146109a557600080fd5b8063bbc0c742146108da578063be691883146108f9578063c3cc18f51461090f57600080fd5b8063a457c2d71161017a578063a9d3cd8a11610149578063a9d3cd8a14610854578063af8f26e714610874578063b62496f51461088a578063b94279ea146108ba57600080fd5b8063a457c2d7146107de578063a62068ce146107fe578063a9059cbb14610814578063a90eab8c1461083457600080fd5b80639164f9db116101b65780639164f9db1461077d57806395d89b411461079d5780639fe23f16146107b2578063a3124a7e146107c857600080fd5b80638da5cb5b146107335780638f3fa860146107515780639087ab751461076757600080fd5b806346576ddb116102c15780636b0a894c1161025f578063751039fc1161022e578063751039fc146106ae57806382aa7c68146106c357806385ecfd28146106e3578063887d63171461071357600080fd5b80636b0a894c1461062d5780636ddd17131461064357806370a0823114610663578063715018a61461069957600080fd5b8063588813041161029b57806358881304146105ca57806358a6d531146105ea578063652e2f04146106015780636aa5b37f1461061757600080fd5b806346576ddb1461057b5780634a62bb651461059b57806351f205e4146105b557600080fd5b806318160ddd1161032e57806323b872dd1161030857806323b872dd14610509578063313ce567146105295780633301241114610545578063395093511461055b57600080fd5b806318160ddd146104b45780631c499ab0146104c95780632191349e146104e957600080fd5b80630758d9241161036a5780630758d92414610408578063095ea7b31461044057806310d5de531461047057806317700f011461049f57600080fd5b806204ff691461039b578063053f9040146103c457806306fdde03146103e657600080fd5b3661039657005b600080fd5b3480156103a757600080fd5b506103b160185481565b6040519081526020015b60405180910390f35b3480156103d057600080fd5b506103e46103df366004612d7d565b610aab565b005b3480156103f257600080fd5b506103fb610cf8565b6040516103bb9190612d96565b34801561041457600080fd5b50600954610428906001600160a01b031681565b6040516001600160a01b0390911681526020016103bb565b34801561044c57600080fd5b5061046061045b366004612e00565b610d8a565b60405190151581526020016103bb565b34801561047c57600080fd5b5061046061048b366004612e2c565b602080526000908152604090205460ff1681565b3480156104ab57600080fd5b506103e4610da0565b3480156104c057600080fd5b506002546103b1565b3480156104d557600080fd5b506103e46104e4366004612d7d565b610e2f565b3480156104f557600080fd5b506103e4610504366004612e2c565b610f3f565b34801561051557600080fd5b50610460610524366004612e50565b61101f565b34801561053557600080fd5b50604051601281526020016103bb565b34801561055157600080fd5b506103b160175481565b34801561056757600080fd5b50610460610576366004612e00565b6110c9565b34801561058757600080fd5b506103e4610596366004612e91565b611105565b3480156105a757600080fd5b506013546104609060ff1681565b3480156105c157600080fd5b506103e46111cc565b3480156105d657600080fd5b506103e46105e5366004612d7d565b611253565b3480156105f657600080fd5b506010544310610460565b34801561060d57600080fd5b506103b160075481565b34801561062357600080fd5b506103b160065481565b34801561063957600080fd5b506103b160125481565b34801561064f57600080fd5b506013546104609062010000900460ff1681565b34801561066f57600080fd5b506103b161067e366004612e2c565b6001600160a01b031660009081526020819052604090205490565b3480156106a557600080fd5b506103e4611359565b3480156106ba57600080fd5b506103e46113cd565b3480156106cf57600080fd5b506103e46106de366004612d7d565b611438565b3480156106ef57600080fd5b506104606106fe366004612e2c565b60116020526000908152604090205460ff1681565b34801561071f57600080fd5b506103e461072e366004612ecf565b61150b565b34801561073f57600080fd5b506005546001600160a01b0316610428565b34801561075d57600080fd5b506103b160085481565b34801561077357600080fd5b506103b160165481565b34801561078957600080fd5b506103e4610798366004612d7d565b6115ec565b3480156107a957600080fd5b506103fb6116f3565b3480156107be57600080fd5b506103b1601c5481565b3480156107d457600080fd5b506103b1601b5481565b3480156107ea57600080fd5b506104606107f9366004612e00565b611702565b34801561080a57600080fd5b506103b160105481565b34801561082057600080fd5b5061046061082f366004612e00565b61179b565b34801561084057600080fd5b506103e461084f366004612f1a565b6117a8565b34801561086057600080fd5b506103e461086f366004612e91565b611a68565b34801561088057600080fd5b506103b160195481565b34801561089657600080fd5b506104606108a5366004612e2c565b60216020526000908152604090205460ff1681565b3480156108c657600080fd5b506103e46108d5366004612e91565b611b36565b3480156108e657600080fd5b5060135461046090610100900460ff1681565b34801561090557600080fd5b506103b1601d5481565b34801561091b57600080fd5b506103b1601a5481565b34801561093157600080fd5b506015546104609060ff1681565b34801561094b57600080fd5b506103e461095a366004612d7d565b611b8b565b34801561096b57600080fd5b506103b161097a366004612f55565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109b157600080fd5b506103e46109c0366004612e91565b611bba565b3480156109d157600080fd5b506103b1600b5481565b3480156109e757600080fd5b506103e4611c43565b3480156109fc57600080fd5b506103b1600f5481565b348015610a1257600080fd5b50600a54610428906001600160a01b031681565b348015610a3257600080fd5b506103e4610a41366004612f83565b611c79565b348015610a5257600080fd5b506103e4610a61366004612e2c565b611d50565b348015610a7257600080fd5b506103e4611e3b565b348015610a8757600080fd5b50610460610a96366004612e2c565b601e6020526000908152604090205460ff1681565b6005546001600160a01b03163314610ade5760405162461bcd60e51b8152600401610ad590612faf565b60405180910390fd5b678ac7230489e80000811115610b6c5760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201526661747461636b7360c81b608482015260a401610ad5565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfa9190612fe4565b81600081518110610c0d57610c0d613001565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610c4157610c41613001565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de95908490610c8990600090869061dead90429060040161305b565b6000604051808303818588803b158015610ca257600080fd5b505af1158015610cb6573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d68482056882604051610cec91815260200190565b60405180910390a15050565b606060038054610d0790613090565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3390613090565b8015610d805780601f10610d5557610100808354040283529160200191610d80565b820191906000526020600020905b815481529060010190602001808311610d6357829003601f168201915b5050505050905090565b6000610d97338484611eb2565b50600192915050565b6005546001600160a01b03163314610dca5760405162461bcd60e51b8152600401610ad590612faf565b601354610100900460ff16610e215760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726564697361626c652074726164696e6700000000000000006044820152606401610ad5565b6013805462ffff0019169055565b6005546001600160a01b03163314610e595760405162461bcd60e51b8152600401610ad590612faf565b670de0b6b3a76400006103e8610e6e60025490565b610e799060036130e0565b610e8391906130ff565b610e8d91906130ff565b811015610ef15760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610ad5565b610f0381670de0b6b3a76400006130e0565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610f695760405162461bcd60e51b8152600401610ad590612faf565b6001600160a01b038116610fb65760405162461bcd60e51b81526020600482015260146024820152731059191c995cdcc81a5cc81b9bdd081d985b1a5960621b6044820152606401610ad5565b6001600160a01b0381166000908152601e602052604090205460ff1615610ff8576001600160a01b03166000908152601e60205260409020805460ff19169055565b6001600160a01b0381166000908152601e60205260409020805460ff191660011790555b50565b600061102c848484611fd6565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156110b15760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ad5565b6110be8533858403611eb2565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d97918590611100908690613121565b611eb2565b6005546001600160a01b0316331461112f5760405162461bcd60e51b8152600401610ad590612faf565b806111a257600a546001600160a01b03908116908316036111a25760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ad5565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111f65760405162461bcd60e51b8152600401610ad590612faf565b600a805460ff60a01b1916600160a01b1790556112116128d5565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461127d5760405162461bcd60e51b8152600401610ad590612faf565b670de0b6b3a76400006103e861129260025490565b61129d9060026130e0565b6112a791906130ff565b6112b191906130ff565b8110156113125760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610ad5565b61132481670de0b6b3a76400006130e0565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610f34565b6005546001600160a01b031633146113835760405162461bcd60e51b8152600401610ad590612faf565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113f75760405162461bcd60e51b8152600401610ad590612faf565b6013805460ff199081169091556015805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114625760405162461bcd60e51b8152600401610ad590612faf565b601354610100900460ff16156114ba5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ad5565b6013805462ffff0019166201010017905543600f8190556114dc908290613121565b6010556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a150565b6005546001600160a01b031633146115355760405162461bcd60e51b8152600401610ad590612faf565b6001600160a01b0383161580159061155557506001600160a01b03821615155b801561156957506001600160a01b03811615155b6115ad5760405162461bcd60e51b815260206004820152601560248201527404164647265737365732063616e6e6f74206265203605c1b6044820152606401610ad5565b600c80546001600160a01b039485166001600160a01b031991821617909155600d805493851693821693909317909255600e8054919093169116179055565b6005546001600160a01b031633146116165760405162461bcd60e51b8152600401610ad590612faf565b670de0b6b3a76400006103e861162b60025490565b6116369060026130e0565b61164091906130ff565b61164a91906130ff565b8110156116ac5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610ad5565b6116be81670de0b6b3a76400006130e0565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610f34565b606060048054610d0790613090565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117845760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ad5565b6117913385858403611eb2565b5060019392505050565b6000610d97338484611fd6565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df3918101919091526000606082018190529192506080016040516020818303038152906040528051906020012090506000828260405160200161194892919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156119b3573d6000803e3d6000fd5b5050506020604051035190506119d16005546001600160a01b031690565b6001600160a01b0316816001600160a01b031614611a255760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610ad5565b6013805462ffff001916620101001790556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a150505050505050565b6005546001600160a01b03163314611a925760405162461bcd60e51b8152600401610ad590612faf565b600a546001600160a01b0390811690831603611af05760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f7665640000000000006044820152606401610ad5565b611afa8282612a46565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314611b605760405162461bcd60e51b8152600401610ad590612faf565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611bb55760405162461bcd60e51b8152600401610ad590612faf565b600b55565b6005546001600160a01b03163314611be45760405162461bcd60e51b8152600401610ad590612faf565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527fd371c6889ff9ad7371053463dc978366919ead66819324c51f6ac3ab76353506910160405180910390a25050565b6005546001600160a01b03163314611c6d5760405162461bcd60e51b8152600401610ad590612faf565b6015805460ff19169055565b6005546001600160a01b03163314611ca35760405162461bcd60e51b8152600401610ad590612faf565b601b839055601c829055601d81905560178390556018829055601981905580611ccc8385613121565b611cd69190613121565b601655601d54601c54601b54611cec9190613121565b611cf69190613121565b601a81905560191015611d4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610ad5565b505050565b6005546001600160a01b03163314611d7a5760405162461bcd60e51b8152600401610ad590612faf565b6001600160a01b038116611ddf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad5565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611e655760405162461bcd60e51b8152600401610ad590612faf565b604051600090339047908381818185875af1925050503d8060008114611ea7576040519150601f19603f3d011682016040523d82523d6000602084013e611eac565b606091505b50505050565b6001600160a01b038316611f145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ad5565b6001600160a01b038216611f755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ad5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ffc5760405162461bcd60e51b8152600401610ad590613139565b6001600160a01b0382166120225760405162461bcd60e51b8152600401610ad59061317e565b600081116120725760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ad5565b6001600160a01b0383166000908152601e602052604090205460ff161580156120b457506001600160a01b0382166000908152601e602052604090205460ff16155b6121005760405162461bcd60e51b815260206004820152601760248201527f4164647265737320697320626c61636b6c69737465642e0000000000000000006044820152606401610ad5565b601354610100900460ff16612193576001600160a01b0383166000908152601f602052604090205460ff168061214e57506001600160a01b0382166000908152601f602052604090205460ff165b6121935760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ad5565b60105415612266576001600160a01b03831660009081526011602052604090205460ff1615806121d057506005546001600160a01b038381169116145b806121e557506001600160a01b03821661dead145b6122665760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ad5565b60135460ff16156125cc576005546001600160a01b0384811691161480159061229d57506005546001600160a01b03838116911614155b80156122b157506001600160a01b03821615155b80156122c857506001600160a01b03821661dead14155b80156122ed57506001600160a01b0383166000908152601f602052604090205460ff16155b801561231257506001600160a01b0382166000908152601f602052604090205460ff16155b156125cc5760155460ff1615612378576009546001600160a01b0383811691161480159061234e5750600a546001600160a01b03838116911614155b15612378573260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526021602052604090205460ff1680156123b857506001600160a01b038216600090815260208052604090205460ff16155b15612494576006548111156124205760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ad5565b6008546001600160a01b0383166000908152602081905260409020546124469083613121565b111561248f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610ad5565b6125cc565b6001600160a01b03821660009081526021602052604090205460ff1680156124d457506001600160a01b038316600090815260208052604090205460ff16155b1561253e5760075481111561248f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ad5565b6001600160a01b038216600090815260208052604090205460ff166125cc576008546001600160a01b0383166000908152602081905260409020546125839083613121565b11156125cc5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610ad5565b30600090815260208190526040902054600b54811080159081906125f8575060135462010000900460ff165b801561260e5750600a54600160a01b900460ff16155b801561263357506001600160a01b03851660009081526021602052604090205460ff16155b801561265857506001600160a01b0385166000908152601f602052604090205460ff16155b801561267d57506001600160a01b0384166000908152601f602052604090205460ff16155b156126ab57600a805460ff60a01b1916600160a01b17905561269d6128d5565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601f602052604090205460019060ff16806126ed57506001600160a01b0385166000908152601f602052604090205460ff165b156126f6575060005b600081156128c1576010544310801561272757506001600160a01b03871660009081526021602052604090205460ff165b801561274c57506001600160a01b03861660009081526021602052604090205460ff16155b801561275a57506000601654115b15612818576001600160a01b03861660009081526011602052604090205460ff166127fa576001600160a01b0386166000908152601160205260408120805460ff1916600190811790915560128054919290916127b8908490613121565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b60646128078660636130e0565b61281191906130ff565b90506128a3565b6001600160a01b03861660009081526021602052604090205460ff16801561284257506000601a54115b15612857576064601a548661280791906130e0565b6001600160a01b03871660009081526021602052604090205460ff16801561288157506000601654115b156128a35760646016548661289691906130e0565b6128a091906130ff565b90505b80156128b4576128b4873083612a74565b6128be81866131c1565b94505b6128cc878787612a74565b50505050505050565b60006128e2600b54612bc9565b60165460185447916000916128f790846130e0565b61290191906130ff565b905060006016546017548461291691906130e0565b61292091906130ff565b905060006016546019548561293591906130e0565b61293f91906130ff565b600d546040519192506001600160a01b0316908290600081818185875af1925050503d806000811461298d576040519150601f19603f3d011682016040523d82523d6000602084013e612992565b606091505b5050600e546040519196506001600160a01b0316908490600081818185875af1925050503d80600081146129e2576040519150601f19603f3d011682016040523d82523d6000602084013e6129e7565b606091505b5050600c546040519196506001600160a01b0316908390600081818185875af1925050503d8060008114612a37576040519150601f19603f3d011682016040523d82523d6000602084013e612a3c565b606091505b5050505050505050565b6001600160a01b0382166000908152602160205260409020805460ff1916821515179055611afa8282612d23565b6001600160a01b038316612a9a5760405162461bcd60e51b8152600401610ad590613139565b6001600160a01b038216612ac05760405162461bcd60e51b8152600401610ad59061317e565b6001600160a01b03831660009081526020819052604090205481811015612b385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ad5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612b6f908490613121565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bbb91815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bfe57612bfe613001565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7b9190612fe4565b81600181518110612c8e57612c8e613001565b6001600160a01b039283166020918202929092010152600954612cb49130911684611eb2565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ced9085906000908690309042906004016131d8565b600060405180830381600087803b158015612d0757600080fd5b505af1158015612d1b573d6000803e3d6000fd5b505050505050565b6001600160a01b03821660008181526020808052604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101610cec565b600060208284031215612d8f57600080fd5b5035919050565b600060208083528351808285015260005b81811015612dc357858101830151858201604001528201612da7565b81811115612dd5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461101c57600080fd5b60008060408385031215612e1357600080fd5b8235612e1e81612deb565b946020939093013593505050565b600060208284031215612e3e57600080fd5b8135612e4981612deb565b9392505050565b600080600060608486031215612e6557600080fd5b8335612e7081612deb565b92506020840135612e8081612deb565b929592945050506040919091013590565b60008060408385031215612ea457600080fd5b8235612eaf81612deb565b915060208301358015158114612ec457600080fd5b809150509250929050565b600080600060608486031215612ee457600080fd5b8335612eef81612deb565b92506020840135612eff81612deb565b91506040840135612f0f81612deb565b809150509250925092565b600080600060608486031215612f2f57600080fd5b833560ff81168114612f4057600080fd5b95602085013595506040909401359392505050565b60008060408385031215612f6857600080fd5b8235612f7381612deb565b91506020830135612ec481612deb565b600080600060608486031215612f9857600080fd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612ff657600080fd5b8151612e4981612deb565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156130505781516001600160a01b03168752958201959082019060010161302b565b509495945050505050565b8481526080602082015260006130746080830186613017565b6001600160a01b03949094166040830152506060015292915050565b600181811c908216806130a457607f821691505b6020821081036130c457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156130fa576130fa6130ca565b500290565b60008261311c57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613134576131346130ca565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156131d3576131d36130ca565b500390565b85815284602082015260a0604082015260006131f760a0830186613017565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122040aca830399f9d9cc4ec9d0048b586afea3f3525efa7c375051fe00efb1dc90e64736f6c634300080f0033

Deployed Bytecode Sourcemap

9604:17466:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10592:28;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;10592:28:0;;;;;;;;26396:671;;;;;;;;;;-1:-1:-1;26396:671:0;;;;;:::i;:::-;;:::i;:::-;;2987:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9751:27::-;;;;;;;;;;-1:-1:-1;9751:27:0;;;;-1:-1:-1;;;;;9751:27:0;;;;;;-1:-1:-1;;;;;1165:32:1;;;1147:51;;1135:2;1120:18;9751:27:0;983:221:1;4042:210:0;;;;;;;;;;-1:-1:-1;4042:210:0;;;;;:::i;:::-;;:::i;:::-;;;1830:14:1;;1823:22;1805:41;;1793:2;1778:18;4042:210:0;1665:187:1;10992:63:0;;;;;;;;;;-1:-1:-1;10992:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14279:176;;;;;;;;;;;;;:::i;3308:108::-;;;;;;;;;;-1:-1:-1;3396:12:0;;3308:108;;16936:321;;;;;;;;;;-1:-1:-1;16936:321:0;;;;;:::i;:::-;;:::i;15563:296::-;;;;;;;;;;-1:-1:-1;15563:296:0;;;;;:::i;:::-;;:::i;4260:529::-;;;;;;;;;;-1:-1:-1;4260:529:0;;;;;:::i;:::-;;:::i;3207:93::-;;;;;;;;;;-1:-1:-1;3207:93:0;;3290:2;2712:36:1;;2700:2;2685:18;3207:93:0;2570:184:1;10555:30:0;;;;;;;;;;;;;;;;4797:297;;;;;;;;;;-1:-1:-1;4797:297:0;;;;;:::i;:::-;;:::i;17622:302::-;;;;;;;;;;-1:-1:-1;17622:302:0;;;;;:::i;:::-;;:::i;10174:33::-;;;;;;;;;;-1:-1:-1;10174:33:0;;;;;;;;26115:178;;;;;;;;;;;;;:::i;16299:308::-;;;;;;;;;;-1:-1:-1;16299:308:0;;;;;:::i;:::-;;:::i;23966:121::-;;;;;;;;;;-1:-1:-1;24061:18:0;;24046:12;:33;23966:121;;9680:27;;;;;;;;;;;;;;;;9647:26;;;;;;;;;;;;;;;;10140:25;;;;;;;;;;;;;;;;10254:31;;;;;;;;;;-1:-1:-1;10254:31:0;;;;;;;;;;;3424:177;;;;;;;;;;-1:-1:-1;3424:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;3575:18:0;3543:7;3575:18;;;;;;;;;;;;3424:177;8076:150;;;;;;;;;;;;;:::i;15911:154::-;;;;;;;;;;;;;:::i;13945:326::-;;;;;;;;;;-1:-1:-1;13945:326:0;;;;;:::i;:::-;;:::i;10090:43::-;;;;;;;;;;-1:-1:-1;10090:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25543:520;;;;;;;;;;-1:-1:-1;25543:520:0;;;;;:::i;:::-;;:::i;7862:79::-;;;;;;;;;;-1:-1:-1;7927:6:0;;-1:-1:-1;;;;;7927:6:0;7862:79;;9714:28;;;;;;;;;;;;;;;;10520;;;;;;;;;;;;;;;;16615:313;;;;;;;;;;-1:-1:-1;16615:313:0;;;;;:::i;:::-;;:::i;3095:104::-;;;;;;;;;;;;;:::i;10735:29::-;;;;;;;;;;;;;;;;10696:32;;;;;;;;;;;;;;;;5102:482;;;;;;;;;;-1:-1:-1;5102:482:0;;;;;:::i;:::-;;:::i;10050:33::-;;;;;;;;;;;;;;;;3609:216;;;;;;;;;;-1:-1:-1;3609:216:0;;;;;:::i;:::-;;:::i;14463:1092::-;;;;;;;;;;-1:-1:-1;14463:1092:0;;;;;:::i;:::-;;:::i;17932:244::-;;;;;;;;;;-1:-1:-1;17932:244:0;;;;;:::i;:::-;;:::i;10627:24::-;;;;;;;;;;;;;;;;11213:57;;;;;;;;;;-1:-1:-1;11213:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16073:112;;;;;;;;;;-1:-1:-1;16073:112:0;;;;;:::i;:::-;;:::i;10214:33::-;;;;;;;;;;-1:-1:-1;10214:33:0;;;;;;;;;;;10771:25;;;;;;;;;;;;;;;;10660:29;;;;;;;;;;;;;;;;10472:39;;;;;;;;;;-1:-1:-1;10472:39:0;;;;;;;;17265:121;;;;;;;;;;-1:-1:-1;17265:121:0;;;;;:::i;:::-;;:::i;3833:201::-;;;;;;;;;;-1:-1:-1;3833:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;3999:18:0;;;3967:7;3999:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3833:201;19027:184;;;;;;;;;;-1:-1:-1;19027:184:0;;;;;:::i;:::-;;:::i;9844:33::-;;;;;;;;;;;;;;;;16193:98;;;;;;;;;;;;;:::i;9973:37::-;;;;;;;;;;;;;;;;9785:22;;;;;;;;;;-1:-1:-1;9785:22:0;;;;-1:-1:-1;;;;;9785:22:0;;;18427:592;;;;;;;;;;-1:-1:-1;18427:592:0;;;;;:::i;:::-;;:::i;8234:281::-;;;;;;;;;;-1:-1:-1;8234:281:0;;;;;:::i;:::-;;:::i;25350:185::-;;;;;;;;;;;;;:::i;10803:41::-;;;;;;;;;;-1:-1:-1;10803:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26396:671;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;;;;;;;;;26501:8:::1;26486:11;:23;;26464:144;;;::::0;-1:-1:-1;;;26464:144:0;;5609:2:1;26464:144:0::1;::::0;::::1;5591:21:1::0;5648:2;5628:18;;;5621:30;5687:34;5667:18;;;5660:62;5758:34;5738:18;;;5731:62;-1:-1:-1;;;5809:19:1;;;5802:38;5857:19;;26464:144:0::1;5407:475:1::0;26464:144:0::1;26645:16;::::0;;26659:1:::1;26645:16:::0;;;;;::::1;::::0;;26621:21:::1;::::0;26645:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;26682:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;26682:16:0;;;;26621:40;;-1:-1:-1;;;;;;26682:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;26682:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26672:4;26677:1;26672:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;26672:26:0::1;;;-1:-1:-1::0;;;;;26672:26:0::1;;;::::0;::::1;26727:4;26709;26714:1;26709:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26709:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26771:9:::1;::::0;:243:::1;::::0;-1:-1:-1;;;26771:243:0;;:9;::::1;::::0;:60:::1;::::0;26853:11;;26771:243:::1;::::0;:9:::1;::::0;26939:4;;26966:6:::1;::::0;26988:15:::1;::::0;26771:243:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27030:29;27047:11;27030:29;;;;160:25:1::0;;148:2;133:18;;14:177;27030:29:0::1;;;;;;;;26453:614;26396:671:::0;:::o;2987:100::-;3041:13;3074:5;3067:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2987:100;:::o;4042:210::-;4161:4;4183:39;1288:10;4206:7;4215:6;4183:8;:39::i;:::-;-1:-1:-1;4240:4:0;4042:210;;;;:::o;14279:176::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;14343:13:::1;::::0;::::1;::::0;::::1;;;14335:50;;;::::0;-1:-1:-1;;;14335:50:0;;7975:2:1;14335:50:0::1;::::0;::::1;7957:21:1::0;8014:2;7994:18;;;7987:30;8053:26;8033:18;;;8026:54;8097:18;;14335:50:0::1;7773:348:1::0;14335:50:0::1;14396:13;:21:::0;;-1:-1:-1;;14428:19:0;;;14279:176::o;16936:321::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;17074:4:::1;17066;17045:13;3396:12:::0;;;3308:108;17045:13:::1;:17;::::0;17061:1:::1;17045:17;:::i;:::-;17044:26;;;;:::i;:::-;17043:35;;;;:::i;:::-;17031:8;:47;;17009:141;;;::::0;-1:-1:-1;;;17009:141:0;;8855:2:1;17009:141:0::1;::::0;::::1;8837:21:1::0;8894:2;8874:18;;;8867:30;8933:34;8913:18;;;8906:62;-1:-1:-1;;;8984:18:1;;;8977:42;9036:19;;17009:141:0::1;8653:408:1::0;17009:141:0::1;17177:19;:8:::0;17189:6:::1;17177:19;:::i;:::-;17161:13;:35:::0;;;17212:37:::1;::::0;160:25:1;;;17212:37:0::1;::::0;148:2:1;133:18;17212:37:0::1;;;;;;;;16936:321:::0;:::o;15563:296::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15645:31:0;::::1;15637:64;;;::::0;-1:-1:-1;;;15637:64:0;;9268:2:1;15637:64:0::1;::::0;::::1;9250:21:1::0;9307:2;9287:18;;;9280:30;-1:-1:-1;;;9326:18:1;;;9319:50;9386:18;;15637:64:0::1;9066:344:1::0;15637:64:0::1;-1:-1:-1::0;;;;;15718:19:0;::::1;;::::0;;;:9:::1;:19;::::0;;;;;::::1;;15714:138;;;-1:-1:-1::0;;;;;15754:19:0::1;15776:5;15754:19:::0;;;:9:::1;:19;::::0;;;;:27;;-1:-1:-1;;15754:27:0::1;::::0;;15563:296::o;15714:138::-:1;-1:-1:-1::0;;;;;15814:19:0;::::1;;::::0;;;:9:::1;:19;::::0;;;;:26;;-1:-1:-1;;15814:26:0::1;15836:4;15814:26;::::0;;15714:138:::1;15563:296:::0;:::o;4260:529::-;4400:4;4417:36;4427:6;4435:9;4446:6;4417:9;:36::i;:::-;-1:-1:-1;;;;;4493:19:0;;4466:24;4493:19;;;:11;:19;;;;;;;;1288:10;4493:33;;;;;;;;4559:26;;;;4537:116;;;;-1:-1:-1;;;4537:116:0;;9617:2:1;4537:116:0;;;9599:21:1;9656:2;9636:18;;;9629:30;9695:34;9675:18;;;9668:62;-1:-1:-1;;;9746:18:1;;;9739:38;9794:19;;4537:116:0;9415:404:1;4537:116:0;4689:57;4698:6;1288:10;4739:6;4720:16;:25;4689:8;:57::i;:::-;-1:-1:-1;4777:4:0;;4260:529;-1:-1:-1;;;;4260:529:0:o;4797:297::-;1288:10;4912:4;5006:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5006:34:0;;;;;;;;;;4912:4;;4934:130;;4984:7;;5006:47;;5043:10;;5006:47;:::i;:::-;4934:8;:130::i;17622:302::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;17709:4:::1;17704:156;;17766:7;::::0;-1:-1:-1;;;;;17766:7:0;;::::1;17756:17:::0;;::::1;::::0;17730:118:::1;;;::::0;-1:-1:-1;;;17730:118:0;;10159:2:1;17730:118:0::1;::::0;::::1;10141:21:1::0;10198:2;10178:18;;;10171:30;10237:34;10217:18;;;10210:62;-1:-1:-1;;;10288:18:1;;;10281:37;10335:19;;17730:118:0::1;9957:403:1::0;17730:118:0::1;-1:-1:-1::0;;;;;17870:39:0;;;::::1;;::::0;;;:31:::1;:39:::0;;;;;:46;;-1:-1:-1;;17870:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17622:302::o;26115:178::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;26170:8:::1;:15:::0;;-1:-1:-1;;;;26170:15:0::1;-1:-1:-1::0;;;26170:15:0::1;::::0;;26196:10:::1;:8;:10::i;:::-;26217:8;:16:::0;;-1:-1:-1;;;;26217:16:0::1;::::0;;26249:36:::1;::::0;26269:15:::1;160:25:1::0;;26249:36:0::1;::::0;148:2:1;133:18;26249:36:0::1;;;;;;;26115:178::o:0;16299:308::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;16434:4:::1;16426;16405:13;3396:12:::0;;;3308:108;16405:13:::1;:17;::::0;16421:1:::1;16405:17;:::i;:::-;16404:26;;;;:::i;:::-;16403:35;;;;:::i;:::-;16391:8;:47;;16369:138;;;::::0;-1:-1:-1;;;16369:138:0;;10567:2:1;16369:138:0::1;::::0;::::1;10549:21:1::0;10606:2;10586:18;;;10579:30;10645:34;10625:18;;;10618:62;-1:-1:-1;;;10696:18:1;;;10689:39;10745:19;;16369:138:0::1;10365:405:1::0;16369:138:0::1;16532:19;:8:::0;16544:6:::1;16532:19;:::i;:::-;16518:11;:33:::0;;;16567:32:::1;::::0;160:25:1;;;16567:32:0::1;::::0;148:2:1;133:18;16567:32:0::1;14:177:1::0;8076:150:0;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;8169:6:::1;::::0;8148:40:::1;::::0;8185:1:::1;::::0;-1:-1:-1;;;;;8169:6:0::1;::::0;8148:40:::1;::::0;8185:1;;8148:40:::1;8199:6;:19:::0;;-1:-1:-1;;;;;;8199:19:0::1;::::0;;8076:150::o;15911:154::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;15965:14:::1;:22:::0;;-1:-1:-1;;15965:22:0;;::::1;::::0;;;15998:20:::1;:28:::0;;;;::::1;::::0;;16042:15:::1;::::0;::::1;::::0;15982:5:::1;::::0;16042:15:::1;15911:154::o:0;13945:326::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;14028:13:::1;::::0;::::1;::::0;::::1;;;14027:14;14019:50;;;::::0;-1:-1:-1;;;14019:50:0;;10977:2:1;14019:50:0::1;::::0;::::1;10959:21:1::0;11016:2;10996:18;;;10989:30;11055:25;11035:18;;;11028:53;11098:18;;14019:50:0::1;10775:347:1::0;14019:50:0::1;14080:13;:20:::0;;-1:-1:-1;;14111:18:0;;;;;14161:12:::1;14140:18;:33:::0;;;14205:32:::1;::::0;14226:11;;14205:32:::1;:::i;:::-;14184:18;:53:::0;14253:10:::1;::::0;::::1;::::0;;;::::1;13945:326:::0;:::o;25543:520::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25727:31:0;::::1;::::0;;::::1;::::0;:77:::1;;-1:-1:-1::0;;;;;;25779:25:0;::::1;::::0;::::1;25727:77;:127;;;;-1:-1:-1::0;;;;;;25825:29:0;::::1;::::0;::::1;25727:127;25705:198;;;::::0;-1:-1:-1;;;25705:198:0;;11329:2:1;25705:198:0::1;::::0;::::1;11311:21:1::0;11368:2;11348:18;;;11341:30;-1:-1:-1;;;11387:18:1;;;11380:51;11448:18;;25705:198:0::1;11127:345:1::0;25705:198:0::1;25914:16;:45:::0;;-1:-1:-1;;;;;25914:45:0;;::::1;-1:-1:-1::0;;;;;;25914:45:0;;::::1;;::::0;;;25970:10:::1;:33:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26014:14:::1;:41:::0;;;;;::::1;::::0;::::1;;::::0;;25543:520::o;16615:313::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;16751:4:::1;16743;16722:13;3396:12:::0;;;3308:108;16722:13:::1;:17;::::0;16738:1:::1;16722:17;:::i;:::-;16721:26;;;;:::i;:::-;16720:35;;;;:::i;:::-;16708:8;:47;;16686:139;;;::::0;-1:-1:-1;;;16686:139:0;;11679:2:1;16686:139:0::1;::::0;::::1;11661:21:1::0;11718:2;11698:18;;;11691:30;11757:34;11737:18;;;11730:62;-1:-1:-1;;;11808:18:1;;;11801:40;11858:19;;16686:139:0::1;11477:406:1::0;16686:139:0::1;16851:19;:8:::0;16863:6:::1;16851:19;:::i;:::-;16836:12;:34:::0;;;16886::::1;::::0;160:25:1;;;16886:34:0::1;::::0;148:2:1;133:18;16886:34:0::1;14:177:1::0;3095:104:0;3151:13;3184:7;3177:14;;;;;:::i;5102:482::-;1288:10;5222:4;5271:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5271:34:0;;;;;;;;;;5338:35;;;;5316:122;;;;-1:-1:-1;;;5316:122:0;;12090:2:1;5316:122:0;;;12072:21:1;12129:2;12109:18;;;12102:30;12168:34;12148:18;;;12141:62;-1:-1:-1;;;12219:18:1;;;12212:35;12264:19;;5316:122:0;11888:401:1;5316:122:0;5474:67;1288:10;5497:7;5525:15;5506:16;:34;5474:8;:67::i;:::-;-1:-1:-1;5572:4:0;;5102:482;-1:-1:-1;;;5102:482:0:o;3609:216::-;3731:4;3753:42;1288:10;3777:9;3788:6;3753:9;:42::i;14463:1092::-;14745:22;;;;;;;;;;;-1:-1:-1;;;14745:22:0;;;;;14797:10;;;;;;;;;;-1:-1:-1;;;14797:10:0;;;;14592:295;;14621:95;14592:295;;;12553:25:1;;;;14735:33:0;12594:18:1;;;12587:34;;;;14787:21:0;12637:18:1;;;12630:34;14827:13:0;12680:18:1;;;12673:34;14867:4:0;12723:19:1;;;12716:61;-1:-1:-1;;12525:19:1;;14592:295:0;;;;;;-1:-1:-1;;14592:295:0;;;;;;14568:330;;14592:295;14568:330;;;;15063:23;;;;;;;;-1:-1:-1;;;15063:23:0;;;;;;;14956:175;;14985:49;14956:175;;;12990:25:1;;;;15053:34:0;13031:18:1;;;13024:34;;;;-1:-1:-1;13074:18:1;;;13067:34;;;14568:330:0;;-1:-1:-1;12963:18:1;;14956:175:0;;;;;;;;;;;;14932:210;;;;;;14911:231;;15155:14;15260:10;15289;15196:134;;;;;;;;-1:-1:-1;;;13370:27:1;;13422:1;13413:11;;13406:27;;;;13458:2;13449:12;;13442:28;13495:2;13486:12;;13112:392;15196:134:0;;;;-1:-1:-1;;15196:134:0;;;;;;;;;15172:169;;15196:134;15172:169;;;;15354:14;15371:26;;;;;;;;;13736:25:1;;;13809:4;13797:17;;13777:18;;;13770:45;;;;13831:18;;;13824:34;;;13874:18;;;13867:34;;;15172:169:0;;-1:-1:-1;15354:14:0;15371:26;;13708:19:1;;15371:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15354:43;;15426:7;7927:6;;-1:-1:-1;;;;;7927:6:0;;7862:79;15426:7;-1:-1:-1;;;;;15416:17:0;:6;-1:-1:-1;;;;;15416:17:0;;15408:47;;;;-1:-1:-1;;;15408:47:0;;14114:2:1;15408:47:0;;;14096:21:1;14153:2;14133:18;;;14126:30;-1:-1:-1;;;14172:18:1;;;14165:47;14229:18;;15408:47:0;13912:341:1;15408:47:0;15468:13;:20;;-1:-1:-1;;15499:18:0;;;;;15535:10;;;;-1:-1:-1;;15535:10:0;14536:1019;;;;14463:1092;;;:::o;17932:244::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;18020:7:::1;::::0;-1:-1:-1;;;;;18020:7:0;;::::1;18012:15:::0;;::::1;::::0;18004:54:::1;;;::::0;-1:-1:-1;;;18004:54:0;;14460:2:1;18004:54:0::1;::::0;::::1;14442:21:1::0;14499:2;14479:18;;;14472:30;14538:28;14518:18;;;14511:56;14584:18;;18004:54:0::1;14258:350:1::0;18004:54:0::1;18071:41;18100:4;18106:5;18071:28;:41::i;:::-;18128:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18128:40:0;::::1;::::0;::::1;::::0;;;::::1;17932:244:::0;;:::o;16073:112::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16151:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;16151:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16073:112::o;17265:121::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;17348:18:::1;:30:::0;17265:121::o;19027:184::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19112:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;;;;:40;;-1:-1:-1;;19112:40:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19168:35;;1805:41:1;;;19168:35:0::1;::::0;1778:18:1;19168:35:0::1;;;;;;;19027:184:::0;;:::o;16193:98::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;16255:20:::1;:28:::0;;-1:-1:-1;;16255:28:0::1;::::0;;16193:98::o;18427:592::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;18574:17:::1;:34:::0;;;18619:14:::1;:28:::0;;;18658:10:::1;:20:::0;;;18691:15:::1;:32:::0;;;18734:13:::1;:27:::0;;;18772:9:::1;:19:::0;;;18671:7;18820:31:::1;18636:11:::0;18594:14;18820:31:::1;:::i;:::-;:43;;;;:::i;:::-;18804:13;:59:::0;18928:10:::1;::::0;18911:14:::1;::::0;18891:17:::1;::::0;:34:::1;::::0;18911:14;18891:34:::1;:::i;:::-;:47;;;;:::i;:::-;18874:14;:64:::0;;;18975:2:::1;-1:-1:-1::0;18957:20:0::1;18949:62;;;::::0;-1:-1:-1;;;18949:62:0;;14815:2:1;18949:62:0::1;::::0;::::1;14797:21:1::0;14854:2;14834:18;;;14827:30;14893:31;14873:18;;;14866:59;14942:18;;18949:62:0::1;14613:353:1::0;18949:62:0::1;18427:592:::0;;;:::o;8234:281::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8337:22:0;::::1;8315:110;;;::::0;-1:-1:-1;;;8315:110:0;;15173:2:1;8315:110:0::1;::::0;::::1;15155:21:1::0;15212:2;15192:18;;;15185:30;15251:34;15231:18;;;15224:62;-1:-1:-1;;;15302:18:1;;;15295:36;15348:19;;8315:110:0::1;14971:402:1::0;8315:110:0::1;8462:6;::::0;8441:38:::1;::::0;-1:-1:-1;;;;;8441:38:0;;::::1;::::0;8462:6:::1;::::0;8441:38:::1;::::0;8462:6:::1;::::0;8441:38:::1;8490:6;:17:::0;;-1:-1:-1;;;;;;8490:17:0::1;-1:-1:-1::0;;;;;8490:17:0;;;::::1;::::0;;;::::1;::::0;;8234:281::o;25350:185::-;7989:6;;-1:-1:-1;;;;;7989:6:0;1288:10;7989:22;7981:67;;;;-1:-1:-1;;;7981:67:0;;;;;;;:::i;:::-;25445:82:::1;::::0;25408:12:::1;::::0;25453:10:::1;::::0;25477:21:::1;::::0;25408:12;25445:82;25408:12;25445:82;25477:21;25453:10;25445:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;25350:185:0:o;7131:380::-;-1:-1:-1;;;;;7267:19:0;;7259:68;;;;-1:-1:-1;;;7259:68:0;;15790:2:1;7259:68:0;;;15772:21:1;15829:2;15809:18;;;15802:30;15868:34;15848:18;;;15841:62;-1:-1:-1;;;15919:18:1;;;15912:34;15963:19;;7259:68:0;15588:400:1;7259:68:0;-1:-1:-1;;;;;7346:21:0;;7338:68;;;;-1:-1:-1;;;7338:68:0;;16195:2:1;7338:68:0;;;16177:21:1;16234:2;16214:18;;;16207:30;16273:34;16253:18;;;16246:62;-1:-1:-1;;;16324:18:1;;;16317:32;16366:19;;7338:68:0;15993:398:1;7338:68:0;-1:-1:-1;;;;;7419:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7471:32;;160:25:1;;;7471:32:0;;133:18:1;7471:32:0;;;;;;;7131:380;;;:::o;19219:4739::-;-1:-1:-1;;;;;19351:18:0;;19343:68;;;;-1:-1:-1;;;19343:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19430:16:0;;19422:64;;;;-1:-1:-1;;;19422:64:0;;;;;;;:::i;:::-;19514:1;19505:6;:10;19497:52;;;;-1:-1:-1;;;19497:52:0;;17408:2:1;19497:52:0;;;17390:21:1;17447:2;17427:18;;;17420:30;17486:31;17466:18;;;17459:59;17535:18;;19497:52:0;17206:353:1;19497:52:0;-1:-1:-1;;;;;19569:15:0;;;;;;:9;:15;;;;;;;;19568:16;:34;;;;-1:-1:-1;;;;;;19589:13:0;;;;;;:9;:13;;;;;;;;19588:14;19568:34;19560:70;;;;-1:-1:-1;;;19560:70:0;;17766:2:1;19560:70:0;;;17748:21:1;17805:2;17785:18;;;17778:30;17844:25;17824:18;;;17817:53;17887:18;;19560:70:0;17564:347:1;19560:70:0;19648:13;;;;;;;19643:185;;-1:-1:-1;;;;;19704:26:0;;;;;;:20;:26;;;;;;;;;:54;;-1:-1:-1;;;;;;19734:24:0;;;;;;:20;:24;;;;;;;;19704:54;19678:138;;;;-1:-1:-1;;;19678:138:0;;18118:2:1;19678:138:0;;;18100:21:1;18157:2;18137:18;;;18130:30;-1:-1:-1;;;18176:18:1;;;18169:52;18238:18;;19678:138:0;17916:346:1;19678:138:0;19844:18;;:22;19840:247;;-1:-1:-1;;;;;19910:17:0;;;;;;:11;:17;;;;;;;;19909:18;;:35;;-1:-1:-1;7927:6:0;;-1:-1:-1;;;;;19931:13:0;;;7927:6;;19931:13;19909:35;:60;;;-1:-1:-1;;;;;;19948:21:0;;19962:6;19948:21;19909:60;19883:192;;;;-1:-1:-1;;;19883:192:0;;18469:2:1;19883:192:0;;;18451:21:1;18508:2;18488:18;;;18481:30;18547:34;18527:18;;;18520:62;18618:34;18598:18;;;18591:62;-1:-1:-1;;;18669:19:1;;;18662:37;18716:19;;19883:192:0;18267:474:1;19883:192:0;20103:14;;;;20099:1970;;;7927:6;;-1:-1:-1;;;;;20156:15:0;;;7927:6;;20156:15;;;;:49;;-1:-1:-1;7927:6:0;;-1:-1:-1;;;;;20192:13:0;;;7927:6;;20192:13;;20156:49;:86;;;;-1:-1:-1;;;;;;20226:16:0;;;;20156:86;:128;;;;-1:-1:-1;;;;;;20263:21:0;;20277:6;20263:21;;20156:128;:176;;;;-1:-1:-1;;;;;;20306:26:0;;;;;;:20;:26;;;;;;;;20305:27;20156:176;:222;;;;-1:-1:-1;;;;;;20354:24:0;;;;;;:20;:24;;;;;;;;20353:25;20156:222;20134:1924;;;20549:20;;;;20545:327;;;20612:9;;-1:-1:-1;;;;;20598:24:0;;;20612:9;;20598:24;;;;:50;;-1:-1:-1;20640:7:0;;-1:-1:-1;;;;;20626:22:0;;;20640:7;;20626:22;;20598:50;20594:259;;;20730:9;20701:39;;;;:28;:39;;;;;;20743:12;20701:54;;;;-1:-1:-1;;;;;20782:32:0;;;;;;:47;20594:259;-1:-1:-1;;;;;20946:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;21003:35:0;;;;;;:31;:35;;;;;;;;21002:36;20946:92;20920:1123;;;21125:11;;21115:6;:21;;21081:147;;;;-1:-1:-1;;;21081:147:0;;18948:2:1;21081:147:0;;;18930:21:1;18987:2;18967:18;;;18960:30;19026:34;19006:18;;;18999:62;-1:-1:-1;;;19077:18:1;;;19070:38;19125:19;;21081:147:0;18746:404:1;21081:147:0;21311:13;;-1:-1:-1;;;;;3575:18:0;;3543:7;3575:18;;;;;;;;;;;21285:22;;:6;:22;:::i;:::-;:39;;21251:149;;;;-1:-1:-1;;;21251:149:0;;19357:2:1;21251:149:0;;;19339:21:1;19396:2;19376:18;;;19369:30;-1:-1:-1;;;19415:18:1;;;19408:54;19479:18;;21251:149:0;19155:348:1;21251:149:0;20920:1123;;;-1:-1:-1;;;;;21498:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;21553:37:0;;;;;;:31;:37;;;;;;;;21552:38;21498:92;21472:571;;;21677:12;;21667:6;:22;;21633:150;;;;-1:-1:-1;;;21633:150:0;;19710:2:1;21633:150:0;;;19692:21:1;19749:2;19729:18;;;19722:30;19788:34;19768:18;;;19761:62;-1:-1:-1;;;19839:18:1;;;19832:40;19889:19;;21633:150:0;19508:406:1;21472:571:0;-1:-1:-1;;;;;21814:35:0;;;;;;:31;:35;;;;;;;;21809:234;;21934:13;;-1:-1:-1;;;;;3575:18:0;;3543:7;3575:18;;;;;;;;;;;21908:22;;:6;:22;:::i;:::-;:39;;21874:149;;;;-1:-1:-1;;;21874:149:0;;19357:2:1;21874:149:0;;;19339:21:1;19396:2;19376:18;;;19369:30;-1:-1:-1;;;19415:18:1;;;19408:54;19479:18;;21874:149:0;19155:348:1;21874:149:0;22130:4;22081:28;3575:18;;;;;;;;;;;22188;;22164:42;;;;;;;22237:35;;-1:-1:-1;22261:11:0;;;;;;;22237:35;:61;;;;-1:-1:-1;22290:8:0;;-1:-1:-1;;;22290:8:0;;;;22289:9;22237:61;:110;;;;-1:-1:-1;;;;;;22316:31:0;;;;;;:25;:31;;;;;;;;22315:32;22237:110;:154;;;;-1:-1:-1;;;;;;22365:26:0;;;;;;:20;:26;;;;;;;;22364:27;22237:154;:196;;;;-1:-1:-1;;;;;;22409:24:0;;;;;;:20;:24;;;;;;;;22408:25;22237:196;22219:328;;;22460:8;:15;;-1:-1:-1;;;;22460:15:0;-1:-1:-1;;;22460:15:0;;;22492:10;:8;:10::i;:::-;22519:8;:16;;-1:-1:-1;;;;22519:16:0;;;22219:328;-1:-1:-1;;;;;22678:26:0;;22559:12;22678:26;;;:20;:26;;;;;;22574:4;;22678:26;;;:54;;-1:-1:-1;;;;;;22708:24:0;;;;;;:20;:24;;;;;;;;22678:54;22674:102;;;-1:-1:-1;22759:5:0;22674:102;22788:12;22893:7;22889:1016;;;24061:18;;24046:12;:33;22975:77;;;;-1:-1:-1;;;;;;23021:31:0;;;;;;:25;:31;;;;;;;;22975:77;:128;;;;-1:-1:-1;;;;;;23074:29:0;;;;;;:25;:29;;;;;;;;23073:30;22975:128;:166;;;;;23140:1;23124:13;;:17;22975:166;22953:803;;;-1:-1:-1;;;;;23181:15:0;;;;;;:11;:15;;;;;;;;23176:173;;-1:-1:-1;;;;;23221:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;23221:22:0;23239:4;23221:22;;;;;;23266:10;:15;;23239:4;;23266:10;;:15;;23239:4;;23266:15;:::i;:::-;;;;-1:-1:-1;;23309:20:0;;-1:-1:-1;;;;;1165:32:1;;1147:51;;23309:20:0;;1135:2:1;1120:18;23309:20:0;;;;;;;23176:173;23392:3;23377:11;:6;23386:2;23377:11;:::i;:::-;23376:19;;;;:::i;:::-;23369:26;;22953:803;;;-1:-1:-1;;;;;23458:29:0;;;;;;:25;:29;;;;;;;;:51;;;;;23508:1;23491:14;;:18;23458:51;23454:302;;;23565:3;23547:14;;23538:6;:23;;;;:::i;23454:302::-;-1:-1:-1;;;;;23630:31:0;;;;;;:25;:31;;;;;;;;:52;;;;;23681:1;23665:13;;:17;23630:52;23626:130;;;23737:3;23720:13;;23711:6;:22;;;;:::i;:::-;23710:30;;;;:::i;:::-;23703:37;;23626:130;23776:8;;23772:91;;23805:42;23821:4;23835;23842;23805:15;:42::i;:::-;23879:14;23889:4;23879:14;;:::i;:::-;;;22889:1016;23917:33;23933:4;23939:2;23943:6;23917:15;:33::i;:::-;19332:4626;;;;19219:4739;;;:::o;24674:668::-;24713:12;24736:36;24753:18;;24736:16;:36::i;:::-;24893:13;;24876;;24806:21;;24785:18;;24863:26;;24806:21;24863:26;:::i;:::-;24862:44;;;;:::i;:::-;24838:68;;24917:24;24990:13;;24958:15;;24945:10;:28;;;;:::i;:::-;24944:59;;;;:::i;:::-;24917:86;;25014:17;25061:13;;25048:9;;25035:10;:22;;;;:::i;:::-;25034:40;;;;:::i;:::-;25109:10;;25101:46;;25014:60;;-1:-1:-1;;;;;;25109:10:0;;25014:60;;25101:46;;;;25014:60;25109:10;25101:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25180:14:0;;25172:54;;25087:60;;-1:-1:-1;;;;;;25180:14:0;;25208:13;;25172:54;;;;25208:13;25180:14;25172:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25259:16:0;;25251:83;;25158:68;;-1:-1:-1;;;;;;25259:16:0;;25289;;25251:83;;;;25289:16;25259;25251:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;24674:668:0:o;18184:235::-;-1:-1:-1;;;;;18267:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18267:39:0;;;;;;;18317:38;18267:31;:39;18317:25;:38::i;5592:651::-;-1:-1:-1;;;;;5732:20:0;;5724:70;;;;-1:-1:-1;;;5724:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5813:23:0;;5805:71;;;;-1:-1:-1;;;5805:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5913:17:0;;5889:21;5913:17;;;;;;;;;;;5963:23;;;;5941:111;;;;-1:-1:-1;;;5941:111:0;;20251:2:1;5941:111:0;;;20233:21:1;20290:2;20270:18;;;20263:30;20329:34;20309:18;;;20302:62;-1:-1:-1;;;20380:18:1;;;20373:36;20426:19;;5941:111:0;20049:402:1;5941:111:0;-1:-1:-1;;;;;6088:17:0;;;:9;:17;;;;;;;;;;;6108:22;;;6088:42;;6152:20;;;;;;;;:30;;6124:6;;6088:9;6152:30;;6124:6;;6152:30;:::i;:::-;;;;;;;;6217:9;-1:-1:-1;;;;;6200:35:0;6209:6;-1:-1:-1;;;;;6200:35:0;;6228:6;6200:35;;;;160:25:1;;148:2;133:18;;14:177;6200:35:0;;;;;;;;5713:530;5592:651;;;:::o;24095:571::-;24245:16;;;24259:1;24245:16;;;;;;;;24221:21;;24245:16;;;;;;;;;;-1:-1:-1;24245:16:0;24221:40;;24290:4;24272;24277:1;24272:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24272:23:0;;;:7;;;;;;;;;;:23;;;;24316:9;;:16;;;-1:-1:-1;;;24316:16:0;;;;:9;;;;;:14;;:16;;;;;24272:7;;24316:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24306:4;24311:1;24306:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24306:26:0;;;:7;;;;;;;;;:26;24377:9;;24345:56;;24362:4;;24377:9;24389:11;24345:8;:56::i;:::-;24440:9;;:218;;-1:-1:-1;;;24440:218:0;;-1:-1:-1;;;;;24440:9:0;;;;:60;;:218;;24515:11;;24440:9;;24585:4;;24612;;24632:15;;24440:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24150:516;24095:571;:::o;17394:220::-;-1:-1:-1;;;;;17495:39:0;;;;;;:31;:39;;;;;;;;:52;;-1:-1:-1;;17495:52:0;;;;;;;;;;17563:43;;21211:51:1;;;21278:18;;;21271:50;17563:43:0;;21184:18:1;17563:43:0;21043:284:1;196:180;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:597::-;493:4;522:2;551;540:9;533:21;583:6;577:13;626:6;621:2;610:9;606:18;599:34;651:1;661:140;675:6;672:1;669:13;661:140;;;770:14;;;766:23;;760:30;736:17;;;755:2;732:26;725:66;690:10;;661:140;;;819:6;816:1;813:13;810:91;;;889:1;884:2;875:6;864:9;860:22;856:31;849:42;810:91;-1:-1:-1;962:2:1;941:15;-1:-1:-1;;937:29:1;922:45;;;;969:2;918:54;;381:597;-1:-1:-1;;;381:597:1:o;1209:131::-;-1:-1:-1;;;;;1284:31:1;;1274:42;;1264:70;;1330:1;1327;1320:12;1345:315;1413:6;1421;1474:2;1462:9;1453:7;1449:23;1445:32;1442:52;;;1490:1;1487;1480:12;1442:52;1529:9;1516:23;1548:31;1573:5;1548:31;:::i;:::-;1598:5;1650:2;1635:18;;;;1622:32;;-1:-1:-1;;;1345:315:1:o;1857:247::-;1916:6;1969:2;1957:9;1948:7;1944:23;1940:32;1937:52;;;1985:1;1982;1975:12;1937:52;2024:9;2011:23;2043:31;2068:5;2043:31;:::i;:::-;2093:5;1857:247;-1:-1:-1;;;1857:247:1:o;2109:456::-;2186:6;2194;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;2310:9;2297:23;2329:31;2354:5;2329:31;:::i;:::-;2379:5;-1:-1:-1;2436:2:1;2421:18;;2408:32;2449:33;2408:32;2449:33;:::i;:::-;2109:456;;2501:7;;-1:-1:-1;;;2555:2:1;2540:18;;;;2527:32;;2109:456::o;2759:416::-;2824:6;2832;2885:2;2873:9;2864:7;2860:23;2856:32;2853:52;;;2901:1;2898;2891:12;2853:52;2940:9;2927:23;2959:31;2984:5;2959:31;:::i;:::-;3009:5;-1:-1:-1;3066:2:1;3051:18;;3038:32;3108:15;;3101:23;3089:36;;3079:64;;3139:1;3136;3129:12;3079:64;3162:7;3152:17;;;2759:416;;;;;:::o;3180:529::-;3257:6;3265;3273;3326:2;3314:9;3305:7;3301:23;3297:32;3294:52;;;3342:1;3339;3332:12;3294:52;3381:9;3368:23;3400:31;3425:5;3400:31;:::i;:::-;3450:5;-1:-1:-1;3507:2:1;3492:18;;3479:32;3520:33;3479:32;3520:33;:::i;:::-;3572:7;-1:-1:-1;3631:2:1;3616:18;;3603:32;3644:33;3603:32;3644:33;:::i;:::-;3696:7;3686:17;;;3180:529;;;;;:::o;3922:405::-;3997:6;4005;4013;4066:2;4054:9;4045:7;4041:23;4037:32;4034:52;;;4082:1;4079;4072:12;4034:52;4121:9;4108:23;4171:4;4164:5;4160:16;4153:5;4150:27;4140:55;;4191:1;4188;4181:12;4140:55;4214:5;4266:2;4251:18;;4238:32;;-1:-1:-1;4317:2:1;4302:18;;;4289:32;;3922:405;-1:-1:-1;;;3922:405:1:o;4332:388::-;4400:6;4408;4461:2;4449:9;4440:7;4436:23;4432:32;4429:52;;;4477:1;4474;4467:12;4429:52;4516:9;4503:23;4535:31;4560:5;4535:31;:::i;:::-;4585:5;-1:-1:-1;4642:2:1;4627:18;;4614:32;4655:33;4614:32;4655:33;:::i;4725:316::-;4802:6;4810;4818;4871:2;4859:9;4850:7;4846:23;4842:32;4839:52;;;4887:1;4884;4877:12;4839:52;-1:-1:-1;;4910:23:1;;;4980:2;4965:18;;4952:32;;-1:-1:-1;5031:2:1;5016:18;;;5003:32;;4725:316;-1:-1:-1;4725:316:1:o;5046:356::-;5248:2;5230:21;;;5267:18;;;5260:30;5326:34;5321:2;5306:18;;5299:62;5393:2;5378:18;;5046:356::o;6019:251::-;6089:6;6142:2;6130:9;6121:7;6117:23;6113:32;6110:52;;;6158:1;6155;6148:12;6110:52;6190:9;6184:16;6209:31;6234:5;6209:31;:::i;6275:127::-;6336:10;6331:3;6327:20;6324:1;6317:31;6367:4;6364:1;6357:15;6391:4;6388:1;6381:15;6407:461;6460:3;6498:5;6492:12;6525:6;6520:3;6513:19;6551:4;6580:2;6575:3;6571:12;6564:19;;6617:2;6610:5;6606:14;6638:1;6648:195;6662:6;6659:1;6656:13;6648:195;;;6727:13;;-1:-1:-1;;;;;6723:39:1;6711:52;;6783:12;;;;6818:15;;;;6759:1;6677:9;6648:195;;;-1:-1:-1;6859:3:1;;6407:461;-1:-1:-1;;;;;6407:461:1:o;6873:510::-;7144:6;7133:9;7126:25;7187:3;7182:2;7171:9;7167:18;7160:31;7107:4;7208:57;7260:3;7249:9;7245:19;7237:6;7208:57;:::i;:::-;-1:-1:-1;;;;;7301:32:1;;;;7296:2;7281:18;;7274:60;-1:-1:-1;7365:2:1;7350:18;7343:34;7200:65;6873:510;-1:-1:-1;;6873:510:1:o;7388:380::-;7467:1;7463:12;;;;7510;;;7531:61;;7585:4;7577:6;7573:17;7563:27;;7531:61;7638:2;7630:6;7627:14;7607:18;7604:38;7601:161;;7684:10;7679:3;7675:20;7672:1;7665:31;7719:4;7716:1;7709:15;7747:4;7744:1;7737:15;7601:161;;7388:380;;;:::o;8126:127::-;8187:10;8182:3;8178:20;8175:1;8168:31;8218:4;8215:1;8208:15;8242:4;8239:1;8232:15;8258:168;8298:7;8364:1;8360;8356:6;8352:14;8349:1;8346:21;8341:1;8334:9;8327:17;8323:45;8320:71;;;8371:18;;:::i;:::-;-1:-1:-1;8411:9:1;;8258:168::o;8431:217::-;8471:1;8497;8487:132;;8541:10;8536:3;8532:20;8529:1;8522:31;8576:4;8573:1;8566:15;8604:4;8601:1;8594:15;8487:132;-1:-1:-1;8633:9:1;;8431:217::o;9824:128::-;9864:3;9895:1;9891:6;9888:1;9885:13;9882:39;;;9901:18;;:::i;:::-;-1:-1:-1;9937:9:1;;9824:128::o;16396:401::-;16598:2;16580:21;;;16637:2;16617:18;;;16610:30;16676:34;16671:2;16656:18;;16649:62;-1:-1:-1;;;16742:2:1;16727:18;;16720:35;16787:3;16772:19;;16396:401::o;16802:399::-;17004:2;16986:21;;;17043:2;17023:18;;;17016:30;17082:34;17077:2;17062:18;;17055:62;-1:-1:-1;;;17148:2:1;17133:18;;17126:33;17191:3;17176:19;;16802:399::o;19919:125::-;19959:4;19987:1;19984;19981:8;19978:34;;;19992:18;;:::i;:::-;-1:-1:-1;20029:9:1;;19919:125::o;20456:582::-;20755:6;20744:9;20737:25;20798:6;20793:2;20782:9;20778:18;20771:34;20841:3;20836:2;20825:9;20821:18;20814:31;20718:4;20862:57;20914:3;20903:9;20899:19;20891:6;20862:57;:::i;:::-;-1:-1:-1;;;;;20955:32:1;;;;20950:2;20935:18;;20928:60;-1:-1:-1;21019:3:1;21004:19;20997:35;20854:65;20456:582;-1:-1:-1;;;20456:582:1:o

Swarm Source

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