ETH Price: $2,628.72 (-1.25%)

Token

Cat Swap (CAT)
 

Overview

Max Total Supply

100,000,000 CAT

Holders

26

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000026092329 CAT

Value
$0.00
0x787Cb9CC4dac6df651266d6cE81bd0F09dd8842D
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:
CatSwapCoin

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2023-04-28
*/

// SPDX-License-Identifier: MIT
/**

 * Website: https://www.catswaps.app/
 * Telegram: https://t.me/CatSwap_ETH
 * Exchange:https://catexchange.org/
 * Twitter: https://twitter.com/CatSwap_ETH
*/

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

// OpenZeppelin Contracts v4.4.1 (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


// OpenZeppelin Contracts (last updated v4.7.0) (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() {
        _transferOwnership(_msgSender());
    }

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions 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);
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// 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.8.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.openzeppelin.com/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, allowance(owner, spender) + addedValue);
        return true;
    }

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

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

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

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

// File: v11.sol

pragma solidity ^0.8.0;



contract CatSwapCoin is ERC20, Ownable {
    uint256 private _totalSupply = 100000000 * (10 ** 18);
    uint256 private _tokenPrice = 200000 * (10 ** 18);

    constructor() ERC20("Cat Swap", "CAT") {
        _mint(msg.sender, _totalSupply);
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No balance to withdraw");
        payable(msg.sender).transfer(balance);
    }

    function setTokenPrice(uint256 newTokenPrice) external onlyOwner {
        require(newTokenPrice > 0, "Token price should be greater than 0");
        _tokenPrice = newTokenPrice;
    }

    function getTokenPrice() external view returns (uint256) {
        return _tokenPrice;
    }

    function burn(uint256 amount) external {
        require(amount > 0, "Amount to burn should be greater than 0");
        require(balanceOf(msg.sender) >= amount, "Not enough tokens to burn");
        _burn(msg.sender, 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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","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":[],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"uint256","name":"newTokenPrice","type":"uint256"}],"name":"setTokenPrice","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526a52b7d2dcc80cd2e4000000600655692a5a058fc295ed0000006007553480156200002e57600080fd5b506040518060400160405280600881526020017f43617420537761700000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43415400000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000b39291906200034f565b508060049080519060200190620000cc9291906200034f565b505050620000ef620000e36200010960201b60201c565b6200011160201b60201c565b6200010333600654620001d760201b60201c565b6200059d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200024a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002419062000452565b60405180910390fd5b6200025e600083836200034560201b60201c565b8060026000828254620002729190620004a2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000325919062000474565b60405180910390a362000341600083836200034a60201b60201c565b5050565b505050565b505050565b8280546200035d9062000509565b90600052602060002090601f016020900481019282620003815760008555620003cd565b82601f106200039c57805160ff1916838001178555620003cd565b82800160010185558215620003cd579182015b82811115620003cc578251825591602001919060010190620003af565b5b509050620003dc9190620003e0565b5090565b5b80821115620003fb576000816000905550600101620003e1565b5090565b60006200040e601f8362000491565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6200044c81620004ff565b82525050565b600060208201905081810360008301526200046d81620003ff565b9050919050565b60006020820190506200048b600083018462000441565b92915050565b600082825260208201905092915050565b6000620004af82620004ff565b9150620004bc83620004ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620004f457620004f36200053f565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200052257607f821691505b602082108114156200053957620005386200056e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b611c8080620005ad6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80636a61e5fc116100a257806395d89b411161007157806395d89b41146102bd578063a457c2d7146102db578063a9059cbb1461030b578063dd62ed3e1461033b578063f2fde38b1461036b57610116565b80636a61e5fc1461024957806370a0823114610265578063715018a6146102955780638da5cb5b1461029f57610116565b8063313ce567116100e9578063313ce567146101b757806339509351146101d55780633ccfd60b1461020557806342966c681461020f5780634b94f50e1461022b57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd1461016957806323b872dd14610187575b600080fd5b610123610387565b6040516101309190611849565b60405180910390f35b610153600480360381019061014e91906111d7565b610419565b604051610160919061182e565b60405180910390f35b61017161043c565b60405161017e9190611a4b565b60405180910390f35b6101a1600480360381019061019c9190611188565b610446565b6040516101ae919061182e565b60405180910390f35b6101bf610475565b6040516101cc9190611a66565b60405180910390f35b6101ef60048036038101906101ea91906111d7565b61047e565b6040516101fc919061182e565b60405180910390f35b61020d6104b5565b005b61022960048036038101906102249190611213565b61054f565b005b6102336105ea565b6040516102409190611a4b565b60405180910390f35b610263600480360381019061025e9190611213565b6105f4565b005b61027f600480360381019061027a9190611123565b610649565b60405161028c9190611a4b565b60405180910390f35b61029d610691565b005b6102a76106a5565b6040516102b49190611813565b60405180910390f35b6102c56106cf565b6040516102d29190611849565b60405180910390f35b6102f560048036038101906102f091906111d7565b610761565b604051610302919061182e565b60405180910390f35b610325600480360381019061032091906111d7565b6107d8565b604051610332919061182e565b60405180910390f35b6103556004803603810190610350919061114c565b6107fb565b6040516103629190611a4b565b60405180910390f35b61038560048036038101906103809190611123565b610882565b005b60606003805461039690611b7b565b80601f01602080910402602001604051908101604052809291908181526020018280546103c290611b7b565b801561040f5780601f106103e45761010080835404028352916020019161040f565b820191906000526020600020905b8154815290600101906020018083116103f257829003601f168201915b5050505050905090565b600080610424610906565b905061043181858561090e565b600191505092915050565b6000600254905090565b600080610451610906565b905061045e858285610ad9565b610469858585610b65565b60019150509392505050565b60006012905090565b600080610489610906565b90506104aa81858561049b85896107fb565b6104a59190611a9d565b61090e565b600191505092915050565b6104bd610ddd565b600047905060008111610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc906119ab565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561054b573d6000803e3d6000fd5b5050565b60008111610592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105899061194b565b60405180910390fd5b8061059c33610649565b10156105dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d49061196b565b60405180910390fd5b6105e73382610e5b565b50565b6000600754905090565b6105fc610ddd565b6000811161063f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106369061192b565b60405180910390fd5b8060078190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610699610ddd565b6106a36000611029565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546106de90611b7b565b80601f016020809104026020016040519081016040528092919081815260200182805461070a90611b7b565b80156107575780601f1061072c57610100808354040283529160200191610757565b820191906000526020600020905b81548152906001019060200180831161073a57829003601f168201915b5050505050905090565b60008061076c610906565b9050600061077a82866107fb565b9050838110156107bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b690611a2b565b60405180910390fd5b6107cc828686840361090e565b60019250505092915050565b6000806107e3610906565b90506107f0818585610b65565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61088a610ddd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f1906118ab565b60405180910390fd5b61090381611029565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097590611a0b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e5906118cb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610acc9190611a4b565b60405180910390a3505050565b6000610ae584846107fb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b5f5781811015610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b48906118eb565b60405180910390fd5b610b5e848484840361090e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906119eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c9061186b565b60405180910390fd5b610c508383836110ef565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd9061190b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610dc49190611a4b565b60405180910390a3610dd78484846110f4565b50505050565b610de5610906565b73ffffffffffffffffffffffffffffffffffffffff16610e036106a5565b73ffffffffffffffffffffffffffffffffffffffff1614610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e509061198b565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec2906119cb565b60405180910390fd5b610ed7826000836110ef565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061188b565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110109190611a4b565b60405180910390a3611024836000846110f4565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b60008135905061110881611c1c565b92915050565b60008135905061111d81611c33565b92915050565b60006020828403121561113557600080fd5b6000611143848285016110f9565b91505092915050565b6000806040838503121561115f57600080fd5b600061116d858286016110f9565b925050602061117e858286016110f9565b9150509250929050565b60008060006060848603121561119d57600080fd5b60006111ab868287016110f9565b93505060206111bc868287016110f9565b92505060406111cd8682870161110e565b9150509250925092565b600080604083850312156111ea57600080fd5b60006111f8858286016110f9565b92505060206112098582860161110e565b9150509250929050565b60006020828403121561122557600080fd5b60006112338482850161110e565b91505092915050565b61124581611af3565b82525050565b61125481611b05565b82525050565b600061126582611a81565b61126f8185611a8c565b935061127f818560208601611b48565b61128881611c0b565b840191505092915050565b60006112a0602383611a8c565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611306602283611a8c565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061136c602683611a8c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006113d2602283611a8c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611438601d83611a8c565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000611478602683611a8c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006114de602483611a8c565b91507f546f6b656e2070726963652073686f756c64206265206772656174657220746860008301527f616e2030000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611544602783611a8c565b91507f416d6f756e7420746f206275726e2073686f756c64206265206772656174657260008301527f207468616e2030000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006115aa601983611a8c565b91507f4e6f7420656e6f75676820746f6b656e7320746f206275726e000000000000006000830152602082019050919050565b60006115ea602083611a8c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061162a601683611a8c565b91507f4e6f2062616c616e636520746f207769746864726177000000000000000000006000830152602082019050919050565b600061166a602183611a8c565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006116d0602583611a8c565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611736602483611a8c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061179c602583611a8c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6117fe81611b31565b82525050565b61180d81611b3b565b82525050565b6000602082019050611828600083018461123c565b92915050565b6000602082019050611843600083018461124b565b92915050565b60006020820190508181036000830152611863818461125a565b905092915050565b6000602082019050818103600083015261188481611293565b9050919050565b600060208201905081810360008301526118a4816112f9565b9050919050565b600060208201905081810360008301526118c48161135f565b9050919050565b600060208201905081810360008301526118e4816113c5565b9050919050565b600060208201905081810360008301526119048161142b565b9050919050565b600060208201905081810360008301526119248161146b565b9050919050565b60006020820190508181036000830152611944816114d1565b9050919050565b6000602082019050818103600083015261196481611537565b9050919050565b600060208201905081810360008301526119848161159d565b9050919050565b600060208201905081810360008301526119a4816115dd565b9050919050565b600060208201905081810360008301526119c48161161d565b9050919050565b600060208201905081810360008301526119e48161165d565b9050919050565b60006020820190508181036000830152611a04816116c3565b9050919050565b60006020820190508181036000830152611a2481611729565b9050919050565b60006020820190508181036000830152611a448161178f565b9050919050565b6000602082019050611a6060008301846117f5565b92915050565b6000602082019050611a7b6000830184611804565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611aa882611b31565b9150611ab383611b31565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ae857611ae7611bad565b5b828201905092915050565b6000611afe82611b11565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611b66578082015181840152602081019050611b4b565b83811115611b75576000848401525b50505050565b60006002820490506001821680611b9357607f821691505b60208210811415611ba757611ba6611bdc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b611c2581611af3565b8114611c3057600080fd5b50565b611c3c81611b31565b8114611c4757600080fd5b5056fea2646970667358221220f7346470d81e16dd1a1dbd7fd1dde6e4a77744ee7b8121249bab4e3a5ae3ac8664736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101165760003560e01c80636a61e5fc116100a257806395d89b411161007157806395d89b41146102bd578063a457c2d7146102db578063a9059cbb1461030b578063dd62ed3e1461033b578063f2fde38b1461036b57610116565b80636a61e5fc1461024957806370a0823114610265578063715018a6146102955780638da5cb5b1461029f57610116565b8063313ce567116100e9578063313ce567146101b757806339509351146101d55780633ccfd60b1461020557806342966c681461020f5780634b94f50e1461022b57610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd1461016957806323b872dd14610187575b600080fd5b610123610387565b6040516101309190611849565b60405180910390f35b610153600480360381019061014e91906111d7565b610419565b604051610160919061182e565b60405180910390f35b61017161043c565b60405161017e9190611a4b565b60405180910390f35b6101a1600480360381019061019c9190611188565b610446565b6040516101ae919061182e565b60405180910390f35b6101bf610475565b6040516101cc9190611a66565b60405180910390f35b6101ef60048036038101906101ea91906111d7565b61047e565b6040516101fc919061182e565b60405180910390f35b61020d6104b5565b005b61022960048036038101906102249190611213565b61054f565b005b6102336105ea565b6040516102409190611a4b565b60405180910390f35b610263600480360381019061025e9190611213565b6105f4565b005b61027f600480360381019061027a9190611123565b610649565b60405161028c9190611a4b565b60405180910390f35b61029d610691565b005b6102a76106a5565b6040516102b49190611813565b60405180910390f35b6102c56106cf565b6040516102d29190611849565b60405180910390f35b6102f560048036038101906102f091906111d7565b610761565b604051610302919061182e565b60405180910390f35b610325600480360381019061032091906111d7565b6107d8565b604051610332919061182e565b60405180910390f35b6103556004803603810190610350919061114c565b6107fb565b6040516103629190611a4b565b60405180910390f35b61038560048036038101906103809190611123565b610882565b005b60606003805461039690611b7b565b80601f01602080910402602001604051908101604052809291908181526020018280546103c290611b7b565b801561040f5780601f106103e45761010080835404028352916020019161040f565b820191906000526020600020905b8154815290600101906020018083116103f257829003601f168201915b5050505050905090565b600080610424610906565b905061043181858561090e565b600191505092915050565b6000600254905090565b600080610451610906565b905061045e858285610ad9565b610469858585610b65565b60019150509392505050565b60006012905090565b600080610489610906565b90506104aa81858561049b85896107fb565b6104a59190611a9d565b61090e565b600191505092915050565b6104bd610ddd565b600047905060008111610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc906119ab565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561054b573d6000803e3d6000fd5b5050565b60008111610592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105899061194b565b60405180910390fd5b8061059c33610649565b10156105dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d49061196b565b60405180910390fd5b6105e73382610e5b565b50565b6000600754905090565b6105fc610ddd565b6000811161063f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106369061192b565b60405180910390fd5b8060078190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610699610ddd565b6106a36000611029565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546106de90611b7b565b80601f016020809104026020016040519081016040528092919081815260200182805461070a90611b7b565b80156107575780601f1061072c57610100808354040283529160200191610757565b820191906000526020600020905b81548152906001019060200180831161073a57829003601f168201915b5050505050905090565b60008061076c610906565b9050600061077a82866107fb565b9050838110156107bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b690611a2b565b60405180910390fd5b6107cc828686840361090e565b60019250505092915050565b6000806107e3610906565b90506107f0818585610b65565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61088a610ddd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f1906118ab565b60405180910390fd5b61090381611029565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097590611a0b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e5906118cb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610acc9190611a4b565b60405180910390a3505050565b6000610ae584846107fb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b5f5781811015610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b48906118eb565b60405180910390fd5b610b5e848484840361090e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906119eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c9061186b565b60405180910390fd5b610c508383836110ef565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd9061190b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610dc49190611a4b565b60405180910390a3610dd78484846110f4565b50505050565b610de5610906565b73ffffffffffffffffffffffffffffffffffffffff16610e036106a5565b73ffffffffffffffffffffffffffffffffffffffff1614610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e509061198b565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec2906119cb565b60405180910390fd5b610ed7826000836110ef565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061188b565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110109190611a4b565b60405180910390a3611024836000846110f4565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b60008135905061110881611c1c565b92915050565b60008135905061111d81611c33565b92915050565b60006020828403121561113557600080fd5b6000611143848285016110f9565b91505092915050565b6000806040838503121561115f57600080fd5b600061116d858286016110f9565b925050602061117e858286016110f9565b9150509250929050565b60008060006060848603121561119d57600080fd5b60006111ab868287016110f9565b93505060206111bc868287016110f9565b92505060406111cd8682870161110e565b9150509250925092565b600080604083850312156111ea57600080fd5b60006111f8858286016110f9565b92505060206112098582860161110e565b9150509250929050565b60006020828403121561122557600080fd5b60006112338482850161110e565b91505092915050565b61124581611af3565b82525050565b61125481611b05565b82525050565b600061126582611a81565b61126f8185611a8c565b935061127f818560208601611b48565b61128881611c0b565b840191505092915050565b60006112a0602383611a8c565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611306602283611a8c565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061136c602683611a8c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006113d2602283611a8c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611438601d83611a8c565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000611478602683611a8c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006114de602483611a8c565b91507f546f6b656e2070726963652073686f756c64206265206772656174657220746860008301527f616e2030000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611544602783611a8c565b91507f416d6f756e7420746f206275726e2073686f756c64206265206772656174657260008301527f207468616e2030000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006115aa601983611a8c565b91507f4e6f7420656e6f75676820746f6b656e7320746f206275726e000000000000006000830152602082019050919050565b60006115ea602083611a8c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061162a601683611a8c565b91507f4e6f2062616c616e636520746f207769746864726177000000000000000000006000830152602082019050919050565b600061166a602183611a8c565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006116d0602583611a8c565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611736602483611a8c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061179c602583611a8c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6117fe81611b31565b82525050565b61180d81611b3b565b82525050565b6000602082019050611828600083018461123c565b92915050565b6000602082019050611843600083018461124b565b92915050565b60006020820190508181036000830152611863818461125a565b905092915050565b6000602082019050818103600083015261188481611293565b9050919050565b600060208201905081810360008301526118a4816112f9565b9050919050565b600060208201905081810360008301526118c48161135f565b9050919050565b600060208201905081810360008301526118e4816113c5565b9050919050565b600060208201905081810360008301526119048161142b565b9050919050565b600060208201905081810360008301526119248161146b565b9050919050565b60006020820190508181036000830152611944816114d1565b9050919050565b6000602082019050818103600083015261196481611537565b9050919050565b600060208201905081810360008301526119848161159d565b9050919050565b600060208201905081810360008301526119a4816115dd565b9050919050565b600060208201905081810360008301526119c48161161d565b9050919050565b600060208201905081810360008301526119e48161165d565b9050919050565b60006020820190508181036000830152611a04816116c3565b9050919050565b60006020820190508181036000830152611a2481611729565b9050919050565b60006020820190508181036000830152611a448161178f565b9050919050565b6000602082019050611a6060008301846117f5565b92915050565b6000602082019050611a7b6000830184611804565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611aa882611b31565b9150611ab383611b31565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ae857611ae7611bad565b5b828201905092915050565b6000611afe82611b11565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611b66578082015181840152602081019050611b4b565b83811115611b75576000848401525b50505050565b60006002820490506001821680611b9357607f821691505b60208210811415611ba757611ba6611bdc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b611c2581611af3565b8114611c3057600080fd5b50565b611c3c81611b31565b8114611c4757600080fd5b5056fea2646970667358221220f7346470d81e16dd1a1dbd7fd1dde6e4a77744ee7b8121249bab4e3a5ae3ac8664736f6c63430008000033

Deployed Bytecode Sourcemap

20868:1008:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9629:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11980:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10749:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12761:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10591:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13465:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21129:202;;;:::i;:::-;;21637:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21535:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21339:188;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10920:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3054:103;;;:::i;:::-;;2406:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9848:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14206:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11253:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11509:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3312:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9629:100;9683:13;9716:5;9709:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9629:100;:::o;11980:201::-;12063:4;12080:13;12096:12;:10;:12::i;:::-;12080:28;;12119:32;12128:5;12135:7;12144:6;12119:8;:32::i;:::-;12169:4;12162:11;;;11980:201;;;;:::o;10749:108::-;10810:7;10837:12;;10830:19;;10749:108;:::o;12761:295::-;12892:4;12909:15;12927:12;:10;:12::i;:::-;12909:30;;12950:38;12966:4;12972:7;12981:6;12950:15;:38::i;:::-;12999:27;13009:4;13015:2;13019:6;12999:9;:27::i;:::-;13044:4;13037:11;;;12761:295;;;;;:::o;10591:93::-;10649:5;10674:2;10667:9;;10591:93;:::o;13465:238::-;13553:4;13570:13;13586:12;:10;:12::i;:::-;13570:28;;13609:64;13618:5;13625:7;13662:10;13634:25;13644:5;13651:7;13634:9;:25::i;:::-;:38;;;;:::i;:::-;13609:8;:64::i;:::-;13691:4;13684:11;;;13465:238;;;;:::o;21129:202::-;2292:13;:11;:13::i;:::-;21179:15:::1;21197:21;21179:39;;21247:1;21237:7;:11;21229:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;21294:10;21286:28;;:37;21315:7;21286:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;2316:1;21129:202::o:0;21637:236::-;21704:1;21695:6;:10;21687:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21793:6;21768:21;21778:10;21768:9;:21::i;:::-;:31;;21760:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21840:25;21846:10;21858:6;21840:5;:25::i;:::-;21637:236;:::o;21535:94::-;21583:7;21610:11;;21603:18;;21535:94;:::o;21339:188::-;2292:13;:11;:13::i;:::-;21439:1:::1;21423:13;:17;21415:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;21506:13;21492:11;:27;;;;21339:188:::0;:::o;10920:127::-;10994:7;11021:9;:18;11031:7;11021:18;;;;;;;;;;;;;;;;11014:25;;10920:127;;;:::o;3054:103::-;2292:13;:11;:13::i;:::-;3119:30:::1;3146:1;3119:18;:30::i;:::-;3054:103::o:0;2406:87::-;2452:7;2479:6;;;;;;;;;;;2472:13;;2406:87;:::o;9848:104::-;9904:13;9937:7;9930:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9848:104;:::o;14206:436::-;14299:4;14316:13;14332:12;:10;:12::i;:::-;14316:28;;14355:24;14382:25;14392:5;14399:7;14382:9;:25::i;:::-;14355:52;;14446:15;14426:16;:35;;14418:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14539:60;14548:5;14555:7;14583:15;14564:16;:34;14539:8;:60::i;:::-;14630:4;14623:11;;;;14206:436;;;;:::o;11253:193::-;11332:4;11349:13;11365:12;:10;:12::i;:::-;11349:28;;11388;11398:5;11405:2;11409:6;11388:9;:28::i;:::-;11434:4;11427:11;;;11253:193;;;;:::o;11509:151::-;11598:7;11625:11;:18;11637:5;11625:18;;;;;;;;;;;;;;;:27;11644:7;11625:27;;;;;;;;;;;;;;;;11618:34;;11509:151;;;;:::o;3312:201::-;2292:13;:11;:13::i;:::-;3421:1:::1;3401:22;;:8;:22;;;;3393:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3477:28;3496:8;3477:18;:28::i;:::-;3312:201:::0;:::o;957:98::-;1010:7;1037:10;1030:17;;957:98;:::o;18233:380::-;18386:1;18369:19;;:5;:19;;;;18361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18467:1;18448:21;;:7;:21;;;;18440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18551:6;18521:11;:18;18533:5;18521:18;;;;;;;;;;;;;;;:27;18540:7;18521:27;;;;;;;;;;;;;;;:36;;;;18589:7;18573:32;;18582:5;18573:32;;;18598:6;18573:32;;;;;;:::i;:::-;;;;;;;;18233:380;;;:::o;18904:453::-;19039:24;19066:25;19076:5;19083:7;19066:9;:25::i;:::-;19039:52;;19126:17;19106:16;:37;19102:248;;19188:6;19168:16;:26;;19160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19272:51;19281:5;19288:7;19316:6;19297:16;:25;19272:8;:51::i;:::-;19102:248;18904:453;;;;:::o;15112:840::-;15259:1;15243:18;;:4;:18;;;;15235:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15336:1;15322:16;;:2;:16;;;;15314:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15391:38;15412:4;15418:2;15422:6;15391:20;:38::i;:::-;15442:19;15464:9;:15;15474:4;15464:15;;;;;;;;;;;;;;;;15442:37;;15513:6;15498:11;:21;;15490:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15630:6;15616:11;:20;15598:9;:15;15608:4;15598:15;;;;;;;;;;;;;;;:38;;;;15833:6;15816:9;:13;15826:2;15816:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15883:2;15868:26;;15877:4;15868:26;;;15887:6;15868:26;;;;;;:::i;:::-;;;;;;;;15907:37;15927:4;15933:2;15937:6;15907:19;:37::i;:::-;15112:840;;;;:::o;2571:132::-;2646:12;:10;:12::i;:::-;2635:23;;:7;:5;:7::i;:::-;:23;;;2627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2571:132::o;17120:675::-;17223:1;17204:21;;:7;:21;;;;17196:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17276:49;17297:7;17314:1;17318:6;17276:20;:49::i;:::-;17338:22;17363:9;:18;17373:7;17363:18;;;;;;;;;;;;;;;;17338:43;;17418:6;17400:14;:24;;17392:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17537:6;17520:14;:23;17499:9;:18;17509:7;17499:18;;;;;;;;;;;;;;;:44;;;;17654:6;17638:12;;:22;;;;;;;;;;;17715:1;17689:37;;17698:7;17689:37;;;17719:6;17689:37;;;;;;:::i;:::-;;;;;;;;17739:48;17759:7;17776:1;17780:6;17739:19;:48::i;:::-;17120:675;;;:::o;3673:191::-;3747:16;3766:6;;;;;;;;;;;3747:25;;3792:8;3783:6;;:17;;;;;;;;;;;;;;;;;;3847:8;3816:40;;3837:8;3816:40;;;;;;;;;;;;3673:191;;:::o;19957:125::-;;;;:::o;20686:124::-;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:262::-;;405:2;393:9;384:7;380:23;376:32;373:2;;;421:1;418;411:12;373:2;464:1;489:53;534:7;525:6;514:9;510:22;489:53;:::i;:::-;479:63;;435:117;363:196;;;;:::o;565:407::-;;;690:2;678:9;669:7;665:23;661:32;658:2;;;706:1;703;696:12;658:2;749:1;774:53;819:7;810:6;799:9;795:22;774:53;:::i;:::-;764:63;;720:117;876:2;902:53;947:7;938:6;927:9;923:22;902:53;:::i;:::-;892:63;;847:118;648:324;;;;;:::o;978:552::-;;;;1120:2;1108:9;1099:7;1095:23;1091:32;1088:2;;;1136:1;1133;1126:12;1088:2;1179:1;1204:53;1249:7;1240:6;1229:9;1225:22;1204:53;:::i;:::-;1194:63;;1150:117;1306:2;1332:53;1377:7;1368:6;1357:9;1353:22;1332:53;:::i;:::-;1322:63;;1277:118;1434:2;1460:53;1505:7;1496:6;1485:9;1481:22;1460:53;:::i;:::-;1450:63;;1405:118;1078:452;;;;;:::o;1536:407::-;;;1661:2;1649:9;1640:7;1636:23;1632:32;1629:2;;;1677:1;1674;1667:12;1629:2;1720:1;1745:53;1790:7;1781:6;1770:9;1766:22;1745:53;:::i;:::-;1735:63;;1691:117;1847:2;1873:53;1918:7;1909:6;1898:9;1894:22;1873:53;:::i;:::-;1863:63;;1818:118;1619:324;;;;;:::o;1949:262::-;;2057:2;2045:9;2036:7;2032:23;2028:32;2025:2;;;2073:1;2070;2063:12;2025:2;2116:1;2141:53;2186:7;2177:6;2166:9;2162:22;2141:53;:::i;:::-;2131:63;;2087:117;2015:196;;;;:::o;2217:118::-;2304:24;2322:5;2304:24;:::i;:::-;2299:3;2292:37;2282:53;;:::o;2341:109::-;2422:21;2437:5;2422:21;:::i;:::-;2417:3;2410:34;2400:50;;:::o;2456:364::-;;2572:39;2605:5;2572:39;:::i;:::-;2627:71;2691:6;2686:3;2627:71;:::i;:::-;2620:78;;2707:52;2752:6;2747:3;2740:4;2733:5;2729:16;2707:52;:::i;:::-;2784:29;2806:6;2784:29;:::i;:::-;2779:3;2775:39;2768:46;;2548:272;;;;;:::o;2826:367::-;;2989:67;3053:2;3048:3;2989:67;:::i;:::-;2982:74;;3086:34;3082:1;3077:3;3073:11;3066:55;3152:5;3147:2;3142:3;3138:12;3131:27;3184:2;3179:3;3175:12;3168:19;;2972:221;;;:::o;3199:366::-;;3362:67;3426:2;3421:3;3362:67;:::i;:::-;3355:74;;3459:34;3455:1;3450:3;3446:11;3439:55;3525:4;3520:2;3515:3;3511:12;3504:26;3556:2;3551:3;3547:12;3540:19;;3345:220;;;:::o;3571:370::-;;3734:67;3798:2;3793:3;3734:67;:::i;:::-;3727:74;;3831:34;3827:1;3822:3;3818:11;3811:55;3897:8;3892:2;3887:3;3883:12;3876:30;3932:2;3927:3;3923:12;3916:19;;3717:224;;;:::o;3947:366::-;;4110:67;4174:2;4169:3;4110:67;:::i;:::-;4103:74;;4207:34;4203:1;4198:3;4194:11;4187:55;4273:4;4268:2;4263:3;4259:12;4252:26;4304:2;4299:3;4295:12;4288:19;;4093:220;;;:::o;4319:327::-;;4482:67;4546:2;4541:3;4482:67;:::i;:::-;4475:74;;4579:31;4575:1;4570:3;4566:11;4559:52;4637:2;4632:3;4628:12;4621:19;;4465:181;;;:::o;4652:370::-;;4815:67;4879:2;4874:3;4815:67;:::i;:::-;4808:74;;4912:34;4908:1;4903:3;4899:11;4892:55;4978:8;4973:2;4968:3;4964:12;4957:30;5013:2;5008:3;5004:12;4997:19;;4798:224;;;:::o;5028:368::-;;5191:67;5255:2;5250:3;5191:67;:::i;:::-;5184:74;;5288:34;5284:1;5279:3;5275:11;5268:55;5354:6;5349:2;5344:3;5340:12;5333:28;5387:2;5382:3;5378:12;5371:19;;5174:222;;;:::o;5402:371::-;;5565:67;5629:2;5624:3;5565:67;:::i;:::-;5558:74;;5662:34;5658:1;5653:3;5649:11;5642:55;5728:9;5723:2;5718:3;5714:12;5707:31;5764:2;5759:3;5755:12;5748:19;;5548:225;;;:::o;5779:323::-;;5942:67;6006:2;6001:3;5942:67;:::i;:::-;5935:74;;6039:27;6035:1;6030:3;6026:11;6019:48;6093:2;6088:3;6084:12;6077:19;;5925:177;;;:::o;6108:330::-;;6271:67;6335:2;6330:3;6271:67;:::i;:::-;6264:74;;6368:34;6364:1;6359:3;6355:11;6348:55;6429:2;6424:3;6420:12;6413:19;;6254:184;;;:::o;6444:320::-;;6607:67;6671:2;6666:3;6607:67;:::i;:::-;6600:74;;6704:24;6700:1;6695:3;6691:11;6684:45;6755:2;6750:3;6746:12;6739:19;;6590:174;;;:::o;6770:365::-;;6933:67;6997:2;6992:3;6933:67;:::i;:::-;6926:74;;7030:34;7026:1;7021:3;7017:11;7010:55;7096:3;7091:2;7086:3;7082:12;7075:25;7126:2;7121:3;7117:12;7110:19;;6916:219;;;:::o;7141:369::-;;7304:67;7368:2;7363:3;7304:67;:::i;:::-;7297:74;;7401:34;7397:1;7392:3;7388:11;7381:55;7467:7;7462:2;7457:3;7453:12;7446:29;7501:2;7496:3;7492:12;7485:19;;7287:223;;;:::o;7516:368::-;;7679:67;7743:2;7738:3;7679:67;:::i;:::-;7672:74;;7776:34;7772:1;7767:3;7763:11;7756:55;7842:6;7837:2;7832:3;7828:12;7821:28;7875:2;7870:3;7866:12;7859:19;;7662:222;;;:::o;7890:369::-;;8053:67;8117:2;8112:3;8053:67;:::i;:::-;8046:74;;8150:34;8146:1;8141:3;8137:11;8130:55;8216:7;8211:2;8206:3;8202:12;8195:29;8250:2;8245:3;8241:12;8234:19;;8036:223;;;:::o;8265:118::-;8352:24;8370:5;8352:24;:::i;:::-;8347:3;8340:37;8330:53;;:::o;8389:112::-;8472:22;8488:5;8472:22;:::i;:::-;8467:3;8460:35;8450:51;;:::o;8507:222::-;;8638:2;8627:9;8623:18;8615:26;;8651:71;8719:1;8708:9;8704:17;8695:6;8651:71;:::i;:::-;8605:124;;;;:::o;8735:210::-;;8860:2;8849:9;8845:18;8837:26;;8873:65;8935:1;8924:9;8920:17;8911:6;8873:65;:::i;:::-;8827:118;;;;:::o;8951:313::-;;9102:2;9091:9;9087:18;9079:26;;9151:9;9145:4;9141:20;9137:1;9126:9;9122:17;9115:47;9179:78;9252:4;9243:6;9179:78;:::i;:::-;9171:86;;9069:195;;;;:::o;9270:419::-;;9474:2;9463:9;9459:18;9451:26;;9523:9;9517:4;9513:20;9509:1;9498:9;9494:17;9487:47;9551:131;9677:4;9551:131;:::i;:::-;9543:139;;9441:248;;;:::o;9695:419::-;;9899:2;9888:9;9884:18;9876:26;;9948:9;9942:4;9938:20;9934:1;9923:9;9919:17;9912:47;9976:131;10102:4;9976:131;:::i;:::-;9968:139;;9866:248;;;:::o;10120:419::-;;10324:2;10313:9;10309:18;10301:26;;10373:9;10367:4;10363:20;10359:1;10348:9;10344:17;10337:47;10401:131;10527:4;10401:131;:::i;:::-;10393:139;;10291:248;;;:::o;10545:419::-;;10749:2;10738:9;10734:18;10726:26;;10798:9;10792:4;10788:20;10784:1;10773:9;10769:17;10762:47;10826:131;10952:4;10826:131;:::i;:::-;10818:139;;10716:248;;;:::o;10970:419::-;;11174:2;11163:9;11159:18;11151:26;;11223:9;11217:4;11213:20;11209:1;11198:9;11194:17;11187:47;11251:131;11377:4;11251:131;:::i;:::-;11243:139;;11141:248;;;:::o;11395:419::-;;11599:2;11588:9;11584:18;11576:26;;11648:9;11642:4;11638:20;11634:1;11623:9;11619:17;11612:47;11676:131;11802:4;11676:131;:::i;:::-;11668:139;;11566:248;;;:::o;11820:419::-;;12024:2;12013:9;12009:18;12001:26;;12073:9;12067:4;12063:20;12059:1;12048:9;12044:17;12037:47;12101:131;12227:4;12101:131;:::i;:::-;12093:139;;11991:248;;;:::o;12245:419::-;;12449:2;12438:9;12434:18;12426:26;;12498:9;12492:4;12488:20;12484:1;12473:9;12469:17;12462:47;12526:131;12652:4;12526:131;:::i;:::-;12518:139;;12416:248;;;:::o;12670:419::-;;12874:2;12863:9;12859:18;12851:26;;12923:9;12917:4;12913:20;12909:1;12898:9;12894:17;12887:47;12951:131;13077:4;12951:131;:::i;:::-;12943:139;;12841:248;;;:::o;13095:419::-;;13299:2;13288:9;13284:18;13276:26;;13348:9;13342:4;13338:20;13334:1;13323:9;13319:17;13312:47;13376:131;13502:4;13376:131;:::i;:::-;13368:139;;13266:248;;;:::o;13520:419::-;;13724:2;13713:9;13709:18;13701:26;;13773:9;13767:4;13763:20;13759:1;13748:9;13744:17;13737:47;13801:131;13927:4;13801:131;:::i;:::-;13793:139;;13691:248;;;:::o;13945:419::-;;14149:2;14138:9;14134:18;14126:26;;14198:9;14192:4;14188:20;14184:1;14173:9;14169:17;14162:47;14226:131;14352:4;14226:131;:::i;:::-;14218:139;;14116:248;;;:::o;14370:419::-;;14574:2;14563:9;14559:18;14551:26;;14623:9;14617:4;14613:20;14609:1;14598:9;14594:17;14587:47;14651:131;14777:4;14651:131;:::i;:::-;14643:139;;14541:248;;;:::o;14795:419::-;;14999:2;14988:9;14984:18;14976:26;;15048:9;15042:4;15038:20;15034:1;15023:9;15019:17;15012:47;15076:131;15202:4;15076:131;:::i;:::-;15068:139;;14966:248;;;:::o;15220:419::-;;15424:2;15413:9;15409:18;15401:26;;15473:9;15467:4;15463:20;15459:1;15448:9;15444:17;15437:47;15501:131;15627:4;15501:131;:::i;:::-;15493:139;;15391:248;;;:::o;15645:222::-;;15776:2;15765:9;15761:18;15753:26;;15789:71;15857:1;15846:9;15842:17;15833:6;15789:71;:::i;:::-;15743:124;;;;:::o;15873:214::-;;16000:2;15989:9;15985:18;15977:26;;16013:67;16077:1;16066:9;16062:17;16053:6;16013:67;:::i;:::-;15967:120;;;;:::o;16093:99::-;;16179:5;16173:12;16163:22;;16152:40;;;:::o;16198:169::-;;16316:6;16311:3;16304:19;16356:4;16351:3;16347:14;16332:29;;16294:73;;;;:::o;16373:305::-;;16432:20;16450:1;16432:20;:::i;:::-;16427:25;;16466:20;16484:1;16466:20;:::i;:::-;16461:25;;16620:1;16552:66;16548:74;16545:1;16542:81;16539:2;;;16626:18;;:::i;:::-;16539:2;16670:1;16667;16663:9;16656:16;;16417:261;;;;:::o;16684:96::-;;16750:24;16768:5;16750:24;:::i;:::-;16739:35;;16729:51;;;:::o;16786:90::-;;16863:5;16856:13;16849:21;16838:32;;16828:48;;;:::o;16882:126::-;;16959:42;16952:5;16948:54;16937:65;;16927:81;;;:::o;17014:77::-;;17080:5;17069:16;;17059:32;;;:::o;17097:86::-;;17172:4;17165:5;17161:16;17150:27;;17140:43;;;:::o;17189:307::-;17257:1;17267:113;17281:6;17278:1;17275:13;17267:113;;;17366:1;17361:3;17357:11;17351:18;17347:1;17342:3;17338:11;17331:39;17303:2;17300:1;17296:10;17291:15;;17267:113;;;17398:6;17395:1;17392:13;17389:2;;;17478:1;17469:6;17464:3;17460:16;17453:27;17389:2;17238:258;;;;:::o;17502:320::-;;17583:1;17577:4;17573:12;17563:22;;17630:1;17624:4;17620:12;17651:18;17641:2;;17707:4;17699:6;17695:17;17685:27;;17641:2;17769;17761:6;17758:14;17738:18;17735:38;17732:2;;;17788:18;;:::i;:::-;17732:2;17553:269;;;;:::o;17828:180::-;17876:77;17873:1;17866:88;17973:4;17970:1;17963:15;17997:4;17994:1;17987:15;18014:180;18062:77;18059:1;18052:88;18159:4;18156:1;18149:15;18183:4;18180:1;18173:15;18200:102;;18292:2;18288:7;18283:2;18276:5;18272:14;18268:28;18258:38;;18248:54;;;:::o;18308:122::-;18381:24;18399:5;18381:24;:::i;:::-;18374:5;18371:35;18361:2;;18420:1;18417;18410:12;18361:2;18351:79;:::o;18436:122::-;18509:24;18527:5;18509:24;:::i;:::-;18502:5;18499:35;18489:2;;18548:1;18545;18538:12;18489:2;18479:79;:::o

Swarm Source

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