ETH Price: $2,698.40 (-0.28%)
Gas: 0.94 Gwei

Token

Apu (APU)
 

Overview

Max Total Supply

420,696,969,696 APU

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
532,057,834.414716842290752078 APU

Value
$0.00
0xef55ee631b254f936c9526139d4f2cd0f8d65ad4
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:
Apu

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-20
*/

/*
 Website  : https://monkas.info/
 Telegram : https://t.me/monkaSerc
 Twitter  : https://twitter.com/monkaScoin
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

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 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

     /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address 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");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** This function will be used to generate the total supply
    * while deploying the contract
    *
    * This function can never be called again after deploying contract
    */
    function _tokengeneration(address account, uint256 amount) internal virtual {
        _totalSupply = amount;
        _balances[account] = amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0xdead), amount);

        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;
            // _balances[address(0xdead)] += amount;
        }

        emit Transfer(account, address(0xdead), amount);

        _afterTokenTransfer(account, address(0xdead), amount);
    }

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

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

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

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

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

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

    function WETH() external pure returns (address);

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

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

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

contract Apu is ERC20, ERC20Burnable, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool private _interlock = false;
    bool public providingLiquidity = true;
    bool public renounce = false;

    uint256 public launchedAtBlock;

    uint256 public tokenLiquidityThreshold = 4_206_969_696 * 10**decimals();
    uint256 public maxBuyLimit = 4_206_969_696 * 10**decimals();
    uint256 public maxSellLimit = 4_206_969_696 * 10**decimals();
    uint256 public maxWalletLimit = 8_413_939_393 * 10**decimals();

    address public marketingWallet = 0x9Fc24F66f65A907522185057e7311498770335B5;
	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
    }

    Taxes public taxes = Taxes(10, 0, 0);
    Taxes public sellTaxes = Taxes(30, 0, 0);
    Taxes public transferTaxes = Taxes(0, 0, 0);

    mapping(address => bool) public exemptFee;

    event LimitRemoved(uint256 maxBuy, uint256 maxSell, uint256 maxWallet);
    event BuyTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event SellTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event TransferTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event TaxesRemoved(uint256 marketing, uint256 liquidity, uint256 burn);

    modifier lockTheSwap() {
        if (!_interlock) {
            _interlock = true;
            _;
            _interlock = false;
        }
    }

    constructor() ERC20("Apu", "APU") {
        _tokengeneration(marketingWallet, 420_696_969_696 * 10**decimals());

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // uniswap V2
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[deadWallet] = true;
        exemptFee[msg.sender] = true;
        exemptFee[marketingWallet] = true;

        transferOwnership(marketingWallet);
    }

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

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

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

        return true;
    }

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

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

        return true;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");

        if (sender == pair && !exemptFee[recipient] && !_interlock) {
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(
                balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            sender != pair && !exemptFee[recipient] && !exemptFee[sender] && !_interlock
        ) {
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if (recipient != pair) {
                require(
                    balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        uint256 feeBurn;
        uint256 burnAmount;
        Taxes memory currentTaxes;

        //set fee to zero if fees in contract are handled or exempted
        if (_interlock || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == pair) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing;
            feesum = feeswap;
            feeBurn = sellTaxes.burn;
            currentTaxes = sellTaxes;
        } else if (sender == pair) {
            feeswap =
                taxes.liquidity +
                taxes.marketing;
            feesum = feeswap;
            feeBurn = taxes.burn;
            currentTaxes = taxes;
        } else {
            feeswap =
                transferTaxes.liquidity +
                transferTaxes.marketing ;
            feesum = feeswap;
            feeBurn = transferTaxes.burn;
            currentTaxes = transferTaxes;
        }

        fee = (amount * feesum) / 100;
        burnAmount = (amount * feeBurn) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair) Liquify(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - (fee + burnAmount));
        // burn the tokens
        if(burnAmount > 0) {
            super._burn(sender, burnAmount);
        }
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function Liquify(uint256 feeswap, Taxes memory swapTaxes) private lockTheSwap {

        if(feeswap == 0){
            return;
        }

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity to pancake
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the pancake pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        require(new_amount <= 15_000_000 && new_amount > 0, "Swap threshold amount should be lower or euqal to 1.5% of tokens");
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner {
        router = IRouter(newRouter);
        pair = newPair;
    }

    function updateWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != address(0),"Fee Address cannot be zero address");
        marketingWallet = _marketingWallet;
    }

    function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell, uint256 maxWallet) external onlyOwner {
        require(maxBuy >= 1_000_000, "Cannot set max buy amount lower than 0.1%");
        require(maxSell >= 1_000_000, "Cannot set max sell amount lower than 0.1%");
        require(maxWallet >= 5_000_000, "Cannot set max wallet amount lower than 0.5%");
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
        maxWalletLimit = maxWallet * 10**decimals(); 
    }

    function updateTax(uint256 _Buymarketing, uint256 _Sellmarketing) external onlyOwner {
        require (_Buymarketing <= 99);
        require (_Sellmarketing <= 99);
        taxes = Taxes(_Buymarketing, 0, 0);
        sellTaxes = Taxes(_Sellmarketing, 0, 0);
    }

    function renounced() external onlyOwner {
        require(!renounce, "Already employed!");
        maxBuyLimit = totalSupply();
        maxSellLimit = totalSupply();
        maxWalletLimit = totalSupply();

        taxes = Taxes(0, 0, 0);
        sellTaxes = Taxes(0, 0, 0);

        renounceOwnership();

        renounce = true;

        emit LimitRemoved(maxBuyLimit, maxSellLimit, maxWalletLimit);
        emit TaxesRemoved(0, 0, 0);
    }

    function rescueETH(uint256 weiAmount) external onlyOwner{
        payable(owner()).transfer(weiAmount);
    }

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

    // fallbacks
    receive() external payable {}
}

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":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"BuyTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"LimitRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"SellTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"TaxesRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"TransferTaxesUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"maxWalletLimit","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"providingLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounced","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLiquidityThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Buymarketing","type":"uint256"},{"internalType":"uint256","name":"_Sellmarketing","type":"uint256"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805462ffffff60a01b1916600160a81b17905562000022601290565b6200002f90600a62000698565b6200003f9063fac14360620006af565b600955620000506012600a62000698565b620000609063fac14360620006af565b600a5560126200007290600a62000698565b620000829063fac14360620006af565b600b55620000936012600a62000698565b620000a4906401f58286c1620006af565b600c55600d80546001600160a01b031916739fc24f66f65a907522185057e7311498770335b51790556040805160608082018352600a8083525f6020808501829052938501819052600e91909155600f819055601081905583518083018552601e80825281850183905290850182905260115560128190556013819055835191820184528082529181018290529091018190526014819055601581905560165534801562000150575f80fd5b506040518060400160405280600381526020016241707560e81b8152506040518060400160405280600381526020016241505560e81b81525081600390816200019a919062000769565b506004620001a9828262000769565b505050620001c6620001c06200040c60201b60201c565b62000410565b600d54620001fc906001600160a01b0316620001e56012600a62000698565b620001f6906461f37e51e0620006af565b62000461565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000252573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000278919062000831565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ea919062000831565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000335573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200035b919062000831565b600680546001600160a01b038086166001600160a01b031992831617909255600780548385169216919091179055305f90815260176020526040808220805460ff1990811660019081179092557f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b030380548216831790553384528284208054821683179055600d8054861685529290932080549093161790915554919250620004049116620004b4565b505062000859565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60028190556001600160a01b0382165f81815260208181526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620005145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0381166200057b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200050b565b620005868162000410565b50565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620005dd57815f1904821115620005c157620005c162000589565b80851615620005cf57918102915b93841c9390800290620005a2565b509250929050565b5f82620005f55750600162000692565b816200060357505f62000692565b81600181146200061c5760028114620006275762000647565b600191505062000692565b60ff8411156200063b576200063b62000589565b50506001821b62000692565b5060208310610133831016604e8410600b84101617156200066c575081810a62000692565b6200067883836200059d565b805f19048211156200068e576200068e62000589565b0290505b92915050565b5f620006a860ff841683620005e5565b9392505050565b808202811582820484141762000692576200069262000589565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620006f257607f821691505b6020821081036200071157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000764575f81815260208120601f850160051c810160208610156200073f5750805b601f850160051c820191505b8181101562000760578281556001016200074b565b5050505b505050565b81516001600160401b03811115620007855762000785620006c9565b6200079d81620007968454620006dd565b8462000717565b602080601f831160018114620007d3575f8415620007bb5750858301515b5f19600386901b1c1916600185901b17855562000760565b5f85815260208120601f198616915b828110156200080357888601518255948401946001909101908401620007e2565b50858210156200082157878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000842575f80fd5b81516001600160a01b0381168114620006a8575f80fd5b61247580620008675f395ff3fe608060405260043610610236575f3560e01c806379cc679011610129578063a9059cbb116100a8578063e1b450ad1161006d578063e1b450ad146106b6578063f2fde38b146106d5578063f66895a3146106f4578063f887ea4014610712578063fbe6324e14610731575f80fd5b8063a9059cbb146105f1578063b15be2f514610610578063c5d32bb214610630578063d232c2201461065e578063dd62ed3e14610672575f80fd5b80638de890bd116100ee5780638de890bd1461056b57806395d89b41146105805780639e252f0014610594578063a457c2d7146105b3578063a8aa1b31146105d2575f80fd5b806379cc6790146104dc578063848b86e3146104fb57806385141a771461051a5780638cd4426d1461052f5780638da5cb5b1461054e575f80fd5b806342966c68116101b55780636aa5b37f1161017a5780636aa5b37f1461042a57806370a082311461043f578063715018a614610473578063728f8eea1461048757806375f0a874146104a5575f80fd5b806342966c681461038957806342b6fa11146103a85780635331803c146103c7578063652e2f041461040057806366a88d9614610415575f80fd5b806323b872dd116101fb57806323b872dd146102f25780632f37aa6d14610311578063313ce56714610330578063395093511461034b57806340b28c2f1461036a575f80fd5b806306fdde0314610241578063095ea7b31461026b5780631340538f1461029a5780631675d802146102bb57806318160ddd146102de575f80fd5b3661023d57005b5f80fd5b34801561024c575f80fd5b50610255610751565b6040516102629190611fe8565b60405180910390f35b348015610276575f80fd5b5061028a610285366004612047565b6107e1565b6040519015158152602001610262565b3480156102a5575f80fd5b506102b96102b436600461207e565b6107f7565b005b3480156102c6575f80fd5b506102d060095481565b604051908152602001610262565b3480156102e9575f80fd5b506002546102d0565b3480156102fd575f80fd5b5061028a61030c3660046120a0565b610848565b34801561031c575f80fd5b506102b961032b3660046120de565b6108f7565b34801561033b575f80fd5b5060405160128152602001610262565b348015610356575f80fd5b5061028a610365366004612047565b610989565b348015610375575f80fd5b506102b96103843660046120fe565b6109bf565b348015610394575f80fd5b506102b96103a3366004612135565b610a17565b3480156103b3575f80fd5b506102b96103c2366004612135565b610a24565b3480156103d2575f80fd5b506014546015546016546103e592919083565b60408051938452602084019290925290820152606001610262565b34801561040b575f80fd5b506102d0600b5481565b348015610420575f80fd5b506102d0600c5481565b348015610435575f80fd5b506102d0600a5481565b34801561044a575f80fd5b506102d061045936600461214c565b6001600160a01b03165f9081526020819052604090205490565b34801561047e575f80fd5b506102b9610af0565b348015610492575f80fd5b50600e54600f546010546103e592919083565b3480156104b0575f80fd5b50600d546104c4906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b3480156104e7575f80fd5b506102b96104f6366004612047565b610b25565b348015610506575f80fd5b506102b961051536600461214c565b610b3e565b348015610525575f80fd5b506104c461dead81565b34801561053a575f80fd5b506102b9610549366004612047565b610beb565b348015610559575f80fd5b506005546001600160a01b03166104c4565b348015610576575f80fd5b506102d060085481565b34801561058b575f80fd5b50610255610ca9565b34801561059f575f80fd5b506102b96105ae366004612135565b610cb8565b3480156105be575f80fd5b5061028a6105cd366004612047565b610d19565b3480156105dd575f80fd5b506007546104c4906001600160a01b031681565b3480156105fc575f80fd5b5061028a61060b366004612047565b610db3565b34801561061b575f80fd5b5060075461028a90600160b01b900460ff1681565b34801561063b575f80fd5b5061028a61064a36600461214c565b60176020525f908152604090205460ff1681565b348015610669575f80fd5b506102b9610dbf565b34801561067d575f80fd5b506102d061068c3660046120fe565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156106c1575f80fd5b506102b96106d0366004612167565b610f3d565b3480156106e0575f80fd5b506102b96106ef36600461214c565b6110eb565b3480156106ff575f80fd5b506011546012546013546103e592919083565b34801561071d575f80fd5b506006546104c4906001600160a01b031681565b34801561073c575f80fd5b5060075461028a90600160a81b900460ff1681565b60606003805461076090612190565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90612190565b80156107d75780601f106107ae576101008083540402835291602001916107d7565b820191905f5260205f20905b8154815290600101906020018083116107ba57829003601f168201915b5050505050905090565b5f6107ed338484611183565b5060015b92915050565b6005546001600160a01b0316331461082a5760405162461bcd60e51b8152600401610821906121c8565b60405180910390fd5b60078054911515600160a81b0260ff60a81b19909216919091179055565b5f6108548484846112a6565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156108d85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610821565b6108ec85336108e78685612211565b611183565b506001949350505050565b6005546001600160a01b031633146109215760405162461bcd60e51b8152600401610821906121c8565b606382111561092e575f80fd5b606381111561093b575f80fd5b60408051606080820183528482525f6020808401829052928401819052600e95909555600f859055601085905582519081018352838152908101849052018290526011556012819055601355565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107ed9185906108e7908690612224565b6005546001600160a01b031633146109e95760405162461bcd60e51b8152600401610821906121c8565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b610a2133826117b4565b50565b6005546001600160a01b03163314610a4e5760405162461bcd60e51b8152600401610821906121c8565b62e4e1c08111158015610a6057505f81115b610ad4576040805162461bcd60e51b81526020600482015260248101919091527f53776170207468726573686f6c6420616d6f756e742073686f756c642062652060448201527f6c6f776572206f7220657571616c20746f20312e3525206f6620746f6b656e736064820152608401610821565b610ae06012600a612317565b610aea9082612325565b60095550565b6005546001600160a01b03163314610b1a5760405162461bcd60e51b8152600401610821906121c8565b610b235f6118e8565b565b610b30823383611939565b610b3a82826117b4565b5050565b6005546001600160a01b03163314610b685760405162461bcd60e51b8152600401610821906121c8565b6001600160a01b038116610bc95760405162461bcd60e51b815260206004820152602260248201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604482015261737360f01b6064820152608401610821565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c155760405162461bcd60e51b8152600401610821906121c8565b816001600160a01b031663a9059cbb610c366005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610c80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca4919061233c565b505050565b60606004805461076090612190565b6005546001600160a01b03163314610ce25760405162461bcd60e51b8152600401610821906121c8565b6005546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610b3a573d5f803e3d5ffd5b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610d9a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610821565b610da933856108e78685612211565b5060019392505050565b5f6107ed3384846112a6565b6005546001600160a01b03163314610de95760405162461bcd60e51b8152600401610821906121c8565b600754600160b01b900460ff1615610e375760405162461bcd60e51b8152602060048201526011602482015270416c726561647920656d706c6f7965642160781b6044820152606401610821565b600254600a55600254600b55600254600c5560408051606080820183525f8083526020808401829052928401819052600e819055600f81905560108190558351918201845280825291810182905290910181905260118190556012819055601355610ea0610af0565b6007805460ff60b01b1916600160b01b179055600a54600b54600c54604080519384526020840192909252908201527f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d359060600160405180910390a1604080515f808252602082018190528183015290517f2862e186e6f0269fce86721e7c136c9a03d0672316fb9a878885a07f0a2b09289181900360600190a1565b6005546001600160a01b03163314610f675760405162461bcd60e51b8152600401610821906121c8565b620f4240831015610fcc5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610821565b620f42408210156110325760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610821565b624c4b4081101561109a5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610821565b6110a66012600a612317565b6110b09084612325565b600a5560126110c090600a612317565b6110ca9083612325565b600b556110d96012600a612317565b6110e39082612325565b600c55505050565b6005546001600160a01b031633146111155760405162461bcd60e51b8152600401610821906121c8565b6001600160a01b03811661117a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610821565b610a21816118e8565b6001600160a01b0383166111e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610821565b6001600160a01b0382166112465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610821565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f81116113075760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610821565b6007546001600160a01b03848116911614801561133c57506001600160a01b0382165f9081526017602052604090205460ff16155b80156113525750600754600160a01b900460ff16155b1561142357600a548111156113a95760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610821565b600c54816113cb846001600160a01b03165f9081526020819052604090205490565b6113d59190612224565b11156114235760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610821565b6007546001600160a01b0384811691161480159061145957506001600160a01b0382165f9081526017602052604090205460ff16155b801561147d57506001600160a01b0383165f9081526017602052604090205460ff16155b80156114935750600754600160a01b900460ff16155b1561157957600b548111156114ea5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610821565b6007546001600160a01b0383811691161461157957600c5481611521846001600160a01b03165f9081526020819052604090205490565b61152b9190612224565b11156115795760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610821565b5f805f805f61159f60405180606001604052805f81526020015f81526020015f81525090565b600754600160a01b900460ff16806115ce57506001600160a01b0389165f9081526017602052604090205460ff165b806115f057506001600160a01b0388165f9081526017602052604090205460ff165b156115fd575f93506116e2565b6007546001600160a01b0390811690891603611652576011546012546116239190612224565b6013546040805160608101825260115481526012546020820152908101829052919750879650935090506116e2565b6007546001600160a01b03908116908a16036116a757600e54600f546116789190612224565b60105460408051606081018252600e548152600f546020820152908101829052919750879650935090506116e2565b6014546015546116b79190612224565b6016546040805160608101825260145481526015546020820152908101829052919750879650935090505b60646116ee8689612325565b6116f89190612357565b935060646117068489612325565b6117109190612357565b600754909250600160a81b900460ff16801561173a57506007546001600160a01b038a8116911614155b156117495761174986826119c9565b61176789896117588588612224565b611762908b612211565b611afe565b81156117775761177789836117b4565b83156117a95785156117a9575f6064611790888a612325565b61179a9190612357565b90506117a78a3083611afe565b505b505050505050505050565b6001600160a01b0382166118145760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610821565b6001600160a01b0382165f90815260208190526040902054818110156118875760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610821565b6001600160a01b0383165f81815260208181526040918290208585039055600280548690039055905184815261dead92917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146119c357818110156119b65760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610821565b6119c38484848403611183565b50505050565b600754600160a01b900460ff16610b3a576007805460ff60a01b1916600160a01b1790558115611aed57305f908152602081905260409020546009548110611aeb5760016009541115611a1b57506009545b5f611a27846002612325565b90505f81846020015184611a3b9190612325565b611a459190612357565b90505f611a528285612211565b905047611a5e82611cd4565b5f611a698247612211565b90505f876020015186611a7c9190612211565b611a869083612357565b90505f886020015182611a999190612325565b90508015611aab57611aab8682611e24565b88515f90611aba846002612325565b611ac49190612325565b90508015611ae257600d54611ae2906001600160a01b031682611ed3565b50505050505050505b505b6007805460ff60a01b191690555050565b6001600160a01b038316611b625760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610821565b6001600160a01b038216611bc45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610821565b6001600160a01b0383165f9081526020819052604090205481811015611c3b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610821565b611c458282612211565b6001600160a01b038086165f908152602081905260408082209390935590851681529081208054849290611c7a908490612224565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cc691815260200190565b60405180910390a350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611d0757611d07612376565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d82919061238a565b81600181518110611d9557611d95612376565b6001600160a01b039283166020918202929092010152600654611dbb9130911684611183565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611df39085905f908690309042906004016123a5565b5f604051808303815f87803b158015611e0a575f80fd5b505af1158015611e1c573d5f803e3d5ffd5b505050505050565b600654611e3c9030906001600160a01b031684611183565b60065460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611ea7573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ecc9190612414565b5050505050565b80471015611f235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610821565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611f6c576040519150601f19603f3d011682016040523d82523d5f602084013e611f71565b606091505b5050905080610ca45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610821565b5f6020808352835180828501525f5b8181101561201357858101830151858201604001528201611ff7565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a21575f80fd5b5f8060408385031215612058575f80fd5b823561206381612033565b946020939093013593505050565b8015158114610a21575f80fd5b5f6020828403121561208e575f80fd5b813561209981612071565b9392505050565b5f805f606084860312156120b2575f80fd5b83356120bd81612033565b925060208401356120cd81612033565b929592945050506040919091013590565b5f80604083850312156120ef575f80fd5b50508035926020909101359150565b5f806040838503121561210f575f80fd5b823561211a81612033565b9150602083013561212a81612033565b809150509250929050565b5f60208284031215612145575f80fd5b5035919050565b5f6020828403121561215c575f80fd5b813561209981612033565b5f805f60608486031215612179575f80fd5b505081359360208301359350604090920135919050565b600181811c908216806121a457607f821691505b6020821081036121c257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156107f1576107f16121fd565b808201808211156107f1576107f16121fd565b600181815b8085111561227157815f1904821115612257576122576121fd565b8085161561226457918102915b93841c939080029061223c565b509250929050565b5f82612287575060016107f1565b8161229357505f6107f1565b81600181146122a957600281146122b3576122cf565b60019150506107f1565b60ff8411156122c4576122c46121fd565b50506001821b6107f1565b5060208310610133831016604e8410600b84101617156122f2575081810a6107f1565b6122fc8383612237565b805f190482111561230f5761230f6121fd565b029392505050565b5f61209960ff841683612279565b80820281158282048414176107f1576107f16121fd565b5f6020828403121561234c575f80fd5b815161209981612071565b5f8261237157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561239a575f80fd5b815161209981612033565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156123f35784516001600160a01b0316835293830193918301916001016123ce565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612426575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e09227631038fab39c253724930868059d53c0b7e3e6dc1fa480e0cb14d51ec964736f6c63430008140033

Deployed Bytecode

0x608060405260043610610236575f3560e01c806379cc679011610129578063a9059cbb116100a8578063e1b450ad1161006d578063e1b450ad146106b6578063f2fde38b146106d5578063f66895a3146106f4578063f887ea4014610712578063fbe6324e14610731575f80fd5b8063a9059cbb146105f1578063b15be2f514610610578063c5d32bb214610630578063d232c2201461065e578063dd62ed3e14610672575f80fd5b80638de890bd116100ee5780638de890bd1461056b57806395d89b41146105805780639e252f0014610594578063a457c2d7146105b3578063a8aa1b31146105d2575f80fd5b806379cc6790146104dc578063848b86e3146104fb57806385141a771461051a5780638cd4426d1461052f5780638da5cb5b1461054e575f80fd5b806342966c68116101b55780636aa5b37f1161017a5780636aa5b37f1461042a57806370a082311461043f578063715018a614610473578063728f8eea1461048757806375f0a874146104a5575f80fd5b806342966c681461038957806342b6fa11146103a85780635331803c146103c7578063652e2f041461040057806366a88d9614610415575f80fd5b806323b872dd116101fb57806323b872dd146102f25780632f37aa6d14610311578063313ce56714610330578063395093511461034b57806340b28c2f1461036a575f80fd5b806306fdde0314610241578063095ea7b31461026b5780631340538f1461029a5780631675d802146102bb57806318160ddd146102de575f80fd5b3661023d57005b5f80fd5b34801561024c575f80fd5b50610255610751565b6040516102629190611fe8565b60405180910390f35b348015610276575f80fd5b5061028a610285366004612047565b6107e1565b6040519015158152602001610262565b3480156102a5575f80fd5b506102b96102b436600461207e565b6107f7565b005b3480156102c6575f80fd5b506102d060095481565b604051908152602001610262565b3480156102e9575f80fd5b506002546102d0565b3480156102fd575f80fd5b5061028a61030c3660046120a0565b610848565b34801561031c575f80fd5b506102b961032b3660046120de565b6108f7565b34801561033b575f80fd5b5060405160128152602001610262565b348015610356575f80fd5b5061028a610365366004612047565b610989565b348015610375575f80fd5b506102b96103843660046120fe565b6109bf565b348015610394575f80fd5b506102b96103a3366004612135565b610a17565b3480156103b3575f80fd5b506102b96103c2366004612135565b610a24565b3480156103d2575f80fd5b506014546015546016546103e592919083565b60408051938452602084019290925290820152606001610262565b34801561040b575f80fd5b506102d0600b5481565b348015610420575f80fd5b506102d0600c5481565b348015610435575f80fd5b506102d0600a5481565b34801561044a575f80fd5b506102d061045936600461214c565b6001600160a01b03165f9081526020819052604090205490565b34801561047e575f80fd5b506102b9610af0565b348015610492575f80fd5b50600e54600f546010546103e592919083565b3480156104b0575f80fd5b50600d546104c4906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b3480156104e7575f80fd5b506102b96104f6366004612047565b610b25565b348015610506575f80fd5b506102b961051536600461214c565b610b3e565b348015610525575f80fd5b506104c461dead81565b34801561053a575f80fd5b506102b9610549366004612047565b610beb565b348015610559575f80fd5b506005546001600160a01b03166104c4565b348015610576575f80fd5b506102d060085481565b34801561058b575f80fd5b50610255610ca9565b34801561059f575f80fd5b506102b96105ae366004612135565b610cb8565b3480156105be575f80fd5b5061028a6105cd366004612047565b610d19565b3480156105dd575f80fd5b506007546104c4906001600160a01b031681565b3480156105fc575f80fd5b5061028a61060b366004612047565b610db3565b34801561061b575f80fd5b5060075461028a90600160b01b900460ff1681565b34801561063b575f80fd5b5061028a61064a36600461214c565b60176020525f908152604090205460ff1681565b348015610669575f80fd5b506102b9610dbf565b34801561067d575f80fd5b506102d061068c3660046120fe565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156106c1575f80fd5b506102b96106d0366004612167565b610f3d565b3480156106e0575f80fd5b506102b96106ef36600461214c565b6110eb565b3480156106ff575f80fd5b506011546012546013546103e592919083565b34801561071d575f80fd5b506006546104c4906001600160a01b031681565b34801561073c575f80fd5b5060075461028a90600160a81b900460ff1681565b60606003805461076090612190565b80601f016020809104026020016040519081016040528092919081815260200182805461078c90612190565b80156107d75780601f106107ae576101008083540402835291602001916107d7565b820191905f5260205f20905b8154815290600101906020018083116107ba57829003601f168201915b5050505050905090565b5f6107ed338484611183565b5060015b92915050565b6005546001600160a01b0316331461082a5760405162461bcd60e51b8152600401610821906121c8565b60405180910390fd5b60078054911515600160a81b0260ff60a81b19909216919091179055565b5f6108548484846112a6565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156108d85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610821565b6108ec85336108e78685612211565b611183565b506001949350505050565b6005546001600160a01b031633146109215760405162461bcd60e51b8152600401610821906121c8565b606382111561092e575f80fd5b606381111561093b575f80fd5b60408051606080820183528482525f6020808401829052928401819052600e95909555600f859055601085905582519081018352838152908101849052018290526011556012819055601355565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107ed9185906108e7908690612224565b6005546001600160a01b031633146109e95760405162461bcd60e51b8152600401610821906121c8565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b610a2133826117b4565b50565b6005546001600160a01b03163314610a4e5760405162461bcd60e51b8152600401610821906121c8565b62e4e1c08111158015610a6057505f81115b610ad4576040805162461bcd60e51b81526020600482015260248101919091527f53776170207468726573686f6c6420616d6f756e742073686f756c642062652060448201527f6c6f776572206f7220657571616c20746f20312e3525206f6620746f6b656e736064820152608401610821565b610ae06012600a612317565b610aea9082612325565b60095550565b6005546001600160a01b03163314610b1a5760405162461bcd60e51b8152600401610821906121c8565b610b235f6118e8565b565b610b30823383611939565b610b3a82826117b4565b5050565b6005546001600160a01b03163314610b685760405162461bcd60e51b8152600401610821906121c8565b6001600160a01b038116610bc95760405162461bcd60e51b815260206004820152602260248201527f46656520416464726573732063616e6e6f74206265207a65726f206164647265604482015261737360f01b6064820152608401610821565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c155760405162461bcd60e51b8152600401610821906121c8565b816001600160a01b031663a9059cbb610c366005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610c80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca4919061233c565b505050565b60606004805461076090612190565b6005546001600160a01b03163314610ce25760405162461bcd60e51b8152600401610821906121c8565b6005546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610b3a573d5f803e3d5ffd5b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610d9a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610821565b610da933856108e78685612211565b5060019392505050565b5f6107ed3384846112a6565b6005546001600160a01b03163314610de95760405162461bcd60e51b8152600401610821906121c8565b600754600160b01b900460ff1615610e375760405162461bcd60e51b8152602060048201526011602482015270416c726561647920656d706c6f7965642160781b6044820152606401610821565b600254600a55600254600b55600254600c5560408051606080820183525f8083526020808401829052928401819052600e819055600f81905560108190558351918201845280825291810182905290910181905260118190556012819055601355610ea0610af0565b6007805460ff60b01b1916600160b01b179055600a54600b54600c54604080519384526020840192909252908201527f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d359060600160405180910390a1604080515f808252602082018190528183015290517f2862e186e6f0269fce86721e7c136c9a03d0672316fb9a878885a07f0a2b09289181900360600190a1565b6005546001600160a01b03163314610f675760405162461bcd60e51b8152600401610821906121c8565b620f4240831015610fcc5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610821565b620f42408210156110325760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610821565b624c4b4081101561109a5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610821565b6110a66012600a612317565b6110b09084612325565b600a5560126110c090600a612317565b6110ca9083612325565b600b556110d96012600a612317565b6110e39082612325565b600c55505050565b6005546001600160a01b031633146111155760405162461bcd60e51b8152600401610821906121c8565b6001600160a01b03811661117a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610821565b610a21816118e8565b6001600160a01b0383166111e55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610821565b6001600160a01b0382166112465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610821565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f81116113075760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610821565b6007546001600160a01b03848116911614801561133c57506001600160a01b0382165f9081526017602052604090205460ff16155b80156113525750600754600160a01b900460ff16155b1561142357600a548111156113a95760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610821565b600c54816113cb846001600160a01b03165f9081526020819052604090205490565b6113d59190612224565b11156114235760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610821565b6007546001600160a01b0384811691161480159061145957506001600160a01b0382165f9081526017602052604090205460ff16155b801561147d57506001600160a01b0383165f9081526017602052604090205460ff16155b80156114935750600754600160a01b900460ff16155b1561157957600b548111156114ea5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610821565b6007546001600160a01b0383811691161461157957600c5481611521846001600160a01b03165f9081526020819052604090205490565b61152b9190612224565b11156115795760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610821565b5f805f805f61159f60405180606001604052805f81526020015f81526020015f81525090565b600754600160a01b900460ff16806115ce57506001600160a01b0389165f9081526017602052604090205460ff165b806115f057506001600160a01b0388165f9081526017602052604090205460ff165b156115fd575f93506116e2565b6007546001600160a01b0390811690891603611652576011546012546116239190612224565b6013546040805160608101825260115481526012546020820152908101829052919750879650935090506116e2565b6007546001600160a01b03908116908a16036116a757600e54600f546116789190612224565b60105460408051606081018252600e548152600f546020820152908101829052919750879650935090506116e2565b6014546015546116b79190612224565b6016546040805160608101825260145481526015546020820152908101829052919750879650935090505b60646116ee8689612325565b6116f89190612357565b935060646117068489612325565b6117109190612357565b600754909250600160a81b900460ff16801561173a57506007546001600160a01b038a8116911614155b156117495761174986826119c9565b61176789896117588588612224565b611762908b612211565b611afe565b81156117775761177789836117b4565b83156117a95785156117a9575f6064611790888a612325565b61179a9190612357565b90506117a78a3083611afe565b505b505050505050505050565b6001600160a01b0382166118145760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610821565b6001600160a01b0382165f90815260208190526040902054818110156118875760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610821565b6001600160a01b0383165f81815260208181526040918290208585039055600280548690039055905184815261dead92917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146119c357818110156119b65760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610821565b6119c38484848403611183565b50505050565b600754600160a01b900460ff16610b3a576007805460ff60a01b1916600160a01b1790558115611aed57305f908152602081905260409020546009548110611aeb5760016009541115611a1b57506009545b5f611a27846002612325565b90505f81846020015184611a3b9190612325565b611a459190612357565b90505f611a528285612211565b905047611a5e82611cd4565b5f611a698247612211565b90505f876020015186611a7c9190612211565b611a869083612357565b90505f886020015182611a999190612325565b90508015611aab57611aab8682611e24565b88515f90611aba846002612325565b611ac49190612325565b90508015611ae257600d54611ae2906001600160a01b031682611ed3565b50505050505050505b505b6007805460ff60a01b191690555050565b6001600160a01b038316611b625760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610821565b6001600160a01b038216611bc45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610821565b6001600160a01b0383165f9081526020819052604090205481811015611c3b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610821565b611c458282612211565b6001600160a01b038086165f908152602081905260408082209390935590851681529081208054849290611c7a908490612224565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cc691815260200190565b60405180910390a350505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611d0757611d07612376565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d82919061238a565b81600181518110611d9557611d95612376565b6001600160a01b039283166020918202929092010152600654611dbb9130911684611183565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611df39085905f908690309042906004016123a5565b5f604051808303815f87803b158015611e0a575f80fd5b505af1158015611e1c573d5f803e3d5ffd5b505050505050565b600654611e3c9030906001600160a01b031684611183565b60065460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611ea7573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ecc9190612414565b5050505050565b80471015611f235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610821565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611f6c576040519150601f19603f3d011682016040523d82523d5f602084013e611f71565b606091505b5050905080610ca45760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610821565b5f6020808352835180828501525f5b8181101561201357858101830151858201604001528201611ff7565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a21575f80fd5b5f8060408385031215612058575f80fd5b823561206381612033565b946020939093013593505050565b8015158114610a21575f80fd5b5f6020828403121561208e575f80fd5b813561209981612071565b9392505050565b5f805f606084860312156120b2575f80fd5b83356120bd81612033565b925060208401356120cd81612033565b929592945050506040919091013590565b5f80604083850312156120ef575f80fd5b50508035926020909101359150565b5f806040838503121561210f575f80fd5b823561211a81612033565b9150602083013561212a81612033565b809150509250929050565b5f60208284031215612145575f80fd5b5035919050565b5f6020828403121561215c575f80fd5b813561209981612033565b5f805f60608486031215612179575f80fd5b505081359360208301359350604090920135919050565b600181811c908216806121a457607f821691505b6020821081036121c257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b818103818111156107f1576107f16121fd565b808201808211156107f1576107f16121fd565b600181815b8085111561227157815f1904821115612257576122576121fd565b8085161561226457918102915b93841c939080029061223c565b509250929050565b5f82612287575060016107f1565b8161229357505f6107f1565b81600181146122a957600281146122b3576122cf565b60019150506107f1565b60ff8411156122c4576122c46121fd565b50506001821b6107f1565b5060208310610133831016604e8410600b84101617156122f2575081810a6107f1565b6122fc8383612237565b805f190482111561230f5761230f6121fd565b029392505050565b5f61209960ff841683612279565b80820281158282048414176107f1576107f16121fd565b5f6020828403121561234c575f80fd5b815161209981612071565b5f8261237157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561239a575f80fd5b815161209981612033565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156123f35784516001600160a01b0316835293830193918301916001016123ce565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612426575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e09227631038fab39c253724930868059d53c0b7e3e6dc1fa480e0cb14d51ec964736f6c63430008140033

Deployed Bytecode Sourcemap

15999:11416:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2497:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18201:161;;;;;;;;;;-1:-1:-1;18201:161:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;18201:161:0;1023:187:1;24981:152:0;;;;;;;;;;-1:-1:-1;24981:152:0;;;;;:::i;:::-;;:::i;:::-;;16308:71;;;;;;;;;;;;;;;;;;;1730:25:1;;;1718:2;1703:18;16308:71:0;1584:177:1;3617:108:0;;;;;;;;;;-1:-1:-1;3705:12:0;;3617:108;;18370:448;;;;;;;;;;-1:-1:-1;18370:448:0;;;;;:::i;:::-;;:::i;26360:269::-;;;;;;;;;;-1:-1:-1;26360:269:0;;;;;:::i;:::-;;:::i;3459:93::-;;;;;;;;;;-1:-1:-1;3459:93:0;;3542:2;2622:36:1;;2610:2;2595:18;3459:93:0;2480:184:1;18826:248:0;;;;;;;;;;-1:-1:-1;18826:248:0;;;;;:::i;:::-;;:::i;25456:155::-;;;;;;;;;;-1:-1:-1;25456:155:0;;;;;:::i;:::-;;:::i;15418:91::-;;;;;;;;;;-1:-1:-1;15418:91:0;;;;;:::i;:::-;;:::i;25141:307::-;;;;;;;;;;-1:-1:-1;25141:307:0;;;;;:::i;:::-;;:::i;16955:43::-;;;;;;;;;;-1:-1:-1;16955:43:0;;;;;;;;;;;;;;;;3449:25:1;;;3505:2;3490:18;;3483:34;;;;3533:18;;;3526:34;3437:2;3422:18;16955:43:0;3247:319:1;16452:60:0;;;;;;;;;;;;;;;;16519:62;;;;;;;;;;;;;;;;16386:59;;;;;;;;;;;;;;;;3788:127;;;;;;;;;;-1:-1:-1;3788:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3889:18:0;3862:7;3889:18;;;;;;;;;;;;3788:127;13702:94;;;;;;;;;;;;;:::i;16865:36::-;;;;;;;;;;-1:-1:-1;16865:36:0;;;;;;;;;;;;16590:75;;;;;;;;;;-1:-1:-1;16590:75:0;;;;-1:-1:-1;;;;;16590:75:0;;;;;;-1:-1:-1;;;;;3987:32:1;;;3969:51;;3957:2;3942:18;16590:75:0;3823:203:1;15828:164:0;;;;;;;;;;-1:-1:-1;15828:164:0;;;;;:::i;:::-;;:::i;25619:207::-;;;;;;;;;;-1:-1:-1;25619:207:0;;;;;:::i;:::-;;:::i;16669:79::-;;;;;;;;;;;;16706:42;16669:79;;27222:135;;;;;;;;;;-1:-1:-1;27222:135:0;;;;;:::i;:::-;;:::i;13479:87::-;;;;;;;;;;-1:-1:-1;13552:6:0;;-1:-1:-1;;;;;13552:6:0;13479:87;;16269:30;;;;;;;;;;;;;;;;2716:104;;;;;;;;;;;;;:::i;27103:111::-;;;;;;;;;;-1:-1:-1;27103:111:0;;;;;:::i;:::-;;:::i;19082:410::-;;;;;;;;;;-1:-1:-1;19082:410:0;;;;;:::i;:::-;;:::i;16122:19::-;;;;;;;;;;-1:-1:-1;16122:19:0;;;;-1:-1:-1;;;;;16122:19:0;;;19500:165;;;;;;;;;;-1:-1:-1;19500:165:0;;;;;:::i;:::-;;:::i;16232:28::-;;;;;;;;;;-1:-1:-1;16232:28:0;;;;-1:-1:-1;;;16232:28:0;;;;;;17007:41;;;;;;;;;;-1:-1:-1;17007:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26637:458;;;;;;;;;;;;;:::i;4407:201::-;;;;;;;;;;-1:-1:-1;4407:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;4573:18:0;;;4541:7;4573:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4407:201;25834:518;;;;;;;;;;-1:-1:-1;25834:518:0;;;;;:::i;:::-;;:::i;13804:192::-;;;;;;;;;;-1:-1:-1;13804:192:0;;;;;:::i;:::-;;:::i;16908:40::-;;;;;;;;;;-1:-1:-1;16908:40:0;;;;;;;;;;;;16094:21;;;;;;;;;;-1:-1:-1;16094:21:0;;;;-1:-1:-1;;;;;16094:21:0;;;16188:37;;;;;;;;;;-1:-1:-1;16188:37:0;;;;-1:-1:-1;;;16188:37:0;;;;;;2497:100;2551:13;2584:5;2577:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2497:100;:::o;18201:161::-;18276:4;18293:39;299:10;18316:7;18325:6;18293:8;:39::i;:::-;-1:-1:-1;18350:4:0;18201:161;;;;;:::o;24981:152::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;;;;;;;;;25099:18:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;25099:26:0::1;-1:-1:-1::0;;;;25099:26:0;;::::1;::::0;;;::::1;::::0;;24981:152::o;18370:448::-;18502:4;18519:36;18529:6;18537:9;18548:6;18519:9;:36::i;:::-;-1:-1:-1;;;;;18595:19:0;;18568:24;18595:19;;;:11;:19;;;;;;;;299:10;18595:33;;;;;;;;18647:26;;;;18639:79;;;;-1:-1:-1;;;18639:79:0;;5523:2:1;18639:79:0;;;5505:21:1;5562:2;5542:18;;;5535:30;5601:34;5581:18;;;5574:62;-1:-1:-1;;;5652:18:1;;;5645:38;5700:19;;18639:79:0;5321:404:1;18639:79:0;18729:57;18738:6;299:10;18760:25;18779:6;18760:16;:25;:::i;:::-;18729:8;:57::i;:::-;-1:-1:-1;18806:4:0;;18370:448;-1:-1:-1;;;;18370:448:0:o;26360:269::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;26482:2:::1;26465:13;:19;;26456:29;;;::::0;::::1;;26523:2;26505:14;:20;;26496:30;;;::::0;::::1;;26545:26;::::0;;::::1;::::0;;::::1;::::0;;;;;-1:-1:-1;26545:26:0::1;::::0;;::::1;::::0;;;;;;;;;26537:5:::1;:34:::0;;;;;;;;;;;;26594:27;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;26582:9:::1;:39:::0;;;;;;;26360:269::o;18826:248::-;299:10;18942:4;18996:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18996:34:0;;;;;;;;;;18942:4;;18964:80;;18987:7;;18996:47;;19033:10;;18996:47;:::i;25456:155::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;25551:6:::1;:27:::0;;-1:-1:-1;;;;;25551:27:0;;::::1;-1:-1:-1::0;;;;;;25551:27:0;;::::1;;::::0;;;25589:4:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;25456:155::o;15418:91::-;15474:27;299:10;15494:6;15474:5;:27::i;:::-;15418:91;:::o;25141:307::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;25279:10:::1;25265;:24;;:42;;;;;25306:1;25293:10;:14;25265:42;25257:119;;;::::0;;-1:-1:-1;;;25257:119:0;;6327:2:1;25257:119:0::1;::::0;::::1;6309:21:1::0;6346:18;;;6339:30;;;;6405:34;6385:18;;;6378:62;6476:34;6456:18;;;6449:62;6528:19;;25257:119:0::1;6125:428:1::0;25257:119:0::1;25426:14;3542:2:::0;25426::::1;:14;:::i;:::-;25413:27;::::0;:10;:27:::1;:::i;:::-;25387:23;:53:::0;-1:-1:-1;25141:307:0:o;13702:94::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;13767:21:::1;13785:1;13767:9;:21::i;:::-;13702:94::o:0;15828:164::-;15905:46;15921:7;299:10;15944:6;15905:15;:46::i;:::-;15962:22;15968:7;15977:6;15962:5;:22::i;:::-;15828:164;;:::o;25619:207::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25705:30:0;::::1;25697:76;;;::::0;-1:-1:-1;;;25697:76:0;;8316:2:1;25697:76:0::1;::::0;::::1;8298:21:1::0;8355:2;8335:18;;;8328:30;8394:34;8374:18;;;8367:62;-1:-1:-1;;;8445:18:1;;;8438:32;8487:19;;25697:76:0::1;8114:398:1::0;25697:76:0::1;25784:15;:34:::0;;-1:-1:-1;;;;;;25784:34:0::1;-1:-1:-1::0;;;;;25784:34:0;;;::::1;::::0;;;::::1;::::0;;25619:207::o;27222:135::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;27314:8:::1;-1:-1:-1::0;;;;;27307:25:0::1;;27333:7;13552:6:::0;;-1:-1:-1;;;;;13552:6:0;;13479:87;27333:7:::1;27307:42;::::0;-1:-1:-1;;;;;;27307:42:0::1;::::0;;;;;;-1:-1:-1;;;;;8709:32:1;;;27307:42:0::1;::::0;::::1;8691:51:1::0;8758:18;;;8751:34;;;8664:18;;27307:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27222:135:::0;;:::o;2716:104::-;2772:13;2805:7;2798:14;;;;;:::i;27103:111::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;13552:6;;27170:36:::1;::::0;-1:-1:-1;;;;;13552:6:0;;;;27170:36;::::1;;;::::0;27196:9;;27170:36:::1;::::0;;;27196:9;13552:6;27170:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;19082:410:::0;299:10;19203:4;19252:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19252:34:0;;;;;;;;;;19305:35;;;;19297:85;;;;-1:-1:-1;;;19297:85:0;;9248:2:1;19297:85:0;;;9230:21:1;9287:2;9267:18;;;9260:30;9326:34;9306:18;;;9299:62;-1:-1:-1;;;9377:18:1;;;9370:35;9422:19;;19297:85:0;9046:401:1;19297:85:0;19393:67;299:10;19416:7;19425:34;19444:15;19425:16;:34;:::i;19393:67::-;-1:-1:-1;19480:4:0;;19082:410;-1:-1:-1;;;19082:410:0:o;19500:165::-;19578:4;19595:40;19605:10;19617:9;19628:6;19595:9;:40::i;26637:458::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;26697:8:::1;::::0;-1:-1:-1;;;26697:8:0;::::1;;;26696:9;26688:39;;;::::0;-1:-1:-1;;;26688:39:0;;9654:2:1;26688:39:0::1;::::0;::::1;9636:21:1::0;9693:2;9673:18;;;9666:30;-1:-1:-1;;;9712:18:1;;;9705:47;9769:18;;26688:39:0::1;9452:341:1::0;26688:39:0::1;3705:12:::0;;26738:11:::1;:27:::0;3705:12;;26776::::1;:28:::0;3705:12;;26815:14:::1;:30:::0;26866:14:::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;26866:14:0;;;::::1;::::0;;::::1;::::0;;;;;;;;;26858:5:::1;:22:::0;;;;;;;;;;;26903:14;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;26891:9:::1;:26:::0;;;;;;;;;26930:19:::1;:17;:19::i;:::-;26962:8;:15:::0;;-1:-1:-1;;;;26962:15:0::1;-1:-1:-1::0;;;26962:15:0::1;::::0;;27008:11:::1;::::0;27021:12:::1;::::0;27035:14:::1;::::0;26995:55:::1;::::0;;3449:25:1;;;3505:2;3490:18;;3483:34;;;;3533:18;;;3526:34;26995:55:0::1;::::0;3437:2:1;3422:18;26995:55:0::1;;;;;;;27066:21;::::0;;27079:1:::1;3449:25:1::0;;;3505:2;3490:18;;3483:34;;;3533:18;;;3526:34;27066:21:0;;::::1;::::0;;;;3437:2:1;27066:21:0;;::::1;26637:458::o:0;25834:518::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;25960:9:::1;25950:6;:19;;25942:73;;;::::0;-1:-1:-1;;;25942:73:0;;10348:2:1;25942:73:0::1;::::0;::::1;10330:21:1::0;10387:2;10367:18;;;10360:30;10426:34;10406:18;;;10399:62;-1:-1:-1;;;10477:18:1;;;10470:39;10526:19;;25942:73:0::1;10146:405:1::0;25942:73:0::1;26045:9;26034:7;:20;;26026:75;;;::::0;-1:-1:-1;;;26026:75:0;;10758:2:1;26026:75:0::1;::::0;::::1;10740:21:1::0;10797:2;10777:18;;;10770:30;10836:34;10816:18;;;10809:62;-1:-1:-1;;;10887:18:1;;;10880:40;10937:19;;26026:75:0::1;10556:406:1::0;26026:75:0::1;26133:9;26120;:22;;26112:79;;;::::0;-1:-1:-1;;;26112:79:0;;11169:2:1;26112:79:0::1;::::0;::::1;11151:21:1::0;11208:2;11188:18;;;11181:30;11247:34;11227:18;;;11220:62;-1:-1:-1;;;11298:18:1;;;11291:42;11350:19;;26112:79:0::1;10967:408:1::0;26112:79:0::1;26225:14;3542:2:::0;26225::::1;:14;:::i;:::-;26216:23;::::0;:6;:23:::1;:::i;:::-;26202:11;:37:::0;3542:2;26275:14:::1;::::0;:2:::1;:14;:::i;:::-;26265:24;::::0;:7;:24:::1;:::i;:::-;26250:12;:39:::0;26329:14:::1;3542:2:::0;26329::::1;:14;:::i;:::-;26317:26;::::0;:9;:26:::1;:::i;:::-;26300:14;:43:::0;-1:-1:-1;;;25834:518:0:o;13804:192::-;13552:6;;-1:-1:-1;;;;;13552:6:0;299:10;13614:23;13606:68;;;;-1:-1:-1;;;13606:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13893:22:0;::::1;13885:73;;;::::0;-1:-1:-1;;;13885:73:0;;11582:2:1;13885:73:0::1;::::0;::::1;11564:21:1::0;11621:2;11601:18;;;11594:30;11660:34;11640:18;;;11633:62;-1:-1:-1;;;11711:18:1;;;11704:36;11757:19;;13885:73:0::1;11380:402:1::0;13885:73:0::1;13969:19;13979:8;13969:9;:19::i;11127:380::-:0;-1:-1:-1;;;;;11263:19:0;;11255:68;;;;-1:-1:-1;;;11255:68:0;;11989:2:1;11255:68:0;;;11971:21:1;12028:2;12008:18;;;12001:30;12067:34;12047:18;;;12040:62;-1:-1:-1;;;12118:18:1;;;12111:34;12162:19;;11255:68:0;11787:400:1;11255:68:0;-1:-1:-1;;;;;11342:21:0;;11334:68;;;;-1:-1:-1;;;11334:68:0;;12394:2:1;11334:68:0;;;12376:21:1;12433:2;12413:18;;;12406:30;12472:34;12452:18;;;12445:62;-1:-1:-1;;;12523:18:1;;;12516:32;12565:19;;11334:68:0;12192:398:1;11334:68:0;-1:-1:-1;;;;;11415:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11467:32;;1730:25:1;;;11467:32:0;;1703:18:1;11467:32:0;;;;;;;11127:380;;;:::o;19673:2805::-;19823:1;19814:6;:10;19806:64;;;;-1:-1:-1;;;19806:64:0;;12797:2:1;19806:64:0;;;12779:21:1;12836:2;12816:18;;;12809:30;12875:34;12855:18;;;12848:62;-1:-1:-1;;;12926:18:1;;;12919:39;12975:19;;19806:64:0;12595:405:1;19806:64:0;19897:4;;-1:-1:-1;;;;;19887:14:0;;;19897:4;;19887:14;:39;;;;-1:-1:-1;;;;;;19906:20:0;;;;;;:9;:20;;;;;;;;19905:21;19887:39;:54;;;;-1:-1:-1;19931:10:0;;-1:-1:-1;;;19931:10:0;;;;19930:11;19887:54;19883:306;;;19976:11;;19966:6;:21;;19958:63;;;;-1:-1:-1;;;19958:63:0;;13207:2:1;19958:63:0;;;13189:21:1;13246:2;13226:18;;;13219:30;13285:31;13265:18;;;13258:59;13334:18;;19958:63:0;13005:353:1;19958:63:0;20095:14;;20085:6;20062:20;20072:9;-1:-1:-1;;;;;3889:18:0;3862:7;3889:18;;;;;;;;;;;;3788:127;20062:20;:29;;;;:::i;:::-;:47;;20036:141;;;;-1:-1:-1;;;20036:141:0;;13565:2:1;20036:141:0;;;13547:21:1;;;13584:18;;;13577:30;13643:34;13623:18;;;13616:62;13695:18;;20036:141:0;13363:356:1;20036:141:0;20229:4;;-1:-1:-1;;;;;20219:14:0;;;20229:4;;20219:14;;;;:39;;-1:-1:-1;;;;;;20238:20:0;;;;;;:9;:20;;;;;;;;20237:21;20219:39;:61;;;;-1:-1:-1;;;;;;20263:17:0;;;;;;:9;:17;;;;;;;;20262:18;20219:61;:76;;;;-1:-1:-1;20285:10:0;;-1:-1:-1;;;20285:10:0;;;;20284:11;20219:76;20201:423;;;20340:12;;20330:6;:22;;20322:65;;;;-1:-1:-1;;;20322:65:0;;13926:2:1;20322:65:0;;;13908:21:1;13965:2;13945:18;;;13938:30;14004:32;13984:18;;;13977:60;14054:18;;20322:65:0;13724:354:1;20322:65:0;20419:4;;-1:-1:-1;;;;;20406:17:0;;;20419:4;;20406:17;20402:211;;20507:14;;20497:6;20474:20;20484:9;-1:-1:-1;;;;;3889:18:0;3862:7;3889:18;;;;;;;;;;;;3788:127;20474:20;:29;;;;:::i;:::-;:47;;20444:153;;;;-1:-1:-1;;;20444:153:0;;13565:2:1;20444:153:0;;;13547:21:1;;;13584:18;;;13577:30;13643:34;13623:18;;;13616:62;13695:18;;20444:153:0;13363:356:1;20444:153:0;20636:15;20662:14;20687:11;20709:15;20735:18;20764:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;20764:25:0;20877:10;;-1:-1:-1;;;20877:10:0;;;;;:31;;-1:-1:-1;;;;;;20891:17:0;;;;;;:9;:17;;;;;;;;20877:31;:55;;;-1:-1:-1;;;;;;20912:20:0;;;;;;:9;:20;;;;;;;;20877:55;20873:847;;;20953:1;20947:7;;20873:847;;;21018:4;;-1:-1:-1;;;;;21018:4:0;;;21005:17;;;;21001:719;;21105:9;:19;21066;;:58;;21105:19;21066:58;:::i;:::-;21180:14;;21209:24;;;;;;;;21180:9;21209:24;;;;;;;;;;;;;;;21039:85;;-1:-1:-1;21039:85:0;;-1:-1:-1;21180:14:0;-1:-1:-1;21209:24:0;-1:-1:-1;21001:719:0;;;21265:4;;-1:-1:-1;;;;;21265:4:0;;;21255:14;;;;21251:469;;21348:5;:15;21313;;:50;;21348:15;21313:50;:::i;:::-;21419:10;;21444:20;;;;;;;;21419:5;21444:20;;;;;;;;;;;;;;;21286:77;;-1:-1:-1;21286:77:0;;-1:-1:-1;21419:10:0;-1:-1:-1;21444:20:0;-1:-1:-1;21251:469:0;;;21567:13;:23;21524;;:66;;21567:23;21524:66;:::i;:::-;21647:18;;21680:28;;;;;;;;21647:13;21680:28;;;;;;;;;;;;;;;21497:93;;-1:-1:-1;21497:93:0;;-1:-1:-1;21647:18:0;-1:-1:-1;21680:28:0;-1:-1:-1;21251:469:0;21758:3;21739:15;21748:6;21739;:15;:::i;:::-;21738:23;;;;:::i;:::-;21732:29;-1:-1:-1;21806:3:0;21786:16;21795:7;21786:6;:16;:::i;:::-;21785:24;;;;:::i;:::-;21923:18;;21772:37;;-1:-1:-1;;;;21923:18:0;;;;:36;;;;-1:-1:-1;21955:4:0;;-1:-1:-1;;;;;21945:14:0;;;21955:4;;21945:14;;21923:36;21919:72;;;21961:30;21969:7;21978:12;21961:7;:30::i;:::-;22033:63;22049:6;22057:9;22078:16;22084:10;22078:3;:16;:::i;:::-;22068:27;;:6;:27;:::i;:::-;22033:15;:63::i;:::-;22138:14;;22135:77;;22169:31;22181:6;22189:10;22169:11;:31::i;:::-;22226:7;;22222:249;;22298:11;;22294:164;;22330:17;22371:3;22351:16;22360:7;22351:6;:16;:::i;:::-;22350:24;;;;:::i;:::-;22330:44;;22393:49;22409:6;22425:4;22432:9;22393:15;:49::i;:::-;22311:147;22294:164;19795:2683;;;;;;19673:2805;;;:::o;9945:744::-;-1:-1:-1;;;;;10029:21:0;;10021:67;;;;-1:-1:-1;;;10021:67:0;;14507:2:1;10021:67:0;;;14489:21:1;14546:2;14526:18;;;14519:30;14585:34;14565:18;;;14558:62;-1:-1:-1;;;14636:18:1;;;14629:31;14677:19;;10021:67:0;14305:397:1;10021:67:0;-1:-1:-1;;;;;10193:18:0;;10168:22;10193:18;;;;;;;;;;;10230:24;;;;10222:71;;;;-1:-1:-1;;;10222:71:0;;14909:2:1;10222:71:0;;;14891:21:1;14948:2;14928:18;;;14921:30;14987:34;14967:18;;;14960:62;-1:-1:-1;;;15038:18:1;;;15031:32;15080:19;;10222:71:0;14707:398:1;10222:71:0;-1:-1:-1;;;;;10329:18:0;;:9;:18;;;;;;;;;;;;10350:23;;;10329:44;;10468:12;:22;;;;;;;10573:42;;1730:25:1;;;10599:6:0;;10329:18;10573:42;;1703:18:1;10573:42:0;;;;;;;27307::::1;27222:135:::0;;:::o;14004:173::-;14079:6;;;-1:-1:-1;;;;;14096:17:0;;;-1:-1:-1;;;;;;14096:17:0;;;;;;;14129:40;;14079:6;;;14096:17;14079:6;;14129:40;;14060:16;;14129:40;14049:128;14004:173;:::o;5216:419::-;-1:-1:-1;;;;;4573:18:0;;;5317:24;4573:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;5384:37:0;;5380:248;;5466:6;5446:16;:26;;5438:68;;;;-1:-1:-1;;;5438:68:0;;15312:2:1;5438:68:0;;;15294:21:1;15351:2;15331:18;;;15324:30;15390:31;15370:18;;;15363:59;15439:18;;5438:68:0;15110:353:1;5438:68:0;5550:51;5559:5;5566:7;5594:6;5575:16;:25;5550:8;:51::i;:::-;5306:329;5216:419;;;:::o;22486:1437::-;17498:10;;-1:-1:-1;;;17498:10:0;;;;17493:110;;17525:10;:17;;-1:-1:-1;;;;17525:17:0;-1:-1:-1;;;17525:17:0;;;22577:49;;22608:7:::1;22577:49;22682:4;22638:23;3889:18:::0;;;;;;;;;;;22722:23:::1;::::0;22703:42;::::1;22699:1217;;22792:1;22766:23;;:27;22762:109;;;-1:-1:-1::0;22832:23:0::1;::::0;22762:109:::1;22942:19;22964:11;:7:::0;22974:1:::1;22964:11;:::i;:::-;22942:33;;22990:32;23084:11;23044:9;:19;;;23026:15;:37;;;;:::i;:::-;23025:70;;;;:::i;:::-;22990:105:::0;-1:-1:-1;23110:14:0::1;23127:42;22990:105:::0;23127:15;:42:::1;:::i;:::-;23110:59:::0;-1:-1:-1;23211:21:0::1;23249:24;23110:59:::0;23249:16:::1;:24::i;:::-;23290:20;23313:38;23337:14:::0;23313:21:::1;:38;:::i;:::-;23290:61;;23366:19;23418:9;:19;;;23404:11;:33;;;;:::i;:::-;23388:50;::::0;:12;:50:::1;:::i;:::-;23366:72;;23453:29;23499:9;:19;;;23485:11;:33;;;;:::i;:::-;23453:65:::0;-1:-1:-1;23539:25:0;;23535:172:::1;;23630:61;23643:24;23669:21;23630:12;:61::i;:::-;23764:19:::0;;23723:20:::1;::::0;23746:15:::1;:11:::0;23760:1:::1;23746:15;:::i;:::-;:37;;;;:::i;:::-;23723:60:::0;-1:-1:-1;23802:16:0;;23798:105:::1;;23847:15;::::0;23839:48:::1;::::0;-1:-1:-1;;;;;23847:15:0::1;23874:12:::0;23839:34:::1;:48::i;:::-;22747:1169;;;;;;;;22699:1217;22564:1359;17557:1;17573:10:::0;:18;;-1:-1:-1;;;;17573:18:0;;;22486:1437;;:::o;8631:578::-;-1:-1:-1;;;;;8771:20:0;;8763:70;;;;-1:-1:-1;;;8763:70:0;;15670:2:1;8763:70:0;;;15652:21:1;15709:2;15689:18;;;15682:30;15748:34;15728:18;;;15721:62;-1:-1:-1;;;15799:18:1;;;15792:35;15844:19;;8763:70:0;15468:401:1;8763:70:0;-1:-1:-1;;;;;8852:23:0;;8844:71;;;;-1:-1:-1;;;8844:71:0;;16076:2:1;8844:71:0;;;16058:21:1;16115:2;16095:18;;;16088:30;16154:34;16134:18;;;16127:62;-1:-1:-1;;;16205:18:1;;;16198:33;16248:19;;8844:71:0;15874:399:1;8844:71:0;-1:-1:-1;;;;;8952:17:0;;8928:21;8952:17;;;;;;;;;;;8988:23;;;;8980:74;;;;-1:-1:-1;;;8980:74:0;;16480:2:1;8980:74:0;;;16462:21:1;16519:2;16499:18;;;16492:30;16558:34;16538:18;;;16531:62;-1:-1:-1;;;16609:18:1;;;16602:36;16655:19;;8980:74:0;16278:402:1;8980:74:0;9085:22;9101:6;9085:13;:22;:::i;:::-;-1:-1:-1;;;;;9065:17:0;;;:9;:17;;;;;;;;;;;:42;;;;9118:20;;;;;;;;:30;;9142:6;;9065:9;9118:30;;9142:6;;9118:30;:::i;:::-;;;;;;;;9183:9;-1:-1:-1;;;;;9166:35:0;9175:6;-1:-1:-1;;;;;9166:35:0;;9194:6;9166:35;;;;1730:25:1;;1718:2;1703:18;;1584:177;9166:35:0;;;;;;;;8752:457;8631:578;;;:::o;23931:534::-;24081:16;;;24095:1;24081:16;;;;;;;;24057:21;;24081:16;;;;;;;;;;-1:-1:-1;24081:16:0;24057:40;;24126:4;24108;24113:1;24108:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24108:23:0;;;:7;;;;;;;;;;:23;;;;24152:6;;:13;;;-1:-1:-1;;;24152:13:0;;;;:6;;;;;:11;;:13;;;;;24108:7;;24152:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24142:4;24147:1;24142:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24142:23:0;;;:7;;;;;;;;;:23;24210:6;;24178:53;;24195:4;;24210:6;24219:11;24178:8;:53::i;:::-;24270:6;;:187;;-1:-1:-1;;;24270:187:0;;-1:-1:-1;;;;;24270:6:0;;;;:57;;:187;;24342:11;;24270:6;;24384:4;;24411;;24431:15;;24270:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23986:479;23931:534;:::o;24473:500::-;24653:6;;24621:53;;24638:4;;-1:-1:-1;;;;;24653:6:0;24662:11;24621:8;:53::i;:::-;24717:6;;:248;;-1:-1:-1;;;24717:248:0;;24782:4;24717:248;;;18531:34:1;18581:18;;;18574:34;;;24717:6:0;18624:18:1;;;18617:34;;;18667:18;;;18660:34;16706:42:0;18710:19:1;;;18703:44;24939:15:0;18763:19:1;;;18756:35;-1:-1:-1;;;;;24717:6:0;;;;:22;;24748:9;;18465:19:1;;24717:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24473:500;;:::o;12922:319::-;13037:6;13012:21;:31;;13004:73;;;;-1:-1:-1;;;13004:73:0;;19315:2:1;13004:73:0;;;19297:21:1;19354:2;19334:18;;;19327:30;19393:31;19373:18;;;19366:59;19442:18;;13004:73:0;19113:353:1;13004:73:0;13091:12;13109:9;-1:-1:-1;;;;;13109:14:0;13132:6;13109:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13090:54;;;13163:7;13155:78;;;;-1:-1:-1;;;13155:78:0;;19883:2:1;13155:78:0;;;19865:21:1;19922:2;19902:18;;;19895:30;19961:34;19941:18;;;19934:62;20032:28;20012:18;;;20005:56;20078:19;;13155:78:0;19681:422:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:118::-;1301:5;1294:13;1287:21;1280:5;1277:32;1267:60;;1323:1;1320;1313:12;1338:241;1394:6;1447:2;1435:9;1426:7;1422:23;1418:32;1415:52;;;1463:1;1460;1453:12;1415:52;1502:9;1489:23;1521:28;1543:5;1521:28;:::i;:::-;1568:5;1338:241;-1:-1:-1;;;1338:241:1:o;1766:456::-;1843:6;1851;1859;1912:2;1900:9;1891:7;1887:23;1883:32;1880:52;;;1928:1;1925;1918:12;1880:52;1967:9;1954:23;1986:31;2011:5;1986:31;:::i;:::-;2036:5;-1:-1:-1;2093:2:1;2078:18;;2065:32;2106:33;2065:32;2106:33;:::i;:::-;1766:456;;2158:7;;-1:-1:-1;;;2212:2:1;2197:18;;;;2184:32;;1766:456::o;2227:248::-;2295:6;2303;2356:2;2344:9;2335:7;2331:23;2327:32;2324:52;;;2372:1;2369;2362:12;2324:52;-1:-1:-1;;2395:23:1;;;2465:2;2450:18;;;2437:32;;-1:-1:-1;2227:248:1:o;2669:388::-;2737:6;2745;2798:2;2786:9;2777:7;2773:23;2769:32;2766:52;;;2814:1;2811;2804:12;2766:52;2853:9;2840:23;2872:31;2897:5;2872:31;:::i;:::-;2922:5;-1:-1:-1;2979:2:1;2964:18;;2951:32;2992:33;2951:32;2992:33;:::i;:::-;3044:7;3034:17;;;2669:388;;;;;:::o;3062:180::-;3121:6;3174:2;3162:9;3153:7;3149:23;3145:32;3142:52;;;3190:1;3187;3180:12;3142:52;-1:-1:-1;3213:23:1;;3062:180;-1:-1:-1;3062:180:1:o;3571:247::-;3630:6;3683:2;3671:9;3662:7;3658:23;3654:32;3651:52;;;3699:1;3696;3689:12;3651:52;3738:9;3725:23;3757:31;3782:5;3757:31;:::i;4031:316::-;4108:6;4116;4124;4177:2;4165:9;4156:7;4152:23;4148:32;4145:52;;;4193:1;4190;4183:12;4145:52;-1:-1:-1;;4216:23:1;;;4286:2;4271:18;;4258:32;;-1:-1:-1;4337:2:1;4322:18;;;4309:32;;4031:316;-1:-1:-1;4031:316:1:o;4575:380::-;4654:1;4650:12;;;;4697;;;4718:61;;4772:4;4764:6;4760:17;4750:27;;4718:61;4825:2;4817:6;4814:14;4794:18;4791:38;4788:161;;4871:10;4866:3;4862:20;4859:1;4852:31;4906:4;4903:1;4896:15;4934:4;4931:1;4924:15;4788:161;;4575:380;;;:::o;4960:356::-;5162:2;5144:21;;;5181:18;;;5174:30;5240:34;5235:2;5220:18;;5213:62;5307:2;5292:18;;4960:356::o;5730:127::-;5791:10;5786:3;5782:20;5779:1;5772:31;5822:4;5819:1;5812:15;5846:4;5843:1;5836:15;5862:128;5929:9;;;5950:11;;;5947:37;;;5964:18;;:::i;5995:125::-;6060:9;;;6081:10;;;6078:36;;;6094:18;;:::i;6558:422::-;6647:1;6690:5;6647:1;6704:270;6725:7;6715:8;6712:21;6704:270;;;6784:4;6780:1;6776:6;6772:17;6766:4;6763:27;6760:53;;;6793:18;;:::i;:::-;6843:7;6833:8;6829:22;6826:55;;;6863:16;;;;6826:55;6942:22;;;;6902:15;;;;6704:270;;;6708:3;6558:422;;;;;:::o;6985:806::-;7034:5;7064:8;7054:80;;-1:-1:-1;7105:1:1;7119:5;;7054:80;7153:4;7143:76;;-1:-1:-1;7190:1:1;7204:5;;7143:76;7235:4;7253:1;7248:59;;;;7321:1;7316:130;;;;7228:218;;7248:59;7278:1;7269:10;;7292:5;;;7316:130;7353:3;7343:8;7340:17;7337:43;;;7360:18;;:::i;:::-;-1:-1:-1;;7416:1:1;7402:16;;7431:5;;7228:218;;7530:2;7520:8;7517:16;7511:3;7505:4;7502:13;7498:36;7492:2;7482:8;7479:16;7474:2;7468:4;7465:12;7461:35;7458:77;7455:159;;;-1:-1:-1;7567:19:1;;;7599:5;;7455:159;7646:34;7671:8;7665:4;7646:34;:::i;:::-;7716:6;7712:1;7708:6;7704:19;7695:7;7692:32;7689:58;;;7727:18;;:::i;:::-;7765:20;;6985:806;-1:-1:-1;;;6985:806:1:o;7796:140::-;7854:5;7883:47;7924:4;7914:8;7910:19;7904:4;7883:47;:::i;7941:168::-;8014:9;;;8045;;8062:15;;;8056:22;;8042:37;8032:71;;8083:18;;:::i;8796:245::-;8863:6;8916:2;8904:9;8895:7;8891:23;8887:32;8884:52;;;8932:1;8929;8922:12;8884:52;8964:9;8958:16;8983:28;9005:5;8983:28;:::i;14083:217::-;14123:1;14149;14139:132;;14193:10;14188:3;14184:20;14181:1;14174:31;14228:4;14225:1;14218:15;14256:4;14253:1;14246:15;14139:132;-1:-1:-1;14285:9:1;;14083:217::o;16817:127::-;16878:10;16873:3;16869:20;16866:1;16859:31;16909:4;16906:1;16899:15;16933:4;16930:1;16923:15;16949:251;17019:6;17072:2;17060:9;17051:7;17047:23;17043:32;17040:52;;;17088:1;17085;17078:12;17040:52;17120:9;17114:16;17139:31;17164:5;17139:31;:::i;17205:980::-;17467:4;17515:3;17504:9;17500:19;17546:6;17535:9;17528:25;17572:2;17610:6;17605:2;17594:9;17590:18;17583:34;17653:3;17648:2;17637:9;17633:18;17626:31;17677:6;17712;17706:13;17743:6;17735;17728:22;17781:3;17770:9;17766:19;17759:26;;17820:2;17812:6;17808:15;17794:29;;17841:1;17851:195;17865:6;17862:1;17859:13;17851:195;;;17930:13;;-1:-1:-1;;;;;17926:39:1;17914:52;;18021:15;;;;17986:12;;;;17962:1;17880:9;17851:195;;;-1:-1:-1;;;;;;;18102:32:1;;;;18097:2;18082:18;;18075:60;-1:-1:-1;;;18166:3:1;18151:19;18144:35;18063:3;17205:980;-1:-1:-1;;;17205:980:1:o;18802:306::-;18890:6;18898;18906;18959:2;18947:9;18938:7;18934:23;18930:32;18927:52;;;18975:1;18972;18965:12;18927:52;19004:9;18998:16;18988:26;;19054:2;19043:9;19039:18;19033:25;19023:35;;19098:2;19087:9;19083:18;19077:25;19067:35;;18802:306;;;;;:::o

Swarm Source

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