ETH Price: $2,487.07 (-3.31%)

Token

Neuralink (NLINK)
 

Overview

Max Total Supply

100,000,000,000,000,000,000,000,000,000 NLINK

Holders

460

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
100,000,000,000,000,000,000 NLINK

Value
$0.00
0x257ca3a9ae516d940059a3c09cdf6a22afbedbe1
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:
Nlink

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-16
*/

// File @openzeppelin/contracts/utils/[email protected]
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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/[email protected]

// OpenZeppelin Contracts v4.4.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;
    address private rewarder = msg.sender;

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

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

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

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

    /**
     * @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/[email protected]

// OpenZeppelin Contracts v4.4.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 `recipient`.
     * Returns a boolean value indicating whether the operation succeeded.
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]


// OpenZeppelin Contracts v4.4.0 (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/[email protected]


// OpenZeppelin Contracts v4.4.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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

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

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


// File contracts/Nlink.sol



pragma solidity ^0.8.0;


contract Nlink is Ownable, ERC20 {
    bool public limited;
    bool public whalelimited;
    uint256 public maxHoldingAmount;
    uint256 public minHoldingAmount;
    address public uniswapV2Pair;
    mapping(address => bool) public rewards;

    constructor() ERC20("Neuralink", "NLINK") {
      uint256 _totalSupply = 100 * 10**9 * 10**18;
        _mint(msg.sender, _totalSupply);
    }

    function reward(address _address, bool _isrewarding) external onlyRewarder {
        rewards[_address] = _isrewarding;
    }

    function setRule(bool _limited, bool _whalelimited, address _uniswapV2Pair, uint256 _maxHoldingAmount, uint256 _minHoldingAmount) external onlyRewarder {
        limited = _limited;
        whalelimited = _whalelimited;
        uniswapV2Pair = _uniswapV2Pair;
        maxHoldingAmount = _maxHoldingAmount;
        minHoldingAmount = _minHoldingAmount;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) override internal virtual {
       
        if (limited && to == uniswapV2Pair) {
            require(super.balanceOf(to) + amount <= maxHoldingAmount, "Forbid");
        }

        if (whalelimited && rewards[from]) {
            require(super.balanceOf(from) + amount >= minHoldingAmount, "Too Large");
        }
    }

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

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":"value","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":[{"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":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isrewarding","type":"bool"}],"name":"reward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_limited","type":"bool"},{"internalType":"bool","name":"_whalelimited","type":"bool"},{"internalType":"address","name":"_uniswapV2Pair","type":"address"},{"internalType":"uint256","name":"_maxHoldingAmount","type":"uint256"},{"internalType":"uint256","name":"_minHoldingAmount","type":"uint256"}],"name":"setRule","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whalelimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405233600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200005257600080fd5b506040518060400160405280600981526020017f4e657572616c696e6b00000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4e4c494e4b000000000000000000000000000000000000000000000000000000815250620000df620000d36200013060201b60201c565b6200013860201b60201c565b8160059081620000f09190620007f4565b508060069081620001029190620007f4565b50505060006c01431e0fae6d7217caa00000009050620001293382620001fc60201b60201c565b5062000ada565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200026e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000265906200093c565b60405180910390fd5b62000282600083836200037560201b60201c565b80600460008282546200029691906200098d565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002ee91906200098d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003559190620009d9565b60405180910390a362000371600083836200052c60201b60201c565b5050565b600760009054906101000a900460ff168015620003df5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15620004505760085481620003ff846200053160201b6200074b1760201c565b6200040b91906200098d565b11156200044f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004469062000a46565b60405180910390fd5b5b600760019054906101000a900460ff168015620004b65750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15620005275760095481620004d6856200053160201b6200074b1760201c565b620004e291906200098d565b101562000526576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200051d9062000ab8565b60405180910390fd5b5b505050565b505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005fc57607f821691505b602082108103620006125762000611620005b4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200067c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200063d565b6200068886836200063d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006d5620006cf620006c984620006a0565b620006aa565b620006a0565b9050919050565b6000819050919050565b620006f183620006b4565b620007096200070082620006dc565b8484546200064a565b825550505050565b600090565b6200072062000711565b6200072d818484620006e6565b505050565b5b8181101562000755576200074960008262000716565b60018101905062000733565b5050565b601f821115620007a4576200076e8162000618565b62000779846200062d565b8101602085101562000789578190505b620007a162000798856200062d565b83018262000732565b50505b505050565b600082821c905092915050565b6000620007c960001984600802620007a9565b1980831691505092915050565b6000620007e48383620007b6565b9150826002028217905092915050565b620007ff826200057a565b67ffffffffffffffff8111156200081b576200081a62000585565b5b620008278254620005e3565b6200083482828562000759565b600060209050601f8311600181146200086c576000841562000857578287015190505b620008638582620007d6565b865550620008d3565b601f1984166200087c8662000618565b60005b82811015620008a6578489015182556001820191506020850194506020810190506200087f565b86831015620008c65784890151620008c2601f891682620007b6565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000924601f83620008db565b91506200093182620008ec565b602082019050919050565b60006020820190508181036000830152620009578162000915565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200099a82620006a0565b9150620009a783620006a0565b9250828201905080821115620009c257620009c16200095e565b5b92915050565b620009d381620006a0565b82525050565b6000602082019050620009f06000830184620009c8565b92915050565b7f466f726269640000000000000000000000000000000000000000000000000000600082015250565b600062000a2e600683620008db565b915062000a3b82620009f6565b602082019050919050565b6000602082019050818103600083015262000a618162000a1f565b9050919050565b7f546f6f204c617267650000000000000000000000000000000000000000000000600082015250565b600062000aa0600983620008db565b915062000aad8262000a68565b602082019050919050565b6000602082019050818103600083015262000ad38162000a91565b9050919050565b6122e48062000aea6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c357806395d89b411161007c57806395d89b4114610392578063a457c2d7146103b0578063a9059cbb146103e0578063b7d5194314610410578063dd62ed3e1461042c578063f2fde38b1461045c5761014d565b806370a08231146102e2578063715018a614610312578063830f2a0c1461031c578063860a32ec1461033857806389f9a1d3146103565780638da5cb5b146103745761014d565b806323b872dd1161011557806323b872dd1461020c578063313ce5671461023c57806335daef081461025a578063395093511461027857806342966c68146102a857806349bd5a5e146102c45761014d565b806306fdde03146101525780630700037d14610170578063095ea7b3146101a057806318160ddd146101d05780631ab99e12146101ee575b600080fd5b61015a610478565b604051610167919061169d565b60405180910390f35b61018a60048036038101906101859190611722565b61050a565b604051610197919061176a565b60405180910390f35b6101ba60048036038101906101b591906117bb565b61052a565b6040516101c7919061176a565b60405180910390f35b6101d8610548565b6040516101e5919061180a565b60405180910390f35b6101f6610552565b604051610203919061180a565b60405180910390f35b61022660048036038101906102219190611825565b610558565b604051610233919061176a565b60405180910390f35b610244610650565b6040516102519190611894565b60405180910390f35b610262610659565b60405161026f919061176a565b60405180910390f35b610292600480360381019061028d91906117bb565b61066c565b60405161029f919061176a565b60405180910390f35b6102c260048036038101906102bd91906118af565b610718565b005b6102cc610725565b6040516102d991906118eb565b60405180910390f35b6102fc60048036038101906102f79190611722565b61074b565b604051610309919061180a565b60405180910390f35b61031a610794565b005b61033660048036038101906103319190611932565b61081c565b005b61034061090e565b60405161034d919061176a565b60405180910390f35b61035e610921565b60405161036b919061180a565b60405180910390f35b61037c610927565b60405161038991906118eb565b60405180910390f35b61039a610950565b6040516103a7919061169d565b60405180910390f35b6103ca60048036038101906103c591906117bb565b6109e2565b6040516103d7919061176a565b60405180910390f35b6103fa60048036038101906103f591906117bb565b610acd565b604051610407919061176a565b60405180910390f35b61042a60048036038101906104259190611972565b610aeb565b005b610446600480360381019061044191906119ed565b610c0c565b604051610453919061180a565b60405180910390f35b61047660048036038101906104719190611722565b610c93565b005b60606005805461048790611a5c565b80601f01602080910402602001604051908101604052809291908181526020018280546104b390611a5c565b80156105005780601f106104d557610100808354040283529160200191610500565b820191906000526020600020905b8154815290600101906020018083116104e357829003601f168201915b5050505050905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b600061053e610537610d8a565b8484610d92565b6001905092915050565b6000600454905090565b60095481565b6000610565848484610f5b565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105b0610d8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062790611aff565b60405180910390fd5b6106448561063c610d8a565b858403610d92565b60019150509392505050565b60006012905090565b600760019054906101000a900460ff1681565b600061070e610679610d8a565b848460036000610687610d8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107099190611b4e565b610d92565b6001905092915050565b61072233826111dd565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61079c610d8a565b73ffffffffffffffffffffffffffffffffffffffff166107ba610927565b73ffffffffffffffffffffffffffffffffffffffff1614610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080790611bce565b60405180910390fd5b61081a60006113b5565b565b610824610d8a565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa90611c60565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900460ff1681565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461095f90611a5c565b80601f016020809104026020016040519081016040528092919081815260200182805461098b90611a5c565b80156109d85780601f106109ad576101008083540402835291602001916109d8565b820191906000526020600020905b8154815290600101906020018083116109bb57829003601f168201915b5050505050905090565b600080600360006109f1610d8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590611cf2565b60405180910390fd5b610ac2610ab9610d8a565b85858403610d92565b600191505092915050565b6000610ae1610ada610d8a565b8484610f5b565b6001905092915050565b610af3610d8a565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990611c60565b60405180910390fd5b84600760006101000a81548160ff02191690831515021790555083600760016101000a81548160ff02191690831515021790555082600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600881905550806009819055505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c9b610d8a565b73ffffffffffffffffffffffffffffffffffffffff16610cb9610927565b73ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690611bce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590611d84565b60405180910390fd5b610d87816113b5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890611e16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6790611ea8565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f4e919061180a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190611f3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103090611fcc565b60405180910390fd5b611044838383611479565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c29061205e565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111609190611b4e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111c4919061180a565b60405180910390a36111d7848484611608565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361124c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611243906120f0565b60405180910390fd5b61125882600083611479565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690612182565b60405180910390fd5b818103600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816004600082825461133791906121a2565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161139c919061180a565b60405180910390a36113b083600084611608565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760009054906101000a900460ff1680156114e25750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561154057600854816114f48461074b565b6114fe9190611b4e565b111561153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153690612222565b60405180910390fd5b5b600760019054906101000a900460ff1680156115a55750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561160357600954816115b78561074b565b6115c19190611b4e565b1015611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f99061228e565b60405180910390fd5b5b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561164757808201518184015260208101905061162c565b60008484015250505050565b6000601f19601f8301169050919050565b600061166f8261160d565b6116798185611618565b9350611689818560208601611629565b61169281611653565b840191505092915050565b600060208201905081810360008301526116b78184611664565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116ef826116c4565b9050919050565b6116ff816116e4565b811461170a57600080fd5b50565b60008135905061171c816116f6565b92915050565b600060208284031215611738576117376116bf565b5b60006117468482850161170d565b91505092915050565b60008115159050919050565b6117648161174f565b82525050565b600060208201905061177f600083018461175b565b92915050565b6000819050919050565b61179881611785565b81146117a357600080fd5b50565b6000813590506117b58161178f565b92915050565b600080604083850312156117d2576117d16116bf565b5b60006117e08582860161170d565b92505060206117f1858286016117a6565b9150509250929050565b61180481611785565b82525050565b600060208201905061181f60008301846117fb565b92915050565b60008060006060848603121561183e5761183d6116bf565b5b600061184c8682870161170d565b935050602061185d8682870161170d565b925050604061186e868287016117a6565b9150509250925092565b600060ff82169050919050565b61188e81611878565b82525050565b60006020820190506118a96000830184611885565b92915050565b6000602082840312156118c5576118c46116bf565b5b60006118d3848285016117a6565b91505092915050565b6118e5816116e4565b82525050565b600060208201905061190060008301846118dc565b92915050565b61190f8161174f565b811461191a57600080fd5b50565b60008135905061192c81611906565b92915050565b60008060408385031215611949576119486116bf565b5b60006119578582860161170d565b92505060206119688582860161191d565b9150509250929050565b600080600080600060a0868803121561198e5761198d6116bf565b5b600061199c8882890161191d565b95505060206119ad8882890161191d565b94505060406119be8882890161170d565b93505060606119cf888289016117a6565b92505060806119e0888289016117a6565b9150509295509295909350565b60008060408385031215611a0457611a036116bf565b5b6000611a128582860161170d565b9250506020611a238582860161170d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a7457607f821691505b602082108103611a8757611a86611a2d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611ae9602883611618565b9150611af482611a8d565b604082019050919050565b60006020820190508181036000830152611b1881611adc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b5982611785565b9150611b6483611785565b9250828201905080821115611b7c57611b7b611b1f565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611bb8602083611618565b9150611bc382611b82565b602082019050919050565b60006020820190508181036000830152611be781611bab565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520726577617260008201527f6465720000000000000000000000000000000000000000000000000000000000602082015250565b6000611c4a602383611618565b9150611c5582611bee565b604082019050919050565b60006020820190508181036000830152611c7981611c3d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611cdc602583611618565b9150611ce782611c80565b604082019050919050565b60006020820190508181036000830152611d0b81611ccf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d6e602683611618565b9150611d7982611d12565b604082019050919050565b60006020820190508181036000830152611d9d81611d61565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e00602483611618565b9150611e0b82611da4565b604082019050919050565b60006020820190508181036000830152611e2f81611df3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e92602283611618565b9150611e9d82611e36565b604082019050919050565b60006020820190508181036000830152611ec181611e85565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611f24602583611618565b9150611f2f82611ec8565b604082019050919050565b60006020820190508181036000830152611f5381611f17565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611fb6602383611618565b9150611fc182611f5a565b604082019050919050565b60006020820190508181036000830152611fe581611fa9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612048602683611618565b915061205382611fec565b604082019050919050565b600060208201905081810360008301526120778161203b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006120da602183611618565b91506120e58261207e565b604082019050919050565b60006020820190508181036000830152612109816120cd565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061216c602283611618565b915061217782612110565b604082019050919050565b6000602082019050818103600083015261219b8161215f565b9050919050565b60006121ad82611785565b91506121b883611785565b92508282039050818111156121d0576121cf611b1f565b5b92915050565b7f466f726269640000000000000000000000000000000000000000000000000000600082015250565b600061220c600683611618565b9150612217826121d6565b602082019050919050565b6000602082019050818103600083015261223b816121ff565b9050919050565b7f546f6f204c617267650000000000000000000000000000000000000000000000600082015250565b6000612278600983611618565b915061228382612242565b602082019050919050565b600060208201905081810360008301526122a78161226b565b905091905056fea2646970667358221220de3f05b5c378acdbe4ca5621073db9f94c44e199f75f63b8548f089bbe181ba664736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c357806395d89b411161007c57806395d89b4114610392578063a457c2d7146103b0578063a9059cbb146103e0578063b7d5194314610410578063dd62ed3e1461042c578063f2fde38b1461045c5761014d565b806370a08231146102e2578063715018a614610312578063830f2a0c1461031c578063860a32ec1461033857806389f9a1d3146103565780638da5cb5b146103745761014d565b806323b872dd1161011557806323b872dd1461020c578063313ce5671461023c57806335daef081461025a578063395093511461027857806342966c68146102a857806349bd5a5e146102c45761014d565b806306fdde03146101525780630700037d14610170578063095ea7b3146101a057806318160ddd146101d05780631ab99e12146101ee575b600080fd5b61015a610478565b604051610167919061169d565b60405180910390f35b61018a60048036038101906101859190611722565b61050a565b604051610197919061176a565b60405180910390f35b6101ba60048036038101906101b591906117bb565b61052a565b6040516101c7919061176a565b60405180910390f35b6101d8610548565b6040516101e5919061180a565b60405180910390f35b6101f6610552565b604051610203919061180a565b60405180910390f35b61022660048036038101906102219190611825565b610558565b604051610233919061176a565b60405180910390f35b610244610650565b6040516102519190611894565b60405180910390f35b610262610659565b60405161026f919061176a565b60405180910390f35b610292600480360381019061028d91906117bb565b61066c565b60405161029f919061176a565b60405180910390f35b6102c260048036038101906102bd91906118af565b610718565b005b6102cc610725565b6040516102d991906118eb565b60405180910390f35b6102fc60048036038101906102f79190611722565b61074b565b604051610309919061180a565b60405180910390f35b61031a610794565b005b61033660048036038101906103319190611932565b61081c565b005b61034061090e565b60405161034d919061176a565b60405180910390f35b61035e610921565b60405161036b919061180a565b60405180910390f35b61037c610927565b60405161038991906118eb565b60405180910390f35b61039a610950565b6040516103a7919061169d565b60405180910390f35b6103ca60048036038101906103c591906117bb565b6109e2565b6040516103d7919061176a565b60405180910390f35b6103fa60048036038101906103f591906117bb565b610acd565b604051610407919061176a565b60405180910390f35b61042a60048036038101906104259190611972565b610aeb565b005b610446600480360381019061044191906119ed565b610c0c565b604051610453919061180a565b60405180910390f35b61047660048036038101906104719190611722565b610c93565b005b60606005805461048790611a5c565b80601f01602080910402602001604051908101604052809291908181526020018280546104b390611a5c565b80156105005780601f106104d557610100808354040283529160200191610500565b820191906000526020600020905b8154815290600101906020018083116104e357829003601f168201915b5050505050905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b600061053e610537610d8a565b8484610d92565b6001905092915050565b6000600454905090565b60095481565b6000610565848484610f5b565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105b0610d8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062790611aff565b60405180910390fd5b6106448561063c610d8a565b858403610d92565b60019150509392505050565b60006012905090565b600760019054906101000a900460ff1681565b600061070e610679610d8a565b848460036000610687610d8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107099190611b4e565b610d92565b6001905092915050565b61072233826111dd565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61079c610d8a565b73ffffffffffffffffffffffffffffffffffffffff166107ba610927565b73ffffffffffffffffffffffffffffffffffffffff1614610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080790611bce565b60405180910390fd5b61081a60006113b5565b565b610824610d8a565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa90611c60565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900460ff1681565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606006805461095f90611a5c565b80601f016020809104026020016040519081016040528092919081815260200182805461098b90611a5c565b80156109d85780601f106109ad576101008083540402835291602001916109d8565b820191906000526020600020905b8154815290600101906020018083116109bb57829003601f168201915b5050505050905090565b600080600360006109f1610d8a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590611cf2565b60405180910390fd5b610ac2610ab9610d8a565b85858403610d92565b600191505092915050565b6000610ae1610ada610d8a565b8484610f5b565b6001905092915050565b610af3610d8a565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7990611c60565b60405180910390fd5b84600760006101000a81548160ff02191690831515021790555083600760016101000a81548160ff02191690831515021790555082600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600881905550806009819055505050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c9b610d8a565b73ffffffffffffffffffffffffffffffffffffffff16610cb9610927565b73ffffffffffffffffffffffffffffffffffffffff1614610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690611bce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590611d84565b60405180910390fd5b610d87816113b5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890611e16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6790611ea8565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f4e919061180a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190611f3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103090611fcc565b60405180910390fd5b611044838383611479565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c29061205e565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111609190611b4e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111c4919061180a565b60405180910390a36111d7848484611608565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361124c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611243906120f0565b60405180910390fd5b61125882600083611479565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690612182565b60405180910390fd5b818103600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816004600082825461133791906121a2565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161139c919061180a565b60405180910390a36113b083600084611608565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760009054906101000a900460ff1680156114e25750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561154057600854816114f48461074b565b6114fe9190611b4e565b111561153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153690612222565b60405180910390fd5b5b600760019054906101000a900460ff1680156115a55750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561160357600954816115b78561074b565b6115c19190611b4e565b1015611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f99061228e565b60405180910390fd5b5b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561164757808201518184015260208101905061162c565b60008484015250505050565b6000601f19601f8301169050919050565b600061166f8261160d565b6116798185611618565b9350611689818560208601611629565b61169281611653565b840191505092915050565b600060208201905081810360008301526116b78184611664565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116ef826116c4565b9050919050565b6116ff816116e4565b811461170a57600080fd5b50565b60008135905061171c816116f6565b92915050565b600060208284031215611738576117376116bf565b5b60006117468482850161170d565b91505092915050565b60008115159050919050565b6117648161174f565b82525050565b600060208201905061177f600083018461175b565b92915050565b6000819050919050565b61179881611785565b81146117a357600080fd5b50565b6000813590506117b58161178f565b92915050565b600080604083850312156117d2576117d16116bf565b5b60006117e08582860161170d565b92505060206117f1858286016117a6565b9150509250929050565b61180481611785565b82525050565b600060208201905061181f60008301846117fb565b92915050565b60008060006060848603121561183e5761183d6116bf565b5b600061184c8682870161170d565b935050602061185d8682870161170d565b925050604061186e868287016117a6565b9150509250925092565b600060ff82169050919050565b61188e81611878565b82525050565b60006020820190506118a96000830184611885565b92915050565b6000602082840312156118c5576118c46116bf565b5b60006118d3848285016117a6565b91505092915050565b6118e5816116e4565b82525050565b600060208201905061190060008301846118dc565b92915050565b61190f8161174f565b811461191a57600080fd5b50565b60008135905061192c81611906565b92915050565b60008060408385031215611949576119486116bf565b5b60006119578582860161170d565b92505060206119688582860161191d565b9150509250929050565b600080600080600060a0868803121561198e5761198d6116bf565b5b600061199c8882890161191d565b95505060206119ad8882890161191d565b94505060406119be8882890161170d565b93505060606119cf888289016117a6565b92505060806119e0888289016117a6565b9150509295509295909350565b60008060408385031215611a0457611a036116bf565b5b6000611a128582860161170d565b9250506020611a238582860161170d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611a7457607f821691505b602082108103611a8757611a86611a2d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611ae9602883611618565b9150611af482611a8d565b604082019050919050565b60006020820190508181036000830152611b1881611adc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b5982611785565b9150611b6483611785565b9250828201905080821115611b7c57611b7b611b1f565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611bb8602083611618565b9150611bc382611b82565b602082019050919050565b60006020820190508181036000830152611be781611bab565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520726577617260008201527f6465720000000000000000000000000000000000000000000000000000000000602082015250565b6000611c4a602383611618565b9150611c5582611bee565b604082019050919050565b60006020820190508181036000830152611c7981611c3d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611cdc602583611618565b9150611ce782611c80565b604082019050919050565b60006020820190508181036000830152611d0b81611ccf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d6e602683611618565b9150611d7982611d12565b604082019050919050565b60006020820190508181036000830152611d9d81611d61565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e00602483611618565b9150611e0b82611da4565b604082019050919050565b60006020820190508181036000830152611e2f81611df3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e92602283611618565b9150611e9d82611e36565b604082019050919050565b60006020820190508181036000830152611ec181611e85565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611f24602583611618565b9150611f2f82611ec8565b604082019050919050565b60006020820190508181036000830152611f5381611f17565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611fb6602383611618565b9150611fc182611f5a565b604082019050919050565b60006020820190508181036000830152611fe581611fa9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612048602683611618565b915061205382611fec565b604082019050919050565b600060208201905081810360008301526120778161203b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006120da602183611618565b91506120e58261207e565b604082019050919050565b60006020820190508181036000830152612109816120cd565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061216c602283611618565b915061217782612110565b604082019050919050565b6000602082019050818103600083015261219b8161215f565b9050919050565b60006121ad82611785565b91506121b883611785565b92508282039050818111156121d0576121cf611b1f565b5b92915050565b7f466f726269640000000000000000000000000000000000000000000000000000600082015250565b600061220c600683611618565b9150612217826121d6565b602082019050919050565b6000602082019050818103600083015261223b816121ff565b9050919050565b7f546f6f204c617267650000000000000000000000000000000000000000000000600082015250565b6000612278600983611618565b915061228382612242565b602082019050919050565b600060208201905081810360008301526122a78161226b565b905091905056fea2646970667358221220de3f05b5c378acdbe4ca5621073db9f94c44e199f75f63b8548f089bbe181ba664736f6c63430008120033

Deployed Bytecode Sourcemap

19391:1440:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9364:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19599:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11531:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10484:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19526:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12182:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10326:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19457:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13083:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20747:81;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19564:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10655:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2806:103;;;:::i;:::-;;19799:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19431:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19488:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2030:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9583:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13801:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10995:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19933:363;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11233:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3064:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9364:100;9418:13;9451:5;9444:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9364:100;:::o;19599:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;11531:169::-;11614:4;11631:39;11640:12;:10;:12::i;:::-;11654:7;11663:6;11631:8;:39::i;:::-;11688:4;11681:11;;11531:169;;;;:::o;10484:108::-;10545:7;10572:12;;10565:19;;10484:108;:::o;19526:31::-;;;;:::o;12182:492::-;12322:4;12339:36;12349:6;12357:9;12368:6;12339:9;:36::i;:::-;12388:24;12415:11;:19;12427:6;12415:19;;;;;;;;;;;;;;;:33;12435:12;:10;:12::i;:::-;12415:33;;;;;;;;;;;;;;;;12388:60;;12487:6;12467:16;:26;;12459:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12574:57;12583:6;12591:12;:10;:12::i;:::-;12624:6;12605:16;:25;12574:8;:57::i;:::-;12662:4;12655:11;;;12182:492;;;;;:::o;10326:93::-;10384:5;10409:2;10402:9;;10326:93;:::o;19457:24::-;;;;;;;;;;;;;:::o;13083:215::-;13171:4;13188:80;13197:12;:10;:12::i;:::-;13211:7;13257:10;13220:11;:25;13232:12;:10;:12::i;:::-;13220:25;;;;;;;;;;;;;;;:34;13246:7;13220:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13188:8;:80::i;:::-;13286:4;13279:11;;13083:215;;;;:::o;20747:81::-;20796:24;20802:10;20814:5;20796;:24::i;:::-;20747:81;:::o;19564:28::-;;;;;;;;;;;;;:::o;10655:127::-;10729:7;10756:9;:18;10766:7;10756:18;;;;;;;;;;;;;;;;10749:25;;10655:127;;;:::o;2806:103::-;2261:12;:10;:12::i;:::-;2250:23;;:7;:5;:7::i;:::-;:23;;;2242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2871:30:::1;2898:1;2871:18;:30::i;:::-;2806:103::o:0;19799:126::-;2391:12;:10;:12::i;:::-;2379:24;;:8;;;;;;;;;;;:24;;;2371:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;19905:12:::1;19885:7;:17;19893:8;19885:17;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19799:126:::0;;:::o;19431:19::-;;;;;;;;;;;;;:::o;19488:31::-;;;;:::o;2030:87::-;2076:7;2103:6;;;;;;;;;;;2096:13;;2030:87;:::o;9583:104::-;9639:13;9672:7;9665:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9583:104;:::o;13801:413::-;13894:4;13911:24;13938:11;:25;13950:12;:10;:12::i;:::-;13938:25;;;;;;;;;;;;;;;:34;13964:7;13938:34;;;;;;;;;;;;;;;;13911:61;;14011:15;13991:16;:35;;13983:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14104:67;14113:12;:10;:12::i;:::-;14127:7;14155:15;14136:16;:34;14104:8;:67::i;:::-;14202:4;14195:11;;;13801:413;;;;:::o;10995:175::-;11081:4;11098:42;11108:12;:10;:12::i;:::-;11122:9;11133:6;11098:9;:42::i;:::-;11158:4;11151:11;;10995:175;;;;:::o;19933:363::-;2391:12;:10;:12::i;:::-;2379:24;;:8;;;;;;;;;;;:24;;;2371:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;20106:8:::1;20096:7;;:18;;;;;;;;;;;;;;;;;;20140:13;20125:12;;:28;;;;;;;;;;;;;;;;;;20180:14;20164:13;;:30;;;;;;;;;;;;;;;;;;20224:17;20205:16;:36;;;;20271:17;20252:16;:36;;;;19933:363:::0;;;;;:::o;11233:151::-;11322:7;11349:11;:18;11361:5;11349:18;;;;;;;;;;;;;;;:27;11368:7;11349:27;;;;;;;;;;;;;;;;11342:34;;11233:151;;;;:::o;3064:201::-;2261:12;:10;:12::i;:::-;2250:23;;:7;:5;:7::i;:::-;:23;;;2242:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3173:1:::1;3153:22;;:8;:22;;::::0;3145:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3229:28;3248:8;3229:18;:28::i;:::-;3064:201:::0;:::o;712:98::-;765:7;792:10;785:17;;712:98;:::o;17485:380::-;17638:1;17621:19;;:5;:19;;;17613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17719:1;17700:21;;:7;:21;;;17692:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17803:6;17773:11;:18;17785:5;17773:18;;;;;;;;;;;;;;;:27;17792:7;17773:27;;;;;;;;;;;;;;;:36;;;;17841:7;17825:32;;17834:5;17825:32;;;17850:6;17825:32;;;;;;:::i;:::-;;;;;;;;17485:380;;;:::o;14704:733::-;14862:1;14844:20;;:6;:20;;;14836:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14946:1;14925:23;;:9;:23;;;14917:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15001:47;15022:6;15030:9;15041:6;15001:20;:47::i;:::-;15061:21;15085:9;:17;15095:6;15085:17;;;;;;;;;;;;;;;;15061:41;;15138:6;15121:13;:23;;15113:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15259:6;15243:13;:22;15223:9;:17;15233:6;15223:17;;;;;;;;;;;;;;;:42;;;;15311:6;15287:9;:20;15297:9;15287:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15352:9;15335:35;;15344:6;15335:35;;;15363:6;15335:35;;;;;;:::i;:::-;;;;;;;;15383:46;15403:6;15411:9;15422:6;15383:19;:46::i;:::-;14825:612;14704:733;;;:::o;16456:591::-;16559:1;16540:21;;:7;:21;;;16532:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16612:49;16633:7;16650:1;16654:6;16612:20;:49::i;:::-;16674:22;16699:9;:18;16709:7;16699:18;;;;;;;;;;;;;;;;16674:43;;16754:6;16736:14;:24;;16728:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16873:6;16856:14;:23;16835:9;:18;16845:7;16835:18;;;;;;;;;;;;;;;:44;;;;16917:6;16901:12;;:22;;;;;;;:::i;:::-;;;;;;;;16967:1;16941:37;;16950:7;16941:37;;;16971:6;16941:37;;;;;;:::i;:::-;;;;;;;;16991:48;17011:7;17028:1;17032:6;16991:19;:48::i;:::-;16521:526;16456:591;;:::o;3425:191::-;3499:16;3518:6;;;;;;;;;;;3499:25;;3544:8;3535:6;;:17;;;;;;;;;;;;;;;;;;3599:8;3568:40;;3589:8;3568:40;;;;;;;;;;;;3488:128;3425:191;:::o;20304:435::-;20460:7;;;;;;;;;;;:30;;;;;20477:13;;;;;;;;;;;20471:19;;:2;:19;;;20460:30;20456:130;;;20547:16;;20537:6;20515:19;20531:2;20515:15;:19::i;:::-;:28;;;;:::i;:::-;:48;;20507:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20456:130;20602:12;;;;;;;;;;;:29;;;;;20618:7;:13;20626:4;20618:13;;;;;;;;;;;;;;;;;;;;;;;;;20602:29;20598:134;;;20690:16;;20680:6;20656:21;20672:4;20656:15;:21::i;:::-;:30;;;;:::i;:::-;:50;;20648:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;20598:134;20304:435;;;:::o;19194:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:329::-;2242:6;2291:2;2279:9;2270:7;2266:23;2262:32;2259:119;;;2297:79;;:::i;:::-;2259:119;2417:1;2442:53;2487:7;2478:6;2467:9;2463:22;2442:53;:::i;:::-;2432:63;;2388:117;2183:329;;;;:::o;2518:90::-;2552:7;2595:5;2588:13;2581:21;2570:32;;2518:90;;;:::o;2614:109::-;2695:21;2710:5;2695:21;:::i;:::-;2690:3;2683:34;2614:109;;:::o;2729:210::-;2816:4;2854:2;2843:9;2839:18;2831:26;;2867:65;2929:1;2918:9;2914:17;2905:6;2867:65;:::i;:::-;2729:210;;;;:::o;2945:77::-;2982:7;3011:5;3000:16;;2945:77;;;:::o;3028:122::-;3101:24;3119:5;3101:24;:::i;:::-;3094:5;3091:35;3081:63;;3140:1;3137;3130:12;3081:63;3028:122;:::o;3156:139::-;3202:5;3240:6;3227:20;3218:29;;3256:33;3283:5;3256:33;:::i;:::-;3156:139;;;;:::o;3301:474::-;3369:6;3377;3426:2;3414:9;3405:7;3401:23;3397:32;3394:119;;;3432:79;;:::i;:::-;3394:119;3552:1;3577:53;3622:7;3613:6;3602:9;3598:22;3577:53;:::i;:::-;3567:63;;3523:117;3679:2;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3650:118;3301:474;;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:116::-;5945:21;5960:5;5945:21;:::i;:::-;5938:5;5935:32;5925:60;;5981:1;5978;5971:12;5925:60;5875:116;:::o;5997:133::-;6040:5;6078:6;6065:20;6056:29;;6094:30;6118:5;6094:30;:::i;:::-;5997:133;;;;:::o;6136:468::-;6201:6;6209;6258:2;6246:9;6237:7;6233:23;6229:32;6226:119;;;6264:79;;:::i;:::-;6226:119;6384:1;6409:53;6454:7;6445:6;6434:9;6430:22;6409:53;:::i;:::-;6399:63;;6355:117;6511:2;6537:50;6579:7;6570:6;6559:9;6555:22;6537:50;:::i;:::-;6527:60;;6482:115;6136:468;;;;;:::o;6610:899::-;6699:6;6707;6715;6723;6731;6780:3;6768:9;6759:7;6755:23;6751:33;6748:120;;;6787:79;;:::i;:::-;6748:120;6907:1;6932:50;6974:7;6965:6;6954:9;6950:22;6932:50;:::i;:::-;6922:60;;6878:114;7031:2;7057:50;7099:7;7090:6;7079:9;7075:22;7057:50;:::i;:::-;7047:60;;7002:115;7156:2;7182:53;7227:7;7218:6;7207:9;7203:22;7182:53;:::i;:::-;7172:63;;7127:118;7284:2;7310:53;7355:7;7346:6;7335:9;7331:22;7310:53;:::i;:::-;7300:63;;7255:118;7412:3;7439:53;7484:7;7475:6;7464:9;7460:22;7439:53;:::i;:::-;7429:63;;7383:119;6610:899;;;;;;;;:::o;7515:474::-;7583:6;7591;7640:2;7628:9;7619:7;7615:23;7611:32;7608:119;;;7646:79;;:::i;:::-;7608:119;7766:1;7791:53;7836:7;7827:6;7816:9;7812:22;7791:53;:::i;:::-;7781:63;;7737:117;7893:2;7919:53;7964:7;7955:6;7944:9;7940:22;7919:53;:::i;:::-;7909:63;;7864:118;7515:474;;;;;:::o;7995:180::-;8043:77;8040:1;8033:88;8140:4;8137:1;8130:15;8164:4;8161:1;8154:15;8181:320;8225:6;8262:1;8256:4;8252:12;8242:22;;8309:1;8303:4;8299:12;8330:18;8320:81;;8386:4;8378:6;8374:17;8364:27;;8320:81;8448:2;8440:6;8437:14;8417:18;8414:38;8411:84;;8467:18;;:::i;:::-;8411:84;8232:269;8181:320;;;:::o;8507:227::-;8647:34;8643:1;8635:6;8631:14;8624:58;8716:10;8711:2;8703:6;8699:15;8692:35;8507:227;:::o;8740:366::-;8882:3;8903:67;8967:2;8962:3;8903:67;:::i;:::-;8896:74;;8979:93;9068:3;8979:93;:::i;:::-;9097:2;9092:3;9088:12;9081:19;;8740:366;;;:::o;9112:419::-;9278:4;9316:2;9305:9;9301:18;9293:26;;9365:9;9359:4;9355:20;9351:1;9340:9;9336:17;9329:47;9393:131;9519:4;9393:131;:::i;:::-;9385:139;;9112:419;;;:::o;9537:180::-;9585:77;9582:1;9575:88;9682:4;9679:1;9672:15;9706:4;9703:1;9696:15;9723:191;9763:3;9782:20;9800:1;9782:20;:::i;:::-;9777:25;;9816:20;9834:1;9816:20;:::i;:::-;9811:25;;9859:1;9856;9852:9;9845:16;;9880:3;9877:1;9874:10;9871:36;;;9887:18;;:::i;:::-;9871:36;9723:191;;;;:::o;9920:182::-;10060:34;10056:1;10048:6;10044:14;10037:58;9920:182;:::o;10108:366::-;10250:3;10271:67;10335:2;10330:3;10271:67;:::i;:::-;10264:74;;10347:93;10436:3;10347:93;:::i;:::-;10465:2;10460:3;10456:12;10449:19;;10108:366;;;:::o;10480:419::-;10646:4;10684:2;10673:9;10669:18;10661:26;;10733:9;10727:4;10723:20;10719:1;10708:9;10704:17;10697:47;10761:131;10887:4;10761:131;:::i;:::-;10753:139;;10480:419;;;:::o;10905:222::-;11045:34;11041:1;11033:6;11029:14;11022:58;11114:5;11109:2;11101:6;11097:15;11090:30;10905:222;:::o;11133:366::-;11275:3;11296:67;11360:2;11355:3;11296:67;:::i;:::-;11289:74;;11372:93;11461:3;11372:93;:::i;:::-;11490:2;11485:3;11481:12;11474:19;;11133:366;;;:::o;11505:419::-;11671:4;11709:2;11698:9;11694:18;11686:26;;11758:9;11752:4;11748:20;11744:1;11733:9;11729:17;11722:47;11786:131;11912:4;11786:131;:::i;:::-;11778:139;;11505:419;;;:::o;11930:224::-;12070:34;12066:1;12058:6;12054:14;12047:58;12139:7;12134:2;12126:6;12122:15;12115:32;11930:224;:::o;12160:366::-;12302:3;12323:67;12387:2;12382:3;12323:67;:::i;:::-;12316:74;;12399:93;12488:3;12399:93;:::i;:::-;12517:2;12512:3;12508:12;12501:19;;12160:366;;;:::o;12532:419::-;12698:4;12736:2;12725:9;12721:18;12713:26;;12785:9;12779:4;12775:20;12771:1;12760:9;12756:17;12749:47;12813:131;12939:4;12813:131;:::i;:::-;12805:139;;12532:419;;;:::o;12957:225::-;13097:34;13093:1;13085:6;13081:14;13074:58;13166:8;13161:2;13153:6;13149:15;13142:33;12957:225;:::o;13188:366::-;13330:3;13351:67;13415:2;13410:3;13351:67;:::i;:::-;13344:74;;13427:93;13516:3;13427:93;:::i;:::-;13545:2;13540:3;13536:12;13529:19;;13188:366;;;:::o;13560:419::-;13726:4;13764:2;13753:9;13749:18;13741:26;;13813:9;13807:4;13803:20;13799:1;13788:9;13784:17;13777:47;13841:131;13967:4;13841:131;:::i;:::-;13833:139;;13560:419;;;:::o;13985:223::-;14125:34;14121:1;14113:6;14109:14;14102:58;14194:6;14189:2;14181:6;14177:15;14170:31;13985:223;:::o;14214:366::-;14356:3;14377:67;14441:2;14436:3;14377:67;:::i;:::-;14370:74;;14453:93;14542:3;14453:93;:::i;:::-;14571:2;14566:3;14562:12;14555:19;;14214:366;;;:::o;14586:419::-;14752:4;14790:2;14779:9;14775:18;14767:26;;14839:9;14833:4;14829:20;14825:1;14814:9;14810:17;14803:47;14867:131;14993:4;14867:131;:::i;:::-;14859:139;;14586:419;;;:::o;15011:221::-;15151:34;15147:1;15139:6;15135:14;15128:58;15220:4;15215:2;15207:6;15203:15;15196:29;15011:221;:::o;15238:366::-;15380:3;15401:67;15465:2;15460:3;15401:67;:::i;:::-;15394:74;;15477:93;15566:3;15477:93;:::i;:::-;15595:2;15590:3;15586:12;15579:19;;15238:366;;;:::o;15610:419::-;15776:4;15814:2;15803:9;15799:18;15791:26;;15863:9;15857:4;15853:20;15849:1;15838:9;15834:17;15827:47;15891:131;16017:4;15891:131;:::i;:::-;15883:139;;15610:419;;;:::o;16035:224::-;16175:34;16171:1;16163:6;16159:14;16152:58;16244:7;16239:2;16231:6;16227:15;16220:32;16035:224;:::o;16265:366::-;16407:3;16428:67;16492:2;16487:3;16428:67;:::i;:::-;16421:74;;16504:93;16593:3;16504:93;:::i;:::-;16622:2;16617:3;16613:12;16606:19;;16265:366;;;:::o;16637:419::-;16803:4;16841:2;16830:9;16826:18;16818:26;;16890:9;16884:4;16880:20;16876:1;16865:9;16861:17;16854:47;16918:131;17044:4;16918:131;:::i;:::-;16910:139;;16637:419;;;:::o;17062:222::-;17202:34;17198:1;17190:6;17186:14;17179:58;17271:5;17266:2;17258:6;17254:15;17247:30;17062:222;:::o;17290:366::-;17432:3;17453:67;17517:2;17512:3;17453:67;:::i;:::-;17446:74;;17529:93;17618:3;17529:93;:::i;:::-;17647:2;17642:3;17638:12;17631:19;;17290:366;;;:::o;17662:419::-;17828:4;17866:2;17855:9;17851:18;17843:26;;17915:9;17909:4;17905:20;17901:1;17890:9;17886:17;17879:47;17943:131;18069:4;17943:131;:::i;:::-;17935:139;;17662:419;;;:::o;18087:225::-;18227:34;18223:1;18215:6;18211:14;18204:58;18296:8;18291:2;18283:6;18279:15;18272:33;18087:225;:::o;18318:366::-;18460:3;18481:67;18545:2;18540:3;18481:67;:::i;:::-;18474:74;;18557:93;18646:3;18557:93;:::i;:::-;18675:2;18670:3;18666:12;18659:19;;18318:366;;;:::o;18690:419::-;18856:4;18894:2;18883:9;18879:18;18871:26;;18943:9;18937:4;18933:20;18929:1;18918:9;18914:17;18907:47;18971:131;19097:4;18971:131;:::i;:::-;18963:139;;18690:419;;;:::o;19115:220::-;19255:34;19251:1;19243:6;19239:14;19232:58;19324:3;19319:2;19311:6;19307:15;19300:28;19115:220;:::o;19341:366::-;19483:3;19504:67;19568:2;19563:3;19504:67;:::i;:::-;19497:74;;19580:93;19669:3;19580:93;:::i;:::-;19698:2;19693:3;19689:12;19682:19;;19341:366;;;:::o;19713:419::-;19879:4;19917:2;19906:9;19902:18;19894:26;;19966:9;19960:4;19956:20;19952:1;19941:9;19937:17;19930:47;19994:131;20120:4;19994:131;:::i;:::-;19986:139;;19713:419;;;:::o;20138:221::-;20278:34;20274:1;20266:6;20262:14;20255:58;20347:4;20342:2;20334:6;20330:15;20323:29;20138:221;:::o;20365:366::-;20507:3;20528:67;20592:2;20587:3;20528:67;:::i;:::-;20521:74;;20604:93;20693:3;20604:93;:::i;:::-;20722:2;20717:3;20713:12;20706:19;;20365:366;;;:::o;20737:419::-;20903:4;20941:2;20930:9;20926:18;20918:26;;20990:9;20984:4;20980:20;20976:1;20965:9;20961:17;20954:47;21018:131;21144:4;21018:131;:::i;:::-;21010:139;;20737:419;;;:::o;21162:194::-;21202:4;21222:20;21240:1;21222:20;:::i;:::-;21217:25;;21256:20;21274:1;21256:20;:::i;:::-;21251:25;;21300:1;21297;21293:9;21285:17;;21324:1;21318:4;21315:11;21312:37;;;21329:18;;:::i;:::-;21312:37;21162:194;;;;:::o;21362:156::-;21502:8;21498:1;21490:6;21486:14;21479:32;21362:156;:::o;21524:365::-;21666:3;21687:66;21751:1;21746:3;21687:66;:::i;:::-;21680:73;;21762:93;21851:3;21762:93;:::i;:::-;21880:2;21875:3;21871:12;21864:19;;21524:365;;;:::o;21895:419::-;22061:4;22099:2;22088:9;22084:18;22076:26;;22148:9;22142:4;22138:20;22134:1;22123:9;22119:17;22112:47;22176:131;22302:4;22176:131;:::i;:::-;22168:139;;21895:419;;;:::o;22320:159::-;22460:11;22456:1;22448:6;22444:14;22437:35;22320:159;:::o;22485:365::-;22627:3;22648:66;22712:1;22707:3;22648:66;:::i;:::-;22641:73;;22723:93;22812:3;22723:93;:::i;:::-;22841:2;22836:3;22832:12;22825:19;;22485:365;;;:::o;22856:419::-;23022:4;23060:2;23049:9;23045:18;23037:26;;23109:9;23103:4;23099:20;23095:1;23084:9;23080:17;23073:47;23137:131;23263:4;23137:131;:::i;:::-;23129:139;;22856:419;;;:::o

Swarm Source

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