ETH Price: $3,962.86 (+2.56%)

Token

ERC-20: Grok X (GROKX)
 

Overview

Max Total Supply

1,000,000,000 GROKX

Holders

876

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.164980395530156263 GROKX

Value
$0.00
0x9EfE7d407f74451a76Ab8D751A12A436aD2872e6
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:
GROKX

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 * SPDX-License-Identifier: MIT
 */
pragma solidity >=0.8.19;

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 substraction 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 IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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

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

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

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}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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;
        _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;
        }
        _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 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 {}
}

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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * onlyOwner functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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);
    }
}

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


    mapping(address => bool) public preLaunchAddress;
    bool public tradingOpen = false;

    constructor() ERC20("Grok X", "GROKX") {
        uint256 totalSupply = 1000000000 * 10 ** 18;
        preLaunchAddress[msg.sender] = true;
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        tradingOpen = true;
    }

    function setPreLaunchAddress(
        address _address,
        bool state
    ) external onlyOwner {
        preLaunchAddress[_address] = state;
    }

    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 != address(0xdead)
        ) {
            if (!tradingOpen) {
                require(
                    preLaunchAddress[from] || preLaunchAddress[to],
                    "Trading is not active."
                );
            }
        }

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

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preLaunchAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setPreLaunchAddress","outputs":[],"stateMutability":"nonpayable","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":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600760006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600681526020017f47726f6b205800000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f47524f4b580000000000000000000000000000000000000000000000000000008152508160039081620000aa91906200062b565b508060049081620000bc91906200062b565b505050620000df620000d36200016160201b60201c565b6200016960201b60201c565b60006b033b2e3c9fd0803ce800000090506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200015a33826200022f60201b60201c565b506200082d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002989062000773565b60405180910390fd5b620002b560008383620003a760201b60201c565b8060026000828254620002c99190620007c4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003209190620007c4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000387919062000810565b60405180910390a3620003a360008383620003ac60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200043357607f821691505b602082108103620004495762000448620003eb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004b37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000474565b620004bf868362000474565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200050c620005066200050084620004d7565b620004e1565b620004d7565b9050919050565b6000819050919050565b6200052883620004eb565b62000540620005378262000513565b84845462000481565b825550505050565b600090565b6200055762000548565b620005648184846200051d565b505050565b5b818110156200058c57620005806000826200054d565b6001810190506200056a565b5050565b601f821115620005db57620005a5816200044f565b620005b08462000464565b81016020851015620005c0578190505b620005d8620005cf8562000464565b83018262000569565b50505b505050565b600082821c905092915050565b60006200060060001984600802620005e0565b1980831691505092915050565b60006200061b8383620005ed565b9150826002028217905092915050565b6200063682620003b1565b67ffffffffffffffff811115620006525762000651620003bc565b5b6200065e82546200041a565b6200066b82828562000590565b600060209050601f831160018114620006a357600084156200068e578287015190505b6200069a85826200060d565b8655506200070a565b601f198416620006b3866200044f565b60005b82811015620006dd57848901518255600182019150602085019450602081019050620006b6565b86831015620006fd5784890151620006f9601f891682620005ed565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200075b601f8362000712565b9150620007688262000723565b602082019050919050565b600060208201905081810360008301526200078e816200074c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007d182620004d7565b9150620007de83620004d7565b9250828201905080821115620007f957620007f862000795565b5b92915050565b6200080a81620004d7565b82525050565b6000602082019050620008276000830184620007ff565b92915050565b611e85806200083d6000396000f3fe60806040526004361061010d5760003560e01c80638da5cb5b11610095578063bb7ba74411610064578063bb7ba744146103b2578063c9567bf9146103db578063dd62ed3e146103f2578063f2fde38b1461042f578063ffb54a991461045857610114565b80638da5cb5b146102e257806395d89b411461030d578063a457c2d714610338578063a9059cbb1461037557610114565b8063313ce567116100dc578063313ce567146101e957806339509351146102145780634ea8c1961461025157806370a082311461028e578063715018a6146102cb57610114565b806306fdde0314610119578063095ea7b31461014457806318160ddd1461018157806323b872dd146101ac57610114565b3661011457005b600080fd5b34801561012557600080fd5b5061012e610483565b60405161013b919061153c565b60405180910390f35b34801561015057600080fd5b5061016b600480360381019061016691906115f7565b610515565b6040516101789190611652565b60405180910390f35b34801561018d57600080fd5b50610196610533565b6040516101a3919061167c565b60405180910390f35b3480156101b857600080fd5b506101d360048036038101906101ce9190611697565b61053d565b6040516101e09190611652565b60405180910390f35b3480156101f557600080fd5b506101fe610635565b60405161020b9190611706565b60405180910390f35b34801561022057600080fd5b5061023b600480360381019061023691906115f7565b61063e565b6040516102489190611652565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190611721565b6106ea565b6040516102859190611652565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b09190611721565b61070a565b6040516102c2919061167c565b60405180910390f35b3480156102d757600080fd5b506102e0610752565b005b3480156102ee57600080fd5b506102f76107da565b604051610304919061175d565b60405180910390f35b34801561031957600080fd5b50610322610804565b60405161032f919061153c565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a91906115f7565b610896565b60405161036c9190611652565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906115f7565b610981565b6040516103a99190611652565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d491906117a4565b61099f565b005b3480156103e757600080fd5b506103f0610a76565b005b3480156103fe57600080fd5b50610419600480360381019061041491906117e4565b610b0f565b604051610426919061167c565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190611721565b610b96565b005b34801561046457600080fd5b5061046d610c8d565b60405161047a9190611652565b60405180910390f35b60606003805461049290611853565b80601f01602080910402602001604051908101604052809291908181526020018280546104be90611853565b801561050b5780601f106104e05761010080835404028352916020019161050b565b820191906000526020600020905b8154815290600101906020018083116104ee57829003601f168201915b5050505050905090565b6000610529610522610ca0565b8484610ca8565b6001905092915050565b6000600254905090565b600061054a848484610e71565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610595610ca0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060c906118f6565b60405180910390fd5b61062985610621610ca0565b858403610ca8565b60019150509392505050565b60006012905090565b60006106e061064b610ca0565b848460016000610659610ca0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106db9190611945565b610ca8565b6001905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61075a610ca0565b73ffffffffffffffffffffffffffffffffffffffff166107786107da565b73ffffffffffffffffffffffffffffffffffffffff16146107ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c5906119c5565b60405180910390fd5b6107d8600061115d565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461081390611853565b80601f016020809104026020016040519081016040528092919081815260200182805461083f90611853565b801561088c5780601f106108615761010080835404028352916020019161088c565b820191906000526020600020905b81548152906001019060200180831161086f57829003601f168201915b5050505050905090565b600080600160006108a5610ca0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990611a57565b60405180910390fd5b61097661096d610ca0565b85858403610ca8565b600191505092915050565b600061099561098e610ca0565b8484610e71565b6001905092915050565b6109a7610ca0565b73ffffffffffffffffffffffffffffffffffffffff166109c56107da565b73ffffffffffffffffffffffffffffffffffffffff1614610a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a12906119c5565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610a7e610ca0565b73ffffffffffffffffffffffffffffffffffffffff16610a9c6107da565b73ffffffffffffffffffffffffffffffffffffffff1614610af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae9906119c5565b60405180910390fd5b6001600760006101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610b9e610ca0565b73ffffffffffffffffffffffffffffffffffffffff16610bbc6107da565b73ffffffffffffffffffffffffffffffffffffffff1614610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906119c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890611ae9565b60405180910390fd5b610c8a8161115d565b50565b600760009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90611b7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90611c0d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e64919061167c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790611c9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690611d31565b60405180910390fd5b60008103610f6857610f6383836000611223565b611158565b610f706107da565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610fde5750610fae6107da565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156110175750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611051575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561114c57600760009054906101000a900460ff1661114b57600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061110b5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190611d9d565b60405180910390fd5b5b5b611157838383611223565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990611c9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890611d31565b60405180910390fd5b61130c8383836114a2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990611e2f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114259190611945565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611489919061167c565b60405180910390a361149c8484846114a7565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156114e65780820151818401526020810190506114cb565b60008484015250505050565b6000601f19601f8301169050919050565b600061150e826114ac565b61151881856114b7565b93506115288185602086016114c8565b611531816114f2565b840191505092915050565b600060208201905081810360008301526115568184611503565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061158e82611563565b9050919050565b61159e81611583565b81146115a957600080fd5b50565b6000813590506115bb81611595565b92915050565b6000819050919050565b6115d4816115c1565b81146115df57600080fd5b50565b6000813590506115f1816115cb565b92915050565b6000806040838503121561160e5761160d61155e565b5b600061161c858286016115ac565b925050602061162d858286016115e2565b9150509250929050565b60008115159050919050565b61164c81611637565b82525050565b60006020820190506116676000830184611643565b92915050565b611676816115c1565b82525050565b6000602082019050611691600083018461166d565b92915050565b6000806000606084860312156116b0576116af61155e565b5b60006116be868287016115ac565b93505060206116cf868287016115ac565b92505060406116e0868287016115e2565b9150509250925092565b600060ff82169050919050565b611700816116ea565b82525050565b600060208201905061171b60008301846116f7565b92915050565b6000602082840312156117375761173661155e565b5b6000611745848285016115ac565b91505092915050565b61175781611583565b82525050565b6000602082019050611772600083018461174e565b92915050565b61178181611637565b811461178c57600080fd5b50565b60008135905061179e81611778565b92915050565b600080604083850312156117bb576117ba61155e565b5b60006117c9858286016115ac565b92505060206117da8582860161178f565b9150509250929050565b600080604083850312156117fb576117fa61155e565b5b6000611809858286016115ac565b925050602061181a858286016115ac565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061186b57607f821691505b60208210810361187e5761187d611824565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006118e06028836114b7565b91506118eb82611884565b604082019050919050565b6000602082019050818103600083015261190f816118d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611950826115c1565b915061195b836115c1565b925082820190508082111561197357611972611916565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119af6020836114b7565b91506119ba82611979565b602082019050919050565b600060208201905081810360008301526119de816119a2565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611a416025836114b7565b9150611a4c826119e5565b604082019050919050565b60006020820190508181036000830152611a7081611a34565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611ad36026836114b7565b9150611ade82611a77565b604082019050919050565b60006020820190508181036000830152611b0281611ac6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611b656024836114b7565b9150611b7082611b09565b604082019050919050565b60006020820190508181036000830152611b9481611b58565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611bf76022836114b7565b9150611c0282611b9b565b604082019050919050565b60006020820190508181036000830152611c2681611bea565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611c896025836114b7565b9150611c9482611c2d565b604082019050919050565b60006020820190508181036000830152611cb881611c7c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611d1b6023836114b7565b9150611d2682611cbf565b604082019050919050565b60006020820190508181036000830152611d4a81611d0e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000611d876016836114b7565b9150611d9282611d51565b602082019050919050565b60006020820190508181036000830152611db681611d7a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611e196026836114b7565b9150611e2482611dbd565b604082019050919050565b60006020820190508181036000830152611e4881611e0c565b905091905056fea2646970667358221220368499a9f62f603b7e4f54552001ada44186cd2e2587802598bcd38c72b937cc64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061010d5760003560e01c80638da5cb5b11610095578063bb7ba74411610064578063bb7ba744146103b2578063c9567bf9146103db578063dd62ed3e146103f2578063f2fde38b1461042f578063ffb54a991461045857610114565b80638da5cb5b146102e257806395d89b411461030d578063a457c2d714610338578063a9059cbb1461037557610114565b8063313ce567116100dc578063313ce567146101e957806339509351146102145780634ea8c1961461025157806370a082311461028e578063715018a6146102cb57610114565b806306fdde0314610119578063095ea7b31461014457806318160ddd1461018157806323b872dd146101ac57610114565b3661011457005b600080fd5b34801561012557600080fd5b5061012e610483565b60405161013b919061153c565b60405180910390f35b34801561015057600080fd5b5061016b600480360381019061016691906115f7565b610515565b6040516101789190611652565b60405180910390f35b34801561018d57600080fd5b50610196610533565b6040516101a3919061167c565b60405180910390f35b3480156101b857600080fd5b506101d360048036038101906101ce9190611697565b61053d565b6040516101e09190611652565b60405180910390f35b3480156101f557600080fd5b506101fe610635565b60405161020b9190611706565b60405180910390f35b34801561022057600080fd5b5061023b600480360381019061023691906115f7565b61063e565b6040516102489190611652565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190611721565b6106ea565b6040516102859190611652565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b09190611721565b61070a565b6040516102c2919061167c565b60405180910390f35b3480156102d757600080fd5b506102e0610752565b005b3480156102ee57600080fd5b506102f76107da565b604051610304919061175d565b60405180910390f35b34801561031957600080fd5b50610322610804565b60405161032f919061153c565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a91906115f7565b610896565b60405161036c9190611652565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906115f7565b610981565b6040516103a99190611652565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d491906117a4565b61099f565b005b3480156103e757600080fd5b506103f0610a76565b005b3480156103fe57600080fd5b50610419600480360381019061041491906117e4565b610b0f565b604051610426919061167c565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190611721565b610b96565b005b34801561046457600080fd5b5061046d610c8d565b60405161047a9190611652565b60405180910390f35b60606003805461049290611853565b80601f01602080910402602001604051908101604052809291908181526020018280546104be90611853565b801561050b5780601f106104e05761010080835404028352916020019161050b565b820191906000526020600020905b8154815290600101906020018083116104ee57829003601f168201915b5050505050905090565b6000610529610522610ca0565b8484610ca8565b6001905092915050565b6000600254905090565b600061054a848484610e71565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610595610ca0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060c906118f6565b60405180910390fd5b61062985610621610ca0565b858403610ca8565b60019150509392505050565b60006012905090565b60006106e061064b610ca0565b848460016000610659610ca0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106db9190611945565b610ca8565b6001905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61075a610ca0565b73ffffffffffffffffffffffffffffffffffffffff166107786107da565b73ffffffffffffffffffffffffffffffffffffffff16146107ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c5906119c5565b60405180910390fd5b6107d8600061115d565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461081390611853565b80601f016020809104026020016040519081016040528092919081815260200182805461083f90611853565b801561088c5780601f106108615761010080835404028352916020019161088c565b820191906000526020600020905b81548152906001019060200180831161086f57829003601f168201915b5050505050905090565b600080600160006108a5610ca0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990611a57565b60405180910390fd5b61097661096d610ca0565b85858403610ca8565b600191505092915050565b600061099561098e610ca0565b8484610e71565b6001905092915050565b6109a7610ca0565b73ffffffffffffffffffffffffffffffffffffffff166109c56107da565b73ffffffffffffffffffffffffffffffffffffffff1614610a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a12906119c5565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610a7e610ca0565b73ffffffffffffffffffffffffffffffffffffffff16610a9c6107da565b73ffffffffffffffffffffffffffffffffffffffff1614610af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae9906119c5565b60405180910390fd5b6001600760006101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610b9e610ca0565b73ffffffffffffffffffffffffffffffffffffffff16610bbc6107da565b73ffffffffffffffffffffffffffffffffffffffff1614610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c09906119c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890611ae9565b60405180910390fd5b610c8a8161115d565b50565b600760009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90611b7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90611c0d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e64919061167c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790611c9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690611d31565b60405180910390fd5b60008103610f6857610f6383836000611223565b611158565b610f706107da565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610fde5750610fae6107da565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156110175750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611051575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561114c57600760009054906101000a900460ff1661114b57600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061110b5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190611d9d565b60405180910390fd5b5b5b611157838383611223565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990611c9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890611d31565b60405180910390fd5b61130c8383836114a2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990611e2f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114259190611945565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611489919061167c565b60405180910390a361149c8484846114a7565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156114e65780820151818401526020810190506114cb565b60008484015250505050565b6000601f19601f8301169050919050565b600061150e826114ac565b61151881856114b7565b93506115288185602086016114c8565b611531816114f2565b840191505092915050565b600060208201905081810360008301526115568184611503565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061158e82611563565b9050919050565b61159e81611583565b81146115a957600080fd5b50565b6000813590506115bb81611595565b92915050565b6000819050919050565b6115d4816115c1565b81146115df57600080fd5b50565b6000813590506115f1816115cb565b92915050565b6000806040838503121561160e5761160d61155e565b5b600061161c858286016115ac565b925050602061162d858286016115e2565b9150509250929050565b60008115159050919050565b61164c81611637565b82525050565b60006020820190506116676000830184611643565b92915050565b611676816115c1565b82525050565b6000602082019050611691600083018461166d565b92915050565b6000806000606084860312156116b0576116af61155e565b5b60006116be868287016115ac565b93505060206116cf868287016115ac565b92505060406116e0868287016115e2565b9150509250925092565b600060ff82169050919050565b611700816116ea565b82525050565b600060208201905061171b60008301846116f7565b92915050565b6000602082840312156117375761173661155e565b5b6000611745848285016115ac565b91505092915050565b61175781611583565b82525050565b6000602082019050611772600083018461174e565b92915050565b61178181611637565b811461178c57600080fd5b50565b60008135905061179e81611778565b92915050565b600080604083850312156117bb576117ba61155e565b5b60006117c9858286016115ac565b92505060206117da8582860161178f565b9150509250929050565b600080604083850312156117fb576117fa61155e565b5b6000611809858286016115ac565b925050602061181a858286016115ac565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061186b57607f821691505b60208210810361187e5761187d611824565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006118e06028836114b7565b91506118eb82611884565b604082019050919050565b6000602082019050818103600083015261190f816118d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611950826115c1565b915061195b836115c1565b925082820190508082111561197357611972611916565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119af6020836114b7565b91506119ba82611979565b602082019050919050565b600060208201905081810360008301526119de816119a2565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611a416025836114b7565b9150611a4c826119e5565b604082019050919050565b60006020820190508181036000830152611a7081611a34565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611ad36026836114b7565b9150611ade82611a77565b604082019050919050565b60006020820190508181036000830152611b0281611ac6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611b656024836114b7565b9150611b7082611b09565b604082019050919050565b60006020820190508181036000830152611b9481611b58565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611bf76022836114b7565b9150611c0282611b9b565b604082019050919050565b60006020820190508181036000830152611c2681611bea565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611c896025836114b7565b9150611c9482611c2d565b604082019050919050565b60006020820190508181036000830152611cb881611c7c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611d1b6023836114b7565b9150611d2682611cbf565b604082019050919050565b60006020820190508181036000830152611d4a81611d0e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000611d876016836114b7565b9150611d9282611d51565b602082019050919050565b60006020820190508181036000830152611db681611d7a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611e196026836114b7565b9150611e2482611dbd565b604082019050919050565b60006020820190508181036000830152611e4881611e0c565b905091905056fea2646970667358221220368499a9f62f603b7e4f54552001ada44186cd2e2587802598bcd38c72b937cc64736f6c63430008130033

Deployed Bytecode Sourcemap

22938:1464:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10861:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13080:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11973:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13746:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11815:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14680:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23015:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12144:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22084:103;;;;;;;;;;;;;:::i;:::-;;21435:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11080:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15465:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12496:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23430:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23343:79;;;;;;;;;;;;;:::i;:::-;;12759:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22342:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23070:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10861:100;10915:13;10948:5;10941:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10861:100;:::o;13080:194::-;13188:4;13205:39;13214:12;:10;:12::i;:::-;13228:7;13237:6;13205:8;:39::i;:::-;13262:4;13255:11;;13080:194;;;;:::o;11973:108::-;12034:7;12061:12;;12054:19;;11973:108;:::o;13746:529::-;13886:4;13903:36;13913:6;13921:9;13932:6;13903:9;:36::i;:::-;13952:24;13979:11;:19;13991:6;13979:19;;;;;;;;;;;;;;;:33;13999:12;:10;:12::i;:::-;13979:33;;;;;;;;;;;;;;;;13952:60;;14065:6;14045:16;:26;;14023:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14175:57;14184:6;14192:12;:10;:12::i;:::-;14225:6;14206:16;:25;14175:8;:57::i;:::-;14263:4;14256:11;;;13746:529;;;;;:::o;11815:93::-;11873:5;11898:2;11891:9;;11815:93;:::o;14680:290::-;14793:4;14810:130;14833:12;:10;:12::i;:::-;14860:7;14919:10;14882:11;:25;14894:12;:10;:12::i;:::-;14882:25;;;;;;;;;;;;;;;:34;14908:7;14882:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14810:8;:130::i;:::-;14958:4;14951:11;;14680:290;;;;:::o;23015:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;12144:143::-;12234:7;12261:9;:18;12271:7;12261:18;;;;;;;;;;;;;;;;12254:25;;12144:143;;;:::o;22084:103::-;21666:12;:10;:12::i;:::-;21655:23;;:7;:5;:7::i;:::-;:23;;;21647:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22149:30:::1;22176:1;22149:18;:30::i;:::-;22084:103::o:0;21435:87::-;21481:7;21508:6;;;;;;;;;;;21501:13;;21435:87;:::o;11080:104::-;11136:13;11169:7;11162:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11080:104;:::o;15465:475::-;15583:4;15600:24;15627:11;:25;15639:12;:10;:12::i;:::-;15627:25;;;;;;;;;;;;;;;:34;15653:7;15627:34;;;;;;;;;;;;;;;;15600:61;;15714:15;15694:16;:35;;15672:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15830:67;15839:12;:10;:12::i;:::-;15853:7;15881:15;15862:16;:34;15830:8;:67::i;:::-;15928:4;15921:11;;;15465:475;;;;:::o;12496:200::-;12607:4;12624:42;12634:12;:10;:12::i;:::-;12648:9;12659:6;12624:9;:42::i;:::-;12684:4;12677:11;;12496:200;;;;:::o;23430:156::-;21666:12;:10;:12::i;:::-;21655:23;;:7;:5;:7::i;:::-;:23;;;21647:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23573:5:::1;23544:16;:26;23561:8;23544:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;23430:156:::0;;:::o;23343:79::-;21666:12;:10;:12::i;:::-;21655:23;;:7;:5;:7::i;:::-;:23;;;21647:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23410:4:::1;23396:11;;:18;;;;;;;;;;;;;;;;;;23343:79::o:0;12759:176::-;12873:7;12900:11;:18;12912:5;12900:18;;;;;;;;;;;;;;;:27;12919:7;12900:27;;;;;;;;;;;;;;;;12893:34;;12759:176;;;;:::o;22342:238::-;21666:12;:10;:12::i;:::-;21655:23;;:7;:5;:7::i;:::-;:23;;;21647:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22465:1:::1;22445:22;;:8;:22;;::::0;22423:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22544:28;22563:8;22544:18;:28::i;:::-;22342:238:::0;:::o;23070:31::-;;;;;;;;;;;;;:::o;9867:98::-;9920:7;9947:10;9940:17;;9867:98;:::o;19202:380::-;19355:1;19338:19;;:5;:19;;;19330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19436:1;19417:21;;:7;:21;;;19409:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19520:6;19490:11;:18;19502:5;19490:18;;;;;;;;;;;;;;;:27;19509:7;19490:27;;;;;;;;;;;;;;;:36;;;;19558:7;19542:32;;19551:5;19542:32;;;19567:6;19542:32;;;;;;:::i;:::-;;;;;;;;19202:380;;;:::o;23594:805::-;23742:1;23726:18;;:4;:18;;;23718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23819:1;23805:16;;:2;:16;;;23797:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23888:1;23878:6;:11;23874:93;;23906:28;23922:4;23928:2;23932:1;23906:15;:28::i;:::-;23949:7;;23874:93;24005:7;:5;:7::i;:::-;23997:15;;:4;:15;;;;:45;;;;;24035:7;:5;:7::i;:::-;24029:13;;:2;:13;;;;23997:45;:78;;;;;24073:1;24059:16;;:2;:16;;;;23997:78;:116;;;;;24106:6;24092:21;;:2;:21;;;;23997:116;23979:367;;;24145:11;;;;;;;;;;;24140:195;;24207:16;:22;24224:4;24207:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;24233:16;:20;24250:2;24233:20;;;;;;;;;;;;;;;;;;;;;;;;;24207:46;24177:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;24140:195;23979:367;24358:33;24374:4;24380:2;24384:6;24358:15;:33::i;:::-;23594:805;;;;:::o;22740:191::-;22814:16;22833:6;;;;;;;;;;;22814:25;;22859:8;22850:6;;:17;;;;;;;;;;;;;;;;;;22914:8;22883:40;;22904:8;22883:40;;;;;;;;;;;;22803:128;22740:191;:::o;16416:770::-;16574:1;16556:20;;:6;:20;;;16548:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16658:1;16637:23;;:9;:23;;;16629:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16713:47;16734:6;16742:9;16753:6;16713:20;:47::i;:::-;16773:21;16797:9;:17;16807:6;16797:17;;;;;;;;;;;;;;;;16773:41;;16864:6;16847:13;:23;;16825:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17008:6;16992:13;:22;16972:9;:17;16982:6;16972:17;;;;;;;;;;;;;;;:42;;;;17060:6;17036:9;:20;17046:9;17036:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17101:9;17084:35;;17093:6;17084:35;;;17112:6;17084:35;;;;;;:::i;:::-;;;;;;;;17132:46;17152:6;17160:9;17171:6;17132:19;:46::i;:::-;16537:649;16416:770;;;:::o;20160:125::-;;;;:::o;20867:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:118::-;5275:24;5293:5;5275:24;:::i;:::-;5270:3;5263:37;5188:118;;:::o;5312:222::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:71;5524:1;5513:9;5509:17;5500:6;5456:71;:::i;:::-;5312:222;;;;:::o;5540:116::-;5610:21;5625:5;5610:21;:::i;:::-;5603:5;5600:32;5590:60;;5646:1;5643;5636:12;5590:60;5540:116;:::o;5662:133::-;5705:5;5743:6;5730:20;5721:29;;5759:30;5783:5;5759:30;:::i;:::-;5662:133;;;;:::o;5801:468::-;5866:6;5874;5923:2;5911:9;5902:7;5898:23;5894:32;5891:119;;;5929:79;;:::i;:::-;5891:119;6049:1;6074:53;6119:7;6110:6;6099:9;6095:22;6074:53;:::i;:::-;6064:63;;6020:117;6176:2;6202:50;6244:7;6235:6;6224:9;6220:22;6202:50;:::i;:::-;6192:60;;6147:115;5801:468;;;;;:::o;6275:474::-;6343:6;6351;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:53;6596:7;6587:6;6576:9;6572:22;6551:53;:::i;:::-;6541:63;;6497:117;6653:2;6679:53;6724:7;6715:6;6704:9;6700:22;6679:53;:::i;:::-;6669:63;;6624:118;6275:474;;;;;:::o;6755:180::-;6803:77;6800:1;6793:88;6900:4;6897:1;6890:15;6924:4;6921:1;6914:15;6941:320;6985:6;7022:1;7016:4;7012:12;7002:22;;7069:1;7063:4;7059:12;7090:18;7080:81;;7146:4;7138:6;7134:17;7124:27;;7080:81;7208:2;7200:6;7197:14;7177:18;7174:38;7171:84;;7227:18;;:::i;:::-;7171:84;6992:269;6941:320;;;:::o;7267:227::-;7407:34;7403:1;7395:6;7391:14;7384:58;7476:10;7471:2;7463:6;7459:15;7452:35;7267:227;:::o;7500:366::-;7642:3;7663:67;7727:2;7722:3;7663:67;:::i;:::-;7656:74;;7739:93;7828:3;7739:93;:::i;:::-;7857:2;7852:3;7848:12;7841:19;;7500:366;;;:::o;7872:419::-;8038:4;8076:2;8065:9;8061:18;8053:26;;8125:9;8119:4;8115:20;8111:1;8100:9;8096:17;8089:47;8153:131;8279:4;8153:131;:::i;:::-;8145:139;;7872:419;;;:::o;8297:180::-;8345:77;8342:1;8335:88;8442:4;8439:1;8432:15;8466:4;8463:1;8456:15;8483:191;8523:3;8542:20;8560:1;8542:20;:::i;:::-;8537:25;;8576:20;8594:1;8576:20;:::i;:::-;8571:25;;8619:1;8616;8612:9;8605:16;;8640:3;8637:1;8634:10;8631:36;;;8647:18;;:::i;:::-;8631:36;8483:191;;;;:::o;8680:182::-;8820:34;8816:1;8808:6;8804:14;8797:58;8680:182;:::o;8868:366::-;9010:3;9031:67;9095:2;9090:3;9031:67;:::i;:::-;9024:74;;9107:93;9196:3;9107:93;:::i;:::-;9225:2;9220:3;9216:12;9209:19;;8868:366;;;:::o;9240:419::-;9406:4;9444:2;9433:9;9429:18;9421:26;;9493:9;9487:4;9483:20;9479:1;9468:9;9464:17;9457:47;9521:131;9647:4;9521:131;:::i;:::-;9513:139;;9240:419;;;:::o;9665:224::-;9805:34;9801:1;9793:6;9789:14;9782:58;9874:7;9869:2;9861:6;9857:15;9850:32;9665:224;:::o;9895:366::-;10037:3;10058:67;10122:2;10117:3;10058:67;:::i;:::-;10051:74;;10134:93;10223:3;10134:93;:::i;:::-;10252:2;10247:3;10243:12;10236:19;;9895:366;;;:::o;10267:419::-;10433:4;10471:2;10460:9;10456:18;10448:26;;10520:9;10514:4;10510:20;10506:1;10495:9;10491:17;10484:47;10548:131;10674:4;10548:131;:::i;:::-;10540:139;;10267:419;;;:::o;10692:225::-;10832:34;10828:1;10820:6;10816:14;10809:58;10901:8;10896:2;10888:6;10884:15;10877:33;10692:225;:::o;10923:366::-;11065:3;11086:67;11150:2;11145:3;11086:67;:::i;:::-;11079:74;;11162:93;11251:3;11162:93;:::i;:::-;11280:2;11275:3;11271:12;11264:19;;10923:366;;;:::o;11295:419::-;11461:4;11499:2;11488:9;11484:18;11476:26;;11548:9;11542:4;11538:20;11534:1;11523:9;11519:17;11512:47;11576:131;11702:4;11576:131;:::i;:::-;11568:139;;11295:419;;;:::o;11720:223::-;11860:34;11856:1;11848:6;11844:14;11837:58;11929:6;11924:2;11916:6;11912:15;11905:31;11720:223;:::o;11949:366::-;12091:3;12112:67;12176:2;12171:3;12112:67;:::i;:::-;12105:74;;12188:93;12277:3;12188:93;:::i;:::-;12306:2;12301:3;12297:12;12290:19;;11949:366;;;:::o;12321:419::-;12487:4;12525:2;12514:9;12510:18;12502:26;;12574:9;12568:4;12564:20;12560:1;12549:9;12545:17;12538:47;12602:131;12728:4;12602:131;:::i;:::-;12594:139;;12321:419;;;:::o;12746:221::-;12886:34;12882:1;12874:6;12870:14;12863:58;12955:4;12950:2;12942:6;12938:15;12931:29;12746:221;:::o;12973:366::-;13115:3;13136:67;13200:2;13195:3;13136:67;:::i;:::-;13129:74;;13212:93;13301:3;13212:93;:::i;:::-;13330:2;13325:3;13321:12;13314:19;;12973:366;;;:::o;13345:419::-;13511:4;13549:2;13538:9;13534:18;13526:26;;13598:9;13592:4;13588:20;13584:1;13573:9;13569:17;13562:47;13626:131;13752:4;13626:131;:::i;:::-;13618:139;;13345:419;;;:::o;13770:224::-;13910:34;13906:1;13898:6;13894:14;13887:58;13979:7;13974:2;13966:6;13962:15;13955:32;13770:224;:::o;14000:366::-;14142:3;14163:67;14227:2;14222:3;14163:67;:::i;:::-;14156:74;;14239:93;14328:3;14239:93;:::i;:::-;14357:2;14352:3;14348:12;14341:19;;14000:366;;;:::o;14372:419::-;14538:4;14576:2;14565:9;14561:18;14553:26;;14625:9;14619:4;14615:20;14611:1;14600:9;14596:17;14589:47;14653:131;14779:4;14653:131;:::i;:::-;14645:139;;14372:419;;;:::o;14797:222::-;14937:34;14933:1;14925:6;14921:14;14914:58;15006:5;15001:2;14993:6;14989:15;14982:30;14797:222;:::o;15025:366::-;15167:3;15188:67;15252:2;15247:3;15188:67;:::i;:::-;15181:74;;15264:93;15353:3;15264:93;:::i;:::-;15382:2;15377:3;15373:12;15366:19;;15025:366;;;:::o;15397:419::-;15563:4;15601:2;15590:9;15586:18;15578:26;;15650:9;15644:4;15640:20;15636:1;15625:9;15621:17;15614:47;15678:131;15804:4;15678:131;:::i;:::-;15670:139;;15397:419;;;:::o;15822:172::-;15962:24;15958:1;15950:6;15946:14;15939:48;15822:172;:::o;16000:366::-;16142:3;16163:67;16227:2;16222:3;16163:67;:::i;:::-;16156:74;;16239:93;16328:3;16239:93;:::i;:::-;16357:2;16352:3;16348:12;16341:19;;16000:366;;;:::o;16372:419::-;16538:4;16576:2;16565:9;16561:18;16553:26;;16625:9;16619:4;16615:20;16611:1;16600:9;16596:17;16589:47;16653:131;16779:4;16653:131;:::i;:::-;16645:139;;16372:419;;;:::o;16797:225::-;16937:34;16933:1;16925:6;16921:14;16914:58;17006:8;17001:2;16993:6;16989:15;16982:33;16797:225;:::o;17028:366::-;17170:3;17191:67;17255:2;17250:3;17191:67;:::i;:::-;17184:74;;17267:93;17356:3;17267:93;:::i;:::-;17385:2;17380:3;17376:12;17369:19;;17028:366;;;:::o;17400:419::-;17566:4;17604:2;17593:9;17589:18;17581:26;;17653:9;17647:4;17643:20;17639:1;17628:9;17624:17;17617:47;17681:131;17807:4;17681:131;:::i;:::-;17673:139;;17400:419;;;:::o

Swarm Source

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