ETH Price: $2,365.11 (-3.96%)

Token

EMERALD (EMRD)
 

Overview

Max Total Supply

1,000,000,000 EMRD

Holders

80

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
0xkeg.eth
Balance
1,000,000 EMRD

Value
$0.00
0x5B8905C721f3bA8aF80c64057d756A176E8903D0
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:
EMERALD

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-01
*/

// File: @openzeppelin/contracts/utils/Context.sol



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/access/Ownable.sol



pragma solidity ^0.8.0;


/**
 * @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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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 `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);

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


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

pragma solidity ^0.8.0;




/**
 * @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * 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}.
     *
     * 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:
     *
     * - `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, _allowances[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 = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, 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:
     *
     * - `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;
        }
        _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;
        _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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * 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 {}
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



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

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

// File: contracts/Emerald.sol


pragma solidity ^0.8.7;




contract EMERALD is ERC20, ERC20Burnable, Ownable {
    constructor() ERC20("EMERALD", "EMRD") {}

    address public bankContract;

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    function setBankContract(address bankContract_) external onlyOwner {
        bankContract = bankContract_;
    }  

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = allowance(sender, _msgSender());
        require(currentAllowance >= amount || msg.sender == bankContract, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function withdrawERC20(IERC20 token, address toAddress, uint256 amount) external onlyOwner {
        token.transfer(toAddress, 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":"bankContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"bankContract_","type":"address"}],"name":"setBankContract","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":[{"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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600781526020017f454d4552414c44000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f454d524400000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620001a6565b508060049080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61228480620002cb6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a457c2d711610071578063a457c2d71461031f578063a9059cbb1461034f578063d351b5fd1461037f578063dd62ed3e1461039b578063f2fde38b146103cb5761012c565b806370a082311461028d578063715018a6146102bd57806379cc6790146102c75780638da5cb5b146102e357806395d89b41146103015761012c565b8063313ce567116100f4578063313ce567146101eb578063395093511461020957806340c10f191461023957806342966c681461025557806344004cc1146102715761012c565b806306fdde031461013157806307c2e4491461014f578063095ea7b31461016d57806318160ddd1461019d57806323b872dd146101bb575b600080fd5b6101396103e7565b6040516101469190611a83565b60405180910390f35b610157610479565b6040516101649190611a24565b60405180910390f35b610187600480360381019061018291906116fb565b61049f565b6040516101949190611a68565b60405180910390f35b6101a56104c2565b6040516101b29190611c45565b60405180910390f35b6101d560048036038101906101d091906116a8565b6104cc565b6040516101e29190611a68565b60405180910390f35b6101f36105a8565b6040516102009190611c60565b60405180910390f35b610223600480360381019061021e91906116fb565b6105b1565b6040516102309190611a68565b60405180910390f35b610253600480360381019061024e91906116fb565b61065b565b005b61026f600480360381019061026a91906117bb565b6106e5565b005b61028b60048036038101906102869190611768565b6106f9565b005b6102a760048036038101906102a2919061163b565b610808565b6040516102b49190611c45565b60405180910390f35b6102c5610850565b005b6102e160048036038101906102dc91906116fb565b6108d8565b005b6102eb6108f8565b6040516102f89190611a24565b60405180910390f35b610309610922565b6040516103169190611a83565b60405180910390f35b610339600480360381019061033491906116fb565b6109b4565b6040516103469190611a68565b60405180910390f35b610369600480360381019061036491906116fb565b610a9e565b6040516103769190611a68565b60405180910390f35b6103996004803603810190610394919061163b565b610ac1565b005b6103b560048036038101906103b09190611668565b610b81565b6040516103c29190611c45565b60405180910390f35b6103e560048036038101906103e0919061163b565b610c08565b005b6060600380546103f690611dbb565b80601f016020809104026020016040519081016040528092919081815260200182805461042290611dbb565b801561046f5780601f106104445761010080835404028352916020019161046f565b820191906000526020600020905b81548152906001019060200180831161045257829003601f168201915b5050505050905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806104aa610d00565b90506104b7818585610d08565b600191505092915050565b6000600254905090565b6000806104e0856104db610d00565b610b81565b9050828110158061053e5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057490611b65565b60405180910390fd5b61059185610589610d00565b858403610d08565b61059c858585610ed3565b60019150509392505050565b60006012905090565b6000806105bc610d00565b9050610650818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461064b9190611c97565b610d08565b600191505092915050565b610663610d00565b73ffffffffffffffffffffffffffffffffffffffff166106816108f8565b73ffffffffffffffffffffffffffffffffffffffff16146106d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ce90611b85565b60405180910390fd5b6106e18282611154565b5050565b6106f66106f0610d00565b826112b4565b50565b610701610d00565b73ffffffffffffffffffffffffffffffffffffffff1661071f6108f8565b73ffffffffffffffffffffffffffffffffffffffff1614610775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076c90611b85565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016107b0929190611a3f565b602060405180830381600087803b1580156107ca57600080fd5b505af11580156107de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610802919061173b565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610858610d00565b73ffffffffffffffffffffffffffffffffffffffff166108766108f8565b73ffffffffffffffffffffffffffffffffffffffff16146108cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c390611b85565b60405180910390fd5b6108d6600061148b565b565b6108ea826108e4610d00565b83611551565b6108f482826112b4565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461093190611dbb565b80601f016020809104026020016040519081016040528092919081815260200182805461095d90611dbb565b80156109aa5780601f1061097f576101008083540402835291602001916109aa565b820191906000526020600020905b81548152906001019060200180831161098d57829003601f168201915b5050505050905090565b6000806109bf610d00565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c90611c05565b60405180910390fd5b610a928286868403610d08565b60019250505092915050565b600080610aa9610d00565b9050610ab6818585610ed3565b600191505092915050565b610ac9610d00565b73ffffffffffffffffffffffffffffffffffffffff16610ae76108f8565b73ffffffffffffffffffffffffffffffffffffffff1614610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490611b85565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c10610d00565b73ffffffffffffffffffffffffffffffffffffffff16610c2e6108f8565b73ffffffffffffffffffffffffffffffffffffffff1614610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90611b85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb90611ae5565b60405180910390fd5b610cfd8161148b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90611be5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90611b05565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610ec69190611c45565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90611bc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90611aa5565b60405180910390fd5b610fbe8383836115dd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90611b45565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d79190611c97565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161113b9190611c45565b60405180910390a361114e8484846115e2565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb90611c25565b60405180910390fd5b6111d0600083836115dd565b80600260008282546111e29190611c97565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112379190611c97565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161129c9190611c45565b60405180910390a36112b0600083836115e2565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90611ba5565b60405180910390fd5b611330826000836115dd565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90611ac5565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461140d9190611ced565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114729190611c45565b60405180910390a3611486836000846115e2565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061155d8484610b81565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115d757818110156115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090611b25565b60405180910390fd5b6115d68484848403610d08565b5b50505050565b505050565b505050565b6000813590506115f6816121f2565b92915050565b60008151905061160b81612209565b92915050565b60008135905061162081612220565b92915050565b60008135905061163581612237565b92915050565b60006020828403121561165157611650611e4b565b5b600061165f848285016115e7565b91505092915050565b6000806040838503121561167f5761167e611e4b565b5b600061168d858286016115e7565b925050602061169e858286016115e7565b9150509250929050565b6000806000606084860312156116c1576116c0611e4b565b5b60006116cf868287016115e7565b93505060206116e0868287016115e7565b92505060406116f186828701611626565b9150509250925092565b6000806040838503121561171257611711611e4b565b5b6000611720858286016115e7565b925050602061173185828601611626565b9150509250929050565b60006020828403121561175157611750611e4b565b5b600061175f848285016115fc565b91505092915050565b60008060006060848603121561178157611780611e4b565b5b600061178f86828701611611565b93505060206117a0868287016115e7565b92505060406117b186828701611626565b9150509250925092565b6000602082840312156117d1576117d0611e4b565b5b60006117df84828501611626565b91505092915050565b6117f181611d21565b82525050565b61180081611d33565b82525050565b600061181182611c7b565b61181b8185611c86565b935061182b818560208601611d88565b61183481611e50565b840191505092915050565b600061184c602383611c86565b915061185782611e61565b604082019050919050565b600061186f602283611c86565b915061187a82611eb0565b604082019050919050565b6000611892602683611c86565b915061189d82611eff565b604082019050919050565b60006118b5602283611c86565b91506118c082611f4e565b604082019050919050565b60006118d8601d83611c86565b91506118e382611f9d565b602082019050919050565b60006118fb602683611c86565b915061190682611fc6565b604082019050919050565b600061191e602883611c86565b915061192982612015565b604082019050919050565b6000611941602083611c86565b915061194c82612064565b602082019050919050565b6000611964602183611c86565b915061196f8261208d565b604082019050919050565b6000611987602583611c86565b9150611992826120dc565b604082019050919050565b60006119aa602483611c86565b91506119b58261212b565b604082019050919050565b60006119cd602583611c86565b91506119d88261217a565b604082019050919050565b60006119f0601f83611c86565b91506119fb826121c9565b602082019050919050565b611a0f81611d71565b82525050565b611a1e81611d7b565b82525050565b6000602082019050611a3960008301846117e8565b92915050565b6000604082019050611a5460008301856117e8565b611a616020830184611a06565b9392505050565b6000602082019050611a7d60008301846117f7565b92915050565b60006020820190508181036000830152611a9d8184611806565b905092915050565b60006020820190508181036000830152611abe8161183f565b9050919050565b60006020820190508181036000830152611ade81611862565b9050919050565b60006020820190508181036000830152611afe81611885565b9050919050565b60006020820190508181036000830152611b1e816118a8565b9050919050565b60006020820190508181036000830152611b3e816118cb565b9050919050565b60006020820190508181036000830152611b5e816118ee565b9050919050565b60006020820190508181036000830152611b7e81611911565b9050919050565b60006020820190508181036000830152611b9e81611934565b9050919050565b60006020820190508181036000830152611bbe81611957565b9050919050565b60006020820190508181036000830152611bde8161197a565b9050919050565b60006020820190508181036000830152611bfe8161199d565b9050919050565b60006020820190508181036000830152611c1e816119c0565b9050919050565b60006020820190508181036000830152611c3e816119e3565b9050919050565b6000602082019050611c5a6000830184611a06565b92915050565b6000602082019050611c756000830184611a15565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611ca282611d71565b9150611cad83611d71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ce257611ce1611ded565b5b828201905092915050565b6000611cf882611d71565b9150611d0383611d71565b925082821015611d1657611d15611ded565b5b828203905092915050565b6000611d2c82611d51565b9050919050565b60008115159050919050565b6000611d4a82611d21565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611da6578082015181840152602081019050611d8b565b83811115611db5576000848401525b50505050565b60006002820490506001821680611dd357607f821691505b60208210811415611de757611de6611e1c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6121fb81611d21565b811461220657600080fd5b50565b61221281611d33565b811461221d57600080fd5b50565b61222981611d3f565b811461223457600080fd5b50565b61224081611d71565b811461224b57600080fd5b5056fea26469706673582212205bd50f78d4ed0dee89172e74b0b6494d11149ed03ca053c161477d12579459c064736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a457c2d711610071578063a457c2d71461031f578063a9059cbb1461034f578063d351b5fd1461037f578063dd62ed3e1461039b578063f2fde38b146103cb5761012c565b806370a082311461028d578063715018a6146102bd57806379cc6790146102c75780638da5cb5b146102e357806395d89b41146103015761012c565b8063313ce567116100f4578063313ce567146101eb578063395093511461020957806340c10f191461023957806342966c681461025557806344004cc1146102715761012c565b806306fdde031461013157806307c2e4491461014f578063095ea7b31461016d57806318160ddd1461019d57806323b872dd146101bb575b600080fd5b6101396103e7565b6040516101469190611a83565b60405180910390f35b610157610479565b6040516101649190611a24565b60405180910390f35b610187600480360381019061018291906116fb565b61049f565b6040516101949190611a68565b60405180910390f35b6101a56104c2565b6040516101b29190611c45565b60405180910390f35b6101d560048036038101906101d091906116a8565b6104cc565b6040516101e29190611a68565b60405180910390f35b6101f36105a8565b6040516102009190611c60565b60405180910390f35b610223600480360381019061021e91906116fb565b6105b1565b6040516102309190611a68565b60405180910390f35b610253600480360381019061024e91906116fb565b61065b565b005b61026f600480360381019061026a91906117bb565b6106e5565b005b61028b60048036038101906102869190611768565b6106f9565b005b6102a760048036038101906102a2919061163b565b610808565b6040516102b49190611c45565b60405180910390f35b6102c5610850565b005b6102e160048036038101906102dc91906116fb565b6108d8565b005b6102eb6108f8565b6040516102f89190611a24565b60405180910390f35b610309610922565b6040516103169190611a83565b60405180910390f35b610339600480360381019061033491906116fb565b6109b4565b6040516103469190611a68565b60405180910390f35b610369600480360381019061036491906116fb565b610a9e565b6040516103769190611a68565b60405180910390f35b6103996004803603810190610394919061163b565b610ac1565b005b6103b560048036038101906103b09190611668565b610b81565b6040516103c29190611c45565b60405180910390f35b6103e560048036038101906103e0919061163b565b610c08565b005b6060600380546103f690611dbb565b80601f016020809104026020016040519081016040528092919081815260200182805461042290611dbb565b801561046f5780601f106104445761010080835404028352916020019161046f565b820191906000526020600020905b81548152906001019060200180831161045257829003601f168201915b5050505050905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806104aa610d00565b90506104b7818585610d08565b600191505092915050565b6000600254905090565b6000806104e0856104db610d00565b610b81565b9050828110158061053e5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057490611b65565b60405180910390fd5b61059185610589610d00565b858403610d08565b61059c858585610ed3565b60019150509392505050565b60006012905090565b6000806105bc610d00565b9050610650818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461064b9190611c97565b610d08565b600191505092915050565b610663610d00565b73ffffffffffffffffffffffffffffffffffffffff166106816108f8565b73ffffffffffffffffffffffffffffffffffffffff16146106d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ce90611b85565b60405180910390fd5b6106e18282611154565b5050565b6106f66106f0610d00565b826112b4565b50565b610701610d00565b73ffffffffffffffffffffffffffffffffffffffff1661071f6108f8565b73ffffffffffffffffffffffffffffffffffffffff1614610775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076c90611b85565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016107b0929190611a3f565b602060405180830381600087803b1580156107ca57600080fd5b505af11580156107de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610802919061173b565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610858610d00565b73ffffffffffffffffffffffffffffffffffffffff166108766108f8565b73ffffffffffffffffffffffffffffffffffffffff16146108cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c390611b85565b60405180910390fd5b6108d6600061148b565b565b6108ea826108e4610d00565b83611551565b6108f482826112b4565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461093190611dbb565b80601f016020809104026020016040519081016040528092919081815260200182805461095d90611dbb565b80156109aa5780601f1061097f576101008083540402835291602001916109aa565b820191906000526020600020905b81548152906001019060200180831161098d57829003601f168201915b5050505050905090565b6000806109bf610d00565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c90611c05565b60405180910390fd5b610a928286868403610d08565b60019250505092915050565b600080610aa9610d00565b9050610ab6818585610ed3565b600191505092915050565b610ac9610d00565b73ffffffffffffffffffffffffffffffffffffffff16610ae76108f8565b73ffffffffffffffffffffffffffffffffffffffff1614610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3490611b85565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c10610d00565b73ffffffffffffffffffffffffffffffffffffffff16610c2e6108f8565b73ffffffffffffffffffffffffffffffffffffffff1614610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90611b85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb90611ae5565b60405180910390fd5b610cfd8161148b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90611be5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90611b05565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610ec69190611c45565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90611bc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90611aa5565b60405180910390fd5b610fbe8383836115dd565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90611b45565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d79190611c97565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161113b9190611c45565b60405180910390a361114e8484846115e2565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb90611c25565b60405180910390fd5b6111d0600083836115dd565b80600260008282546111e29190611c97565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112379190611c97565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161129c9190611c45565b60405180910390a36112b0600083836115e2565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131b90611ba5565b60405180910390fd5b611330826000836115dd565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90611ac5565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461140d9190611ced565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114729190611c45565b60405180910390a3611486836000846115e2565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061155d8484610b81565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115d757818110156115c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c090611b25565b60405180910390fd5b6115d68484848403610d08565b5b50505050565b505050565b505050565b6000813590506115f6816121f2565b92915050565b60008151905061160b81612209565b92915050565b60008135905061162081612220565b92915050565b60008135905061163581612237565b92915050565b60006020828403121561165157611650611e4b565b5b600061165f848285016115e7565b91505092915050565b6000806040838503121561167f5761167e611e4b565b5b600061168d858286016115e7565b925050602061169e858286016115e7565b9150509250929050565b6000806000606084860312156116c1576116c0611e4b565b5b60006116cf868287016115e7565b93505060206116e0868287016115e7565b92505060406116f186828701611626565b9150509250925092565b6000806040838503121561171257611711611e4b565b5b6000611720858286016115e7565b925050602061173185828601611626565b9150509250929050565b60006020828403121561175157611750611e4b565b5b600061175f848285016115fc565b91505092915050565b60008060006060848603121561178157611780611e4b565b5b600061178f86828701611611565b93505060206117a0868287016115e7565b92505060406117b186828701611626565b9150509250925092565b6000602082840312156117d1576117d0611e4b565b5b60006117df84828501611626565b91505092915050565b6117f181611d21565b82525050565b61180081611d33565b82525050565b600061181182611c7b565b61181b8185611c86565b935061182b818560208601611d88565b61183481611e50565b840191505092915050565b600061184c602383611c86565b915061185782611e61565b604082019050919050565b600061186f602283611c86565b915061187a82611eb0565b604082019050919050565b6000611892602683611c86565b915061189d82611eff565b604082019050919050565b60006118b5602283611c86565b91506118c082611f4e565b604082019050919050565b60006118d8601d83611c86565b91506118e382611f9d565b602082019050919050565b60006118fb602683611c86565b915061190682611fc6565b604082019050919050565b600061191e602883611c86565b915061192982612015565b604082019050919050565b6000611941602083611c86565b915061194c82612064565b602082019050919050565b6000611964602183611c86565b915061196f8261208d565b604082019050919050565b6000611987602583611c86565b9150611992826120dc565b604082019050919050565b60006119aa602483611c86565b91506119b58261212b565b604082019050919050565b60006119cd602583611c86565b91506119d88261217a565b604082019050919050565b60006119f0601f83611c86565b91506119fb826121c9565b602082019050919050565b611a0f81611d71565b82525050565b611a1e81611d7b565b82525050565b6000602082019050611a3960008301846117e8565b92915050565b6000604082019050611a5460008301856117e8565b611a616020830184611a06565b9392505050565b6000602082019050611a7d60008301846117f7565b92915050565b60006020820190508181036000830152611a9d8184611806565b905092915050565b60006020820190508181036000830152611abe8161183f565b9050919050565b60006020820190508181036000830152611ade81611862565b9050919050565b60006020820190508181036000830152611afe81611885565b9050919050565b60006020820190508181036000830152611b1e816118a8565b9050919050565b60006020820190508181036000830152611b3e816118cb565b9050919050565b60006020820190508181036000830152611b5e816118ee565b9050919050565b60006020820190508181036000830152611b7e81611911565b9050919050565b60006020820190508181036000830152611b9e81611934565b9050919050565b60006020820190508181036000830152611bbe81611957565b9050919050565b60006020820190508181036000830152611bde8161197a565b9050919050565b60006020820190508181036000830152611bfe8161199d565b9050919050565b60006020820190508181036000830152611c1e816119c0565b9050919050565b60006020820190508181036000830152611c3e816119e3565b9050919050565b6000602082019050611c5a6000830184611a06565b92915050565b6000602082019050611c756000830184611a15565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611ca282611d71565b9150611cad83611d71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ce257611ce1611ded565b5b828201905092915050565b6000611cf882611d71565b9150611d0383611d71565b925082821015611d1657611d15611ded565b5b828203905092915050565b6000611d2c82611d51565b9050919050565b60008115159050919050565b6000611d4a82611d21565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611da6578082015181840152602081019050611d8b565b83811115611db5576000848401525b50505050565b60006002820490506001821680611dd357607f821691505b60208210811415611de757611de6611e1c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6121fb81611d21565b811461220657600080fd5b50565b61221281611d33565b811461221d57600080fd5b50565b61222981611d3f565b811461223457600080fd5b50565b61224081611d71565b811461224b57600080fd5b5056fea26469706673582212205bd50f78d4ed0dee89172e74b0b6494d11149ed03ca053c161477d12579459c064736f6c63430008070033

Deployed Bytecode Sourcemap

20905:1043:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8877:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21011:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11228:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9997:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21274:520;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9839:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12713:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21047:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20255:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21802:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10168:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2488:94;;;:::i;:::-;;20665:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1837:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9096:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13456:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10501:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21150:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10757:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2737:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8877:100;8931:13;8964:5;8957:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8877:100;:::o;21011:27::-;;;;;;;;;;;;;:::o;11228:201::-;11311:4;11328:13;11344:12;:10;:12::i;:::-;11328:28;;11367:32;11376:5;11383:7;11392:6;11367:8;:32::i;:::-;11417:4;11410:11;;;11228:201;;;;:::o;9997:108::-;10058:7;10085:12;;10078:19;;9997:108;:::o;21274:520::-;21414:4;21431:24;21458:31;21468:6;21476:12;:10;:12::i;:::-;21458:9;:31::i;:::-;21431:58;;21528:6;21508:16;:26;;:56;;;;21552:12;;;;;;;;;;;21538:26;;:10;:26;;;21508:56;21500:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;21645:57;21654:6;21662:12;:10;:12::i;:::-;21695:6;21676:16;:25;21645:8;:57::i;:::-;21726:36;21736:6;21744:9;21755:6;21726:9;:36::i;:::-;21782:4;21775:11;;;21274:520;;;;;:::o;9839:93::-;9897:5;9922:2;9915:9;;9839:93;:::o;12713:240::-;12801:4;12818:13;12834:12;:10;:12::i;:::-;12818:28;;12857:66;12866:5;12873:7;12912:10;12882:11;:18;12894:5;12882:18;;;;;;;;;;;;;;;:27;12901:7;12882:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;12857:8;:66::i;:::-;12941:4;12934:11;;;12713:240;;;;:::o;21047:95::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21117:17:::1;21123:2;21127:6;21117:5;:17::i;:::-;21047:95:::0;;:::o;20255:91::-;20311:27;20317:12;:10;:12::i;:::-;20331:6;20311:5;:27::i;:::-;20255:91;:::o;21802:143::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21904:5:::1;:14;;;21919:9;21930:6;21904:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21802:143:::0;;;:::o;10168:127::-;10242:7;10269:9;:18;10279:7;10269:18;;;;;;;;;;;;;;;;10262:25;;10168:127;;;:::o;2488:94::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2553:21:::1;2571:1;2553:9;:21::i;:::-;2488:94::o:0;20665:164::-;20742:46;20758:7;20767:12;:10;:12::i;:::-;20781:6;20742:15;:46::i;:::-;20799:22;20805:7;20814:6;20799:5;:22::i;:::-;20665:164;;:::o;1837:87::-;1883:7;1910:6;;;;;;;;;;;1903:13;;1837:87;:::o;9096:104::-;9152:13;9185:7;9178:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9096:104;:::o;13456:438::-;13549:4;13566:13;13582:12;:10;:12::i;:::-;13566:28;;13605:24;13632:11;:18;13644:5;13632:18;;;;;;;;;;;;;;;:27;13651:7;13632:27;;;;;;;;;;;;;;;;13605:54;;13698:15;13678:16;:35;;13670:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13791:60;13800:5;13807:7;13835:15;13816:16;:34;13791:8;:60::i;:::-;13882:4;13875:11;;;;13456:438;;;;:::o;10501:193::-;10580:4;10597:13;10613:12;:10;:12::i;:::-;10597:28;;10636;10646:5;10653:2;10657:6;10636:9;:28::i;:::-;10682:4;10675:11;;;10501:193;;;;:::o;21150:114::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21243:13:::1;21228:12;;:28;;;;;;;;;;;;;;;;;;21150:114:::0;:::o;10757:151::-;10846:7;10873:11;:18;10885:5;10873:18;;;;;;;;;;;;;;;:27;10892:7;10873:27;;;;;;;;;;;;;;;;10866:34;;10757:151;;;;:::o;2737:192::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:1:::1;2826:22;;:8;:22;;;;2818:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2902:19;2912:8;2902:9;:19::i;:::-;2737:192:::0;:::o;625:98::-;678:7;705:10;698:17;;625:98;:::o;17092:380::-;17245:1;17228:19;;:5;:19;;;;17220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17326:1;17307:21;;:7;:21;;;;17299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17410:6;17380:11;:18;17392:5;17380:18;;;;;;;;;;;;;;;:27;17399:7;17380:27;;;;;;;;;;;;;;;:36;;;;17448:7;17432:32;;17441:5;17432:32;;;17457:6;17432:32;;;;;;:::i;:::-;;;;;;;;17092:380;;;:::o;14373:671::-;14520:1;14504:18;;:4;:18;;;;14496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14597:1;14583:16;;:2;:16;;;;14575:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14652:38;14673:4;14679:2;14683:6;14652:20;:38::i;:::-;14703:19;14725:9;:15;14735:4;14725:15;;;;;;;;;;;;;;;;14703:37;;14774:6;14759:11;:21;;14751:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14891:6;14877:11;:20;14859:9;:15;14869:4;14859:15;;;;;;;;;;;;;;;:38;;;;14936:6;14919:9;:13;14929:2;14919:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;14975:2;14960:26;;14969:4;14960:26;;;14979:6;14960:26;;;;;;:::i;:::-;;;;;;;;14999:37;15019:4;15025:2;15029:6;14999:19;:37::i;:::-;14485:559;14373:671;;;:::o;15331:399::-;15434:1;15415:21;;:7;:21;;;;15407:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15485:49;15514:1;15518:7;15527:6;15485:20;:49::i;:::-;15563:6;15547:12;;:22;;;;;;;:::i;:::-;;;;;;;;15602:6;15580:9;:18;15590:7;15580:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;15645:7;15624:37;;15641:1;15624:37;;;15654:6;15624:37;;;;;;:::i;:::-;;;;;;;;15674:48;15702:1;15706:7;15715:6;15674:19;:48::i;:::-;15331:399;;:::o;16063:591::-;16166:1;16147:21;;:7;:21;;;;16139:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16219:49;16240:7;16257:1;16261:6;16219:20;:49::i;:::-;16281:22;16306:9;:18;16316:7;16306:18;;;;;;;;;;;;;;;;16281:43;;16361:6;16343:14;:24;;16335:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16480:6;16463:14;:23;16442:9;:18;16452:7;16442:18;;;;;;;;;;;;;;;:44;;;;16524:6;16508:12;;:22;;;;;;;:::i;:::-;;;;;;;;16574:1;16548:37;;16557:7;16548:37;;;16578:6;16548:37;;;;;;:::i;:::-;;;;;;;;16598:48;16618:7;16635:1;16639:6;16598:19;:48::i;:::-;16128:526;16063:591;;:::o;2937:173::-;2993:16;3012:6;;;;;;;;;;;2993:25;;3038:8;3029:6;;:17;;;;;;;;;;;;;;;;;;3093:8;3062:40;;3083:8;3062:40;;;;;;;;;;;;2982:128;2937:173;:::o;17759:453::-;17894:24;17921:25;17931:5;17938:7;17921:9;:25::i;:::-;17894:52;;17981:17;17961:16;:37;17957:248;;18043:6;18023:16;:26;;18015:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18127:51;18136:5;18143:7;18171:6;18152:16;:25;18127:8;:51::i;:::-;17957:248;17883:329;17759:453;;;:::o;18812:125::-;;;;:::o;19541:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;152:137;;;;:::o;295:167::-;355:5;393:6;380:20;371:29;;409:47;450:5;409:47;:::i;:::-;295:167;;;;:::o;468:139::-;514:5;552:6;539:20;530:29;;568:33;595:5;568:33;:::i;:::-;468:139;;;;:::o;613:329::-;672:6;721:2;709:9;700:7;696:23;692:32;689:119;;;727:79;;:::i;:::-;689:119;847:1;872:53;917:7;908:6;897:9;893:22;872:53;:::i;:::-;862:63;;818:117;613:329;;;;:::o;948:474::-;1016:6;1024;1073:2;1061:9;1052:7;1048:23;1044:32;1041:119;;;1079:79;;:::i;:::-;1041:119;1199:1;1224:53;1269:7;1260:6;1249:9;1245:22;1224:53;:::i;:::-;1214:63;;1170:117;1326:2;1352:53;1397:7;1388:6;1377:9;1373:22;1352:53;:::i;:::-;1342:63;;1297:118;948:474;;;;;:::o;1428:619::-;1505:6;1513;1521;1570:2;1558:9;1549:7;1545:23;1541:32;1538:119;;;1576:79;;:::i;:::-;1538:119;1696:1;1721:53;1766:7;1757:6;1746:9;1742:22;1721:53;:::i;:::-;1711:63;;1667:117;1823:2;1849:53;1894:7;1885:6;1874:9;1870:22;1849:53;:::i;:::-;1839:63;;1794:118;1951:2;1977:53;2022:7;2013:6;2002:9;1998:22;1977:53;:::i;:::-;1967:63;;1922:118;1428:619;;;;;:::o;2053:474::-;2121:6;2129;2178:2;2166:9;2157:7;2153:23;2149:32;2146:119;;;2184:79;;:::i;:::-;2146:119;2304:1;2329:53;2374:7;2365:6;2354:9;2350:22;2329:53;:::i;:::-;2319:63;;2275:117;2431:2;2457:53;2502:7;2493:6;2482:9;2478:22;2457:53;:::i;:::-;2447:63;;2402:118;2053:474;;;;;:::o;2533:345::-;2600:6;2649:2;2637:9;2628:7;2624:23;2620:32;2617:119;;;2655:79;;:::i;:::-;2617:119;2775:1;2800:61;2853:7;2844:6;2833:9;2829:22;2800:61;:::i;:::-;2790:71;;2746:125;2533:345;;;;:::o;2884:647::-;2975:6;2983;2991;3040:2;3028:9;3019:7;3015:23;3011:32;3008:119;;;3046:79;;:::i;:::-;3008:119;3166:1;3191:67;3250:7;3241:6;3230:9;3226:22;3191:67;:::i;:::-;3181:77;;3137:131;3307:2;3333:53;3378:7;3369:6;3358:9;3354:22;3333:53;:::i;:::-;3323:63;;3278:118;3435:2;3461:53;3506:7;3497:6;3486:9;3482:22;3461:53;:::i;:::-;3451:63;;3406:118;2884:647;;;;;:::o;3537:329::-;3596:6;3645:2;3633:9;3624:7;3620:23;3616:32;3613:119;;;3651:79;;:::i;:::-;3613:119;3771:1;3796:53;3841:7;3832:6;3821:9;3817:22;3796:53;:::i;:::-;3786:63;;3742:117;3537:329;;;;:::o;3872:118::-;3959:24;3977:5;3959:24;:::i;:::-;3954:3;3947:37;3872:118;;:::o;3996:109::-;4077:21;4092:5;4077:21;:::i;:::-;4072:3;4065:34;3996:109;;:::o;4111:364::-;4199:3;4227:39;4260:5;4227:39;:::i;:::-;4282:71;4346:6;4341:3;4282:71;:::i;:::-;4275:78;;4362:52;4407:6;4402:3;4395:4;4388:5;4384:16;4362:52;:::i;:::-;4439:29;4461:6;4439:29;:::i;:::-;4434:3;4430:39;4423:46;;4203:272;4111:364;;;;:::o;4481:366::-;4623:3;4644:67;4708:2;4703:3;4644:67;:::i;:::-;4637:74;;4720:93;4809:3;4720:93;:::i;:::-;4838:2;4833:3;4829:12;4822:19;;4481:366;;;:::o;4853:::-;4995:3;5016:67;5080:2;5075:3;5016:67;:::i;:::-;5009:74;;5092:93;5181:3;5092:93;:::i;:::-;5210:2;5205:3;5201:12;5194:19;;4853:366;;;:::o;5225:::-;5367:3;5388:67;5452:2;5447:3;5388:67;:::i;:::-;5381:74;;5464:93;5553:3;5464:93;:::i;:::-;5582:2;5577:3;5573:12;5566:19;;5225:366;;;:::o;5597:::-;5739:3;5760:67;5824:2;5819:3;5760:67;:::i;:::-;5753:74;;5836:93;5925:3;5836:93;:::i;:::-;5954:2;5949:3;5945:12;5938:19;;5597:366;;;:::o;5969:::-;6111:3;6132:67;6196:2;6191:3;6132:67;:::i;:::-;6125:74;;6208:93;6297:3;6208:93;:::i;:::-;6326:2;6321:3;6317:12;6310:19;;5969:366;;;:::o;6341:::-;6483:3;6504:67;6568:2;6563:3;6504:67;:::i;:::-;6497:74;;6580:93;6669:3;6580:93;:::i;:::-;6698:2;6693:3;6689:12;6682:19;;6341:366;;;:::o;6713:::-;6855:3;6876:67;6940:2;6935:3;6876:67;:::i;:::-;6869:74;;6952:93;7041:3;6952:93;:::i;:::-;7070:2;7065:3;7061:12;7054:19;;6713:366;;;:::o;7085:::-;7227:3;7248:67;7312:2;7307:3;7248:67;:::i;:::-;7241:74;;7324:93;7413:3;7324:93;:::i;:::-;7442:2;7437:3;7433:12;7426:19;;7085:366;;;:::o;7457:::-;7599:3;7620:67;7684:2;7679:3;7620:67;:::i;:::-;7613:74;;7696:93;7785:3;7696:93;:::i;:::-;7814:2;7809:3;7805:12;7798:19;;7457:366;;;:::o;7829:::-;7971:3;7992:67;8056:2;8051:3;7992:67;:::i;:::-;7985:74;;8068:93;8157:3;8068:93;:::i;:::-;8186:2;8181:3;8177:12;8170:19;;7829:366;;;:::o;8201:::-;8343:3;8364:67;8428:2;8423:3;8364:67;:::i;:::-;8357:74;;8440:93;8529:3;8440:93;:::i;:::-;8558:2;8553:3;8549:12;8542:19;;8201:366;;;:::o;8573:::-;8715:3;8736:67;8800:2;8795:3;8736:67;:::i;:::-;8729:74;;8812:93;8901:3;8812:93;:::i;:::-;8930:2;8925:3;8921:12;8914:19;;8573:366;;;:::o;8945:::-;9087:3;9108:67;9172:2;9167:3;9108:67;:::i;:::-;9101:74;;9184:93;9273:3;9184:93;:::i;:::-;9302:2;9297:3;9293:12;9286:19;;8945:366;;;:::o;9317:118::-;9404:24;9422:5;9404:24;:::i;:::-;9399:3;9392:37;9317:118;;:::o;9441:112::-;9524:22;9540:5;9524:22;:::i;:::-;9519:3;9512:35;9441:112;;:::o;9559:222::-;9652:4;9690:2;9679:9;9675:18;9667:26;;9703:71;9771:1;9760:9;9756:17;9747:6;9703:71;:::i;:::-;9559:222;;;;:::o;9787:332::-;9908:4;9946:2;9935:9;9931:18;9923:26;;9959:71;10027:1;10016:9;10012:17;10003:6;9959:71;:::i;:::-;10040:72;10108:2;10097:9;10093:18;10084:6;10040:72;:::i;:::-;9787:332;;;;;:::o;10125:210::-;10212:4;10250:2;10239:9;10235:18;10227:26;;10263:65;10325:1;10314:9;10310:17;10301:6;10263:65;:::i;:::-;10125:210;;;;:::o;10341:313::-;10454:4;10492:2;10481:9;10477:18;10469:26;;10541:9;10535:4;10531:20;10527:1;10516:9;10512:17;10505:47;10569:78;10642:4;10633:6;10569:78;:::i;:::-;10561:86;;10341:313;;;;:::o;10660:419::-;10826:4;10864:2;10853:9;10849:18;10841:26;;10913:9;10907:4;10903:20;10899:1;10888:9;10884:17;10877:47;10941:131;11067:4;10941:131;:::i;:::-;10933:139;;10660:419;;;:::o;11085:::-;11251:4;11289:2;11278:9;11274:18;11266:26;;11338:9;11332:4;11328:20;11324:1;11313:9;11309:17;11302:47;11366:131;11492:4;11366:131;:::i;:::-;11358:139;;11085:419;;;:::o;11510:::-;11676:4;11714:2;11703:9;11699:18;11691:26;;11763:9;11757:4;11753:20;11749:1;11738:9;11734:17;11727:47;11791:131;11917:4;11791:131;:::i;:::-;11783:139;;11510:419;;;:::o;11935:::-;12101:4;12139:2;12128:9;12124:18;12116:26;;12188:9;12182:4;12178:20;12174:1;12163:9;12159:17;12152:47;12216:131;12342:4;12216:131;:::i;:::-;12208:139;;11935:419;;;:::o;12360:::-;12526:4;12564:2;12553:9;12549:18;12541:26;;12613:9;12607:4;12603:20;12599:1;12588:9;12584:17;12577:47;12641:131;12767:4;12641:131;:::i;:::-;12633:139;;12360:419;;;:::o;12785:::-;12951:4;12989:2;12978:9;12974:18;12966:26;;13038:9;13032:4;13028:20;13024:1;13013:9;13009:17;13002:47;13066:131;13192:4;13066:131;:::i;:::-;13058:139;;12785:419;;;:::o;13210:::-;13376:4;13414:2;13403:9;13399:18;13391:26;;13463:9;13457:4;13453:20;13449:1;13438:9;13434:17;13427:47;13491:131;13617:4;13491:131;:::i;:::-;13483:139;;13210:419;;;:::o;13635:::-;13801:4;13839:2;13828:9;13824:18;13816:26;;13888:9;13882:4;13878:20;13874:1;13863:9;13859:17;13852:47;13916:131;14042:4;13916:131;:::i;:::-;13908:139;;13635:419;;;:::o;14060:::-;14226:4;14264:2;14253:9;14249:18;14241:26;;14313:9;14307:4;14303:20;14299:1;14288:9;14284:17;14277:47;14341:131;14467:4;14341:131;:::i;:::-;14333:139;;14060:419;;;:::o;14485:::-;14651:4;14689:2;14678:9;14674:18;14666:26;;14738:9;14732:4;14728:20;14724:1;14713:9;14709:17;14702:47;14766:131;14892:4;14766:131;:::i;:::-;14758:139;;14485:419;;;:::o;14910:::-;15076:4;15114:2;15103:9;15099:18;15091:26;;15163:9;15157:4;15153:20;15149:1;15138:9;15134:17;15127:47;15191:131;15317:4;15191:131;:::i;:::-;15183:139;;14910:419;;;:::o;15335:::-;15501:4;15539:2;15528:9;15524:18;15516:26;;15588:9;15582:4;15578:20;15574:1;15563:9;15559:17;15552:47;15616:131;15742:4;15616:131;:::i;:::-;15608:139;;15335:419;;;:::o;15760:::-;15926:4;15964:2;15953:9;15949:18;15941:26;;16013:9;16007:4;16003:20;15999:1;15988:9;15984:17;15977:47;16041:131;16167:4;16041:131;:::i;:::-;16033:139;;15760:419;;;:::o;16185:222::-;16278:4;16316:2;16305:9;16301:18;16293:26;;16329:71;16397:1;16386:9;16382:17;16373:6;16329:71;:::i;:::-;16185:222;;;;:::o;16413:214::-;16502:4;16540:2;16529:9;16525:18;16517:26;;16553:67;16617:1;16606:9;16602:17;16593:6;16553:67;:::i;:::-;16413:214;;;;:::o;16714:99::-;16766:6;16800:5;16794:12;16784:22;;16714:99;;;:::o;16819:169::-;16903:11;16937:6;16932:3;16925:19;16977:4;16972:3;16968:14;16953:29;;16819:169;;;;:::o;16994:305::-;17034:3;17053:20;17071:1;17053:20;:::i;:::-;17048:25;;17087:20;17105:1;17087:20;:::i;:::-;17082:25;;17241:1;17173:66;17169:74;17166:1;17163:81;17160:107;;;17247:18;;:::i;:::-;17160:107;17291:1;17288;17284:9;17277:16;;16994:305;;;;:::o;17305:191::-;17345:4;17365:20;17383:1;17365:20;:::i;:::-;17360:25;;17399:20;17417:1;17399:20;:::i;:::-;17394:25;;17438:1;17435;17432:8;17429:34;;;17443:18;;:::i;:::-;17429:34;17488:1;17485;17481:9;17473:17;;17305:191;;;;:::o;17502:96::-;17539:7;17568:24;17586:5;17568:24;:::i;:::-;17557:35;;17502:96;;;:::o;17604:90::-;17638:7;17681:5;17674:13;17667:21;17656:32;;17604:90;;;:::o;17700:110::-;17751:7;17780:24;17798:5;17780:24;:::i;:::-;17769:35;;17700:110;;;:::o;17816:126::-;17853:7;17893:42;17886:5;17882:54;17871:65;;17816:126;;;:::o;17948:77::-;17985:7;18014:5;18003:16;;17948:77;;;:::o;18031:86::-;18066:7;18106:4;18099:5;18095:16;18084:27;;18031:86;;;:::o;18123:307::-;18191:1;18201:113;18215:6;18212:1;18209:13;18201:113;;;18300:1;18295:3;18291:11;18285:18;18281:1;18276:3;18272:11;18265:39;18237:2;18234:1;18230:10;18225:15;;18201:113;;;18332:6;18329:1;18326:13;18323:101;;;18412:1;18403:6;18398:3;18394:16;18387:27;18323:101;18172:258;18123:307;;;:::o;18436:320::-;18480:6;18517:1;18511:4;18507:12;18497:22;;18564:1;18558:4;18554:12;18585:18;18575:81;;18641:4;18633:6;18629:17;18619:27;;18575:81;18703:2;18695:6;18692:14;18672:18;18669:38;18666:84;;;18722:18;;:::i;:::-;18666:84;18487:269;18436:320;;;:::o;18762:180::-;18810:77;18807:1;18800:88;18907:4;18904:1;18897:15;18931:4;18928:1;18921:15;18948:180;18996:77;18993:1;18986:88;19093:4;19090:1;19083:15;19117:4;19114:1;19107:15;19257:117;19366:1;19363;19356:12;19380:102;19421:6;19472:2;19468:7;19463:2;19456:5;19452:14;19448:28;19438:38;;19380:102;;;:::o;19488:222::-;19628:34;19624:1;19616:6;19612:14;19605:58;19697:5;19692:2;19684:6;19680:15;19673:30;19488:222;:::o;19716:221::-;19856:34;19852:1;19844:6;19840:14;19833:58;19925:4;19920:2;19912:6;19908:15;19901:29;19716:221;:::o;19943:225::-;20083:34;20079:1;20071:6;20067:14;20060:58;20152:8;20147:2;20139:6;20135:15;20128:33;19943:225;:::o;20174:221::-;20314:34;20310:1;20302:6;20298:14;20291:58;20383:4;20378:2;20370:6;20366:15;20359:29;20174:221;:::o;20401:179::-;20541:31;20537:1;20529:6;20525:14;20518:55;20401:179;:::o;20586:225::-;20726:34;20722:1;20714:6;20710:14;20703:58;20795:8;20790:2;20782:6;20778:15;20771:33;20586:225;:::o;20817:227::-;20957:34;20953:1;20945:6;20941:14;20934:58;21026:10;21021:2;21013:6;21009:15;21002:35;20817:227;:::o;21050:182::-;21190:34;21186:1;21178:6;21174:14;21167:58;21050:182;:::o;21238:220::-;21378:34;21374:1;21366:6;21362:14;21355:58;21447:3;21442:2;21434:6;21430:15;21423:28;21238:220;:::o;21464:224::-;21604:34;21600:1;21592:6;21588:14;21581:58;21673:7;21668:2;21660:6;21656:15;21649:32;21464:224;:::o;21694:223::-;21834:34;21830:1;21822:6;21818:14;21811:58;21903:6;21898:2;21890:6;21886:15;21879:31;21694:223;:::o;21923:224::-;22063:34;22059:1;22051:6;22047:14;22040:58;22132:7;22127:2;22119:6;22115:15;22108:32;21923:224;:::o;22153:181::-;22293:33;22289:1;22281:6;22277:14;22270:57;22153:181;:::o;22340:122::-;22413:24;22431:5;22413:24;:::i;:::-;22406:5;22403:35;22393:63;;22452:1;22449;22442:12;22393:63;22340:122;:::o;22468:116::-;22538:21;22553:5;22538:21;:::i;:::-;22531:5;22528:32;22518:60;;22574:1;22571;22564:12;22518:60;22468:116;:::o;22590:150::-;22677:38;22709:5;22677:38;:::i;:::-;22670:5;22667:49;22657:77;;22730:1;22727;22720:12;22657:77;22590:150;:::o;22746:122::-;22819:24;22837:5;22819:24;:::i;:::-;22812:5;22809:35;22799:63;;22858:1;22855;22848:12;22799:63;22746:122;:::o

Swarm Source

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