ETH Price: $3,920.03 (-0.35%)

Token

MetaVisa (MVS)
 

Overview

Max Total Supply

1,853 MVS

Holders

1,822

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
tanglifu.eth
Balance
1 MVS
0x7fF4160c0d4552849341F633f55d8E26d0f91b24
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:
MetaVisa

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 2021-11-12
*/

/**
 *Submitted for verification at Etherscan.io on 2021-10-30
*/

// SPDX-License-Identifier: MIT

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;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() public view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` 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 tokenId
    ) internal virtual {}
}

/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721URIStorage, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

/**
 * @dev {ERC721} token, including:
 *
 *  - ability for holders to burn (destroy) their tokens
 *  - a minter role that allows for token minting (creation)
 *  - a pauser role that allows to stop all token transfers
 *  - token ID and URI autogeneration
 *
 * This contract uses {AccessControl} to lock permissioned functions using the
 * different roles - head to its documentation for details.
 *
 * The account that deploys the contract will be granted the minter and pauser
 * roles, as well as the default admin role, which will let it grant both minter
 * and pauser roles to other accounts.
 */
contract MetaVisa is ERC721Enumerable {
    using Counters for Counters.Counter;
    
    Counters.Counter private _tokenIdTracker;
    
    event Mint(address indexed from, address indexed to, uint256 indexed tokenId);
    
    mapping(address => bool) public isBuy; 

    /**
     * @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the
     * account that deploys the contract.
     *
     * Token URIs will be autogenerated based on `baseURI` and their token IDs.
     * See {ERC721-tokenURI}.
     */
    constructor(
        string memory name,
        string memory symbol
    ) ERC721(name, symbol) {
    }

    
    /**
     * @dev Creates a new token for `to`. Its token ID will be automatically
     * assigned (and available on the emitted {IERC721-Transfer} event), and the token
     * URI autogenerated based on the base URI passed at construction.
     *
     * See {ERC721-_mint}.
     *
     * Requirements:
     *
     * - the caller must have the `MINTER_ROLE`.
     */
    function mint(string memory tokenURI) public virtual  {
        // We cannot just use balanceOf to create the new tokenId because tokens
        // can be burned (destroyed), so we need a separate counter.
        //getFeeAddress().transfer(msg.value);
        require(!isBuy[msg.sender], "mint:You can only buy it once ");
        uint256 tokenId = _tokenIdTracker.current();
        _mint(msg.sender, _tokenIdTracker.current());
        _setTokenURI(_tokenIdTracker.current(),tokenURI);
        _tokenIdTracker.increment();
        isBuy[msg.sender]=true;
        emit Mint(address(0), msg.sender, tokenId);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override( ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override( ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tokenURI","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620037f4380380620037f4833981810160405281019062000037919062000197565b818181600090805190602001906200005192919062000075565b5080600190805190602001906200006a92919062000075565b50505050506200033b565b8280546200008390620002a7565b90600052602060002090601f016020900481019282620000a75760008555620000f3565b82601f10620000c257805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f2578251825591602001919060010190620000d5565b5b50905062000102919062000106565b5090565b5b808211156200012157600081600090555060010162000107565b5090565b60006200013c62000136846200023e565b6200020a565b9050828152602081018484840111156200015557600080fd5b6200016284828562000271565b509392505050565b600082601f8301126200017c57600080fd5b81516200018e84826020860162000125565b91505092915050565b60008060408385031215620001ab57600080fd5b600083015167ffffffffffffffff811115620001c657600080fd5b620001d4858286016200016a565b925050602083015167ffffffffffffffff811115620001f257600080fd5b62000200858286016200016a565b9150509250929050565b6000604051905081810181811067ffffffffffffffff821117156200023457620002336200030c565b5b8060405250919050565b600067ffffffffffffffff8211156200025c576200025b6200030c565b5b601f19601f8301169050602081019050919050565b60005b838110156200029157808201518184015260208101905062000274565b83811115620002a1576000848401525b50505050565b60006002820490506001821680620002c057607f821691505b60208210811415620002d757620002d6620002dd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6134a9806200034b6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80636352211e116100ad578063b88d4fde11610071578063b88d4fde1461032e578063c87b56dd1461034a578063d85d3d271461037a578063e985e9c514610396578063ee97dec2146103c657610121565b80636352211e1461027657806370a08231146102a6578063743976a0146102d657806395d89b41146102f4578063a22cb4651461031257610121565b806318160ddd116100f457806318160ddd146101c057806323b872dd146101de5780632f745c59146101fa57806342842e0e1461022a5780634f6ccce71461024657610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190612490565b6103f6565b60405161014d9190612da1565b60405180910390f35b61015e610408565b60405161016b9190612dbc565b60405180910390f35b61018e60048036038101906101899190612523565b61049a565b60405161019b9190612d3a565b60405180910390f35b6101be60048036038101906101b99190612454565b61051f565b005b6101c8610637565b6040516101d5919061303e565b60405180910390f35b6101f860048036038101906101f3919061234e565b610644565b005b610214600480360381019061020f9190612454565b6106a4565b604051610221919061303e565b60405180910390f35b610244600480360381019061023f919061234e565b610749565b005b610260600480360381019061025b9190612523565b610769565b60405161026d919061303e565b60405180910390f35b610290600480360381019061028b9190612523565b610800565b60405161029d9190612d3a565b60405180910390f35b6102c060048036038101906102bb91906122e9565b6108b2565b6040516102cd919061303e565b60405180910390f35b6102de61096a565b6040516102eb9190612dbc565b60405180910390f35b6102fc610981565b6040516103099190612dbc565b60405180910390f35b61032c60048036038101906103279190612418565b610a13565b005b6103486004803603810190610343919061239d565b610b94565b005b610364600480360381019061035f9190612523565b610bf6565b6040516103719190612dbc565b60405180910390f35b610394600480360381019061038f91906124e2565b610d48565b005b6103b060048036038101906103ab9190612312565b610ecb565b6040516103bd9190612da1565b60405180910390f35b6103e060048036038101906103db91906122e9565b610f5f565b6040516103ed9190612da1565b60405180910390f35b600061040182610f7f565b9050919050565b6060600080546104179061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546104439061329e565b80156104905780601f1061046557610100808354040283529160200191610490565b820191906000526020600020905b81548152906001019060200180831161047357829003601f168201915b5050505050905090565b60006104a582610ff9565b6104e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104db90612f5e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061052a82610800565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561059b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059290612fde565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105ba611065565b73ffffffffffffffffffffffffffffffffffffffff1614806105e957506105e8816105e3611065565b610ecb565b5b610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f90612e9e565b60405180910390fd5b610632838361106d565b505050565b6000600980549050905090565b61065561064f611065565b82611126565b610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068b90612ffe565b60405180910390fd5b61069f838383611204565b505050565b60006106af836108b2565b82106106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e790612dde565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61076483838360405180602001604052806000815250610b94565b505050565b6000610773610637565b82106107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ab9061301e565b60405180910390fd5b600982815481106107ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090612ede565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091a90612ebe565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060405180602001604052806000815250905090565b6060600180546109909061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546109bc9061329e565b8015610a095780601f106109de57610100808354040283529160200191610a09565b820191906000526020600020905b8154815290600101906020018083116109ec57829003601f168201915b5050505050905090565b610a1b611065565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8090612e5e565b60405180910390fd5b8060056000610a96611065565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610b43611065565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610b889190612da1565b60405180910390a35050565b610ba5610b9f611065565b83611126565b610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90612ffe565b60405180910390fd5b610bf084848484611460565b50505050565b6060610c0182610ff9565b610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790612f3e565b60405180910390fd5b6000600660008481526020019081526020016000208054610c609061329e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8c9061329e565b8015610cd95780601f10610cae57610100808354040283529160200191610cd9565b820191906000526020600020905b815481529060010190602001808311610cbc57829003601f168201915b505050505090506000610cea61096a565b9050600081511415610d00578192505050610d43565b600082511115610d35578082604051602001610d1d929190612d16565b60405160208183030381529060405292505050610d43565b610d3e846114bc565b925050505b919050565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90612f7e565b60405180910390fd5b6000610de1600b611563565b9050610df633610df1600b611563565b611571565b610e09610e03600b611563565b8361173f565b610e13600b6117b3565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550803373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f860405160405180910390a45050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ff25750610ff1826117c9565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166110e083610800565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061113182610ff9565b611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116790612e7e565b60405180910390fd5b600061117b83610800565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806111ea57508373ffffffffffffffffffffffffffffffffffffffff166111d28461049a565b73ffffffffffffffffffffffffffffffffffffffff16145b806111fb57506111fa8185610ecb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661122482610800565b73ffffffffffffffffffffffffffffffffffffffff161461127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127190612f9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190612e3e565b60405180910390fd5b6112f58383836118ab565b61130060008261106d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461135091906131b4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a7919061312d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61146b848484611204565b611477848484846118bb565b6114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90612dfe565b60405180910390fd5b50505050565b60606114c782610ff9565b611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90612fbe565b60405180910390fd5b600061151061096a565b90506000815111611530576040518060200160405280600081525061155b565b8061153a84611a52565b60405160200161154b929190612d16565b6040516020818303038152906040525b915050919050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890612f1e565b60405180910390fd5b6115ea81610ff9565b1561162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190612e1e565b60405180910390fd5b611636600083836118ab565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611686919061312d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61174882610ff9565b611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90612efe565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906117ae92919061210d565b505050565b6001816000016000828254019250508190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061189457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806118a457506118a382611bff565b5b9050919050565b6118b6838383611c69565b505050565b60006118dc8473ffffffffffffffffffffffffffffffffffffffff16611d7d565b15611a45578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611905611065565b8786866040518563ffffffff1660e01b81526004016119279493929190612d55565b602060405180830381600087803b15801561194157600080fd5b505af192505050801561197257506040513d601f19601f8201168201806040525081019061196f91906124b9565b60015b6119f5573d80600081146119a2576040519150601f19603f3d011682016040523d82523d6000602084013e6119a7565b606091505b506000815114156119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490612dfe565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a4a565b600190505b949350505050565b60606000821415611a9a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611bfa565b600082905060005b60008214611acc578080611ab5906132d0565b915050600a82611ac59190613183565b9150611aa2565b60008167ffffffffffffffff811115611b0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b405781602001600182028036833780820191505090505b5090505b60008514611bf357600182611b5991906131b4565b9150600a85611b689190613319565b6030611b74919061312d565b60f81b818381518110611bb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bec9190613183565b9450611b44565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c74838383611d90565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cb757611cb281611d95565b611cf6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611cf557611cf48382611dde565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d3957611d3481611f4b565b611d78565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d7757611d76828261208e565b5b5b505050565b600080823b905060008111915050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611deb846108b2565b611df591906131b4565b9050600060086000848152602001908152602001600020549050818114611eda576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050611f5f91906131b4565b90506000600a6000848152602001908152602001600020549050600060098381548110611fb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110611ffd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612072577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612099836108b2565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b8280546121199061329e565b90600052602060002090601f01602090048101928261213b5760008555612182565b82601f1061215457805160ff1916838001178555612182565b82800160010185558215612182579182015b82811115612181578251825591602001919060010190612166565b5b50905061218f9190612193565b5090565b5b808211156121ac576000816000905550600101612194565b5090565b60006121c36121be8461308a565b613059565b9050828152602081018484840111156121db57600080fd5b6121e684828561325c565b509392505050565b60006122016121fc846130ba565b613059565b90508281526020810184848401111561221957600080fd5b61222484828561325c565b509392505050565b60008135905061223b81613417565b92915050565b6000813590506122508161342e565b92915050565b60008135905061226581613445565b92915050565b60008151905061227a81613445565b92915050565b600082601f83011261229157600080fd5b81356122a18482602086016121b0565b91505092915050565b600082601f8301126122bb57600080fd5b81356122cb8482602086016121ee565b91505092915050565b6000813590506122e38161345c565b92915050565b6000602082840312156122fb57600080fd5b60006123098482850161222c565b91505092915050565b6000806040838503121561232557600080fd5b60006123338582860161222c565b92505060206123448582860161222c565b9150509250929050565b60008060006060848603121561236357600080fd5b60006123718682870161222c565b93505060206123828682870161222c565b9250506040612393868287016122d4565b9150509250925092565b600080600080608085870312156123b357600080fd5b60006123c18782880161222c565b94505060206123d28782880161222c565b93505060406123e3878288016122d4565b925050606085013567ffffffffffffffff81111561240057600080fd5b61240c87828801612280565b91505092959194509250565b6000806040838503121561242b57600080fd5b60006124398582860161222c565b925050602061244a85828601612241565b9150509250929050565b6000806040838503121561246757600080fd5b60006124758582860161222c565b9250506020612486858286016122d4565b9150509250929050565b6000602082840312156124a257600080fd5b60006124b084828501612256565b91505092915050565b6000602082840312156124cb57600080fd5b60006124d98482850161226b565b91505092915050565b6000602082840312156124f457600080fd5b600082013567ffffffffffffffff81111561250e57600080fd5b61251a848285016122aa565b91505092915050565b60006020828403121561253557600080fd5b6000612543848285016122d4565b91505092915050565b612555816131e8565b82525050565b612564816131fa565b82525050565b6000612575826130ea565b61257f8185613100565b935061258f81856020860161326b565b61259881613406565b840191505092915050565b60006125ae826130f5565b6125b88185613111565b93506125c881856020860161326b565b6125d181613406565b840191505092915050565b60006125e7826130f5565b6125f18185613122565b935061260181856020860161326b565b80840191505092915050565b600061261a602b83613111565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000612680603283613111565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006126e6601c83613111565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612726602483613111565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061278c601983613111565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006127cc602c83613111565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612832603883613111565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612898602a83613111565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006128fe602983613111565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612964602e83613111565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b60006129ca602083613111565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612a0a603183613111565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b6000612a70602c83613111565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612ad6601e83613111565b91507f6d696e743a596f752063616e206f6e6c7920627579206974206f6e63652000006000830152602082019050919050565b6000612b16602983613111565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b7c602f83613111565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000612be2602183613111565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c48603183613111565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000612cae602c83613111565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b612d1081613252565b82525050565b6000612d2282856125dc565b9150612d2e82846125dc565b91508190509392505050565b6000602082019050612d4f600083018461254c565b92915050565b6000608082019050612d6a600083018761254c565b612d77602083018661254c565b612d846040830185612d07565b8181036060830152612d96818461256a565b905095945050505050565b6000602082019050612db6600083018461255b565b92915050565b60006020820190508181036000830152612dd681846125a3565b905092915050565b60006020820190508181036000830152612df78161260d565b9050919050565b60006020820190508181036000830152612e1781612673565b9050919050565b60006020820190508181036000830152612e37816126d9565b9050919050565b60006020820190508181036000830152612e5781612719565b9050919050565b60006020820190508181036000830152612e778161277f565b9050919050565b60006020820190508181036000830152612e97816127bf565b9050919050565b60006020820190508181036000830152612eb781612825565b9050919050565b60006020820190508181036000830152612ed78161288b565b9050919050565b60006020820190508181036000830152612ef7816128f1565b9050919050565b60006020820190508181036000830152612f1781612957565b9050919050565b60006020820190508181036000830152612f37816129bd565b9050919050565b60006020820190508181036000830152612f57816129fd565b9050919050565b60006020820190508181036000830152612f7781612a63565b9050919050565b60006020820190508181036000830152612f9781612ac9565b9050919050565b60006020820190508181036000830152612fb781612b09565b9050919050565b60006020820190508181036000830152612fd781612b6f565b9050919050565b60006020820190508181036000830152612ff781612bd5565b9050919050565b6000602082019050818103600083015261301781612c3b565b9050919050565b6000602082019050818103600083015261303781612ca1565b9050919050565b60006020820190506130536000830184612d07565b92915050565b6000604051905081810181811067ffffffffffffffff821117156130805761307f6133d7565b5b8060405250919050565b600067ffffffffffffffff8211156130a5576130a46133d7565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156130d5576130d46133d7565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061313882613252565b915061314383613252565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131785761317761334a565b5b828201905092915050565b600061318e82613252565b915061319983613252565b9250826131a9576131a8613379565b5b828204905092915050565b60006131bf82613252565b91506131ca83613252565b9250828210156131dd576131dc61334a565b5b828203905092915050565b60006131f382613232565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561328957808201518184015260208101905061326e565b83811115613298576000848401525b50505050565b600060028204905060018216806132b657607f821691505b602082108114156132ca576132c96133a8565b5b50919050565b60006132db82613252565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561330e5761330d61334a565b5b600182019050919050565b600061332482613252565b915061332f83613252565b92508261333f5761333e613379565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613420816131e8565b811461342b57600080fd5b50565b613437816131fa565b811461344257600080fd5b50565b61344e81613206565b811461345957600080fd5b50565b61346581613252565b811461347057600080fd5b5056fea2646970667358221220ce9f570bb7f84086815d4516da99fca73efdbd644f03913ba764014f0047b79564736f6c634300080000330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000084d6574615669736100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d56530000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c80636352211e116100ad578063b88d4fde11610071578063b88d4fde1461032e578063c87b56dd1461034a578063d85d3d271461037a578063e985e9c514610396578063ee97dec2146103c657610121565b80636352211e1461027657806370a08231146102a6578063743976a0146102d657806395d89b41146102f4578063a22cb4651461031257610121565b806318160ddd116100f457806318160ddd146101c057806323b872dd146101de5780632f745c59146101fa57806342842e0e1461022a5780634f6ccce71461024657610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b9190612490565b6103f6565b60405161014d9190612da1565b60405180910390f35b61015e610408565b60405161016b9190612dbc565b60405180910390f35b61018e60048036038101906101899190612523565b61049a565b60405161019b9190612d3a565b60405180910390f35b6101be60048036038101906101b99190612454565b61051f565b005b6101c8610637565b6040516101d5919061303e565b60405180910390f35b6101f860048036038101906101f3919061234e565b610644565b005b610214600480360381019061020f9190612454565b6106a4565b604051610221919061303e565b60405180910390f35b610244600480360381019061023f919061234e565b610749565b005b610260600480360381019061025b9190612523565b610769565b60405161026d919061303e565b60405180910390f35b610290600480360381019061028b9190612523565b610800565b60405161029d9190612d3a565b60405180910390f35b6102c060048036038101906102bb91906122e9565b6108b2565b6040516102cd919061303e565b60405180910390f35b6102de61096a565b6040516102eb9190612dbc565b60405180910390f35b6102fc610981565b6040516103099190612dbc565b60405180910390f35b61032c60048036038101906103279190612418565b610a13565b005b6103486004803603810190610343919061239d565b610b94565b005b610364600480360381019061035f9190612523565b610bf6565b6040516103719190612dbc565b60405180910390f35b610394600480360381019061038f91906124e2565b610d48565b005b6103b060048036038101906103ab9190612312565b610ecb565b6040516103bd9190612da1565b60405180910390f35b6103e060048036038101906103db91906122e9565b610f5f565b6040516103ed9190612da1565b60405180910390f35b600061040182610f7f565b9050919050565b6060600080546104179061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546104439061329e565b80156104905780601f1061046557610100808354040283529160200191610490565b820191906000526020600020905b81548152906001019060200180831161047357829003601f168201915b5050505050905090565b60006104a582610ff9565b6104e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104db90612f5e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061052a82610800565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561059b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059290612fde565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105ba611065565b73ffffffffffffffffffffffffffffffffffffffff1614806105e957506105e8816105e3611065565b610ecb565b5b610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f90612e9e565b60405180910390fd5b610632838361106d565b505050565b6000600980549050905090565b61065561064f611065565b82611126565b610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068b90612ffe565b60405180910390fd5b61069f838383611204565b505050565b60006106af836108b2565b82106106f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e790612dde565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61076483838360405180602001604052806000815250610b94565b505050565b6000610773610637565b82106107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ab9061301e565b60405180910390fd5b600982815481106107ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090612ede565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091a90612ebe565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060405180602001604052806000815250905090565b6060600180546109909061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546109bc9061329e565b8015610a095780601f106109de57610100808354040283529160200191610a09565b820191906000526020600020905b8154815290600101906020018083116109ec57829003601f168201915b5050505050905090565b610a1b611065565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8090612e5e565b60405180910390fd5b8060056000610a96611065565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610b43611065565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610b889190612da1565b60405180910390a35050565b610ba5610b9f611065565b83611126565b610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90612ffe565b60405180910390fd5b610bf084848484611460565b50505050565b6060610c0182610ff9565b610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790612f3e565b60405180910390fd5b6000600660008481526020019081526020016000208054610c609061329e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8c9061329e565b8015610cd95780601f10610cae57610100808354040283529160200191610cd9565b820191906000526020600020905b815481529060010190602001808311610cbc57829003601f168201915b505050505090506000610cea61096a565b9050600081511415610d00578192505050610d43565b600082511115610d35578082604051602001610d1d929190612d16565b60405160208183030381529060405292505050610d43565b610d3e846114bc565b925050505b919050565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90612f7e565b60405180910390fd5b6000610de1600b611563565b9050610df633610df1600b611563565b611571565b610e09610e03600b611563565b8361173f565b610e13600b6117b3565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550803373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f860405160405180910390a45050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ff25750610ff1826117c9565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166110e083610800565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061113182610ff9565b611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116790612e7e565b60405180910390fd5b600061117b83610800565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806111ea57508373ffffffffffffffffffffffffffffffffffffffff166111d28461049a565b73ffffffffffffffffffffffffffffffffffffffff16145b806111fb57506111fa8185610ecb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661122482610800565b73ffffffffffffffffffffffffffffffffffffffff161461127a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127190612f9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190612e3e565b60405180910390fd5b6112f58383836118ab565b61130060008261106d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461135091906131b4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a7919061312d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61146b848484611204565b611477848484846118bb565b6114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90612dfe565b60405180910390fd5b50505050565b60606114c782610ff9565b611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90612fbe565b60405180910390fd5b600061151061096a565b90506000815111611530576040518060200160405280600081525061155b565b8061153a84611a52565b60405160200161154b929190612d16565b6040516020818303038152906040525b915050919050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890612f1e565b60405180910390fd5b6115ea81610ff9565b1561162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190612e1e565b60405180910390fd5b611636600083836118ab565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611686919061312d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61174882610ff9565b611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90612efe565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906117ae92919061210d565b505050565b6001816000016000828254019250508190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061189457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806118a457506118a382611bff565b5b9050919050565b6118b6838383611c69565b505050565b60006118dc8473ffffffffffffffffffffffffffffffffffffffff16611d7d565b15611a45578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611905611065565b8786866040518563ffffffff1660e01b81526004016119279493929190612d55565b602060405180830381600087803b15801561194157600080fd5b505af192505050801561197257506040513d601f19601f8201168201806040525081019061196f91906124b9565b60015b6119f5573d80600081146119a2576040519150601f19603f3d011682016040523d82523d6000602084013e6119a7565b606091505b506000815114156119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490612dfe565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a4a565b600190505b949350505050565b60606000821415611a9a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611bfa565b600082905060005b60008214611acc578080611ab5906132d0565b915050600a82611ac59190613183565b9150611aa2565b60008167ffffffffffffffff811115611b0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b405781602001600182028036833780820191505090505b5090505b60008514611bf357600182611b5991906131b4565b9150600a85611b689190613319565b6030611b74919061312d565b60f81b818381518110611bb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bec9190613183565b9450611b44565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c74838383611d90565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cb757611cb281611d95565b611cf6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611cf557611cf48382611dde565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d3957611d3481611f4b565b611d78565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d7757611d76828261208e565b5b5b505050565b600080823b905060008111915050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611deb846108b2565b611df591906131b4565b9050600060086000848152602001908152602001600020549050818114611eda576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050611f5f91906131b4565b90506000600a6000848152602001908152602001600020549050600060098381548110611fb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110611ffd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612072577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612099836108b2565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b8280546121199061329e565b90600052602060002090601f01602090048101928261213b5760008555612182565b82601f1061215457805160ff1916838001178555612182565b82800160010185558215612182579182015b82811115612181578251825591602001919060010190612166565b5b50905061218f9190612193565b5090565b5b808211156121ac576000816000905550600101612194565b5090565b60006121c36121be8461308a565b613059565b9050828152602081018484840111156121db57600080fd5b6121e684828561325c565b509392505050565b60006122016121fc846130ba565b613059565b90508281526020810184848401111561221957600080fd5b61222484828561325c565b509392505050565b60008135905061223b81613417565b92915050565b6000813590506122508161342e565b92915050565b60008135905061226581613445565b92915050565b60008151905061227a81613445565b92915050565b600082601f83011261229157600080fd5b81356122a18482602086016121b0565b91505092915050565b600082601f8301126122bb57600080fd5b81356122cb8482602086016121ee565b91505092915050565b6000813590506122e38161345c565b92915050565b6000602082840312156122fb57600080fd5b60006123098482850161222c565b91505092915050565b6000806040838503121561232557600080fd5b60006123338582860161222c565b92505060206123448582860161222c565b9150509250929050565b60008060006060848603121561236357600080fd5b60006123718682870161222c565b93505060206123828682870161222c565b9250506040612393868287016122d4565b9150509250925092565b600080600080608085870312156123b357600080fd5b60006123c18782880161222c565b94505060206123d28782880161222c565b93505060406123e3878288016122d4565b925050606085013567ffffffffffffffff81111561240057600080fd5b61240c87828801612280565b91505092959194509250565b6000806040838503121561242b57600080fd5b60006124398582860161222c565b925050602061244a85828601612241565b9150509250929050565b6000806040838503121561246757600080fd5b60006124758582860161222c565b9250506020612486858286016122d4565b9150509250929050565b6000602082840312156124a257600080fd5b60006124b084828501612256565b91505092915050565b6000602082840312156124cb57600080fd5b60006124d98482850161226b565b91505092915050565b6000602082840312156124f457600080fd5b600082013567ffffffffffffffff81111561250e57600080fd5b61251a848285016122aa565b91505092915050565b60006020828403121561253557600080fd5b6000612543848285016122d4565b91505092915050565b612555816131e8565b82525050565b612564816131fa565b82525050565b6000612575826130ea565b61257f8185613100565b935061258f81856020860161326b565b61259881613406565b840191505092915050565b60006125ae826130f5565b6125b88185613111565b93506125c881856020860161326b565b6125d181613406565b840191505092915050565b60006125e7826130f5565b6125f18185613122565b935061260181856020860161326b565b80840191505092915050565b600061261a602b83613111565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000612680603283613111565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006126e6601c83613111565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612726602483613111565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061278c601983613111565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006127cc602c83613111565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612832603883613111565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612898602a83613111565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006128fe602983613111565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612964602e83613111565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b60006129ca602083613111565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612a0a603183613111565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b6000612a70602c83613111565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612ad6601e83613111565b91507f6d696e743a596f752063616e206f6e6c7920627579206974206f6e63652000006000830152602082019050919050565b6000612b16602983613111565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b7c602f83613111565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000612be2602183613111565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c48603183613111565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000612cae602c83613111565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b612d1081613252565b82525050565b6000612d2282856125dc565b9150612d2e82846125dc565b91508190509392505050565b6000602082019050612d4f600083018461254c565b92915050565b6000608082019050612d6a600083018761254c565b612d77602083018661254c565b612d846040830185612d07565b8181036060830152612d96818461256a565b905095945050505050565b6000602082019050612db6600083018461255b565b92915050565b60006020820190508181036000830152612dd681846125a3565b905092915050565b60006020820190508181036000830152612df78161260d565b9050919050565b60006020820190508181036000830152612e1781612673565b9050919050565b60006020820190508181036000830152612e37816126d9565b9050919050565b60006020820190508181036000830152612e5781612719565b9050919050565b60006020820190508181036000830152612e778161277f565b9050919050565b60006020820190508181036000830152612e97816127bf565b9050919050565b60006020820190508181036000830152612eb781612825565b9050919050565b60006020820190508181036000830152612ed78161288b565b9050919050565b60006020820190508181036000830152612ef7816128f1565b9050919050565b60006020820190508181036000830152612f1781612957565b9050919050565b60006020820190508181036000830152612f37816129bd565b9050919050565b60006020820190508181036000830152612f57816129fd565b9050919050565b60006020820190508181036000830152612f7781612a63565b9050919050565b60006020820190508181036000830152612f9781612ac9565b9050919050565b60006020820190508181036000830152612fb781612b09565b9050919050565b60006020820190508181036000830152612fd781612b6f565b9050919050565b60006020820190508181036000830152612ff781612bd5565b9050919050565b6000602082019050818103600083015261301781612c3b565b9050919050565b6000602082019050818103600083015261303781612ca1565b9050919050565b60006020820190506130536000830184612d07565b92915050565b6000604051905081810181811067ffffffffffffffff821117156130805761307f6133d7565b5b8060405250919050565b600067ffffffffffffffff8211156130a5576130a46133d7565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156130d5576130d46133d7565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061313882613252565b915061314383613252565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131785761317761334a565b5b828201905092915050565b600061318e82613252565b915061319983613252565b9250826131a9576131a8613379565b5b828204905092915050565b60006131bf82613252565b91506131ca83613252565b9250828210156131dd576131dc61334a565b5b828203905092915050565b60006131f382613232565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561328957808201518184015260208101905061326e565b83811115613298576000848401525b50505050565b600060028204905060018216806132b657607f821691505b602082108114156132ca576132c96133a8565b5b50919050565b60006132db82613252565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561330e5761330d61334a565b5b600182019050919050565b600061332482613252565b915061332f83613252565b92508261333f5761333e613379565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613420816131e8565b811461342b57600080fd5b50565b613437816131fa565b811461344257600080fd5b50565b61344e81613206565b811461345957600080fd5b50565b61346581613252565b811461347057600080fd5b5056fea2646970667358221220ce9f570bb7f84086815d4516da99fca73efdbd644f03913ba764014f0047b79564736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000084d6574615669736100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d56530000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): MetaVisa
Arg [1] : symbol (string): MVS

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 4d65746156697361000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 4d56530000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43638:2200:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45607:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20859:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22416:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21939:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36185:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23306:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35853:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23716:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36375:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20553:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20283:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21785:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21028:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22709:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23972:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32351:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44685:626;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23075:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43874:37;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45607:222;45756:4;45785:36;45809:11;45785:23;:36::i;:::-;45778:43;;45607:222;;;:::o;20859:100::-;20913:13;20946:5;20939:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20859:100;:::o;22416:221::-;22492:7;22520:16;22528:7;22520;:16::i;:::-;22512:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22605:15;:24;22621:7;22605:24;;;;;;;;;;;;;;;;;;;;;22598:31;;22416:221;;;:::o;21939:411::-;22020:13;22036:23;22051:7;22036:14;:23::i;:::-;22020:39;;22084:5;22078:11;;:2;:11;;;;22070:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22178:5;22162:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22187:37;22204:5;22211:12;:10;:12::i;:::-;22187:16;:37::i;:::-;22162:62;22140:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22321:21;22330:2;22334:7;22321:8;:21::i;:::-;21939:411;;;:::o;36185:113::-;36246:7;36273:10;:17;;;;36266:24;;36185:113;:::o;23306:339::-;23501:41;23520:12;:10;:12::i;:::-;23534:7;23501:18;:41::i;:::-;23493:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23609:28;23619:4;23625:2;23629:7;23609:9;:28::i;:::-;23306:339;;;:::o;35853:256::-;35950:7;35986:23;36003:5;35986:16;:23::i;:::-;35978:5;:31;35970:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36075:12;:19;36088:5;36075:19;;;;;;;;;;;;;;;:26;36095:5;36075:26;;;;;;;;;;;;36068:33;;35853:256;;;;:::o;23716:185::-;23854:39;23871:4;23877:2;23881:7;23854:39;;;;;;;;;;;;:16;:39::i;:::-;23716:185;;;:::o;36375:233::-;36450:7;36486:30;:28;:30::i;:::-;36478:5;:38;36470:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36583:10;36594:5;36583:17;;;;;;;;;;;;;;;;;;;;;;;;36576:24;;36375:233;;;:::o;20553:239::-;20625:7;20645:13;20661:7;:16;20669:7;20661:16;;;;;;;;;;;;;;;;;;;;;20645:32;;20713:1;20696:19;;:5;:19;;;;20688:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20779:5;20772:12;;;20553:239;;;:::o;20283:208::-;20355:7;20400:1;20383:19;;:5;:19;;;;20375:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20467:9;:16;20477:5;20467:16;;;;;;;;;;;;;;;;20460:23;;20283:208;;;:::o;21785:92::-;21834:13;21860:9;;;;;;;;;;;;;;21785:92;:::o;21028:104::-;21084:13;21117:7;21110:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21028:104;:::o;22709:295::-;22824:12;:10;:12::i;:::-;22812:24;;:8;:24;;;;22804:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22924:8;22879:18;:32;22898:12;:10;:12::i;:::-;22879:32;;;;;;;;;;;;;;;:42;22912:8;22879:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22977:8;22948:48;;22963:12;:10;:12::i;:::-;22948:48;;;22987:8;22948:48;;;;;;:::i;:::-;;;;;;;;22709:295;;:::o;23972:328::-;24147:41;24166:12;:10;:12::i;:::-;24180:7;24147:18;:41::i;:::-;24139:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24253:39;24267:4;24273:2;24277:7;24286:5;24253:13;:39::i;:::-;23972:328;;;;:::o;32351:679::-;32424:13;32458:16;32466:7;32458;:16::i;:::-;32450:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;32541:23;32567:10;:19;32578:7;32567:19;;;;;;;;;;;32541:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32597:18;32618:10;:8;:10::i;:::-;32597:31;;32726:1;32710:4;32704:18;:23;32700:72;;;32751:9;32744:16;;;;;;32700:72;32902:1;32882:9;32876:23;:27;32872:108;;;32951:4;32957:9;32934:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32920:48;;;;;;32872:108;32999:23;33014:7;32999:14;:23::i;:::-;32992:30;;;;32351:679;;;;:::o;44685:626::-;44959:5;:17;44965:10;44959:17;;;;;;;;;;;;;;;;;;;;;;;;;44958:18;44950:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45022:15;45040:25;:15;:23;:25::i;:::-;45022:43;;45076:44;45082:10;45094:25;:15;:23;:25::i;:::-;45076:5;:44::i;:::-;45131:48;45144:25;:15;:23;:25::i;:::-;45170:8;45131:12;:48::i;:::-;45190:27;:15;:25;:27::i;:::-;45246:4;45228:5;:17;45234:10;45228:17;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;45295:7;45283:10;45266:37;;45279:1;45266:37;;;;;;;;;;;;44685:626;;:::o;23075:164::-;23172:4;23196:18;:25;23215:5;23196:25;;;;;;;;;;;;;;;:35;23222:8;23196:35;;;;;;;;;;;;;;;;;;;;;;;;;23189:42;;23075:164;;;;:::o;43874:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;35545:224::-;35647:4;35686:35;35671:50;;;:11;:50;;;;:90;;;;35725:36;35749:11;35725:23;:36::i;:::-;35671:90;35664:97;;35545:224;;;:::o;25810:127::-;25875:4;25927:1;25899:30;;:7;:16;25907:7;25899:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25892:37;;25810:127;;;:::o;673:98::-;726:7;753:10;746:17;;673:98;:::o;29792:174::-;29894:2;29867:15;:24;29883:7;29867:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29950:7;29946:2;29912:46;;29921:23;29936:7;29921:14;:23::i;:::-;29912:46;;;;;;;;;;;;29792:174;;:::o;26104:348::-;26197:4;26222:16;26230:7;26222;:16::i;:::-;26214:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26298:13;26314:23;26329:7;26314:14;:23::i;:::-;26298:39;;26367:5;26356:16;;:7;:16;;;:51;;;;26400:7;26376:31;;:20;26388:7;26376:11;:20::i;:::-;:31;;;26356:51;:87;;;;26411:32;26428:5;26435:7;26411:16;:32::i;:::-;26356:87;26348:96;;;26104:348;;;;:::o;29096:578::-;29255:4;29228:31;;:23;29243:7;29228:14;:23::i;:::-;:31;;;29220:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29338:1;29324:16;;:2;:16;;;;29316:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29394:39;29415:4;29421:2;29425:7;29394:20;:39::i;:::-;29498:29;29515:1;29519:7;29498:8;:29::i;:::-;29559:1;29540:9;:15;29550:4;29540:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29588:1;29571:9;:13;29581:2;29571:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29619:2;29600:7;:16;29608:7;29600:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29658:7;29654:2;29639:27;;29648:4;29639:27;;;;;;;;;;;;29096:578;;;:::o;25182:315::-;25339:28;25349:4;25355:2;25359:7;25339:9;:28::i;:::-;25386:48;25409:4;25415:2;25419:7;25428:5;25386:22;:48::i;:::-;25378:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25182:315;;;;:::o;21203:334::-;21276:13;21310:16;21318:7;21310;:16::i;:::-;21302:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21391:21;21415:10;:8;:10::i;:::-;21391:34;;21467:1;21449:7;21443:21;:25;:86;;;;;;;;;;;;;;;;;21495:7;21504:18;:7;:16;:18::i;:::-;21478:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21443:86;21436:93;;;21203:334;;;:::o;42424:114::-;42489:7;42516;:14;;;42509:21;;42424:114;;;:::o;27788:382::-;27882:1;27868:16;;:2;:16;;;;27860:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27941:16;27949:7;27941;:16::i;:::-;27940:17;27932:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28003:45;28032:1;28036:2;28040:7;28003:20;:45::i;:::-;28078:1;28061:9;:13;28071:2;28061:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28109:2;28090:7;:16;28098:7;28090:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28154:7;28150:2;28129:33;;28146:1;28129:33;;;;;;;;;;;;27788:382;;:::o;33186:217::-;33286:16;33294:7;33286;:16::i;:::-;33278:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;33386:9;33364:10;:19;33375:7;33364:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;33186:217;;:::o;42546:127::-;42653:1;42635:7;:14;;;:19;;;;;;;;;;;42546:127;:::o;19914:305::-;20016:4;20068:25;20053:40;;;:11;:40;;;;:105;;;;20125:33;20110:48;;;:11;:48;;;;20053:105;:158;;;;20175:36;20199:11;20175:23;:36::i;:::-;20053:158;20033:178;;19914:305;;;:::o;45319:216::-;45482:45;45509:4;45515:2;45519:7;45482:26;:45::i;:::-;45319:216;;;:::o;30531:799::-;30686:4;30707:15;:2;:13;;;:15::i;:::-;30703:620;;;30759:2;30743:36;;;30780:12;:10;:12::i;:::-;30794:4;30800:7;30809:5;30743:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30739:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31002:1;30985:6;:13;:18;30981:272;;;31028:60;;;;;;;;;;:::i;:::-;;;;;;;;30981:272;31203:6;31197:13;31188:6;31184:2;31180:15;31173:38;30739:529;30876:41;;;30866:51;;;:6;:51;;;;30859:58;;;;;30703:620;31307:4;31300:11;;30531:799;;;;;;;:::o;9127:723::-;9183:13;9413:1;9404:5;:10;9400:53;;;9431:10;;;;;;;;;;;;;;;;;;;;;9400:53;9463:12;9478:5;9463:20;;9494:14;9519:78;9534:1;9526:4;:9;9519:78;;9552:8;;;;;:::i;:::-;;;;9583:2;9575:10;;;;;:::i;:::-;;;9519:78;;;9607:19;9639:6;9629:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9607:39;;9657:154;9673:1;9664:5;:10;9657:154;;9701:1;9691:11;;;;;:::i;:::-;;;9768:2;9760:5;:10;;;;:::i;:::-;9747:2;:24;;;;:::i;:::-;9734:39;;9717:6;9724;9717:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;9797:2;9788:11;;;;;:::i;:::-;;;9657:154;;;9835:6;9821:21;;;;;9127:723;;;;:::o;12334:157::-;12419:4;12458:25;12443:40;;;:11;:40;;;;12436:47;;12334:157;;;:::o;37221:589::-;37365:45;37392:4;37398:2;37402:7;37365:26;:45::i;:::-;37443:1;37427:18;;:4;:18;;;37423:187;;;37462:40;37494:7;37462:31;:40::i;:::-;37423:187;;;37532:2;37524:10;;:4;:10;;;37520:90;;37551:47;37584:4;37590:7;37551:32;:47::i;:::-;37520:90;37423:187;37638:1;37624:16;;:2;:16;;;37620:183;;;37657:45;37694:7;37657:36;:45::i;:::-;37620:183;;;37730:4;37724:10;;:2;:10;;;37720:83;;37751:40;37779:2;37783:7;37751:27;:40::i;:::-;37720:83;37620:183;37221:589;;;:::o;1570:387::-;1630:4;1838:12;1905:7;1893:20;1885:28;;1948:1;1941:4;:8;1934:15;;;1570:387;;;:::o;31902:126::-;;;;:::o;38533:164::-;38637:10;:17;;;;38610:15;:24;38626:7;38610:24;;;;;;;;;;;:44;;;;38665:10;38681:7;38665:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38533:164;:::o;39324:988::-;39590:22;39640:1;39615:22;39632:4;39615:16;:22::i;:::-;:26;;;;:::i;:::-;39590:51;;39652:18;39673:17;:26;39691:7;39673:26;;;;;;;;;;;;39652:47;;39820:14;39806:10;:28;39802:328;;39851:19;39873:12;:18;39886:4;39873:18;;;;;;;;;;;;;;;:34;39892:14;39873:34;;;;;;;;;;;;39851:56;;39957:11;39924:12;:18;39937:4;39924:18;;;;;;;;;;;;;;;:30;39943:10;39924:30;;;;;;;;;;;:44;;;;40074:10;40041:17;:30;40059:11;40041:30;;;;;;;;;;;:43;;;;39802:328;;40226:17;:26;40244:7;40226:26;;;;;;;;;;;40219:33;;;40270:12;:18;40283:4;40270:18;;;;;;;;;;;;;;;:34;40289:14;40270:34;;;;;;;;;;;40263:41;;;39324:988;;;;:::o;40607:1079::-;40860:22;40905:1;40885:10;:17;;;;:21;;;;:::i;:::-;40860:46;;40917:18;40938:15;:24;40954:7;40938:24;;;;;;;;;;;;40917:45;;41289:19;41311:10;41322:14;41311:26;;;;;;;;;;;;;;;;;;;;;;;;41289:48;;41375:11;41350:10;41361;41350:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;41486:10;41455:15;:28;41471:11;41455:28;;;;;;;;;;;:41;;;;41627:15;:24;41643:7;41627:24;;;;;;;;;;;41620:31;;;41662:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40607:1079;;;;:::o;38111:221::-;38196:14;38213:20;38230:2;38213:16;:20::i;:::-;38196:37;;38271:7;38244:12;:16;38257:2;38244:16;;;;;;;;;;;;;;;:24;38261:6;38244:24;;;;;;;;;;;:34;;;;38318:6;38289:17;:26;38307:7;38289:26;;;;;;;;;;;:35;;;;38111:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:260::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:52;5116:7;5107:6;5096:9;5092:22;5072:52;:::i;:::-;5062:62;;5018:116;4946:195;;;;:::o;5147:282::-;;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5281:1;5278;5271:12;5233:2;5324:1;5349:63;5404:7;5395:6;5384:9;5380:22;5349:63;:::i;:::-;5339:73;;5295:127;5223:206;;;;:::o;5435:375::-;;5553:2;5541:9;5532:7;5528:23;5524:32;5521:2;;;5569:1;5566;5559:12;5521:2;5640:1;5629:9;5625:17;5612:31;5670:18;5662:6;5659:30;5656:2;;;5702:1;5699;5692:12;5656:2;5730:63;5785:7;5776:6;5765:9;5761:22;5730:63;:::i;:::-;5720:73;;5583:220;5511:299;;;;:::o;5816:262::-;;5924:2;5912:9;5903:7;5899:23;5895:32;5892:2;;;5940:1;5937;5930:12;5892:2;5983:1;6008:53;6053:7;6044:6;6033:9;6029:22;6008:53;:::i;:::-;5998:63;;5954:117;5882:196;;;;:::o;6084:118::-;6171:24;6189:5;6171:24;:::i;:::-;6166:3;6159:37;6149:53;;:::o;6208:109::-;6289:21;6304:5;6289:21;:::i;:::-;6284:3;6277:34;6267:50;;:::o;6323:360::-;;6437:38;6469:5;6437:38;:::i;:::-;6491:70;6554:6;6549:3;6491:70;:::i;:::-;6484:77;;6570:52;6615:6;6610:3;6603:4;6596:5;6592:16;6570:52;:::i;:::-;6647:29;6669:6;6647:29;:::i;:::-;6642:3;6638:39;6631:46;;6413:270;;;;;:::o;6689:364::-;;6805:39;6838:5;6805:39;:::i;:::-;6860:71;6924:6;6919:3;6860:71;:::i;:::-;6853:78;;6940:52;6985:6;6980:3;6973:4;6966:5;6962:16;6940:52;:::i;:::-;7017:29;7039:6;7017:29;:::i;:::-;7012:3;7008:39;7001:46;;6781:272;;;;;:::o;7059:377::-;;7193:39;7226:5;7193:39;:::i;:::-;7248:89;7330:6;7325:3;7248:89;:::i;:::-;7241:96;;7346:52;7391:6;7386:3;7379:4;7372:5;7368:16;7346:52;:::i;:::-;7423:6;7418:3;7414:16;7407:23;;7169:267;;;;;:::o;7442:375::-;;7605:67;7669:2;7664:3;7605:67;:::i;:::-;7598:74;;7702:34;7698:1;7693:3;7689:11;7682:55;7768:13;7763:2;7758:3;7754:12;7747:35;7808:2;7803:3;7799:12;7792:19;;7588:229;;;:::o;7823:382::-;;7986:67;8050:2;8045:3;7986:67;:::i;:::-;7979:74;;8083:34;8079:1;8074:3;8070:11;8063:55;8149:20;8144:2;8139:3;8135:12;8128:42;8196:2;8191:3;8187:12;8180:19;;7969:236;;;:::o;8211:326::-;;8374:67;8438:2;8433:3;8374:67;:::i;:::-;8367:74;;8471:30;8467:1;8462:3;8458:11;8451:51;8528:2;8523:3;8519:12;8512:19;;8357:180;;;:::o;8543:368::-;;8706:67;8770:2;8765:3;8706:67;:::i;:::-;8699:74;;8803:34;8799:1;8794:3;8790:11;8783:55;8869:6;8864:2;8859:3;8855:12;8848:28;8902:2;8897:3;8893:12;8886:19;;8689:222;;;:::o;8917:323::-;;9080:67;9144:2;9139:3;9080:67;:::i;:::-;9073:74;;9177:27;9173:1;9168:3;9164:11;9157:48;9231:2;9226:3;9222:12;9215:19;;9063:177;;;:::o;9246:376::-;;9409:67;9473:2;9468:3;9409:67;:::i;:::-;9402:74;;9506:34;9502:1;9497:3;9493:11;9486:55;9572:14;9567:2;9562:3;9558:12;9551:36;9613:2;9608:3;9604:12;9597:19;;9392:230;;;:::o;9628:388::-;;9791:67;9855:2;9850:3;9791:67;:::i;:::-;9784:74;;9888:34;9884:1;9879:3;9875:11;9868:55;9954:26;9949:2;9944:3;9940:12;9933:48;10007:2;10002:3;9998:12;9991:19;;9774:242;;;:::o;10022:374::-;;10185:67;10249:2;10244:3;10185:67;:::i;:::-;10178:74;;10282:34;10278:1;10273:3;10269:11;10262:55;10348:12;10343:2;10338:3;10334:12;10327:34;10387:2;10382:3;10378:12;10371:19;;10168:228;;;:::o;10402:373::-;;10565:67;10629:2;10624:3;10565:67;:::i;:::-;10558:74;;10662:34;10658:1;10653:3;10649:11;10642:55;10728:11;10723:2;10718:3;10714:12;10707:33;10766:2;10761:3;10757:12;10750:19;;10548:227;;;:::o;10781:378::-;;10944:67;11008:2;11003:3;10944:67;:::i;:::-;10937:74;;11041:34;11037:1;11032:3;11028:11;11021:55;11107:16;11102:2;11097:3;11093:12;11086:38;11150:2;11145:3;11141:12;11134:19;;10927:232;;;:::o;11165:330::-;;11328:67;11392:2;11387:3;11328:67;:::i;:::-;11321:74;;11425:34;11421:1;11416:3;11412:11;11405:55;11486:2;11481:3;11477:12;11470:19;;11311:184;;;:::o;11501:381::-;;11664:67;11728:2;11723:3;11664:67;:::i;:::-;11657:74;;11761:34;11757:1;11752:3;11748:11;11741:55;11827:19;11822:2;11817:3;11813:12;11806:41;11873:2;11868:3;11864:12;11857:19;;11647:235;;;:::o;11888:376::-;;12051:67;12115:2;12110:3;12051:67;:::i;:::-;12044:74;;12148:34;12144:1;12139:3;12135:11;12128:55;12214:14;12209:2;12204:3;12200:12;12193:36;12255:2;12250:3;12246:12;12239:19;;12034:230;;;:::o;12270:328::-;;12433:67;12497:2;12492:3;12433:67;:::i;:::-;12426:74;;12530:32;12526:1;12521:3;12517:11;12510:53;12589:2;12584:3;12580:12;12573:19;;12416:182;;;:::o;12604:373::-;;12767:67;12831:2;12826:3;12767:67;:::i;:::-;12760:74;;12864:34;12860:1;12855:3;12851:11;12844:55;12930:11;12925:2;12920:3;12916:12;12909:33;12968:2;12963:3;12959:12;12952:19;;12750:227;;;:::o;12983:379::-;;13146:67;13210:2;13205:3;13146:67;:::i;:::-;13139:74;;13243:34;13239:1;13234:3;13230:11;13223:55;13309:17;13304:2;13299:3;13295:12;13288:39;13353:2;13348:3;13344:12;13337:19;;13129:233;;;:::o;13368:365::-;;13531:67;13595:2;13590:3;13531:67;:::i;:::-;13524:74;;13628:34;13624:1;13619:3;13615:11;13608:55;13694:3;13689:2;13684:3;13680:12;13673:25;13724:2;13719:3;13715:12;13708:19;;13514:219;;;:::o;13739:381::-;;13902:67;13966:2;13961:3;13902:67;:::i;:::-;13895:74;;13999:34;13995:1;13990:3;13986:11;13979:55;14065:19;14060:2;14055:3;14051:12;14044:41;14111:2;14106:3;14102:12;14095:19;;13885:235;;;:::o;14126:376::-;;14289:67;14353:2;14348:3;14289:67;:::i;:::-;14282:74;;14386:34;14382:1;14377:3;14373:11;14366:55;14452:14;14447:2;14442:3;14438:12;14431:36;14493:2;14488:3;14484:12;14477:19;;14272:230;;;:::o;14508:118::-;14595:24;14613:5;14595:24;:::i;:::-;14590:3;14583:37;14573:53;;:::o;14632:435::-;;14834:95;14925:3;14916:6;14834:95;:::i;:::-;14827:102;;14946:95;15037:3;15028:6;14946:95;:::i;:::-;14939:102;;15058:3;15051:10;;14816:251;;;;;:::o;15073:222::-;;15204:2;15193:9;15189:18;15181:26;;15217:71;15285:1;15274:9;15270:17;15261:6;15217:71;:::i;:::-;15171:124;;;;:::o;15301:640::-;;15534:3;15523:9;15519:19;15511:27;;15548:71;15616:1;15605:9;15601:17;15592:6;15548:71;:::i;:::-;15629:72;15697:2;15686:9;15682:18;15673:6;15629:72;:::i;:::-;15711;15779:2;15768:9;15764:18;15755:6;15711:72;:::i;:::-;15830:9;15824:4;15820:20;15815:2;15804:9;15800:18;15793:48;15858:76;15929:4;15920:6;15858:76;:::i;:::-;15850:84;;15501:440;;;;;;;:::o;15947:210::-;;16072:2;16061:9;16057:18;16049:26;;16085:65;16147:1;16136:9;16132:17;16123:6;16085:65;:::i;:::-;16039:118;;;;:::o;16163:313::-;;16314:2;16303:9;16299:18;16291:26;;16363:9;16357:4;16353:20;16349:1;16338:9;16334:17;16327:47;16391:78;16464:4;16455:6;16391:78;:::i;:::-;16383:86;;16281:195;;;;:::o;16482:419::-;;16686:2;16675:9;16671:18;16663:26;;16735:9;16729:4;16725:20;16721:1;16710:9;16706:17;16699:47;16763:131;16889:4;16763:131;:::i;:::-;16755:139;;16653:248;;;:::o;16907:419::-;;17111:2;17100:9;17096:18;17088:26;;17160:9;17154:4;17150:20;17146:1;17135:9;17131:17;17124:47;17188:131;17314:4;17188:131;:::i;:::-;17180:139;;17078:248;;;:::o;17332:419::-;;17536:2;17525:9;17521:18;17513:26;;17585:9;17579:4;17575:20;17571:1;17560:9;17556:17;17549:47;17613:131;17739:4;17613:131;:::i;:::-;17605:139;;17503:248;;;:::o;17757:419::-;;17961:2;17950:9;17946:18;17938:26;;18010:9;18004:4;18000:20;17996:1;17985:9;17981:17;17974:47;18038:131;18164:4;18038:131;:::i;:::-;18030:139;;17928:248;;;:::o;18182:419::-;;18386:2;18375:9;18371:18;18363:26;;18435:9;18429:4;18425:20;18421:1;18410:9;18406:17;18399:47;18463:131;18589:4;18463:131;:::i;:::-;18455:139;;18353:248;;;:::o;18607:419::-;;18811:2;18800:9;18796:18;18788:26;;18860:9;18854:4;18850:20;18846:1;18835:9;18831:17;18824:47;18888:131;19014:4;18888:131;:::i;:::-;18880:139;;18778:248;;;:::o;19032:419::-;;19236:2;19225:9;19221:18;19213:26;;19285:9;19279:4;19275:20;19271:1;19260:9;19256:17;19249:47;19313:131;19439:4;19313:131;:::i;:::-;19305:139;;19203:248;;;:::o;19457:419::-;;19661:2;19650:9;19646:18;19638:26;;19710:9;19704:4;19700:20;19696:1;19685:9;19681:17;19674:47;19738:131;19864:4;19738:131;:::i;:::-;19730:139;;19628:248;;;:::o;19882:419::-;;20086:2;20075:9;20071:18;20063:26;;20135:9;20129:4;20125:20;20121:1;20110:9;20106:17;20099:47;20163:131;20289:4;20163:131;:::i;:::-;20155:139;;20053:248;;;:::o;20307:419::-;;20511:2;20500:9;20496:18;20488:26;;20560:9;20554:4;20550:20;20546:1;20535:9;20531:17;20524:47;20588:131;20714:4;20588:131;:::i;:::-;20580:139;;20478:248;;;:::o;20732:419::-;;20936:2;20925:9;20921:18;20913:26;;20985:9;20979:4;20975:20;20971:1;20960:9;20956:17;20949:47;21013:131;21139:4;21013:131;:::i;:::-;21005:139;;20903:248;;;:::o;21157:419::-;;21361:2;21350:9;21346:18;21338:26;;21410:9;21404:4;21400:20;21396:1;21385:9;21381:17;21374:47;21438:131;21564:4;21438:131;:::i;:::-;21430:139;;21328:248;;;:::o;21582:419::-;;21786:2;21775:9;21771:18;21763:26;;21835:9;21829:4;21825:20;21821:1;21810:9;21806:17;21799:47;21863:131;21989:4;21863:131;:::i;:::-;21855:139;;21753:248;;;:::o;22007:419::-;;22211:2;22200:9;22196:18;22188:26;;22260:9;22254:4;22250:20;22246:1;22235:9;22231:17;22224:47;22288:131;22414:4;22288:131;:::i;:::-;22280:139;;22178:248;;;:::o;22432:419::-;;22636:2;22625:9;22621:18;22613:26;;22685:9;22679:4;22675:20;22671:1;22660:9;22656:17;22649:47;22713:131;22839:4;22713:131;:::i;:::-;22705:139;;22603:248;;;:::o;22857:419::-;;23061:2;23050:9;23046:18;23038:26;;23110:9;23104:4;23100:20;23096:1;23085:9;23081:17;23074:47;23138:131;23264:4;23138:131;:::i;:::-;23130:139;;23028:248;;;:::o;23282:419::-;;23486:2;23475:9;23471:18;23463:26;;23535:9;23529:4;23525:20;23521:1;23510:9;23506:17;23499:47;23563:131;23689:4;23563:131;:::i;:::-;23555:139;;23453:248;;;:::o;23707:419::-;;23911:2;23900:9;23896:18;23888:26;;23960:9;23954:4;23950:20;23946:1;23935:9;23931:17;23924:47;23988:131;24114:4;23988:131;:::i;:::-;23980:139;;23878:248;;;:::o;24132:419::-;;24336:2;24325:9;24321:18;24313:26;;24385:9;24379:4;24375:20;24371:1;24360:9;24356:17;24349:47;24413:131;24539:4;24413:131;:::i;:::-;24405:139;;24303:248;;;:::o;24557:222::-;;24688:2;24677:9;24673:18;24665:26;;24701:71;24769:1;24758:9;24754:17;24745:6;24701:71;:::i;:::-;24655:124;;;;:::o;24785:283::-;;24851:2;24845:9;24835:19;;24893:4;24885:6;24881:17;25000:6;24988:10;24985:22;24964:18;24952:10;24949:34;24946:62;24943:2;;;25011:18;;:::i;:::-;24943:2;25051:10;25047:2;25040:22;24825:243;;;;:::o;25074:331::-;;25225:18;25217:6;25214:30;25211:2;;;25247:18;;:::i;:::-;25211:2;25332:4;25328:9;25321:4;25313:6;25309:17;25305:33;25297:41;;25393:4;25387;25383:15;25375:23;;25140:265;;;:::o;25411:332::-;;25563:18;25555:6;25552:30;25549:2;;;25585:18;;:::i;:::-;25549:2;25670:4;25666:9;25659:4;25651:6;25647:17;25643:33;25635:41;;25731:4;25725;25721:15;25713:23;;25478:265;;;:::o;25749:98::-;;25834:5;25828:12;25818:22;;25807:40;;;:::o;25853:99::-;;25939:5;25933:12;25923:22;;25912:40;;;:::o;25958:168::-;;26075:6;26070:3;26063:19;26115:4;26110:3;26106:14;26091:29;;26053:73;;;;:::o;26132:169::-;;26250:6;26245:3;26238:19;26290:4;26285:3;26281:14;26266:29;;26228:73;;;;:::o;26307:148::-;;26446:3;26431:18;;26421:34;;;;:::o;26461:305::-;;26520:20;26538:1;26520:20;:::i;:::-;26515:25;;26554:20;26572:1;26554:20;:::i;:::-;26549:25;;26708:1;26640:66;26636:74;26633:1;26630:81;26627:2;;;26714:18;;:::i;:::-;26627:2;26758:1;26755;26751:9;26744:16;;26505:261;;;;:::o;26772:185::-;;26829:20;26847:1;26829:20;:::i;:::-;26824:25;;26863:20;26881:1;26863:20;:::i;:::-;26858:25;;26902:1;26892:2;;26907:18;;:::i;:::-;26892:2;26949:1;26946;26942:9;26937:14;;26814:143;;;;:::o;26963:191::-;;27023:20;27041:1;27023:20;:::i;:::-;27018:25;;27057:20;27075:1;27057:20;:::i;:::-;27052:25;;27096:1;27093;27090:8;27087:2;;;27101:18;;:::i;:::-;27087:2;27146:1;27143;27139:9;27131:17;;27008:146;;;;:::o;27160:96::-;;27226:24;27244:5;27226:24;:::i;:::-;27215:35;;27205:51;;;:::o;27262:90::-;;27339:5;27332:13;27325:21;27314:32;;27304:48;;;:::o;27358:149::-;;27434:66;27427:5;27423:78;27412:89;;27402:105;;;:::o;27513:126::-;;27590:42;27583:5;27579:54;27568:65;;27558:81;;;:::o;27645:77::-;;27711:5;27700:16;;27690:32;;;:::o;27728:154::-;27812:6;27807:3;27802;27789:30;27874:1;27865:6;27860:3;27856:16;27849:27;27779:103;;;:::o;27888:307::-;27956:1;27966:113;27980:6;27977:1;27974:13;27966:113;;;28065:1;28060:3;28056:11;28050:18;28046:1;28041:3;28037:11;28030:39;28002:2;27999:1;27995:10;27990:15;;27966:113;;;28097:6;28094:1;28091:13;28088:2;;;28177:1;28168:6;28163:3;28159:16;28152:27;28088:2;27937:258;;;;:::o;28201:320::-;;28282:1;28276:4;28272:12;28262:22;;28329:1;28323:4;28319:12;28350:18;28340:2;;28406:4;28398:6;28394:17;28384:27;;28340:2;28468;28460:6;28457:14;28437:18;28434:38;28431:2;;;28487:18;;:::i;:::-;28431:2;28252:269;;;;:::o;28527:233::-;;28589:24;28607:5;28589:24;:::i;:::-;28580:33;;28635:66;28628:5;28625:77;28622:2;;;28705:18;;:::i;:::-;28622:2;28752:1;28745:5;28741:13;28734:20;;28570:190;;;:::o;28766:176::-;;28815:20;28833:1;28815:20;:::i;:::-;28810:25;;28849:20;28867:1;28849:20;:::i;:::-;28844:25;;28888:1;28878:2;;28893:18;;:::i;:::-;28878:2;28934:1;28931;28927:9;28922:14;;28800:142;;;;:::o;28948:180::-;28996:77;28993:1;28986:88;29093:4;29090:1;29083:15;29117:4;29114:1;29107:15;29134:180;29182:77;29179:1;29172:88;29279:4;29276:1;29269:15;29303:4;29300:1;29293:15;29320:180;29368:77;29365:1;29358:88;29465:4;29462:1;29455:15;29489:4;29486:1;29479:15;29506:180;29554:77;29551:1;29544:88;29651:4;29648:1;29641:15;29675:4;29672:1;29665:15;29692:102;;29784:2;29780:7;29775:2;29768:5;29764:14;29760:28;29750:38;;29740:54;;;:::o;29800:122::-;29873:24;29891:5;29873:24;:::i;:::-;29866:5;29863:35;29853:2;;29912:1;29909;29902:12;29853:2;29843:79;:::o;29928:116::-;29998:21;30013:5;29998:21;:::i;:::-;29991:5;29988:32;29978:2;;30034:1;30031;30024:12;29978:2;29968:76;:::o;30050:120::-;30122:23;30139:5;30122:23;:::i;:::-;30115:5;30112:34;30102:2;;30160:1;30157;30150:12;30102:2;30092:78;:::o;30176:122::-;30249:24;30267:5;30249:24;:::i;:::-;30242:5;30239:35;30229:2;;30288:1;30285;30278:12;30229:2;30219:79;:::o

Swarm Source

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