ETH Price: $3,484.63 (+2.84%)
Gas: 3 Gwei

Token

Monke (Monke)
 

Overview

Max Total Supply

1,000,000,000 Monke

Holders

457

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.28327645051 Monke

Value
$0.00
0x5ab84cf2e7d9bd72c6c6784ee4c745f85a6ef259
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:
RejectHumanityReturntoMonke

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*FIND THE COLLECTIVE, RETURN TO 

▄▄   ▄▄ ▄▄▄▄▄▄▄ ▄▄    ▄ ▄▄▄   ▄ ▄▄▄▄▄▄▄ 
█  █▄█  █       █  █  █ █   █ █ █       █
█       █   ▄   █   █▄█ █   █▄█ █    ▄▄▄█
█       █  █ █  █       █      ▄█   █▄▄▄ 
█       █  █▄█  █  ▄    █     █▄█    ▄▄▄█
█ ██▄██ █       █ █ █   █    ▄  █   █▄▄▄ 
█▄█   █▄█▄▄▄▄▄▄▄█▄█  █▄▄█▄▄▄█ █▄█▄▄▄▄▄▄▄█  */


// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;
pragma experimental ABIEncoderV2;

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 default value returned by this function, unless
     * it's 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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(0), 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;
        }

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

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

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

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

    /**
     * @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 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 {}
}

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

contract RejectHumanityReturntoMonke is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingWallet;
    address public liquidityWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 private buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private previousFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event liquidityWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor() ERC20("Monke", "Monke") {
        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        uint256 totalSupply = 1_000_000_000 ether;

        maxTransactionAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 1) / 1000;

        buyMarketingFee = 100;
        buyLiquidityFee = 0;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellMarketingFee = 100;
        sellLiquidityFee = 0;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;

        previousFee = sellTotalFees;

        marketingWallet = 0x34ada6DC9eF50e9f9C63C5Dc8BA6e3219374B6f7;
        liquidityWallet = 0x000000000000000000000000000000000000dEaD;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(marketingWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(marketingWallet, true);

        _mint(address(this), totalSupply);
    }

    receive() external payable {}

    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading already active.");

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        _approve(address(this), address(uniswapV2Pair), type(uint256).max);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        tradingActive = true;
        swapEnabled = true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "ERC20: Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "ERC20: Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxWalletAndTxnAmount(
        uint256 newTxnNum,
        uint256 newMaxWalletNum
    ) external onlyOwner {
        require(
            newTxnNum >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxTxn lower than 0.5%"
        );
        require(
            newMaxWalletNum >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newMaxWalletNum;
        maxTransactionAmount = newTxnNum;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 10, "ERC20: Must keep fees at 10% or less");
    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;
        require(sellTotalFees <= 10, "ERC20: Must keep fees at 10% or less");
    }

    function updateMarketingWallet(address _marketingWallet)
        external
        onlyOwner
    {
        require(_marketingWallet != address(0), "ERC20: Address 0");
        address oldWallet = marketingWallet;
        marketingWallet = _marketingWallet;
        emit marketingWalletUpdated(marketingWallet, oldWallet);
    }

    function updateLiquidityWallet(address _liquidityWallet)
        external
        onlyOwner
    {
        require(_liquidityWallet != address(0), "ERC20: Address 0");
        address oldWallet = liquidityWallet;
        liquidityWallet = _liquidityWallet;
        emit liquidityWalletUpdated(liquidityWallet, oldWallet);
    }

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

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

    function withdrawStuckTokens(address tkn) public onlyOwner {
        require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
        uint256 amount = IERC20(tkn).balanceOf(address(this));
        IERC20(tkn).transfer(msg.sender, amount);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != deadAddress &&
            !swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "ERC20: Trading is not active."
                );
            }

            //when buy
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "ERC20: Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
            //when sell
            else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxTransactionAmount,
                    "ERC20: Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = previousFee;
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;

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

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","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":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600c805461ffff191690553480156200001c57600080fd5b506040805180820182526005808252644d6f6e6b6560d81b60208084018290528451808601909552918452908301529060036200005a838262000640565b50600462000069828262000640565b50505062000086620000806200025660201b60201c565b6200025a565b737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052620000b0903090600019620002ac565b6b033b2e3c9fd0803ce80000006064620000cc82600162000722565b620000d8919062000742565b6009556064620000ea82600262000722565b620000f6919062000742565b600b556103e86200010982600162000722565b62000115919062000742565b600a556064600e8190556000600f819055620001319162000765565b600d5560646011819055600060128190556200014d9162000765565b6010819055601555600780546001600160a01b03199081167334ada6dc9ef50e9f9c63c5dc8ba6e3219374b6f7179091556008805490911661dead179055620001aa620001a26005546001600160a01b031690565b6001620003d8565b620001b7306001620003d8565b620001c661dead6001620003d8565b600754620001df906001600160a01b03166001620003d8565b620001fe620001f66005546001600160a01b031690565b600162000441565b6200020b30600162000441565b6200021a61dead600162000441565b6080516200022a90600162000441565b60075462000243906001600160a01b0316600162000441565b6200024f308262000476565b506200077b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316620003145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620003775760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b620003e262000539565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6200044b62000539565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001600160a01b038216620004ce5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200030b565b8060026000828254620004e2919062000765565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620005955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200030b565b565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005c757607f821691505b602082108103620005e857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200059757600081815260208120601f850160051c81016020861015620006175750805b601f850160051c820191505b81811015620006385782815560010162000623565b505050505050565b81516001600160401b038111156200065c576200065c6200059c565b62000674816200066d8454620005b2565b84620005ee565b602080601f831160018114620006ac5760008415620006935750858301515b600019600386901b1c1916600185901b17855562000638565b600085815260208120601f198616915b82811015620006dd57888601518255948401946001909101908401620006bc565b5085821015620006fc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200073c576200073c6200070c565b92915050565b6000826200076057634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200073c576200073c6200070c565b608051612881620007d6600039600081816102cf01528181610959015281816109ea01528181610b2201528181610bd1015281816121b40152818161226d015281816122a901528181612323015261236201526128816000f3fe6080604052600436106102345760003560e01c80638a8c523c1161012e578063cb963728116100ab578063e2f456051161006f578063e2f45605146106a1578063e37ba8f9146106b7578063f2fde38b146106d7578063f5648a4f146106f7578063f8b45b051461070c57600080fd5b8063cb9637281461060b578063d257b34f1461062b578063d46980161461064b578063d85ba0631461066b578063dd62ed3e1461068157600080fd5b8063a9059cbb116100f2578063a9059cbb1461057b578063aacebbe31461059b578063bbc0c742146105bb578063c0246668146105d5578063c8c8ebe4146105f557600080fd5b80638a8c523c146104f35780638da5cb5b1461050857806395d89b4114610526578063961883991461053b578063a457c2d71461055b57600080fd5b806342966c68116101bc5780636ddd1713116101805780636ddd17131461044957806370a0823114610468578063715018a61461049e5780637571336a146104b357806375f0a874146104d357600080fd5b806342966c681461039a57806349bd5a5e146103ba5780634fbee193146103da57806366ca9b83146104135780636a486a8e1461043357600080fd5b806318160ddd1161020357806318160ddd1461030957806323b872dd1461032857806327c8f83514610348578063313ce5671461035e578063395093511461037a57600080fd5b806302dbd8f81461024057806306fdde0314610262578063095ea7b31461028d5780631694505e146102bd57600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061026061025b3660046123f0565b610722565b005b34801561026e57600080fd5b50610277610775565b6040516102849190612412565b60405180910390f35b34801561029957600080fd5b506102ad6102a8366004612475565b610807565b6040519015158152602001610284565b3480156102c957600080fd5b506102f17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610284565b34801561031557600080fd5b506002545b604051908152602001610284565b34801561033457600080fd5b506102ad6103433660046124a1565b610821565b34801561035457600080fd5b506102f161dead81565b34801561036a57600080fd5b5060405160128152602001610284565b34801561038657600080fd5b506102ad610395366004612475565b610845565b3480156103a657600080fd5b506102606103b53660046124e2565b610867565b3480156103c657600080fd5b506006546102f1906001600160a01b031681565b3480156103e657600080fd5b506102ad6103f53660046124fb565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561041f57600080fd5b5061026061042e3660046123f0565b610874565b34801561043f57600080fd5b5061031a60105481565b34801561045557600080fd5b50600c546102ad90610100900460ff1681565b34801561047457600080fd5b5061031a6104833660046124fb565b6001600160a01b031660009081526020819052604090205490565b3480156104aa57600080fd5b506102606108b5565b3480156104bf57600080fd5b506102606104ce366004612526565b6108c9565b3480156104df57600080fd5b506007546102f1906001600160a01b031681565b3480156104ff57600080fd5b506102606108fc565b34801561051457600080fd5b506005546001600160a01b03166102f1565b34801561053257600080fd5b50610277610cad565b34801561054757600080fd5b506102606105563660046123f0565b610cbc565b34801561056757600080fd5b506102ad610576366004612475565b610dd1565b34801561058757600080fd5b506102ad610596366004612475565b610e4c565b3480156105a757600080fd5b506102606105b63660046124fb565b610e5a565b3480156105c757600080fd5b50600c546102ad9060ff1681565b3480156105e157600080fd5b506102606105f0366004612526565b610efc565b34801561060157600080fd5b5061031a60095481565b34801561061757600080fd5b506102606106263660046124fb565b610f63565b34801561063757600080fd5b506102ad6106463660046124e2565b6110f3565b34801561065757600080fd5b506008546102f1906001600160a01b031681565b34801561067757600080fd5b5061031a600d5481565b34801561068d57600080fd5b5061031a61069c36600461255f565b611233565b3480156106ad57600080fd5b5061031a600a5481565b3480156106c357600080fd5b506102606106d23660046124fb565b61125e565b3480156106e357600080fd5b506102606106f23660046124fb565b611300565b34801561070357600080fd5b50610260611376565b34801561071857600080fd5b5061031a600b5481565b61072a6113cb565b6011829055601281905561073e81836125a3565b60108190556015819055600a10156107715760405162461bcd60e51b8152600401610768906125b6565b60405180910390fd5b5050565b606060038054610784906125fa565b80601f01602080910402602001604051908101604052809291908181526020018280546107b0906125fa565b80156107fd5780601f106107d2576101008083540402835291602001916107fd565b820191906000526020600020905b8154815290600101906020018083116107e057829003601f168201915b5050505050905090565b600033610815818585611425565b60019150505b92915050565b60003361082f858285611549565b61083a8585856115bd565b506001949350505050565b6000336108158185856108588383611233565b61086291906125a3565b611425565b6108713382611c87565b50565b61087c6113cb565b600e829055600f81905561089081836125a3565b600d819055600a10156107715760405162461bcd60e51b8152600401610768906125b6565b6108bd6113cb565b6108c76000611db9565b565b6108d16113cb565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6109046113cb565b600c5460ff16156109575760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c7265616479206163746976652e0000000000000000006044820152606401610768565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d99190612634565b6001600160a01b031663c9c65396307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6a9190612634565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adb9190612634565b600680546001600160a01b0319166001600160a01b03929092169182179055610b08903090600019611425565b60065460405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af1158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba09190612651565b50600654610bb8906001600160a01b03166001611e0b565b600654610bcf906001600160a01b031660016108c9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7194730610c1f306001600160a01b031660009081526020819052604090205490565b600080610c346005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610c569695949392919061266e565b60606040518083038185885af1158015610c74573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c9991906126a9565b5050600c805461ffff191661010117905550565b606060048054610784906125fa565b610cc46113cb565b6103e8610cd060025490565b610cdb9060056126d7565b610ce591906126ee565b821015610d455760405162461bcd60e51b815260206004820152602860248201527f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460448201526768616e20302e352560c01b6064820152608401610768565b6103e8610d5160025490565b610d5c9060056126d7565b610d6691906126ee565b811015610dc95760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e352560a81b6064820152608401610768565b600b55600955565b60003381610ddf8286611233565b905083811015610e3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610768565b61083a8286868403611425565b6000336108158185856115bd565b610e626113cb565b6001600160a01b038116610eab5760405162461bcd60e51b815260206004820152601060248201526f045524332303a204164647265737320360841b6044820152606401610768565b600780546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a35050565b610f046113cb565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b610f6b6113cb565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd69190612710565b1161100f5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610768565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107a9190612710565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee9190612651565b505050565b60006110fd6113cb565b620186a061110a60025490565b6111159060016126d7565b61111f91906126ee565b8210156111945760405162461bcd60e51b815260206004820152603c60248201527f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e000000006064820152608401610768565b6103e86111a060025490565b6111ab9060056126d7565b6111b591906126ee565b82111561122a5760405162461bcd60e51b815260206004820152603b60248201527f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e00000000006064820152608401610768565b50600a55600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112666113cb565b6001600160a01b0381166112af5760405162461bcd60e51b815260206004820152601060248201526f045524332303a204164647265737320360841b6044820152606401610768565b600880546001600160a01b038381166001600160a01b03198316811790935560405191169182917f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db90600090a35050565b6113086113cb565b6001600160a01b03811661136d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610768565b61087181611db9565b61137e6113cb565b604051600090339047908381818185875af1925050503d80600081146113c0576040519150601f19603f3d011682016040523d82523d6000602084013e6113c5565b606091505b50505050565b6005546001600160a01b031633146108c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610768565b6001600160a01b0383166114875760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610768565b6001600160a01b0382166114e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610768565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006115558484611233565b905060001981146113c557818110156115b05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610768565b6113c58484848403611425565b6001600160a01b0383166115e35760405162461bcd60e51b815260040161076890612729565b6001600160a01b0382166116095760405162461bcd60e51b81526004016107689061276e565b8060000361161d576110ee83836000611e5f565b6005546001600160a01b0384811691161480159061164957506005546001600160a01b03838116911614155b801561165d57506001600160a01b03821615155b801561167457506001600160a01b03821661dead14155b801561168a5750600654600160a01b900460ff16155b156119ad57600c5460ff16611724576001600160a01b03831660009081526016602052604090205460ff16806116d857506001600160a01b03821660009081526016602052604090205460ff165b6117245760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610768565b6001600160a01b03831660009081526018602052604090205460ff16801561176557506001600160a01b03821660009081526017602052604090205460ff16155b1561185b576009548111156117e25760405162461bcd60e51b815260206004820152603c60248201527f45524332303a20427579207472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e742e000000006064820152608401610768565b600b546001600160a01b03831660009081526020819052604090205461180890836125a3565b11156118565760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610768565b6119ad565b6001600160a01b03821660009081526018602052604090205460ff16801561189c57506001600160a01b03831660009081526017602052604090205460ff16155b15611919576009548111156118565760405162461bcd60e51b815260206004820152603d60248201527f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560448201527f65647320746865206d61785472616e73616374696f6e416d6f756e742e0000006064820152608401610768565b6001600160a01b03821660009081526017602052604090205460ff166119ad57600b546001600160a01b03831660009081526020819052604090205461195f90836125a3565b11156119ad5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610768565b30600090815260208190526040902054600a54811080159081906119d85750600c54610100900460ff165b80156119ee5750600654600160a01b900460ff16155b8015611a1357506001600160a01b03851660009081526018602052604090205460ff16155b8015611a3857506001600160a01b03851660009081526016602052604090205460ff16155b8015611a5d57506001600160a01b03841660009081526016602052604090205460ff16155b15611a8b576006805460ff60a01b1916600160a01b179055611a7d611f89565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680611ad957506001600160a01b03851660009081526016602052604090205460ff165b15611ae2575060005b60008115611c6d576001600160a01b03861660009081526018602052604090205460ff168015611b1457506000601054115b15611ba257611b396064611b336010548861213290919063ffffffff16565b90612145565b905060105460125482611b4c91906126d7565b611b5691906126ee565b60146000828254611b6791906125a3565b9091555050601054601154611b7c90836126d7565b611b8691906126ee565b60136000828254611b9791906125a3565b90915550611c4f9050565b6001600160a01b03871660009081526018602052604090205460ff168015611bcc57506000600d54115b15611c4f57611beb6064611b33600d548861213290919063ffffffff16565b9050600d54600f5482611bfe91906126d7565b611c0891906126ee565b60146000828254611c1991906125a3565b9091555050600d54600e54611c2e90836126d7565b611c3891906126ee565b60136000828254611c4991906125a3565b90915550505b8015611c6057611c60873083611e5f565b611c6a81866127b1565b94505b611c78878787611e5f565b50506015546010555050505050565b6001600160a01b038216611ce75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610768565b6001600160a01b03821660009081526020819052604090205481811015611d5b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610768565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611e855760405162461bcd60e51b815260040161076890612729565b6001600160a01b038216611eab5760405162461bcd60e51b81526004016107689061276e565b6001600160a01b03831660009081526020819052604090205481811015611f235760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610768565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36113c5565b3060009081526020819052604081205490506000601354601454611fad91906125a3565b90506000821580611fbc575081155b15611fc657505050565b600a54611fd49060146126d7565b831115611fec57600a54611fe99060146126d7565b92505b600060028360145486611fff91906126d7565b61200991906126ee565b61201391906126ee565b905060006120218583612151565b90504761202d8261215d565b60006120394783612151565b9050600061205687611b336013548561213290919063ffffffff16565b9050600061206482846127b1565b600060148190556013559050851580159061207f5750600081115b156120d25761208e868261231d565b601454604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904790600081818185875af1925050503d806000811461211f576040519150601f19603f3d011682016040523d82523d6000602084013e612124565b606091505b505050505050505050505050565b600061213e82846126d7565b9392505050565b600061213e82846126ee565b600061213e82846127b1565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612192576121926127c4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122349190612634565b81600181518110612247576122476127c4565b60200260200101906001600160a01b031690816001600160a01b031681525050612292307f000000000000000000000000000000000000000000000000000000000000000084611425565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906122e79085906000908690309042906004016127da565b600060405180830381600087803b15801561230157600080fd5b505af1158015612315573d6000803e3d6000fd5b505050505050565b612348307f000000000000000000000000000000000000000000000000000000000000000084611425565b60085460405163f305d71960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f305d7199285926123a692309289926000928392911690429060040161266e565b60606040518083038185885af11580156123c4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123e991906126a9565b5050505050565b6000806040838503121561240357600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561243f57858101830151858201604001528201612423565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461087157600080fd5b6000806040838503121561248857600080fd5b823561249381612460565b946020939093013593505050565b6000806000606084860312156124b657600080fd5b83356124c181612460565b925060208401356124d181612460565b929592945050506040919091013590565b6000602082840312156124f457600080fd5b5035919050565b60006020828403121561250d57600080fd5b813561213e81612460565b801515811461087157600080fd5b6000806040838503121561253957600080fd5b823561254481612460565b9150602083013561255481612518565b809150509250929050565b6000806040838503121561257257600080fd5b823561257d81612460565b9150602083013561255481612460565b634e487b7160e01b600052601160045260246000fd5b8082018082111561081b5761081b61258d565b60208082526024908201527f45524332303a204d757374206b656570206665657320617420313025206f72206040820152636c65737360e01b606082015260800190565b600181811c9082168061260e57607f821691505b60208210810361262e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561264657600080fd5b815161213e81612460565b60006020828403121561266357600080fd5b815161213e81612518565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156126be57600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761081b5761081b61258d565b60008261270b57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561272257600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561081b5761081b61258d565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561282a5784516001600160a01b031683529383019391830191600101612805565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202dc32d7d360122c5acea0eb8a077ea7b523cc6847fb68705565cb9502546d07864736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80638a8c523c1161012e578063cb963728116100ab578063e2f456051161006f578063e2f45605146106a1578063e37ba8f9146106b7578063f2fde38b146106d7578063f5648a4f146106f7578063f8b45b051461070c57600080fd5b8063cb9637281461060b578063d257b34f1461062b578063d46980161461064b578063d85ba0631461066b578063dd62ed3e1461068157600080fd5b8063a9059cbb116100f2578063a9059cbb1461057b578063aacebbe31461059b578063bbc0c742146105bb578063c0246668146105d5578063c8c8ebe4146105f557600080fd5b80638a8c523c146104f35780638da5cb5b1461050857806395d89b4114610526578063961883991461053b578063a457c2d71461055b57600080fd5b806342966c68116101bc5780636ddd1713116101805780636ddd17131461044957806370a0823114610468578063715018a61461049e5780637571336a146104b357806375f0a874146104d357600080fd5b806342966c681461039a57806349bd5a5e146103ba5780634fbee193146103da57806366ca9b83146104135780636a486a8e1461043357600080fd5b806318160ddd1161020357806318160ddd1461030957806323b872dd1461032857806327c8f83514610348578063313ce5671461035e578063395093511461037a57600080fd5b806302dbd8f81461024057806306fdde0314610262578063095ea7b31461028d5780631694505e146102bd57600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061026061025b3660046123f0565b610722565b005b34801561026e57600080fd5b50610277610775565b6040516102849190612412565b60405180910390f35b34801561029957600080fd5b506102ad6102a8366004612475565b610807565b6040519015158152602001610284565b3480156102c957600080fd5b506102f17f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610284565b34801561031557600080fd5b506002545b604051908152602001610284565b34801561033457600080fd5b506102ad6103433660046124a1565b610821565b34801561035457600080fd5b506102f161dead81565b34801561036a57600080fd5b5060405160128152602001610284565b34801561038657600080fd5b506102ad610395366004612475565b610845565b3480156103a657600080fd5b506102606103b53660046124e2565b610867565b3480156103c657600080fd5b506006546102f1906001600160a01b031681565b3480156103e657600080fd5b506102ad6103f53660046124fb565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561041f57600080fd5b5061026061042e3660046123f0565b610874565b34801561043f57600080fd5b5061031a60105481565b34801561045557600080fd5b50600c546102ad90610100900460ff1681565b34801561047457600080fd5b5061031a6104833660046124fb565b6001600160a01b031660009081526020819052604090205490565b3480156104aa57600080fd5b506102606108b5565b3480156104bf57600080fd5b506102606104ce366004612526565b6108c9565b3480156104df57600080fd5b506007546102f1906001600160a01b031681565b3480156104ff57600080fd5b506102606108fc565b34801561051457600080fd5b506005546001600160a01b03166102f1565b34801561053257600080fd5b50610277610cad565b34801561054757600080fd5b506102606105563660046123f0565b610cbc565b34801561056757600080fd5b506102ad610576366004612475565b610dd1565b34801561058757600080fd5b506102ad610596366004612475565b610e4c565b3480156105a757600080fd5b506102606105b63660046124fb565b610e5a565b3480156105c757600080fd5b50600c546102ad9060ff1681565b3480156105e157600080fd5b506102606105f0366004612526565b610efc565b34801561060157600080fd5b5061031a60095481565b34801561061757600080fd5b506102606106263660046124fb565b610f63565b34801561063757600080fd5b506102ad6106463660046124e2565b6110f3565b34801561065757600080fd5b506008546102f1906001600160a01b031681565b34801561067757600080fd5b5061031a600d5481565b34801561068d57600080fd5b5061031a61069c36600461255f565b611233565b3480156106ad57600080fd5b5061031a600a5481565b3480156106c357600080fd5b506102606106d23660046124fb565b61125e565b3480156106e357600080fd5b506102606106f23660046124fb565b611300565b34801561070357600080fd5b50610260611376565b34801561071857600080fd5b5061031a600b5481565b61072a6113cb565b6011829055601281905561073e81836125a3565b60108190556015819055600a10156107715760405162461bcd60e51b8152600401610768906125b6565b60405180910390fd5b5050565b606060038054610784906125fa565b80601f01602080910402602001604051908101604052809291908181526020018280546107b0906125fa565b80156107fd5780601f106107d2576101008083540402835291602001916107fd565b820191906000526020600020905b8154815290600101906020018083116107e057829003601f168201915b5050505050905090565b600033610815818585611425565b60019150505b92915050565b60003361082f858285611549565b61083a8585856115bd565b506001949350505050565b6000336108158185856108588383611233565b61086291906125a3565b611425565b6108713382611c87565b50565b61087c6113cb565b600e829055600f81905561089081836125a3565b600d819055600a10156107715760405162461bcd60e51b8152600401610768906125b6565b6108bd6113cb565b6108c76000611db9565b565b6108d16113cb565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6109046113cb565b600c5460ff16156109575760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c7265616479206163746976652e0000000000000000006044820152606401610768565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d99190612634565b6001600160a01b031663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6a9190612634565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adb9190612634565b600680546001600160a01b0319166001600160a01b03929092169182179055610b08903090600019611425565b60065460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af1158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba09190612651565b50600654610bb8906001600160a01b03166001611e0b565b600654610bcf906001600160a01b031660016108c9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7194730610c1f306001600160a01b031660009081526020819052604090205490565b600080610c346005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610c569695949392919061266e565b60606040518083038185885af1158015610c74573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c9991906126a9565b5050600c805461ffff191661010117905550565b606060048054610784906125fa565b610cc46113cb565b6103e8610cd060025490565b610cdb9060056126d7565b610ce591906126ee565b821015610d455760405162461bcd60e51b815260206004820152602860248201527f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460448201526768616e20302e352560c01b6064820152608401610768565b6103e8610d5160025490565b610d5c9060056126d7565b610d6691906126ee565b811015610dc95760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e352560a81b6064820152608401610768565b600b55600955565b60003381610ddf8286611233565b905083811015610e3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610768565b61083a8286868403611425565b6000336108158185856115bd565b610e626113cb565b6001600160a01b038116610eab5760405162461bcd60e51b815260206004820152601060248201526f045524332303a204164647265737320360841b6044820152606401610768565b600780546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a35050565b610f046113cb565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b610f6b6113cb565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd69190612710565b1161100f5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610768565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107a9190612710565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee9190612651565b505050565b60006110fd6113cb565b620186a061110a60025490565b6111159060016126d7565b61111f91906126ee565b8210156111945760405162461bcd60e51b815260206004820152603c60248201527f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e000000006064820152608401610768565b6103e86111a060025490565b6111ab9060056126d7565b6111b591906126ee565b82111561122a5760405162461bcd60e51b815260206004820152603b60248201527f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e00000000006064820152608401610768565b50600a55600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112666113cb565b6001600160a01b0381166112af5760405162461bcd60e51b815260206004820152601060248201526f045524332303a204164647265737320360841b6044820152606401610768565b600880546001600160a01b038381166001600160a01b03198316811790935560405191169182917f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db90600090a35050565b6113086113cb565b6001600160a01b03811661136d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610768565b61087181611db9565b61137e6113cb565b604051600090339047908381818185875af1925050503d80600081146113c0576040519150601f19603f3d011682016040523d82523d6000602084013e6113c5565b606091505b50505050565b6005546001600160a01b031633146108c75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610768565b6001600160a01b0383166114875760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610768565b6001600160a01b0382166114e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610768565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006115558484611233565b905060001981146113c557818110156115b05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610768565b6113c58484848403611425565b6001600160a01b0383166115e35760405162461bcd60e51b815260040161076890612729565b6001600160a01b0382166116095760405162461bcd60e51b81526004016107689061276e565b8060000361161d576110ee83836000611e5f565b6005546001600160a01b0384811691161480159061164957506005546001600160a01b03838116911614155b801561165d57506001600160a01b03821615155b801561167457506001600160a01b03821661dead14155b801561168a5750600654600160a01b900460ff16155b156119ad57600c5460ff16611724576001600160a01b03831660009081526016602052604090205460ff16806116d857506001600160a01b03821660009081526016602052604090205460ff165b6117245760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610768565b6001600160a01b03831660009081526018602052604090205460ff16801561176557506001600160a01b03821660009081526017602052604090205460ff16155b1561185b576009548111156117e25760405162461bcd60e51b815260206004820152603c60248201527f45524332303a20427579207472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e742e000000006064820152608401610768565b600b546001600160a01b03831660009081526020819052604090205461180890836125a3565b11156118565760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610768565b6119ad565b6001600160a01b03821660009081526018602052604090205460ff16801561189c57506001600160a01b03831660009081526017602052604090205460ff16155b15611919576009548111156118565760405162461bcd60e51b815260206004820152603d60248201527f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560448201527f65647320746865206d61785472616e73616374696f6e416d6f756e742e0000006064820152608401610768565b6001600160a01b03821660009081526017602052604090205460ff166119ad57600b546001600160a01b03831660009081526020819052604090205461195f90836125a3565b11156119ad5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610768565b30600090815260208190526040902054600a54811080159081906119d85750600c54610100900460ff165b80156119ee5750600654600160a01b900460ff16155b8015611a1357506001600160a01b03851660009081526018602052604090205460ff16155b8015611a3857506001600160a01b03851660009081526016602052604090205460ff16155b8015611a5d57506001600160a01b03841660009081526016602052604090205460ff16155b15611a8b576006805460ff60a01b1916600160a01b179055611a7d611f89565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680611ad957506001600160a01b03851660009081526016602052604090205460ff165b15611ae2575060005b60008115611c6d576001600160a01b03861660009081526018602052604090205460ff168015611b1457506000601054115b15611ba257611b396064611b336010548861213290919063ffffffff16565b90612145565b905060105460125482611b4c91906126d7565b611b5691906126ee565b60146000828254611b6791906125a3565b9091555050601054601154611b7c90836126d7565b611b8691906126ee565b60136000828254611b9791906125a3565b90915550611c4f9050565b6001600160a01b03871660009081526018602052604090205460ff168015611bcc57506000600d54115b15611c4f57611beb6064611b33600d548861213290919063ffffffff16565b9050600d54600f5482611bfe91906126d7565b611c0891906126ee565b60146000828254611c1991906125a3565b9091555050600d54600e54611c2e90836126d7565b611c3891906126ee565b60136000828254611c4991906125a3565b90915550505b8015611c6057611c60873083611e5f565b611c6a81866127b1565b94505b611c78878787611e5f565b50506015546010555050505050565b6001600160a01b038216611ce75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610768565b6001600160a01b03821660009081526020819052604090205481811015611d5b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610768565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611e855760405162461bcd60e51b815260040161076890612729565b6001600160a01b038216611eab5760405162461bcd60e51b81526004016107689061276e565b6001600160a01b03831660009081526020819052604090205481811015611f235760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610768565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36113c5565b3060009081526020819052604081205490506000601354601454611fad91906125a3565b90506000821580611fbc575081155b15611fc657505050565b600a54611fd49060146126d7565b831115611fec57600a54611fe99060146126d7565b92505b600060028360145486611fff91906126d7565b61200991906126ee565b61201391906126ee565b905060006120218583612151565b90504761202d8261215d565b60006120394783612151565b9050600061205687611b336013548561213290919063ffffffff16565b9050600061206482846127b1565b600060148190556013559050851580159061207f5750600081115b156120d25761208e868261231d565b601454604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116904790600081818185875af1925050503d806000811461211f576040519150601f19603f3d011682016040523d82523d6000602084013e612124565b606091505b505050505050505050505050565b600061213e82846126d7565b9392505050565b600061213e82846126ee565b600061213e82846127b1565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612192576121926127c4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122349190612634565b81600181518110612247576122476127c4565b60200260200101906001600160a01b031690816001600160a01b031681525050612292307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611425565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906122e79085906000908690309042906004016127da565b600060405180830381600087803b15801561230157600080fd5b505af1158015612315573d6000803e3d6000fd5b505050505050565b612348307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611425565b60085460405163f305d71960e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263f305d7199285926123a692309289926000928392911690429060040161266e565b60606040518083038185885af11580156123c4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123e991906126a9565b5050505050565b6000806040838503121561240357600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561243f57858101830151858201604001528201612423565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461087157600080fd5b6000806040838503121561248857600080fd5b823561249381612460565b946020939093013593505050565b6000806000606084860312156124b657600080fd5b83356124c181612460565b925060208401356124d181612460565b929592945050506040919091013590565b6000602082840312156124f457600080fd5b5035919050565b60006020828403121561250d57600080fd5b813561213e81612460565b801515811461087157600080fd5b6000806040838503121561253957600080fd5b823561254481612460565b9150602083013561255481612518565b809150509250929050565b6000806040838503121561257257600080fd5b823561257d81612460565b9150602083013561255481612460565b634e487b7160e01b600052601160045260246000fd5b8082018082111561081b5761081b61258d565b60208082526024908201527f45524332303a204d757374206b656570206665657320617420313025206f72206040820152636c65737360e01b606082015260800190565b600181811c9082168061260e57607f821691505b60208210810361262e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561264657600080fd5b815161213e81612460565b60006020828403121561266357600080fd5b815161213e81612518565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156126be57600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761081b5761081b61258d565b60008261270b57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561272257600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561081b5761081b61258d565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561282a5784516001600160a01b031683529383019391830191600101612805565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202dc32d7d360122c5acea0eb8a077ea7b523cc6847fb68705565cb9502546d07864736f6c63430008110033

Deployed Bytecode Sourcemap

34819:13543:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40456:385;;;;;;;;;;-1:-1:-1;40456:385:0;;;;;:::i;:::-;;:::i;:::-;;9718:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12219:242;;;;;;;;;;-1:-1:-1;12219:242:0;;;;;:::i;:::-;;:::i;:::-;;;1441:14:1;;1434:22;1416:41;;1404:2;1389:18;12219:242:0;1276:187:1;34916:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1659:32:1;;;1641:51;;1629:2;1614:18;34916:51:0;1468:230:1;10847:108:0;;;;;;;;;;-1:-1:-1;10935:12:0;;10847:108;;;1849:25:1;;;1837:2;1822:18;10847:108:0;1703:177:1;13041:295:0;;;;;;;;;;-1:-1:-1;13041:295:0;;;;;:::i;:::-;;:::i;35009:53::-;;;;;;;;;;;;35055:6;35009:53;;10689:93;;;;;;;;;;-1:-1:-1;10689:93:0;;10772:2;2696:36:1;;2684:2;2669:18;10689:93:0;2554:184:1;13745:270:0;;;;;;;;;;-1:-1:-1;13745:270:0;;;;;:::i;:::-;;:::i;37895:83::-;;;;;;;;;;-1:-1:-1;37895:83:0;;;;;:::i;:::-;;:::i;34974:28::-;;;;;;;;;;-1:-1:-1;34974:28:0;;;;-1:-1:-1;;;;;34974:28:0;;;42373:126;;;;;;;;;;-1:-1:-1;42373:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;42463:28:0;42439:4;42463:28;;;:19;:28;;;;;;;;;42373:126;40108:340;;;;;;;;;;-1:-1:-1;40108:340:0;;;;;:::i;:::-;;:::i;35484:28::-;;;;;;;;;;;;;;;;35332:31;;;;;;;;;;-1:-1:-1;35332:31:0;;;;;;;;;;;11018:177;;;;;;;;;;-1:-1:-1;11018:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;11169:18:0;11137:7;11169:18;;;;;;;;;;;;11018:177;3331:103;;;;;;;;;;;;;:::i;39933:167::-;;;;;;;;;;-1:-1:-1;39933:167:0;;;;;:::i;:::-;;:::i;35101:30::-;;;;;;;;;;-1:-1:-1;35101:30:0;;;;-1:-1:-1;;;;;35101:30:0;;;37986:905;;;;;;;;;;;;;:::i;2690:87::-;;;;;;;;;;-1:-1:-1;2763:6:0;;-1:-1:-1;;;;;2763:6:0;2690:87;;9937:104;;;;;;;;;;;;;:::i;39418:507::-;;;;;;;;;;-1:-1:-1;39418:507:0;;;;;:::i;:::-;;:::i;14518:505::-;;;;;;;;;;-1:-1:-1;14518:505:0;;;;;:::i;:::-;;:::i;11401:234::-;;;;;;;;;;-1:-1:-1;11401:234:0;;;;;:::i;:::-;;:::i;40849:334::-;;;;;;;;;;-1:-1:-1;40849:334:0;;;;;:::i;:::-;;:::i;35292:33::-;;;;;;;;;;-1:-1:-1;35292:33:0;;;;;;;;41533:182;;;;;;;;;;-1:-1:-1;41533:182:0;;;;;:::i;:::-;;:::i;35177:35::-;;;;;;;;;;;;;;;;41914:255;;;;;;;;;;-1:-1:-1;41914:255:0;;;;;:::i;:::-;;:::i;38899:511::-;;;;;;;;;;-1:-1:-1;38899:511:0;;;;;:::i;:::-;;:::i;35138:30::-;;;;;;;;;;-1:-1:-1;35138:30:0;;;;-1:-1:-1;;;;;35138:30:0;;;35372:27;;;;;;;;;;;;;;;;11698:201;;;;;;;;;;-1:-1:-1;11698:201:0;;;;;:::i;:::-;;:::i;35219:33::-;;;;;;;;;;;;;;;;41191:334;;;;;;;;;;-1:-1:-1;41191:334:0;;;;;:::i;:::-;;:::i;3589:238::-;;;;;;;;;;-1:-1:-1;3589:238:0;;;;;:::i;:::-;;:::i;41723:183::-;;;;;;;;;;;;;:::i;35259:24::-;;;;;;;;;;;;;;;;40456:385;2576:13;:11;:13::i;:::-;40579:16:::1;:32:::0;;;40622:16:::1;:32:::0;;;40681:35:::1;40641:13:::0;40598;40681:35:::1;:::i;:::-;40665:13;:51:::0;;;40727:11:::1;:27:::0;;;40790:2:::1;-1:-1:-1::0;40773:19:0::1;40765:68;;;;-1:-1:-1::0;;;40765:68:0::1;;;;;;;:::i;:::-;;;;;;;;;40456:385:::0;;:::o;9718:100::-;9772:13;9805:5;9798:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9718:100;:::o;12219:242::-;12338:4;1382:10;12399:32;1382:10;12415:7;12424:6;12399:8;:32::i;:::-;12449:4;12442:11;;;12219:242;;;;;:::o;13041:295::-;13172:4;1382:10;13230:38;13246:4;1382:10;13261:6;13230:15;:38::i;:::-;13279:27;13289:4;13295:2;13299:6;13279:9;:27::i;:::-;-1:-1:-1;13324:4:0;;13041:295;-1:-1:-1;;;;13041:295:0:o;13745:270::-;13860:4;1382:10;13921:64;1382:10;13937:7;13974:10;13946:25;1382:10;13937:7;13946:9;:25::i;:::-;:38;;;;:::i;:::-;13921:8;:64::i;37895:83::-;37945:25;37951:10;37963:6;37945:5;:25::i;:::-;37895:83;:::o;40108:340::-;2576:13;:11;:13::i;:::-;40230:15:::1;:31:::0;;;40272:15:::1;:31:::0;;;40329:33:::1;40290:13:::0;40248;40329:33:::1;:::i;:::-;40314:12;:48:::0;;;40397:2:::1;-1:-1:-1::0;40381:18:0::1;40373:67;;;;-1:-1:-1::0;;;40373:67:0::1;;;;;;;:::i;3331:103::-:0;2576:13;:11;:13::i;:::-;3396:30:::1;3423:1;3396:18;:30::i;:::-;3331:103::o:0;39933:167::-;2576:13;:11;:13::i;:::-;-1:-1:-1;;;;;40046:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;40046:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39933:167::o;37986:905::-;2576:13;:11;:13::i;:::-;38050::::1;::::0;::::1;;38049:14;38041:50;;;::::0;-1:-1:-1;;;38041:50:0;;5337:2:1;38041:50:0::1;::::0;::::1;5319:21:1::0;5376:2;5356:18;;;5349:30;5415:25;5395:18;;;5388:53;5458:18;;38041:50:0::1;5135:347:1::0;38041:50:0::1;38138:15;-1:-1:-1::0;;;;;38138:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38120:55:0::1;;38198:4;38218:15;-1:-1:-1::0;;;;;38218:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38120:131;::::0;-1:-1:-1;;;;;;38120:131:0::1;::::0;;;;;;-1:-1:-1;;;;;5973:15:1;;;38120:131:0::1;::::0;::::1;5955:34:1::0;6025:15;;6005:18;;;5998:43;5890:18;;38120:131:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38104:13;:147:::0;;-1:-1:-1;;;;;;38104:147:0::1;-1:-1:-1::0;;;;;38104:147:0;;;::::1;::::0;;::::1;::::0;;38262:66:::1;::::0;38279:4:::1;::::0;-1:-1:-1;;38262:8:0::1;:66::i;:::-;38346:13;::::0;38339:111:::1;::::0;-1:-1:-1;;;38339:111:0;;-1:-1:-1;;;;;38391:15:0::1;6244:32:1::0;;38339:111:0::1;::::0;::::1;6226:51:1::0;-1:-1:-1;;6293:18:1;;;6286:34;38346:13:0;;::::1;::::0;38339:29:::1;::::0;6199:18:1;;38339:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;38500:13:0::1;::::0;38463:58:::1;::::0;-1:-1:-1;;;;;38500:13:0::1;::::0;38463:28:::1;:58::i;:::-;38566:13;::::0;38532:55:::1;::::0;-1:-1:-1;;;;;38566:13:0::1;::::0;38532:25:::1;:55::i;:::-;38600:15;-1:-1:-1::0;;;;;38600:31:0::1;;38639:21;38684:4;38704:24;38722:4;-1:-1:-1::0;;;;;11169:18:0;11137:7;11169:18;;;;;;;;;;;;11018:177;38704:24:::1;38743:1;38759::::0;38775:7:::1;2763:6:::0;;-1:-1:-1;;;;;2763:6:0;;2690:87;38775:7:::1;38797:15;38600:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;38834:13:0::1;:20:::0;;-1:-1:-1;;38865:18:0;;;;;-1:-1:-1;37986:905:0:o;9937:104::-;9993:13;10026:7;10019:14;;;;;:::i;39418:507::-;2576:13;:11;:13::i;:::-;39612:4:::1;39591:13;10935:12:::0;;;10847:108;39591:13:::1;:17;::::0;39607:1:::1;39591:17;:::i;:::-;39590:26;;;;:::i;:::-;39576:9;:41;;39554:131;;;::::0;-1:-1:-1;;;39554:131:0;;8101:2:1;39554:131:0::1;::::0;::::1;8083:21:1::0;8140:2;8120:18;;;8113:30;8179:34;8159:18;;;8152:62;-1:-1:-1;;;8230:18:1;;;8223:38;8278:19;;39554:131:0::1;7899:404:1::0;39554:131:0::1;39760:4;39739:13;10935:12:::0;;;10847:108;39739:13:::1;:17;::::0;39755:1:::1;39739:17;:::i;:::-;39738:26;;;;:::i;:::-;39718:15;:47;;39696:140;;;::::0;-1:-1:-1;;;39696:140:0;;8510:2:1;39696:140:0::1;::::0;::::1;8492:21:1::0;8549:2;8529:18;;;8522:30;8588:34;8568:18;;;8561:62;-1:-1:-1;;;8639:18:1;;;8632:41;8690:19;;39696:140:0::1;8308:407:1::0;39696:140:0::1;39847:9;:27:::0;39885:20:::1;:32:::0;39418:507::o;14518:505::-;14638:4;1382:10;14638:4;14726:25;1382:10;14743:7;14726:9;:25::i;:::-;14699:52;;14804:15;14784:16;:35;;14762:122;;;;-1:-1:-1;;;14762:122:0;;8922:2:1;14762:122:0;;;8904:21:1;8961:2;8941:18;;;8934:30;9000:34;8980:18;;;8973:62;-1:-1:-1;;;9051:18:1;;;9044:35;9096:19;;14762:122:0;8720:401:1;14762:122:0;14920:60;14929:5;14936:7;14964:15;14945:16;:34;14920:8;:60::i;11401:234::-;11516:4;1382:10;11577:28;1382:10;11594:2;11598:6;11577:9;:28::i;40849:334::-;2576:13;:11;:13::i;:::-;-1:-1:-1;;;;;40967:30:0;::::1;40959:59;;;::::0;-1:-1:-1;;;40959:59:0;;9328:2:1;40959:59:0::1;::::0;::::1;9310:21:1::0;9367:2;9347:18;;;9340:30;-1:-1:-1;;;9386:18:1;;;9379:46;9442:18;;40959:59:0::1;9126:340:1::0;40959:59:0::1;41049:15;::::0;;-1:-1:-1;;;;;41075:34:0;;::::1;-1:-1:-1::0;;;;;;41075:34:0;::::1;::::0;::::1;::::0;;;41125:50:::1;::::0;41049:15;::::1;::::0;;;41125:50:::1;::::0;41029:17:::1;::::0;41125:50:::1;40948:235;40849:334:::0;:::o;41533:182::-;2576:13;:11;:13::i;:::-;-1:-1:-1;;;;;41618:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;41618:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41673:34;;1416:41:1;;;41673:34:0::1;::::0;1389:18:1;41673:34:0::1;;;;;;;41533:182:::0;;:::o;41914:255::-;2576:13;:11;:13::i;:::-;41992:36:::1;::::0;-1:-1:-1;;;41992:36:0;;42022:4:::1;41992:36;::::0;::::1;1641:51:1::0;42031:1:0::1;::::0;-1:-1:-1;;;;;41992:21:0;::::1;::::0;::::1;::::0;1614:18:1;;41992:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;41984:62;;;::::0;-1:-1:-1;;;41984:62:0;;9862:2:1;41984:62:0::1;::::0;::::1;9844:21:1::0;9901:1;9881:18;;;9874:29;-1:-1:-1;;;9919:18:1;;;9912:39;9968:18;;41984:62:0::1;9660:332:1::0;41984:62:0::1;42074:36;::::0;-1:-1:-1;;;42074:36:0;;42104:4:::1;42074:36;::::0;::::1;1641:51:1::0;42057:14:0::1;::::0;-1:-1:-1;;;;;42074:21:0;::::1;::::0;::::1;::::0;1614:18:1;;42074:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42121:40;::::0;-1:-1:-1;;;42121:40:0;;42142:10:::1;42121:40;::::0;::::1;6226:51:1::0;6293:18;;;6286:34;;;42057:53:0;;-1:-1:-1;;;;;;42121:20:0;::::1;::::0;::::1;::::0;6199:18:1;;42121:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41973:196;41914:255:::0;:::o;38899:511::-;39007:4;2576:13;:11;:13::i;:::-;39086:6:::1;39065:13;10935:12:::0;;;10847:108;39065:13:::1;:17;::::0;39081:1:::1;39065:17;:::i;:::-;39064:28;;;;:::i;:::-;39051:9;:41;;39029:151;;;::::0;-1:-1:-1;;;39029:151:0;;10199:2:1;39029:151:0::1;::::0;::::1;10181:21:1::0;10238:2;10218:18;;;10211:30;10277:34;10257:18;;;10250:62;10348:30;10328:18;;;10321:58;10396:19;;39029:151:0::1;9997:424:1::0;39029:151:0::1;39248:4;39227:13;10935:12:::0;;;10847:108;39227:13:::1;:17;::::0;39243:1:::1;39227:17;:::i;:::-;39226:26;;;;:::i;:::-;39213:9;:39;;39191:148;;;::::0;-1:-1:-1;;;39191:148:0;;10628:2:1;39191:148:0::1;::::0;::::1;10610:21:1::0;10667:2;10647:18;;;10640:30;10706:34;10686:18;;;10679:62;10777:29;10757:18;;;10750:57;10824:19;;39191:148:0::1;10426:423:1::0;39191:148:0::1;-1:-1:-1::0;39350:18:0::1;:30:::0;39398:4:::1;::::0;38899:511::o;11698:201::-;-1:-1:-1;;;;;11864:18:0;;;11832:7;11864:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11698:201::o;41191:334::-;2576:13;:11;:13::i;:::-;-1:-1:-1;;;;;41309:30:0;::::1;41301:59;;;::::0;-1:-1:-1;;;41301:59:0;;9328:2:1;41301:59:0::1;::::0;::::1;9310:21:1::0;9367:2;9347:18;;;9340:30;-1:-1:-1;;;9386:18:1;;;9379:46;9442:18;;41301:59:0::1;9126:340:1::0;41301:59:0::1;41391:15;::::0;;-1:-1:-1;;;;;41417:34:0;;::::1;-1:-1:-1::0;;;;;;41417:34:0;::::1;::::0;::::1;::::0;;;41467:50:::1;::::0;41391:15;::::1;::::0;;;41467:50:::1;::::0;41371:17:::1;::::0;41467:50:::1;41290:235;41191:334:::0;:::o;3589:238::-;2576:13;:11;:13::i;:::-;-1:-1:-1;;;;;3692:22:0;::::1;3670:110;;;::::0;-1:-1:-1;;;3670:110:0;;11056:2:1;3670:110:0::1;::::0;::::1;11038:21:1::0;11095:2;11075:18;;;11068:30;11134:34;11114:18;;;11107:62;-1:-1:-1;;;11185:18:1;;;11178:36;11231:19;;3670:110:0::1;10854:402:1::0;3670:110:0::1;3791:28;3810:8;3791:18;:28::i;41723:183::-:0;2576:13;:11;:13::i;:::-;41816:82:::1;::::0;41779:12:::1;::::0;41824:10:::1;::::0;41848:21:::1;::::0;41779:12;41816:82;41779:12;41816:82;41848:21;41824:10;41816:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;41723:183:0:o;2855:132::-;2763:6;;-1:-1:-1;;;;;2763:6:0;1382:10;2919:23;2911:68;;;;-1:-1:-1;;;2911:68:0;;11673:2:1;2911:68:0;;;11655:21:1;;;11692:18;;;11685:30;11751:34;11731:18;;;11724:62;11803:18;;2911:68:0;11471:356:1;18651:380:0;-1:-1:-1;;;;;18787:19:0;;18779:68;;;;-1:-1:-1;;;18779:68:0;;12034:2:1;18779:68:0;;;12016:21:1;12073:2;12053:18;;;12046:30;12112:34;12092:18;;;12085:62;-1:-1:-1;;;12163:18:1;;;12156:34;12207:19;;18779:68:0;11832:400:1;18779:68:0;-1:-1:-1;;;;;18866:21:0;;18858:68;;;;-1:-1:-1;;;18858:68:0;;12439:2:1;18858:68:0;;;12421:21:1;12478:2;12458:18;;;12451:30;12517:34;12497:18;;;12490:62;-1:-1:-1;;;12568:18:1;;;12561:32;12610:19;;18858:68:0;12237:398:1;18858:68:0;-1:-1:-1;;;;;18939:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18991:32;;1849:25:1;;;18991:32:0;;1822:18:1;18991:32:0;;;;;;;18651:380;;;:::o;19322:502::-;19457:24;19484:25;19494:5;19501:7;19484:9;:25::i;:::-;19457:52;;-1:-1:-1;;19524:16:0;:37;19520:297;;19624:6;19604:16;:26;;19578:117;;;;-1:-1:-1;;;19578:117:0;;12842:2:1;19578:117:0;;;12824:21:1;12881:2;12861:18;;;12854:30;12920:31;12900:18;;;12893:59;12969:18;;19578:117:0;12640:353:1;19578:117:0;19739:51;19748:5;19755:7;19783:6;19764:16;:25;19739:8;:51::i;42507:3484::-;-1:-1:-1;;;;;42639:18:0;;42631:68;;;;-1:-1:-1;;;42631:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42718:16:0;;42710:64;;;;-1:-1:-1;;;42710:64:0;;;;;;;:::i;:::-;42791:6;42801:1;42791:11;42787:93;;42819:28;42835:4;42841:2;42845:1;42819:15;:28::i;42787:93::-;2763:6;;-1:-1:-1;;;;;42910:15:0;;;2763:6;;42910:15;;;;:45;;-1:-1:-1;2763:6:0;;-1:-1:-1;;;;;42942:13:0;;;2763:6;;42942:13;;42910:45;:78;;;;-1:-1:-1;;;;;;42972:16:0;;;;42910:78;:112;;;;-1:-1:-1;;;;;;43005:17:0;;35055:6;43005:17;;42910:112;:138;;;;-1:-1:-1;43040:8:0;;-1:-1:-1;;;43040:8:0;;;;43039:9;42910:138;42892:1511;;;43080:13;;;;43075:210;;-1:-1:-1;;;;;43144:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;43173:23:0;;;;;;:19;:23;;;;;;;;43144:52;43114:155;;;;-1:-1:-1;;;43114:155:0;;14010:2:1;43114:155:0;;;13992:21:1;14049:2;14029:18;;;14022:30;14088:31;14068:18;;;14061:59;14137:18;;43114:155:0;13808:353:1;43114:155:0;-1:-1:-1;;;;;43347:31:0;;;;;;:25;:31;;;;;;;;:88;;;;-1:-1:-1;;;;;;43400:35:0;;;;;;:31;:35;;;;;;;;43399:36;43347:88;43325:1067;;;43510:20;;43500:6;:30;;43470:164;;;;-1:-1:-1;;;43470:164:0;;14368:2:1;43470:164:0;;;14350:21:1;14407:2;14387:18;;;14380:30;14446:34;14426:18;;;14419:62;14517:30;14497:18;;;14490:58;14565:19;;43470:164:0;14166:424:1;43470:164:0;43709:9;;-1:-1:-1;;;;;11169:18:0;;11137:7;11169:18;;;;;;;;;;;43683:22;;:6;:22;:::i;:::-;:35;;43653:135;;;;-1:-1:-1;;;43653:135:0;;14797:2:1;43653:135:0;;;14779:21:1;14836:2;14816:18;;;14809:30;14875:28;14855:18;;;14848:56;14921:18;;43653:135:0;14595:350:1;43653:135:0;43325:1067;;;-1:-1:-1;;;;;43870:29:0;;;;;;:25;:29;;;;;;;;:88;;;;-1:-1:-1;;;;;;43921:37:0;;;;;;:31;:37;;;;;;;;43920:38;43870:88;43848:544;;;44033:20;;44023:6;:30;;43993:165;;;;-1:-1:-1;;;43993:165:0;;15152:2:1;43993:165:0;;;15134:21:1;15191:2;15171:18;;;15164:30;15230:34;15210:18;;;15203:62;15301:31;15281:18;;;15274:59;15350:19;;43993:165:0;14950:425:1;43848:544:0;-1:-1:-1;;;;;44185:35:0;;;;;;:31;:35;;;;;;;;44180:212;;44297:9;;-1:-1:-1;;;;;11169:18:0;;11137:7;11169:18;;;;;;;;;;;44271:22;;:6;:22;:::i;:::-;:35;;44241:135;;;;-1:-1:-1;;;44241:135:0;;14797:2:1;44241:135:0;;;14779:21:1;14836:2;14816:18;;;14809:30;14875:28;14855:18;;;14848:56;14921:18;;44241:135:0;14595:350:1;44241:135:0;44464:4;44415:28;11169:18;;;;;;;;;;;44522;;44498:42;;;;;;;44571:35;;-1:-1:-1;44595:11:0;;;;;;;44571:35;:61;;;;-1:-1:-1;44624:8:0;;-1:-1:-1;;;44624:8:0;;;;44623:9;44571:61;:110;;;;-1:-1:-1;;;;;;44650:31:0;;;;;;:25;:31;;;;;;;;44649:32;44571:110;:153;;;;-1:-1:-1;;;;;;44699:25:0;;;;;;:19;:25;;;;;;;;44698:26;44571:153;:194;;;;-1:-1:-1;;;;;;44742:23:0;;;;;;:19;:23;;;;;;;;44741:24;44571:194;44553:326;;;44792:8;:15;;-1:-1:-1;;;;44792:15:0;-1:-1:-1;;;44792:15:0;;;44824:10;:8;:10::i;:::-;44851:8;:16;;-1:-1:-1;;;;44851:16:0;;;44553:326;44907:8;;-1:-1:-1;;;;;44932:25:0;;44891:12;44932:25;;;:19;:25;;;;;;44907:8;-1:-1:-1;;;44907:8:0;;;;;44906:9;;44932:25;;:52;;-1:-1:-1;;;;;;44961:23:0;;;;;;:19;:23;;;;;;;;44932:52;44928:100;;;-1:-1:-1;45011:5:0;44928:100;45040:12;45073:7;45069:831;;;-1:-1:-1;;;;;45125:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;45174:1;45158:13;;:17;45125:50;45121:630;;;45203:34;45233:3;45203:25;45214:13;;45203:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;45196:41;;45306:13;;45286:16;;45279:4;:23;;;;:::i;:::-;45278:41;;;;:::i;:::-;45256:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;45388:13:0;;45368:16;;45361:23;;:4;:23;:::i;:::-;45360:41;;;;:::i;:::-;45338:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;45121:630:0;;-1:-1:-1;45121:630:0;;-1:-1:-1;;;;;45463:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;45513:1;45498:12;;:16;45463:51;45459:292;;;45542:33;45571:3;45542:24;45553:12;;45542:6;:10;;:24;;;;:::i;:33::-;45535:40;;45643:12;;45624:15;;45617:4;:22;;;;:::i;:::-;45616:39;;;;:::i;:::-;45594:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;45723:12:0;;45704:15;;45697:22;;:4;:22;:::i;:::-;45696:39;;;;:::i;:::-;45674:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;45459:292:0;45771:8;;45767:91;;45800:42;45816:4;45830;45837;45800:15;:42::i;:::-;45874:14;45884:4;45874:14;;:::i;:::-;;;45069:831;45912:33;45928:4;45934:2;45938:6;45912:15;:33::i;:::-;-1:-1:-1;;45972:11:0;;45956:13;:27;-1:-1:-1;;;;;42507:3484:0:o;17538:675::-;-1:-1:-1;;;;;17622:21:0;;17614:67;;;;-1:-1:-1;;;17614:67:0;;15715:2:1;17614:67:0;;;15697:21:1;15754:2;15734:18;;;15727:30;15793:34;15773:18;;;15766:62;-1:-1:-1;;;15844:18:1;;;15837:31;15885:19;;17614:67:0;15513:397:1;17614:67:0;-1:-1:-1;;;;;17781:18:0;;17756:22;17781:18;;;;;;;;;;;17818:24;;;;17810:71;;;;-1:-1:-1;;;17810:71:0;;16117:2:1;17810:71:0;;;16099:21:1;16156:2;16136:18;;;16129:30;16195:34;16175:18;;;16168:62;-1:-1:-1;;;16246:18:1;;;16239:32;16288:19;;17810:71:0;15915:398:1;17810:71:0;-1:-1:-1;;;;;17917:18:0;;:9;:18;;;;;;;;;;;17938:23;;;17917:44;;18056:12;:22;;;;;;;18107:37;1849:25:1;;;17917:9:0;;:18;18107:37;;1822:18:1;18107:37:0;;;;;;;42121:40:::1;41973:196;41914:255:::0;:::o;3987:191::-;4080:6;;;-1:-1:-1;;;;;4097:17:0;;;-1:-1:-1;;;;;;4097:17:0;;;;;;;4130:40;;4080:6;;;4097:17;4080:6;;4130:40;;4061:16;;4130:40;4050:128;3987:191;:::o;42177:188::-;-1:-1:-1;;;;;42260:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;42260:39:0;;;;;;;;;;42317:40;;42260:39;;:31;42317:40;;;42177:188;;:::o;15493:877::-;-1:-1:-1;;;;;15624:18:0;;15616:68;;;;-1:-1:-1;;;15616:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15703:16:0;;15695:64;;;;-1:-1:-1;;;15695:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15845:15:0;;15823:19;15845:15;;;;;;;;;;;15893:21;;;;15871:109;;;;-1:-1:-1;;;15871:109:0;;16520:2:1;15871:109:0;;;16502:21:1;16559:2;16539:18;;;16532:30;16598:34;16578:18;;;16571:62;-1:-1:-1;;;16649:18:1;;;16642:36;16695:19;;15871:109:0;16318:402:1;15871:109:0;-1:-1:-1;;;;;16016:15:0;;;:9;:15;;;;;;;;;;;16034:20;;;16016:38;;16234:13;;;;;;;;;;:23;;;;;;16286:26;;1849:25:1;;;16234:13:0;;16286:26;;1822:18:1;16286:26:0;;;;;;;16325:37;41914:255;46886:1473;46969:4;46925:23;11169:18;;;;;;;;;;;46925:50;;46986:25;47035:18;;47014;;:39;;;;:::i;:::-;46986:67;-1:-1:-1;47064:12:0;47093:20;;;:46;;-1:-1:-1;47117:22:0;;47093:46;47089:85;;;47156:7;;;46886:1473::o;47089:85::-;47208:18;;:23;;47229:2;47208:23;:::i;:::-;47190:15;:41;47186:115;;;47266:18;;:23;;47287:2;47266:23;:::i;:::-;47248:41;;47186:115;47313:23;47426:1;47393:17;47358:18;;47340:15;:36;;;;:::i;:::-;47339:71;;;;:::i;:::-;:88;;;;:::i;:::-;47313:114;-1:-1:-1;47438:26:0;47467:36;:15;47313:114;47467:19;:36::i;:::-;47438:65;-1:-1:-1;47544:21:0;47578:36;47438:65;47578:16;:36::i;:::-;47627:18;47648:44;:21;47674:17;47648:25;:44::i;:::-;47627:65;;47705:23;47731:81;47784:17;47731:34;47746:18;;47731:10;:14;;:34;;;;:::i;:81::-;47705:107;-1:-1:-1;47825:23:0;47851:28;47705:107;47851:10;:28;:::i;:::-;47913:1;47892:18;:22;;;47925:18;:22;47825:54;-1:-1:-1;47964:19:0;;;;;:42;;;48005:1;47987:15;:19;47964:42;47960:278;;;48023:46;48036:15;48053;48023:12;:46::i;:::-;48193:18;;48089:137;;;16927:25:1;;;16983:2;16968:18;;16961:34;;;17011:18;;;17004:34;;;;48089:137:0;;;;;;16915:2:1;48089:137:0;;;47960:278;48272:15;;48264:87;;-1:-1:-1;;;;;48272:15:0;;;;48315:21;;48264:87;;;;48315:21;48272:15;48264:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;46886:1473:0:o;24969:98::-;25027:7;25054:5;25058:1;25054;:5;:::i;:::-;25047:12;24969:98;-1:-1:-1;;;24969:98:0:o;25368:::-;25426:7;25453:5;25457:1;25453;:5;:::i;24612:98::-;24670:7;24697:5;24701:1;24697;:5;:::i;45999:501::-;46089:16;;;46103:1;46089:16;;;;;;;;46065:21;;46089:16;;;;;;;;;;-1:-1:-1;46089:16:0;46065:40;;46134:4;46116;46121:1;46116:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;46116:23:0;;;-1:-1:-1;;;;;46116:23:0;;;;;46160:15;-1:-1:-1;;;;;46160:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46150:4;46155:1;46150:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;46150:32:0;;;-1:-1:-1;;;;;46150:32:0;;;;;46195:62;46212:4;46227:15;46245:11;46195:8;:62::i;:::-;46296:196;;-1:-1:-1;;;46296:196:0;;-1:-1:-1;;;;;46296:15:0;:66;;;;:196;;46377:11;;46403:1;;46419:4;;46446;;46466:15;;46296:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46054:446;45999:501;:::o;46508:370::-;46589:62;46606:4;46621:15;46639:11;46589:8;:62::i;:::-;46814:15;;46664:206;;-1:-1:-1;;;46664:206:0;;-1:-1:-1;;;;;46664:15:0;:31;;;;;46703:9;;46664:206;;46736:4;;46756:11;;46782:1;;;;46814:15;;;46844;;46664:206;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46508:370;;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;820:131::-;-1:-1:-1;;;;;895:31:1;;885:42;;875:70;;941:1;938;931:12;956:315;1024:6;1032;1085:2;1073:9;1064:7;1060:23;1056:32;1053:52;;;1101:1;1098;1091:12;1053:52;1140:9;1127:23;1159:31;1184:5;1159:31;:::i;:::-;1209:5;1261:2;1246:18;;;;1233:32;;-1:-1:-1;;;956:315:1:o;1885:456::-;1962:6;1970;1978;2031:2;2019:9;2010:7;2006:23;2002:32;1999:52;;;2047:1;2044;2037:12;1999:52;2086:9;2073:23;2105:31;2130:5;2105:31;:::i;:::-;2155:5;-1:-1:-1;2212:2:1;2197:18;;2184:32;2225:33;2184:32;2225:33;:::i;:::-;1885:456;;2277:7;;-1:-1:-1;;;2331:2:1;2316:18;;;;2303:32;;1885:456::o;2743:180::-;2802:6;2855:2;2843:9;2834:7;2830:23;2826:32;2823:52;;;2871:1;2868;2861:12;2823:52;-1:-1:-1;2894:23:1;;2743:180;-1:-1:-1;2743:180:1:o;2928:247::-;2987:6;3040:2;3028:9;3019:7;3015:23;3011:32;3008:52;;;3056:1;3053;3046:12;3008:52;3095:9;3082:23;3114:31;3139:5;3114:31;:::i;3180:118::-;3266:5;3259:13;3252:21;3245:5;3242:32;3232:60;;3288:1;3285;3278:12;3303:382;3368:6;3376;3429:2;3417:9;3408:7;3404:23;3400:32;3397:52;;;3445:1;3442;3435:12;3397:52;3484:9;3471:23;3503:31;3528:5;3503:31;:::i;:::-;3553:5;-1:-1:-1;3610:2:1;3595:18;;3582:32;3623:30;3582:32;3623:30;:::i;:::-;3672:7;3662:17;;;3303:382;;;;;:::o;3690:388::-;3758:6;3766;3819:2;3807:9;3798:7;3794:23;3790:32;3787:52;;;3835:1;3832;3825:12;3787:52;3874:9;3861:23;3893:31;3918:5;3893:31;:::i;:::-;3943:5;-1:-1:-1;4000:2:1;3985:18;;3972:32;4013:33;3972:32;4013:33;:::i;4083:127::-;4144:10;4139:3;4135:20;4132:1;4125:31;4175:4;4172:1;4165:15;4199:4;4196:1;4189:15;4215:125;4280:9;;;4301:10;;;4298:36;;;4314:18;;:::i;4345:400::-;4547:2;4529:21;;;4586:2;4566:18;;;4559:30;4625:34;4620:2;4605:18;;4598:62;-1:-1:-1;;;4691:2:1;4676:18;;4669:34;4735:3;4720:19;;4345:400::o;4750:380::-;4829:1;4825:12;;;;4872;;;4893:61;;4947:4;4939:6;4935:17;4925:27;;4893:61;5000:2;4992:6;4989:14;4969:18;4966:38;4963:161;;5046:10;5041:3;5037:20;5034:1;5027:31;5081:4;5078:1;5071:15;5109:4;5106:1;5099:15;4963:161;;4750:380;;;:::o;5487:251::-;5557:6;5610:2;5598:9;5589:7;5585:23;5581:32;5578:52;;;5626:1;5623;5616:12;5578:52;5658:9;5652:16;5677:31;5702:5;5677:31;:::i;6331:245::-;6398:6;6451:2;6439:9;6430:7;6426:23;6422:32;6419:52;;;6467:1;6464;6457:12;6419:52;6499:9;6493:16;6518:28;6540:5;6518:28;:::i;6581:607::-;-1:-1:-1;;;;;6940:15:1;;;6922:34;;6987:2;6972:18;;6965:34;;;;7030:2;7015:18;;7008:34;;;;7073:2;7058:18;;7051:34;;;;7122:15;;;7116:3;7101:19;;7094:44;6902:3;7154:19;;7147:35;;;;6871:3;6856:19;;6581:607::o;7193:306::-;7281:6;7289;7297;7350:2;7338:9;7329:7;7325:23;7321:32;7318:52;;;7366:1;7363;7356:12;7318:52;7395:9;7389:16;7379:26;;7445:2;7434:9;7430:18;7424:25;7414:35;;7489:2;7478:9;7474:18;7468:25;7458:35;;7193:306;;;;;:::o;7504:168::-;7577:9;;;7608;;7625:15;;;7619:22;;7605:37;7595:71;;7646:18;;:::i;7677:217::-;7717:1;7743;7733:132;;7787:10;7782:3;7778:20;7775:1;7768:31;7822:4;7819:1;7812:15;7850:4;7847:1;7840:15;7733:132;-1:-1:-1;7879:9:1;;7677:217::o;9471:184::-;9541:6;9594:2;9582:9;9573:7;9569:23;9565:32;9562:52;;;9610:1;9607;9600:12;9562:52;-1:-1:-1;9633:16:1;;9471:184;-1:-1:-1;9471:184:1:o;12998:401::-;13200:2;13182:21;;;13239:2;13219:18;;;13212:30;13278:34;13273:2;13258:18;;13251:62;-1:-1:-1;;;13344:2:1;13329:18;;13322:35;13389:3;13374:19;;12998:401::o;13404:399::-;13606:2;13588:21;;;13645:2;13625:18;;;13618:30;13684:34;13679:2;13664:18;;13657:62;-1:-1:-1;;;13750:2:1;13735:18;;13728:33;13793:3;13778:19;;13404:399::o;15380:128::-;15447:9;;;15468:11;;;15465:37;;;15482:18;;:::i;17181:127::-;17242:10;17237:3;17233:20;17230:1;17223:31;17273:4;17270:1;17263:15;17297:4;17294:1;17287:15;17313:980;17575:4;17623:3;17612:9;17608:19;17654:6;17643:9;17636:25;17680:2;17718:6;17713:2;17702:9;17698:18;17691:34;17761:3;17756:2;17745:9;17741:18;17734:31;17785:6;17820;17814:13;17851:6;17843;17836:22;17889:3;17878:9;17874:19;17867:26;;17928:2;17920:6;17916:15;17902:29;;17949:1;17959:195;17973:6;17970:1;17967:13;17959:195;;;18038:13;;-1:-1:-1;;;;;18034:39:1;18022:52;;18129:15;;;;18094:12;;;;18070:1;17988:9;17959:195;;;-1:-1:-1;;;;;;;18210:32:1;;;;18205:2;18190:18;;18183:60;-1:-1:-1;;;18274:3:1;18259:19;18252:35;18171:3;17313:980;-1:-1:-1;;;17313:980:1:o

Swarm Source

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