Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
641 SCYRA
Holders
335
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SCYRALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MetaScyra
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-25 */ /* _ _ ______ _______ ______ __ __ ______ _ _ | \ | | ____|__ __| ____| /\ | \/ | | ____| | | | | \| | |__ | | | |__ / \ | \ / | | |__ | | | | | . ` | __| | | | __| / /\ \ | |\/| | | __| | | | | | |\ | | | | | |____ / ____ \| | | |_| |____| |__| | |_| \_|_| |_| |______/_/ \_\_| |_(_)______|\____/ */ // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: BSD-3-Clause pragma solidity ^0.8.0; /** * @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); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @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; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @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); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @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); } pragma solidity ^0.8.0; /** * @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); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @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); } } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @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; } } // File contracts/Blimpie/ERC721B.sol pragma solidity ^0.8.0; /******************** * @author: Squeebo * ********************/ abstract contract ERC721B is Context, ERC165, IERC721, IERC721Metadata { using Address for address; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address address[] internal _owners; // 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"); uint count = 0; uint length = _owners.length; for( uint i = 0; i < length; ++i ){ if( owner == _owners[i] ){ ++count; } } delete length; return count; } /** * @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 {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721B.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 tokenId < _owners.length && _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 = ERC721B.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); _owners.push(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 = ERC721B.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); 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(ERC721B.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); _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(ERC721B.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 {} } pragma solidity ^0.8.0; /************************** * @author: Squeebo * * @license: BSD-3-Clause * **************************/ /** * @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 ERC721EnumerableB is ERC721B, IERC721Enumerable { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721B) 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 tokenId) { require( index < this.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); uint256 count; uint256 length = _owners.length; for (uint256 i; i < length; ++i) { if (owner == _owners[i]) { if (count == index) { delete count; delete length; return i; } else ++count; } } delete count; delete length; require(false, "ERC721Enumerable: owner index out of bounds"); } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _owners.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < _owners.length, "ERC721Enumerable: global index out of bounds" ); return index; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @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); } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.7; library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } } pragma solidity ^0.8.7; contract MetaScyra is Ownable, ERC721EnumerableB { using ECDSA for bytes32; using Strings for uint256; struct Stake { uint256 tokenId; uint256 timestamp; } uint256 public constant SCYRA_MAX = 6667; uint256 public constant SCYRA_GENESIS_MAX = 667; uint256 public constant SCYRA_GIFT = 53; uint256 public constant SCYRA_PER_MINT = 2; uint256 public constant SCYRA_PURCHASE_LIMIT = 2; uint256 public constant SCYRA_PRESALE_PURCHASE_LIMIT = 2; uint256 public constant SCYRA_GENESIS_PRICE = 0.15 ether; uint256 public constant SCYRA_PRICE = 0.088 ether; uint256 public giftedAmount; string public provenance; string private _tokenBaseURI; address private scyra1 = 0x5243891d7641C0b87695437494ae23A17aB582eB; address private scyra2 = 0x9DB6dDabe3d8b6181d36367a00D56666cf5c0e97; address private scyra3 = 0xb8fc44EB23fc325356198818D0Ef2fec7aC0b6D7; address private scyra4 = 0xE35ff894bDf9B92d02f118717385aB1337A4b6df; address private scyra5 = 0xea1c9C2152b77835B06f4aD5dF84f6964A1d2117; address private scyra6 = 0x39B4fb38391D3Df364894C3fc9166832Bf52ba81; address private scyra7 = 0xb550adB2e2d39D02e9f3A4B85237AB303666230d; address private scyra8 = 0x4A5056FC80494023E53b2238aE0DE60Cd106E9d9; address private scyra9 = 0xb032Cc4bD2295b51b07ea0AA43C3465c8F3ABe2b; address private scyra10 = 0x8a907097c89d76766EdEC06Bd3B38917B94Ef9dE; address private scyra11 = 0xB8A9021C9c054a0e7A1e7cC9ac8fD21bc8974Bd3; address private scyra12 = 0x5F69C83e97B4e410b2f5eAC172854900c72b7927; address private signerAddress = 0x6f65E7A2bd16fA95D5f99d3Bc82594304670a118; bool public presaleLive; bool public saleLive; bool public genesisPresaleLive; bool public genesisLive; mapping(address => uint256) private presalerListPurchases; mapping(address => uint256) private purchases; mapping(address => uint256) private genesisPresalePurchases; mapping(address => uint256) private genesisPurchases; mapping(uint256 => Stake) public stakes; mapping(uint256 => address) private isStaking; mapping(uint256 => uint256) public stakingTime; constructor( string memory baseUri ) ERC721B("MetaScyra", "SCYRA") { _tokenBaseURI = baseUri; // zero id _mint( msg.sender, 0 ); // auction _mint( msg.sender, 1 ); _mint( msg.sender, 2 ); _mint( msg.sender, 3 ); _mint( msg.sender, 4 ); _mint( msg.sender, 5 ); _mint( msg.sender, 6 ); // team genesis _mint( scyra1, 7 ); _mint( scyra1, 8 ); _mint( scyra2, 9 ); _mint( scyra3, 10 ); _mint( scyra4, 11 ); _mint( scyra5, 12 ); _mint( scyra6, 13 ); _mint( scyra7, 14 ); _mint( scyra8, 15 ); _mint( scyra9, 16 ); _mint( scyra12, 17 ); } /* ---- Functions ---- */ function stake(uint256 _tokenId) public { _transfer(msg.sender, address(this), _tokenId); stakingTime[_tokenId] = 0; stakes[_tokenId] = Stake(_tokenId, block.timestamp); _setStaking(msg.sender, _tokenId); } function unstake(uint256 _tokenId) public { require(isStaking[_tokenId] == msg.sender, "NO_PERMISSION"); stakingTime[_tokenId] += (block.timestamp - stakes[_tokenId].timestamp); _unStake(_tokenId); _transfer(address(this), msg.sender, _tokenId); delete stakes[_tokenId]; } function buy(bytes32 hash, bytes memory signature, uint256 tokenQuantity) external payable { require(saleLive, "SALE_CLOSED"); require(!presaleLive, "ONLY_PRESALE"); require(tokenQuantity <= SCYRA_PER_MINT, "EXCEED_SCYRA_PER_MINT"); require(SCYRA_PRICE * tokenQuantity <= msg.value, "INSUFFICIENT_ETH"); require(totalSupply() + tokenQuantity <= SCYRA_MAX, "EXCEED_MAX_SALE_SUPPLY"); require(purchases[msg.sender] + tokenQuantity <= SCYRA_PURCHASE_LIMIT, "EXCEED_ALLOC"); require(matchAddressSigner(hash, signature), "NO_DIRECT_MINT"); purchases[msg.sender] += tokenQuantity; for(uint256 i = 0; i < tokenQuantity; i++) { uint mintIndex = totalSupply(); _mint( msg.sender, mintIndex ); } } function presaleBuy(bytes32 hash, bytes memory signature, uint256 tokenQuantity) external payable { require(!saleLive && presaleLive, "PRESALE_CLOSED"); require(tokenQuantity <= SCYRA_PER_MINT, "EXCEED_SCYRA_PER_MINT"); require(SCYRA_PRICE * tokenQuantity <= msg.value, "INSUFFICIENT_ETH"); require(totalSupply() + tokenQuantity <= SCYRA_MAX, "EXCEED_MAX_SALE_SUPPLY"); require(presalerListPurchases[msg.sender] + tokenQuantity <= SCYRA_PRESALE_PURCHASE_LIMIT, "EXCEED_ALLOC"); require(matchAddressSigner(hash, signature), "NO_DIRECT_MINT"); presalerListPurchases[msg.sender] += tokenQuantity; for (uint256 i = 0; i < tokenQuantity; i++) { uint mintIndex = totalSupply(); _mint( msg.sender, mintIndex ); } } function buyGenesis(bytes32 hash, bytes memory signature, uint256 tokenQuantity) external payable { require(genesisLive, "SALE_CLOSED"); require(!genesisPresaleLive, "ONLY_PRESALE"); require(tokenQuantity <= SCYRA_PER_MINT, "EXCEED_SCYRA_PER_MINT"); require(SCYRA_GENESIS_PRICE * tokenQuantity <= msg.value, "INSUFFICIENT_ETH"); require(totalSupply() + tokenQuantity <= SCYRA_GENESIS_MAX, "EXCEED_MAX_SALE_SUPPLY"); require(genesisPurchases[msg.sender] + tokenQuantity <= SCYRA_PURCHASE_LIMIT, "EXCEED_ALLOC"); require(matchAddressSigner(hash, signature), "NO_DIRECT_MINT"); genesisPurchases[msg.sender] += tokenQuantity; for(uint256 i = 0; i < tokenQuantity; i++) { uint mintIndex = totalSupply(); _mint( msg.sender, mintIndex ); } } function presaleBuyGenesis(bytes32 hash, bytes memory signature, uint256 tokenQuantity) external payable { require(!genesisLive && genesisPresaleLive, "PRESALE_CLOSED"); require(tokenQuantity <= SCYRA_PER_MINT, "EXCEED_SCYRA_PER_MINT"); require(SCYRA_GENESIS_PRICE * tokenQuantity <= msg.value, "INSUFFICIENT_ETH"); require(totalSupply() + tokenQuantity <= SCYRA_GENESIS_MAX, "EXCEED_MAX_SALE_SUPPLY"); require(genesisPresalePurchases[msg.sender] + tokenQuantity <= SCYRA_PRESALE_PURCHASE_LIMIT, "EXCEED_ALLOC"); require(matchAddressSigner(hash, signature), "NO_DIRECT_MINT"); genesisPresalePurchases[msg.sender] += tokenQuantity; for (uint256 i = 0; i < tokenQuantity; i++) { uint mintIndex = totalSupply(); _mint( msg.sender, mintIndex ); } } function withdraw() external onlyOwner { uint balance = address(this).balance; _withdraw(scyra1, balance * 29 / 100); _withdraw(scyra2, balance * 15 / 100); _withdraw(scyra3, balance * 20 / 100); _withdraw(scyra4, balance * 5 / 100); _withdraw(scyra5, balance * 5 / 100); _withdraw(scyra6, balance * 1 / 100); _withdraw(scyra7, balance * 12 / 1000); _withdraw(scyra8, balance * 5 / 100); _withdraw(scyra9, balance * 8 / 1000); _withdraw(scyra10, balance * 3 / 100); _withdraw(scyra11, balance * 12 / 100); _withdraw(scyra12, balance * 3 / 100); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } function gift(address _to, uint256 _reserveAmount) external onlyOwner { require(totalSupply() + _reserveAmount <= SCYRA_MAX, "MAX_MINT"); require(giftedAmount + _reserveAmount <= SCYRA_GIFT, "NO_GIFTS"); giftedAmount += _reserveAmount; for (uint256 i = 0; i < _reserveAmount; i++) { uint mintIndex = totalSupply(); _safeMint( _to, mintIndex ); } } /* ---- Setters ---- */ function togglePresaleStatus() external onlyOwner { presaleLive = !presaleLive; } function toggleSaleStatus() external onlyOwner { saleLive = !saleLive; } function toggleGenesisPresaleStatus() external onlyOwner { genesisPresaleLive = !genesisPresaleLive; } function toggleGenesisSaleStatus() external onlyOwner { genesisLive = !genesisLive; } function setBaseURI(string calldata URI) external onlyOwner { _tokenBaseURI = URI; } function setProvenanceHash(string calldata hash) external onlyOwner { provenance = hash; } function setSignerAddress(address _signerAddress) external onlyOwner { signerAddress = _signerAddress; } /* ---- Misc ---- */ function _setStaking(address _owner, uint256 _tokenId) internal { isStaking[_tokenId] = _owner; } function _unStake(uint256 _tokenId) internal { require(isStaking[_tokenId] == msg.sender, "NOT_AUTHORIZED"); isStaking[_tokenId] = address(0); } function matchAddressSigner(bytes32 hash, bytes memory signature) private view returns(bool) { return signerAddress == hash.recover(signature); } function tokenURI(uint256 tokenId) external view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(_tokenBaseURI, tokenId.toString())); } function tokensOfOwner(address addr) external view returns(uint256[] memory) { uint256 tokenCount = balanceOf(addr); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(addr, i); } return tokensId; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseUri","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"SCYRA_GENESIS_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCYRA_GENESIS_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCYRA_GIFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCYRA_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCYRA_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCYRA_PRESALE_PURCHASE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCYRA_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCYRA_PURCHASE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"buyGenesis","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"genesisLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesisPresaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_to","type":"address"},{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giftedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"presaleBuy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"presaleBuyGenesis","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":[],"name":"saleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"toggleGenesisPresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleGenesisSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePresaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleStatus","outputs":[],"stateMutability":"nonpayable","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":"tokenId","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":[{"internalType":"address","name":"addr","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600980546001600160a01b0319908116735243891d7641c0b87695437494ae23a17ab582eb17909155600a80548216739db6ddabe3d8b6181d36367a00d56666cf5c0e97179055600b8054821673b8fc44eb23fc325356198818d0ef2fec7ac0b6d7179055600c8054821673e35ff894bdf9b92d02f118717385ab1337a4b6df179055600d8054821673ea1c9c2152b77835b06f4ad5df84f6964a1d2117179055600e805482167339b4fb38391d3df364894c3fc9166832bf52ba81179055600f8054821673b550adb2e2d39d02e9f3a4b85237ab303666230d179055601080548216734a5056fc80494023e53b2238ae0de60cd106e9d917905560118054821673b032cc4bd2295b51b07ea0aa43c3465c8f3abe2b179055601280548216738a907097c89d76766edec06bd3b38917b94ef9de17905560138054821673b8a9021c9c054a0e7a1e7cc9ac8fd21bc8974bd3179055601480548216735f69c83e97b4e410b2f5eac172854900c72b792717905560158054909116736f65e7a2bd16fa95d5f99d3bc82594304670a118179055348015620001a357600080fd5b5060405162003b4c38038062003b4c833981016040819052620001c6916200066a565b604051806040016040528060098152602001684d657461536379726160b81b81525060405180604001604052806005815260200164534359524160d81b815250620002206200021a620003d960201b60201c565b620003dd565b815162000235906001906020850190620005ae565b5080516200024b906002906020840190620005ae565b505081516200026391506008906020840190620005ae565b50620002713360006200042d565b6200027e3360016200042d565b6200028b3360026200042d565b620002983360036200042d565b620002a53360046200042d565b620002b23360056200042d565b620002bf3360066200042d565b600954620002d8906001600160a01b031660076200042d565b600954620002f1906001600160a01b031660086200042d565b600a546200030a906001600160a01b031660096200042d565b600b5462000323906001600160a01b0316600a6200042d565b600c546200033c906001600160a01b0316600b6200042d565b600d5462000355906001600160a01b0316600c6200042d565b600e546200036e906001600160a01b0316600d6200042d565b600f5462000387906001600160a01b0316600e6200042d565b601054620003a0906001600160a01b0316600f6200042d565b601154620003b9906001600160a01b031660106200042d565b601454620003d2906001600160a01b031660116200042d565b5062000799565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216620004895760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064015b60405180910390fd5b62000494816200055f565b15620004e35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162000480565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60035460009082108015620005a8575060006001600160a01b03166003838154811062000590576200059062000746565b6000918252602090912001546001600160a01b031614155b92915050565b828054620005bc906200075c565b90600052602060002090601f016020900481019282620005e057600085556200062b565b82601f10620005fb57805160ff19168380011785556200062b565b828001600101855582156200062b579182015b828111156200062b5782518255916020019190600101906200060e565b50620006399291506200063d565b5090565b5b808211156200063957600081556001016200063e565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200067e57600080fd5b82516001600160401b03808211156200069657600080fd5b818501915085601f830112620006ab57600080fd5b815181811115620006c057620006c062000654565b604051601f8201601f19908116603f01168101908382118183101715620006eb57620006eb62000654565b8160405282815288868487010111156200070457600080fd5b600093505b8284101562000728578484018601518185018701529285019262000709565b828411156200073a5760008684830101525b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806200077157607f821691505b602082108114156200079357634e487b7160e01b600052602260045260246000fd5b50919050565b6133a380620007a96000396000f3fe6080604052600436106102e45760003560e01c806373a769f011610190578063b88d4fde116100dc578063e081b78111610095578063f030f0b51161006f578063f030f0b51461054e578063f2fde38b146108ae578063f37e29541461054e578063f65a9d56146108ce57600080fd5b8063e081b7811461082f578063e872d5f014610850578063e985e9c51461086557600080fd5b8063b88d4fde1461075d578063c5e92bf21461077d578063c87b56dd14610793578063cbce4c97146107b3578063d5a44f86146107d3578063df03bd381461081c57600080fd5b80638462151c11610149578063a22cb46511610123578063a22cb465146106e9578063a694fc3a14610709578063af54843914610729578063b4f149a41461074a57600080fd5b80638462151c146106895780638da5cb5b146106b657806395d89b41146106d457600080fd5b806373a769f0146105f45780637beff9641461060a5780637bffb4ce1461061f578063808e14361461063457806382950d871461064757806383a9e0491461066857600080fd5b806323b872dd1161024f5780634f6ccce7116102085780635e353126116101e25780635e353126146105835780636352211e1461059f57806370a08231146105bf578063715018a6146105df57600080fd5b80634f6ccce71461052e57806353df15001461054e57806355f804b31461056357600080fd5b806323b872dd1461046c5780632e17de781461048c5780632f745c59146104ac5780633ccfd60b146104cc57806342842e0e146104e15780634e795b1c1461050157600080fd5b8063095ea7b3116102a1578063095ea7b3146103c25780630e2f720b146103e25780630f7309e81461040c578063109695231461042157806318160ddd146104415780631b57190e1461045657600080fd5b806301ffc9a7146102e9578063046dc1661461031e578063049c5c491461034057806306fdde0314610355578063081812fc14610377578063087fcec2146103af575b600080fd5b3480156102f557600080fd5b50610309610304366004612b54565b6108e3565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b5061033e610339366004612b94565b61090e565b005b34801561034c57600080fd5b5061033e610963565b34801561036157600080fd5b5061036a6109ae565b6040516103159190612c07565b34801561038357600080fd5b50610397610392366004612c1a565b610a40565b6040516001600160a01b039091168152602001610315565b61033e6103bd366004612cd6565b610ac8565b3480156103ce57600080fd5b5061033e6103dd366004612d26565b610ca1565b3480156103ee57600080fd5b506103fe670138a388a43c000081565b604051908152602001610315565b34801561041857600080fd5b5061036a610db7565b34801561042d57600080fd5b5061033e61043c366004612d50565b610e45565b34801561044d57600080fd5b506003546103fe565b34801561046257600080fd5b506103fe60065481565b34801561047857600080fd5b5061033e610487366004612dc2565b610e7b565b34801561049857600080fd5b5061033e6104a7366004612c1a565b610eac565b3480156104b857600080fd5b506103fe6104c7366004612d26565b610f6d565b3480156104d857600080fd5b5061033e611095565b3480156104ed57600080fd5b5061033e6104fc366004612dc2565b611231565b34801561050d57600080fd5b506103fe61051c366004612c1a565b601c6020526000908152604090205481565b34801561053a57600080fd5b506103fe610549366004612c1a565b61124c565b34801561055a57600080fd5b506103fe600281565b34801561056f57600080fd5b5061033e61057e366004612d50565b6112b9565b34801561058f57600080fd5b506103fe670214e8348c4f000081565b3480156105ab57600080fd5b506103976105ba366004612c1a565b6112ef565b3480156105cb57600080fd5b506103fe6105da366004612b94565b61137b565b3480156105eb57600080fd5b5061033e61144d565b34801561060057600080fd5b506103fe61029b81565b34801561061657600080fd5b5061033e611483565b34801561062b57600080fd5b5061033e6114ce565b61033e610642366004612cd6565b611519565b34801561065357600080fd5b5060155461030990600160b81b900460ff1681565b34801561067457600080fd5b5060155461030990600160a01b900460ff1681565b34801561069557600080fd5b506106a96106a4366004612b94565b6116bc565b6040516103159190612dfe565b3480156106c257600080fd5b506000546001600160a01b0316610397565b3480156106e057600080fd5b5061036a61175e565b3480156106f557600080fd5b5061033e610704366004612e42565b61176d565b34801561071557600080fd5b5061033e610724366004612c1a565b611832565b34801561073557600080fd5b5060155461030990600160b01b900460ff1681565b61033e610758366004612cd6565b611891565b34801561076957600080fd5b5061033e610778366004612e7e565b611a34565b34801561078957600080fd5b506103fe611a0b81565b34801561079f57600080fd5b5061036a6107ae366004612c1a565b611a66565b3480156107bf57600080fd5b5061033e6107ce366004612d26565b611b07565b3480156107df57600080fd5b506108076107ee366004612c1a565b601a602052600090815260409020805460019091015482565b60408051928352602083019190915201610315565b61033e61082a366004612cd6565b611c17565b34801561083b57600080fd5b5060155461030990600160a81b900460ff1681565b34801561085c57600080fd5b5061033e611dea565b34801561087157600080fd5b50610309610880366004612ee6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108ba57600080fd5b5061033e6108c9366004612b94565b611e35565b3480156108da57600080fd5b506103fe603581565b60006001600160e01b0319821663780e9d6360e01b1480610908575061090882611ecd565b92915050565b6000546001600160a01b031633146109415760405162461bcd60e51b815260040161093890612f19565b60405180910390fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461098d5760405162461bcd60e51b815260040161093890612f19565b6015805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6060600180546109bd90612f4e565b80601f01602080910402602001604051908101604052809291908181526020018280546109e990612f4e565b8015610a365780601f10610a0b57610100808354040283529160200191610a36565b820191906000526020600020905b815481529060010190602001808311610a1957829003601f168201915b5050505050905090565b6000610a4b82611f1d565b610aac5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610938565b506000908152600460205260409020546001600160a01b031690565b601554600160b81b900460ff16610b0f5760405162461bcd60e51b815260206004820152600b60248201526a14d0531157d0d313d4d15160aa1b6044820152606401610938565b601554600160b01b900460ff1615610b585760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f50524553414c4560a01b6044820152606401610938565b6002811115610b795760405162461bcd60e51b815260040161093890612f89565b34610b8c82670214e8348c4f0000612fce565b1115610baa5760405162461bcd60e51b815260040161093890612fed565b61029b81610bb760035490565b610bc19190613017565b1115610bdf5760405162461bcd60e51b81526004016109389061302f565b33600090815260196020526040902054600290610bfd908390613017565b1115610c1b5760405162461bcd60e51b81526004016109389061305f565b610c258383611f67565b610c415760405162461bcd60e51b815260040161093890613085565b3360009081526019602052604081208054839290610c60908490613017565b90915550600090505b81811015610c9b576000610c7c60035490565b9050610c883382611f8b565b5080610c93816130ad565b915050610c69565b50505050565b6000610cac826112ef565b9050806001600160a01b0316836001600160a01b03161415610d1a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610938565b336001600160a01b0382161480610d365750610d368133610880565b610da85760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610938565b610db283836120b3565b505050565b60078054610dc490612f4e565b80601f0160208091040260200160405190810160405280929190818152602001828054610df090612f4e565b8015610e3d5780601f10610e1257610100808354040283529160200191610e3d565b820191906000526020600020905b815481529060010190602001808311610e2057829003601f168201915b505050505081565b6000546001600160a01b03163314610e6f5760405162461bcd60e51b815260040161093890612f19565b610db260078383612aae565b610e853382612121565b610ea15760405162461bcd60e51b8152600401610938906130c8565b610db283838361220b565b6000818152601b60205260409020546001600160a01b03163314610f025760405162461bcd60e51b815260206004820152600d60248201526c2727afa822a926a4a9a9a4a7a760991b6044820152606401610938565b6000818152601a6020526040902060010154610f1e9042613119565b6000828152601c602052604081208054909190610f3c908490613017565b90915550610f4b905081612361565b610f5630338361220b565b6000908152601a6020526040812081815560010155565b6040516370a0823160e01b81526001600160a01b038316600482015260009030906370a082319060240160206040518083038186803b158015610faf57600080fd5b505afa158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190613130565b82106110055760405162461bcd60e51b815260040161093890613149565b600354600090815b81811015611075576003818154811061102857611028613194565b6000918252602090912001546001600160a01b03878116911614156110655784831415611059579250610908915050565b611062836130ad565b92505b61106e816130ad565b905061100d565b506000915081905060405162461bcd60e51b815260040161093890613149565b6000546001600160a01b031633146110bf5760405162461bcd60e51b815260040161093890612f19565b60095447906110ed906001600160a01b031660646110de84601d612fce565b6110e891906131c0565b6123d6565b600a5461110a906001600160a01b031660646110de84600f612fce565b600b54611127906001600160a01b031660646110de846014612fce565b600c54611144906001600160a01b031660646110de846005612fce565b600d54611161906001600160a01b031660646110de846005612fce565b600e5461117e906001600160a01b031660646110de846001612fce565b600f5461119c906001600160a01b03166103e86110de84600c612fce565b6010546111b9906001600160a01b031660646110de846005612fce565b6011546111d7906001600160a01b03166103e86110de846008612fce565b6012546111f4906001600160a01b031660646110de846003612fce565b601354611211906001600160a01b031660646110de84600c612fce565b60145461122e906001600160a01b031660646110de846003612fce565b50565b610db283838360405180602001604052806000815250611a34565b60035460009082106112b55760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610938565b5090565b6000546001600160a01b031633146112e35760405162461bcd60e51b815260040161093890612f19565b610db260088383612aae565b6000806003838154811061130557611305613194565b6000918252602090912001546001600160a01b03169050806109085760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610938565b60006001600160a01b0382166113e65760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610938565b600354600090815b81811015611444576003818154811061140957611409613194565b6000918252602090912001546001600160a01b038681169116141561143457611431836130ad565b92505b61143d816130ad565b90506113ee565b50909392505050565b6000546001600160a01b031633146114775760405162461bcd60e51b815260040161093890612f19565b611481600061246c565b565b6000546001600160a01b031633146114ad5760405162461bcd60e51b815260040161093890612f19565b6015805460ff60b81b198116600160b81b9182900460ff1615909102179055565b6000546001600160a01b031633146114f85760405162461bcd60e51b815260040161093890612f19565b6015805460ff60a01b198116600160a01b9182900460ff1615909102179055565b601554600160b81b900460ff1615801561153c5750601554600160b01b900460ff165b6115795760405162461bcd60e51b815260206004820152600e60248201526d14149154d0531157d0d313d4d15160921b6044820152606401610938565b600281111561159a5760405162461bcd60e51b815260040161093890612f89565b346115ad82670214e8348c4f0000612fce565b11156115cb5760405162461bcd60e51b815260040161093890612fed565b61029b816115d860035490565b6115e29190613017565b11156116005760405162461bcd60e51b81526004016109389061302f565b3360009081526018602052604090205460029061161e908390613017565b111561163c5760405162461bcd60e51b81526004016109389061305f565b6116468383611f67565b6116625760405162461bcd60e51b815260040161093890613085565b3360009081526018602052604081208054839290611681908490613017565b90915550600090505b81811015610c9b57600061169d60035490565b90506116a93382611f8b565b50806116b4816130ad565b91505061168a565b606060006116c98361137b565b905060008167ffffffffffffffff8111156116e6576116e6612c33565b60405190808252806020026020018201604052801561170f578160200160208202803683370190505b50905060005b82811015611756576117278582610f6d565b82828151811061173957611739613194565b60209081029190910101528061174e816130ad565b915050611715565b509392505050565b6060600280546109bd90612f4e565b6001600160a01b0382163314156117c65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610938565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61183d33308361220b565b6000818152601c602090815260408083208390558051808201825284815242818401908152858552601a84528285209151825551600190910155601b909152902080546001600160a01b0319163317905550565b601554600160a81b900460ff161580156118b45750601554600160a01b900460ff165b6118f15760405162461bcd60e51b815260206004820152600e60248201526d14149154d0531157d0d313d4d15160921b6044820152606401610938565b60028111156119125760405162461bcd60e51b815260040161093890612f89565b3461192582670138a388a43c0000612fce565b11156119435760405162461bcd60e51b815260040161093890612fed565b611a0b8161195060035490565b61195a9190613017565b11156119785760405162461bcd60e51b81526004016109389061302f565b33600090815260166020526040902054600290611996908390613017565b11156119b45760405162461bcd60e51b81526004016109389061305f565b6119be8383611f67565b6119da5760405162461bcd60e51b815260040161093890613085565b33600090815260166020526040812080548392906119f9908490613017565b90915550600090505b81811015610c9b576000611a1560035490565b9050611a213382611f8b565b5080611a2c816130ad565b915050611a02565b611a3e3383612121565b611a5a5760405162461bcd60e51b8152600401610938906130c8565b610c9b848484846124bc565b6060611a7182611f1d565b611ad55760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610938565b6008611ae0836124ef565b604051602001611af19291906131f0565b6040516020818303038152906040529050919050565b6000546001600160a01b03163314611b315760405162461bcd60e51b815260040161093890612f19565b611a0b81611b3e60035490565b611b489190613017565b1115611b815760405162461bcd60e51b815260206004820152600860248201526713505617d352539560c21b6044820152606401610938565b603581600654611b919190613017565b1115611bca5760405162461bcd60e51b81526020600482015260086024820152674e4f5f474946545360c01b6044820152606401610938565b8060066000828254611bdc9190613017565b90915550600090505b81811015610db2576000611bf860035490565b9050611c0484826125ed565b5080611c0f816130ad565b915050611be5565b601554600160a81b900460ff16611c5e5760405162461bcd60e51b815260206004820152600b60248201526a14d0531157d0d313d4d15160aa1b6044820152606401610938565b601554600160a01b900460ff1615611ca75760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f50524553414c4560a01b6044820152606401610938565b6002811115611cc85760405162461bcd60e51b815260040161093890612f89565b34611cdb82670138a388a43c0000612fce565b1115611cf95760405162461bcd60e51b815260040161093890612fed565b611a0b81611d0660035490565b611d109190613017565b1115611d2e5760405162461bcd60e51b81526004016109389061302f565b33600090815260176020526040902054600290611d4c908390613017565b1115611d6a5760405162461bcd60e51b81526004016109389061305f565b611d748383611f67565b611d905760405162461bcd60e51b815260040161093890613085565b3360009081526017602052604081208054839290611daf908490613017565b90915550600090505b81811015610c9b576000611dcb60035490565b9050611dd73382611f8b565b5080611de2816130ad565b915050611db8565b6000546001600160a01b03163314611e145760405162461bcd60e51b815260040161093890612f19565b6015805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6000546001600160a01b03163314611e5f5760405162461bcd60e51b815260040161093890612f19565b6001600160a01b038116611ec45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610938565b61122e8161246c565b60006001600160e01b031982166380ac58cd60e01b1480611efe57506001600160e01b03198216635b5e139f60e01b145b8061090857506301ffc9a760e01b6001600160e01b0319831614610908565b60035460009082108015610908575060006001600160a01b031660038381548110611f4a57611f4a613194565b6000918252602090912001546001600160a01b0316141592915050565b6000611f73838361260b565b6015546001600160a01b039182169116149392505050565b6001600160a01b038216611fe15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610938565b611fea81611f1d565b156120375760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610938565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906120e8826112ef565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061212c82611f1d565b61218d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610938565b6000612198836112ef565b9050806001600160a01b0316846001600160a01b031614806121d35750836001600160a01b03166121c884610a40565b6001600160a01b0316145b8061220357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661221e826112ef565b6001600160a01b0316146122865760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610938565b6001600160a01b0382166122e85760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610938565b6122f36000826120b3565b816003828154811061230757612307613194565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6000818152601b60205260409020546001600160a01b031633146123b85760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610938565b6000908152601b6020526040902080546001600160a01b0319169055565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612423576040519150601f19603f3d011682016040523d82523d6000602084013e612428565b606091505b5050905080610db25760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610938565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6124c784848461220b565b6124d384848484612627565b610c9b5760405162461bcd60e51b815260040161093890613297565b6060816125135750506040805180820190915260018152600360fc1b602082015290565b8160005b811561253d5780612527816130ad565b91506125369050600a836131c0565b9150612517565b60008167ffffffffffffffff81111561255857612558612c33565b6040519080825280601f01601f191660200182016040528015612582576020820181803683370190505b5090505b841561220357612597600183613119565b91506125a4600a866132e9565b6125af906030613017565b60f81b8183815181106125c4576125c4613194565b60200101906001600160f81b031916908160001a9053506125e6600a866131c0565b9450612586565b612607828260405180602001604052806000815250612734565b5050565b600080600061261a8585612767565b91509150611756816127d7565b60006001600160a01b0384163b1561272957604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061266b9033908990889088906004016132fd565b602060405180830381600087803b15801561268557600080fd5b505af19250505080156126b5575060408051601f3d908101601f191682019092526126b29181019061333a565b60015b61270f573d8080156126e3576040519150601f19603f3d011682016040523d82523d6000602084013e6126e8565b606091505b5080516127075760405162461bcd60e51b815260040161093890613297565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612203565b506001949350505050565b61273e8383611f8b565b61274b6000848484612627565b610db25760405162461bcd60e51b815260040161093890613297565b60008082516041141561279e5760208301516040840151606085015160001a61279287828585612992565b945094505050506127d0565b8251604014156127c857602083015160408401516127bd868383612a7f565b9350935050506127d0565b506000905060025b9250929050565b60008160048111156127eb576127eb613357565b14156127f45750565b600181600481111561280857612808613357565b14156128565760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610938565b600281600481111561286a5761286a613357565b14156128b85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610938565b60038160048111156128cc576128cc613357565b14156129255760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610938565b600481600481111561293957612939613357565b141561122e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610938565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156129c95750600090506003612a76565b8460ff16601b141580156129e157508460ff16601c14155b156129f25750600090506004612a76565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a46573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6f57600060019250925050612a76565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01612aa087828885612992565b935093505050935093915050565b828054612aba90612f4e565b90600052602060002090601f016020900481019282612adc5760008555612b22565b82601f10612af55782800160ff19823516178555612b22565b82800160010185558215612b22579182015b82811115612b22578235825591602001919060010190612b07565b506112b59291505b808211156112b55760008155600101612b2a565b6001600160e01b03198116811461122e57600080fd5b600060208284031215612b6657600080fd5b8135612b7181612b3e565b9392505050565b80356001600160a01b0381168114612b8f57600080fd5b919050565b600060208284031215612ba657600080fd5b612b7182612b78565b60005b83811015612bca578181015183820152602001612bb2565b83811115610c9b5750506000910152565b60008151808452612bf3816020860160208601612baf565b601f01601f19169290920160200192915050565b602081526000612b716020830184612bdb565b600060208284031215612c2c57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612c5a57600080fd5b813567ffffffffffffffff80821115612c7557612c75612c33565b604051601f8301601f19908116603f01168101908282118183101715612c9d57612c9d612c33565b81604052838152866020858801011115612cb657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215612ceb57600080fd5b83359250602084013567ffffffffffffffff811115612d0957600080fd5b612d1586828701612c49565b925050604084013590509250925092565b60008060408385031215612d3957600080fd5b612d4283612b78565b946020939093013593505050565b60008060208385031215612d6357600080fd5b823567ffffffffffffffff80821115612d7b57600080fd5b818501915085601f830112612d8f57600080fd5b813581811115612d9e57600080fd5b866020828501011115612db057600080fd5b60209290920196919550909350505050565b600080600060608486031215612dd757600080fd5b612de084612b78565b9250612dee60208501612b78565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b81811015612e3657835183529284019291840191600101612e1a565b50909695505050505050565b60008060408385031215612e5557600080fd5b612e5e83612b78565b915060208301358015158114612e7357600080fd5b809150509250929050565b60008060008060808587031215612e9457600080fd5b612e9d85612b78565b9350612eab60208601612b78565b925060408501359150606085013567ffffffffffffffff811115612ece57600080fd5b612eda87828801612c49565b91505092959194509250565b60008060408385031215612ef957600080fd5b612f0283612b78565b9150612f1060208401612b78565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612f6257607f821691505b60208210811415612f8357634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260159082015274115610d1515117d4d0d6549057d4115497d3525395605a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612fe857612fe8612fb8565b500290565b60208082526010908201526f0929ca6aa8c8c9286928a9ca8be8aa8960831b604082015260600190565b6000821982111561302a5761302a612fb8565b500190565b6020808252601690820152754558434545445f4d41585f53414c455f535550504c5960501b604082015260600190565b6020808252600c908201526b4558434545445f414c4c4f4360a01b604082015260600190565b6020808252600e908201526d1393d7d112549150d517d352539560921b604082015260600190565b60006000198214156130c1576130c1612fb8565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008282101561312b5761312b612fb8565b500390565b60006020828403121561314257600080fd5b5051919050565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826131cf576131cf6131aa565b500490565b600081516131e6818560208601612baf565b9290920192915050565b600080845481600182811c91508083168061320c57607f831692505b602080841082141561322c57634e487b7160e01b86526022600452602486fd5b81801561324057600181146132515761327e565b60ff1986168952848901965061327e565b60008b81526020902060005b868110156132765781548b82015290850190830161325d565b505084890196505b50505050505061328e81856131d4565b95945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826132f8576132f86131aa565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061333090830184612bdb565b9695505050505050565b60006020828403121561334c57600080fd5b8151612b7181612b3e565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220672fc76424cd92c353e6de815b9bcc53701f37d5371e3774b462983f8ad2f3fe64736f6c634300080900330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a68747470733a2f2f6d65746173637972612e636f6d2f6170692f000000000000
Deployed Bytecode
0x6080604052600436106102e45760003560e01c806373a769f011610190578063b88d4fde116100dc578063e081b78111610095578063f030f0b51161006f578063f030f0b51461054e578063f2fde38b146108ae578063f37e29541461054e578063f65a9d56146108ce57600080fd5b8063e081b7811461082f578063e872d5f014610850578063e985e9c51461086557600080fd5b8063b88d4fde1461075d578063c5e92bf21461077d578063c87b56dd14610793578063cbce4c97146107b3578063d5a44f86146107d3578063df03bd381461081c57600080fd5b80638462151c11610149578063a22cb46511610123578063a22cb465146106e9578063a694fc3a14610709578063af54843914610729578063b4f149a41461074a57600080fd5b80638462151c146106895780638da5cb5b146106b657806395d89b41146106d457600080fd5b806373a769f0146105f45780637beff9641461060a5780637bffb4ce1461061f578063808e14361461063457806382950d871461064757806383a9e0491461066857600080fd5b806323b872dd1161024f5780634f6ccce7116102085780635e353126116101e25780635e353126146105835780636352211e1461059f57806370a08231146105bf578063715018a6146105df57600080fd5b80634f6ccce71461052e57806353df15001461054e57806355f804b31461056357600080fd5b806323b872dd1461046c5780632e17de781461048c5780632f745c59146104ac5780633ccfd60b146104cc57806342842e0e146104e15780634e795b1c1461050157600080fd5b8063095ea7b3116102a1578063095ea7b3146103c25780630e2f720b146103e25780630f7309e81461040c578063109695231461042157806318160ddd146104415780631b57190e1461045657600080fd5b806301ffc9a7146102e9578063046dc1661461031e578063049c5c491461034057806306fdde0314610355578063081812fc14610377578063087fcec2146103af575b600080fd5b3480156102f557600080fd5b50610309610304366004612b54565b6108e3565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b5061033e610339366004612b94565b61090e565b005b34801561034c57600080fd5b5061033e610963565b34801561036157600080fd5b5061036a6109ae565b6040516103159190612c07565b34801561038357600080fd5b50610397610392366004612c1a565b610a40565b6040516001600160a01b039091168152602001610315565b61033e6103bd366004612cd6565b610ac8565b3480156103ce57600080fd5b5061033e6103dd366004612d26565b610ca1565b3480156103ee57600080fd5b506103fe670138a388a43c000081565b604051908152602001610315565b34801561041857600080fd5b5061036a610db7565b34801561042d57600080fd5b5061033e61043c366004612d50565b610e45565b34801561044d57600080fd5b506003546103fe565b34801561046257600080fd5b506103fe60065481565b34801561047857600080fd5b5061033e610487366004612dc2565b610e7b565b34801561049857600080fd5b5061033e6104a7366004612c1a565b610eac565b3480156104b857600080fd5b506103fe6104c7366004612d26565b610f6d565b3480156104d857600080fd5b5061033e611095565b3480156104ed57600080fd5b5061033e6104fc366004612dc2565b611231565b34801561050d57600080fd5b506103fe61051c366004612c1a565b601c6020526000908152604090205481565b34801561053a57600080fd5b506103fe610549366004612c1a565b61124c565b34801561055a57600080fd5b506103fe600281565b34801561056f57600080fd5b5061033e61057e366004612d50565b6112b9565b34801561058f57600080fd5b506103fe670214e8348c4f000081565b3480156105ab57600080fd5b506103976105ba366004612c1a565b6112ef565b3480156105cb57600080fd5b506103fe6105da366004612b94565b61137b565b3480156105eb57600080fd5b5061033e61144d565b34801561060057600080fd5b506103fe61029b81565b34801561061657600080fd5b5061033e611483565b34801561062b57600080fd5b5061033e6114ce565b61033e610642366004612cd6565b611519565b34801561065357600080fd5b5060155461030990600160b81b900460ff1681565b34801561067457600080fd5b5060155461030990600160a01b900460ff1681565b34801561069557600080fd5b506106a96106a4366004612b94565b6116bc565b6040516103159190612dfe565b3480156106c257600080fd5b506000546001600160a01b0316610397565b3480156106e057600080fd5b5061036a61175e565b3480156106f557600080fd5b5061033e610704366004612e42565b61176d565b34801561071557600080fd5b5061033e610724366004612c1a565b611832565b34801561073557600080fd5b5060155461030990600160b01b900460ff1681565b61033e610758366004612cd6565b611891565b34801561076957600080fd5b5061033e610778366004612e7e565b611a34565b34801561078957600080fd5b506103fe611a0b81565b34801561079f57600080fd5b5061036a6107ae366004612c1a565b611a66565b3480156107bf57600080fd5b5061033e6107ce366004612d26565b611b07565b3480156107df57600080fd5b506108076107ee366004612c1a565b601a602052600090815260409020805460019091015482565b60408051928352602083019190915201610315565b61033e61082a366004612cd6565b611c17565b34801561083b57600080fd5b5060155461030990600160a81b900460ff1681565b34801561085c57600080fd5b5061033e611dea565b34801561087157600080fd5b50610309610880366004612ee6565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108ba57600080fd5b5061033e6108c9366004612b94565b611e35565b3480156108da57600080fd5b506103fe603581565b60006001600160e01b0319821663780e9d6360e01b1480610908575061090882611ecd565b92915050565b6000546001600160a01b031633146109415760405162461bcd60e51b815260040161093890612f19565b60405180910390fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461098d5760405162461bcd60e51b815260040161093890612f19565b6015805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6060600180546109bd90612f4e565b80601f01602080910402602001604051908101604052809291908181526020018280546109e990612f4e565b8015610a365780601f10610a0b57610100808354040283529160200191610a36565b820191906000526020600020905b815481529060010190602001808311610a1957829003601f168201915b5050505050905090565b6000610a4b82611f1d565b610aac5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610938565b506000908152600460205260409020546001600160a01b031690565b601554600160b81b900460ff16610b0f5760405162461bcd60e51b815260206004820152600b60248201526a14d0531157d0d313d4d15160aa1b6044820152606401610938565b601554600160b01b900460ff1615610b585760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f50524553414c4560a01b6044820152606401610938565b6002811115610b795760405162461bcd60e51b815260040161093890612f89565b34610b8c82670214e8348c4f0000612fce565b1115610baa5760405162461bcd60e51b815260040161093890612fed565b61029b81610bb760035490565b610bc19190613017565b1115610bdf5760405162461bcd60e51b81526004016109389061302f565b33600090815260196020526040902054600290610bfd908390613017565b1115610c1b5760405162461bcd60e51b81526004016109389061305f565b610c258383611f67565b610c415760405162461bcd60e51b815260040161093890613085565b3360009081526019602052604081208054839290610c60908490613017565b90915550600090505b81811015610c9b576000610c7c60035490565b9050610c883382611f8b565b5080610c93816130ad565b915050610c69565b50505050565b6000610cac826112ef565b9050806001600160a01b0316836001600160a01b03161415610d1a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610938565b336001600160a01b0382161480610d365750610d368133610880565b610da85760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610938565b610db283836120b3565b505050565b60078054610dc490612f4e565b80601f0160208091040260200160405190810160405280929190818152602001828054610df090612f4e565b8015610e3d5780601f10610e1257610100808354040283529160200191610e3d565b820191906000526020600020905b815481529060010190602001808311610e2057829003601f168201915b505050505081565b6000546001600160a01b03163314610e6f5760405162461bcd60e51b815260040161093890612f19565b610db260078383612aae565b610e853382612121565b610ea15760405162461bcd60e51b8152600401610938906130c8565b610db283838361220b565b6000818152601b60205260409020546001600160a01b03163314610f025760405162461bcd60e51b815260206004820152600d60248201526c2727afa822a926a4a9a9a4a7a760991b6044820152606401610938565b6000818152601a6020526040902060010154610f1e9042613119565b6000828152601c602052604081208054909190610f3c908490613017565b90915550610f4b905081612361565b610f5630338361220b565b6000908152601a6020526040812081815560010155565b6040516370a0823160e01b81526001600160a01b038316600482015260009030906370a082319060240160206040518083038186803b158015610faf57600080fd5b505afa158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190613130565b82106110055760405162461bcd60e51b815260040161093890613149565b600354600090815b81811015611075576003818154811061102857611028613194565b6000918252602090912001546001600160a01b03878116911614156110655784831415611059579250610908915050565b611062836130ad565b92505b61106e816130ad565b905061100d565b506000915081905060405162461bcd60e51b815260040161093890613149565b6000546001600160a01b031633146110bf5760405162461bcd60e51b815260040161093890612f19565b60095447906110ed906001600160a01b031660646110de84601d612fce565b6110e891906131c0565b6123d6565b600a5461110a906001600160a01b031660646110de84600f612fce565b600b54611127906001600160a01b031660646110de846014612fce565b600c54611144906001600160a01b031660646110de846005612fce565b600d54611161906001600160a01b031660646110de846005612fce565b600e5461117e906001600160a01b031660646110de846001612fce565b600f5461119c906001600160a01b03166103e86110de84600c612fce565b6010546111b9906001600160a01b031660646110de846005612fce565b6011546111d7906001600160a01b03166103e86110de846008612fce565b6012546111f4906001600160a01b031660646110de846003612fce565b601354611211906001600160a01b031660646110de84600c612fce565b60145461122e906001600160a01b031660646110de846003612fce565b50565b610db283838360405180602001604052806000815250611a34565b60035460009082106112b55760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610938565b5090565b6000546001600160a01b031633146112e35760405162461bcd60e51b815260040161093890612f19565b610db260088383612aae565b6000806003838154811061130557611305613194565b6000918252602090912001546001600160a01b03169050806109085760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610938565b60006001600160a01b0382166113e65760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610938565b600354600090815b81811015611444576003818154811061140957611409613194565b6000918252602090912001546001600160a01b038681169116141561143457611431836130ad565b92505b61143d816130ad565b90506113ee565b50909392505050565b6000546001600160a01b031633146114775760405162461bcd60e51b815260040161093890612f19565b611481600061246c565b565b6000546001600160a01b031633146114ad5760405162461bcd60e51b815260040161093890612f19565b6015805460ff60b81b198116600160b81b9182900460ff1615909102179055565b6000546001600160a01b031633146114f85760405162461bcd60e51b815260040161093890612f19565b6015805460ff60a01b198116600160a01b9182900460ff1615909102179055565b601554600160b81b900460ff1615801561153c5750601554600160b01b900460ff165b6115795760405162461bcd60e51b815260206004820152600e60248201526d14149154d0531157d0d313d4d15160921b6044820152606401610938565b600281111561159a5760405162461bcd60e51b815260040161093890612f89565b346115ad82670214e8348c4f0000612fce565b11156115cb5760405162461bcd60e51b815260040161093890612fed565b61029b816115d860035490565b6115e29190613017565b11156116005760405162461bcd60e51b81526004016109389061302f565b3360009081526018602052604090205460029061161e908390613017565b111561163c5760405162461bcd60e51b81526004016109389061305f565b6116468383611f67565b6116625760405162461bcd60e51b815260040161093890613085565b3360009081526018602052604081208054839290611681908490613017565b90915550600090505b81811015610c9b57600061169d60035490565b90506116a93382611f8b565b50806116b4816130ad565b91505061168a565b606060006116c98361137b565b905060008167ffffffffffffffff8111156116e6576116e6612c33565b60405190808252806020026020018201604052801561170f578160200160208202803683370190505b50905060005b82811015611756576117278582610f6d565b82828151811061173957611739613194565b60209081029190910101528061174e816130ad565b915050611715565b509392505050565b6060600280546109bd90612f4e565b6001600160a01b0382163314156117c65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610938565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61183d33308361220b565b6000818152601c602090815260408083208390558051808201825284815242818401908152858552601a84528285209151825551600190910155601b909152902080546001600160a01b0319163317905550565b601554600160a81b900460ff161580156118b45750601554600160a01b900460ff165b6118f15760405162461bcd60e51b815260206004820152600e60248201526d14149154d0531157d0d313d4d15160921b6044820152606401610938565b60028111156119125760405162461bcd60e51b815260040161093890612f89565b3461192582670138a388a43c0000612fce565b11156119435760405162461bcd60e51b815260040161093890612fed565b611a0b8161195060035490565b61195a9190613017565b11156119785760405162461bcd60e51b81526004016109389061302f565b33600090815260166020526040902054600290611996908390613017565b11156119b45760405162461bcd60e51b81526004016109389061305f565b6119be8383611f67565b6119da5760405162461bcd60e51b815260040161093890613085565b33600090815260166020526040812080548392906119f9908490613017565b90915550600090505b81811015610c9b576000611a1560035490565b9050611a213382611f8b565b5080611a2c816130ad565b915050611a02565b611a3e3383612121565b611a5a5760405162461bcd60e51b8152600401610938906130c8565b610c9b848484846124bc565b6060611a7182611f1d565b611ad55760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610938565b6008611ae0836124ef565b604051602001611af19291906131f0565b6040516020818303038152906040529050919050565b6000546001600160a01b03163314611b315760405162461bcd60e51b815260040161093890612f19565b611a0b81611b3e60035490565b611b489190613017565b1115611b815760405162461bcd60e51b815260206004820152600860248201526713505617d352539560c21b6044820152606401610938565b603581600654611b919190613017565b1115611bca5760405162461bcd60e51b81526020600482015260086024820152674e4f5f474946545360c01b6044820152606401610938565b8060066000828254611bdc9190613017565b90915550600090505b81811015610db2576000611bf860035490565b9050611c0484826125ed565b5080611c0f816130ad565b915050611be5565b601554600160a81b900460ff16611c5e5760405162461bcd60e51b815260206004820152600b60248201526a14d0531157d0d313d4d15160aa1b6044820152606401610938565b601554600160a01b900460ff1615611ca75760405162461bcd60e51b815260206004820152600c60248201526b4f4e4c595f50524553414c4560a01b6044820152606401610938565b6002811115611cc85760405162461bcd60e51b815260040161093890612f89565b34611cdb82670138a388a43c0000612fce565b1115611cf95760405162461bcd60e51b815260040161093890612fed565b611a0b81611d0660035490565b611d109190613017565b1115611d2e5760405162461bcd60e51b81526004016109389061302f565b33600090815260176020526040902054600290611d4c908390613017565b1115611d6a5760405162461bcd60e51b81526004016109389061305f565b611d748383611f67565b611d905760405162461bcd60e51b815260040161093890613085565b3360009081526017602052604081208054839290611daf908490613017565b90915550600090505b81811015610c9b576000611dcb60035490565b9050611dd73382611f8b565b5080611de2816130ad565b915050611db8565b6000546001600160a01b03163314611e145760405162461bcd60e51b815260040161093890612f19565b6015805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6000546001600160a01b03163314611e5f5760405162461bcd60e51b815260040161093890612f19565b6001600160a01b038116611ec45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610938565b61122e8161246c565b60006001600160e01b031982166380ac58cd60e01b1480611efe57506001600160e01b03198216635b5e139f60e01b145b8061090857506301ffc9a760e01b6001600160e01b0319831614610908565b60035460009082108015610908575060006001600160a01b031660038381548110611f4a57611f4a613194565b6000918252602090912001546001600160a01b0316141592915050565b6000611f73838361260b565b6015546001600160a01b039182169116149392505050565b6001600160a01b038216611fe15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610938565b611fea81611f1d565b156120375760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610938565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906120e8826112ef565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061212c82611f1d565b61218d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610938565b6000612198836112ef565b9050806001600160a01b0316846001600160a01b031614806121d35750836001600160a01b03166121c884610a40565b6001600160a01b0316145b8061220357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661221e826112ef565b6001600160a01b0316146122865760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610938565b6001600160a01b0382166122e85760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610938565b6122f36000826120b3565b816003828154811061230757612307613194565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6000818152601b60205260409020546001600160a01b031633146123b85760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610938565b6000908152601b6020526040902080546001600160a01b0319169055565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612423576040519150601f19603f3d011682016040523d82523d6000602084013e612428565b606091505b5050905080610db25760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610938565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6124c784848461220b565b6124d384848484612627565b610c9b5760405162461bcd60e51b815260040161093890613297565b6060816125135750506040805180820190915260018152600360fc1b602082015290565b8160005b811561253d5780612527816130ad565b91506125369050600a836131c0565b9150612517565b60008167ffffffffffffffff81111561255857612558612c33565b6040519080825280601f01601f191660200182016040528015612582576020820181803683370190505b5090505b841561220357612597600183613119565b91506125a4600a866132e9565b6125af906030613017565b60f81b8183815181106125c4576125c4613194565b60200101906001600160f81b031916908160001a9053506125e6600a866131c0565b9450612586565b612607828260405180602001604052806000815250612734565b5050565b600080600061261a8585612767565b91509150611756816127d7565b60006001600160a01b0384163b1561272957604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061266b9033908990889088906004016132fd565b602060405180830381600087803b15801561268557600080fd5b505af19250505080156126b5575060408051601f3d908101601f191682019092526126b29181019061333a565b60015b61270f573d8080156126e3576040519150601f19603f3d011682016040523d82523d6000602084013e6126e8565b606091505b5080516127075760405162461bcd60e51b815260040161093890613297565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612203565b506001949350505050565b61273e8383611f8b565b61274b6000848484612627565b610db25760405162461bcd60e51b815260040161093890613297565b60008082516041141561279e5760208301516040840151606085015160001a61279287828585612992565b945094505050506127d0565b8251604014156127c857602083015160408401516127bd868383612a7f565b9350935050506127d0565b506000905060025b9250929050565b60008160048111156127eb576127eb613357565b14156127f45750565b600181600481111561280857612808613357565b14156128565760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610938565b600281600481111561286a5761286a613357565b14156128b85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610938565b60038160048111156128cc576128cc613357565b14156129255760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610938565b600481600481111561293957612939613357565b141561122e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610938565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156129c95750600090506003612a76565b8460ff16601b141580156129e157508460ff16601c14155b156129f25750600090506004612a76565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a46573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a6f57600060019250925050612a76565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01612aa087828885612992565b935093505050935093915050565b828054612aba90612f4e565b90600052602060002090601f016020900481019282612adc5760008555612b22565b82601f10612af55782800160ff19823516178555612b22565b82800160010185558215612b22579182015b82811115612b22578235825591602001919060010190612b07565b506112b59291505b808211156112b55760008155600101612b2a565b6001600160e01b03198116811461122e57600080fd5b600060208284031215612b6657600080fd5b8135612b7181612b3e565b9392505050565b80356001600160a01b0381168114612b8f57600080fd5b919050565b600060208284031215612ba657600080fd5b612b7182612b78565b60005b83811015612bca578181015183820152602001612bb2565b83811115610c9b5750506000910152565b60008151808452612bf3816020860160208601612baf565b601f01601f19169290920160200192915050565b602081526000612b716020830184612bdb565b600060208284031215612c2c57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612c5a57600080fd5b813567ffffffffffffffff80821115612c7557612c75612c33565b604051601f8301601f19908116603f01168101908282118183101715612c9d57612c9d612c33565b81604052838152866020858801011115612cb657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215612ceb57600080fd5b83359250602084013567ffffffffffffffff811115612d0957600080fd5b612d1586828701612c49565b925050604084013590509250925092565b60008060408385031215612d3957600080fd5b612d4283612b78565b946020939093013593505050565b60008060208385031215612d6357600080fd5b823567ffffffffffffffff80821115612d7b57600080fd5b818501915085601f830112612d8f57600080fd5b813581811115612d9e57600080fd5b866020828501011115612db057600080fd5b60209290920196919550909350505050565b600080600060608486031215612dd757600080fd5b612de084612b78565b9250612dee60208501612b78565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b81811015612e3657835183529284019291840191600101612e1a565b50909695505050505050565b60008060408385031215612e5557600080fd5b612e5e83612b78565b915060208301358015158114612e7357600080fd5b809150509250929050565b60008060008060808587031215612e9457600080fd5b612e9d85612b78565b9350612eab60208601612b78565b925060408501359150606085013567ffffffffffffffff811115612ece57600080fd5b612eda87828801612c49565b91505092959194509250565b60008060408385031215612ef957600080fd5b612f0283612b78565b9150612f1060208401612b78565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612f6257607f821691505b60208210811415612f8357634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260159082015274115610d1515117d4d0d6549057d4115497d3525395605a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612fe857612fe8612fb8565b500290565b60208082526010908201526f0929ca6aa8c8c9286928a9ca8be8aa8960831b604082015260600190565b6000821982111561302a5761302a612fb8565b500190565b6020808252601690820152754558434545445f4d41585f53414c455f535550504c5960501b604082015260600190565b6020808252600c908201526b4558434545445f414c4c4f4360a01b604082015260600190565b6020808252600e908201526d1393d7d112549150d517d352539560921b604082015260600190565b60006000198214156130c1576130c1612fb8565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008282101561312b5761312b612fb8565b500390565b60006020828403121561314257600080fd5b5051919050565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826131cf576131cf6131aa565b500490565b600081516131e6818560208601612baf565b9290920192915050565b600080845481600182811c91508083168061320c57607f831692505b602080841082141561322c57634e487b7160e01b86526022600452602486fd5b81801561324057600181146132515761327e565b60ff1986168952848901965061327e565b60008b81526020902060005b868110156132765781548b82015290850190830161325d565b505084890196505b50505050505061328e81856131d4565b95945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826132f8576132f86131aa565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061333090830184612bdb565b9695505050505050565b60006020828403121561334c57600080fd5b8151612b7181612b3e565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220672fc76424cd92c353e6de815b9bcc53701f37d5371e3774b462983f8ad2f3fe64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a68747470733a2f2f6d65746173637972612e636f6d2f6170692f000000000000
-----Decoded View---------------
Arg [0] : baseUri (string): https://metascyra.com/api/
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001a
Arg [2] : 68747470733a2f2f6d65746173637972612e636f6d2f6170692f000000000000
Deployed Bytecode Sourcemap
44494:10243:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31622:301;;;;;;;;;;-1:-1:-1;31622:301:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;31622:301:0;;;;;;;;53509:118;;;;;;;;;;-1:-1:-1;53509:118:0;;;;;:::i;:::-;;:::i;:::-;;52960:86;;;;;;;;;;;;;:::i;20786:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21599:221::-;;;;;;;;;;-1:-1:-1;21599:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2083:32:1;;;2065:51;;2053:2;2038:18;21599:221:0;1919:203:1;49777:858:0;;;;;;:::i;:::-;;:::i;21121:412::-;;;;;;;;;;-1:-1:-1;21121:412:0;;;;;:::i;:::-;;:::i;45084:49::-;;;;;;;;;;;;45122:11;45084:49;;;;;3848:25:1;;;3836:2;3821:18;45084:49:0;3702:177:1;45178:24:0;;;;;;;;;;;;;:::i;53396:104::-;;;;;;;;;;-1:-1:-1;53396:104:0;;;;;:::i;:::-;;:::i;32861:110::-;;;;;;;;;;-1:-1:-1;32949:7:0;:14;32861:110;;45142:27;;;;;;;;;;;;;;;;22491:339;;;;;;;;;;-1:-1:-1;22491:339:0;;;;;:::i;:::-;;:::i;47796:322::-;;;;;;;;;;-1:-1:-1;47796:322:0;;;;;:::i;:::-;;:::i;32007:778::-;;;;;;;;;;-1:-1:-1;32007:778:0;;;;;:::i;:::-;;:::i;51512:670::-;;;;;;;;;;;;;:::i;22901:185::-;;;;;;;;;;-1:-1:-1;22901:185:0;;;;;:::i;:::-;;:::i;46693:46::-;;;;;;;;;;-1:-1:-1;46693:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;33048:292;;;;;;;;;;-1:-1:-1;33048:292:0;;;;;:::i;:::-;;:::i;44956:56::-;;;;;;;;;;;;45011:1;44956:56;;53286:98;;;;;;;;;;-1:-1:-1;53286:98:0;;;;;:::i;:::-;;:::i;45021:56::-;;;;;;;;;;;;45067:10;45021:56;;20480:239;;;;;;;;;;-1:-1:-1;20480:239:0;;;;;:::i;:::-;;:::i;20000:418::-;;;;;;;;;;-1:-1:-1;20000:418:0;;;;;:::i;:::-;;:::i;37078:94::-;;;;;;;;;;;;;:::i;44746:47::-;;;;;;;;;;;;44790:3;44746:47;;53179:99;;;;;;;;;;;;;:::i;52856:95::-;;;;;;;;;;;;;:::i;50643:860::-;;;;;;:::i;:::-;;:::i;46318:23::-;;;;;;;;;;-1:-1:-1;46318:23:0;;;;-1:-1:-1;;;46318:23:0;;;;;;46224;;;;;;;;;;-1:-1:-1;46224:23:0;;;;-1:-1:-1;;;46224:23:0;;;;;;54396:336;;;;;;;;;;-1:-1:-1;54396:336:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;36427:87::-;;;;;;;;;;-1:-1:-1;36473:7:0;36500:6;-1:-1:-1;;;;;36500:6:0;36427:87;;20955:104;;;;;;;;;;;;;:::i;21892:295::-;;;;;;;;;;-1:-1:-1;21892:295:0;;;;;:::i;:::-;;:::i;47541:247::-;;;;;;;;;;-1:-1:-1;47541:247:0;;;;;:::i;:::-;;:::i;46281:30::-;;;;;;;;;;-1:-1:-1;46281:30:0;;;;-1:-1:-1;;;46281:30:0;;;;;;48945:823;;;;;;:::i;:::-;;:::i;23157:328::-;;;;;;;;;;-1:-1:-1;23157:328:0;;;;;:::i;:::-;;:::i;44699:40::-;;;;;;;;;;;;44735:4;44699:40;;54125:262;;;;;;;;;;-1:-1:-1;54125:262:0;;;;;:::i;:::-;;:::i;52378:435::-;;;;;;;;;;-1:-1:-1;52378:435:0;;;;;:::i;:::-;;:::i;46595:39::-;;;;;;;;;;-1:-1:-1;46595:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;6519:25:1;;;6575:2;6560:18;;6553:34;;;;6492:18;46595:39:0;6345:248:1;48126:811:0;;;;;;:::i;:::-;;:::i;46254:20::-;;;;;;;;;;-1:-1:-1;46254:20:0;;;;-1:-1:-1;;;46254:20:0;;;;;;53054:116;;;;;;;;;;;;;:::i;22258:164::-;;;;;;;;;;-1:-1:-1;22258:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;22379:25:0;;;22355:4;22379:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22258:164;37327:192;;;;;;;;;;-1:-1:-1;37327:192:0;;;;;:::i;:::-;;:::i;44802:39::-;;;;;;;;;;;;44839:2;44802:39;;31622:301;31770:4;-1:-1:-1;;;;;;31812:50:0;;-1:-1:-1;;;31812:50:0;;:103;;;31879:36;31903:11;31879:23;:36::i;:::-;31792:123;31622:301;-1:-1:-1;;31622:301:0:o;53509:118::-;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;;;;;;;;;53589:13:::1;:30:::0;;-1:-1:-1;;;;;;53589:30:0::1;-1:-1:-1::0;;;;;53589:30:0;;;::::1;::::0;;;::::1;::::0;;53509:118::o;52960:86::-;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;53030:8:::1;::::0;;-1:-1:-1;;;;53018:20:0;::::1;-1:-1:-1::0;;;53030:8:0;;;::::1;;;53029:9;53018:20:::0;;::::1;;::::0;;52960:86::o;20786:100::-;20840:13;20873:5;20866:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20786:100;:::o;21599:221::-;21675:7;21703:16;21711:7;21703;:16::i;:::-;21695:73;;;;-1:-1:-1;;;21695:73:0;;7811:2:1;21695:73:0;;;7793:21:1;7850:2;7830:18;;;7823:30;7889:34;7869:18;;;7862:62;-1:-1:-1;;;7940:18:1;;;7933:42;7992:19;;21695:73:0;7609:408:1;21695:73:0;-1:-1:-1;21788:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;21788:24:0;;21599:221::o;49777:858::-;49894:11;;-1:-1:-1;;;49894:11:0;;;;49886:35;;;;-1:-1:-1;;;49886:35:0;;8224:2:1;49886:35:0;;;8206:21:1;8263:2;8243:18;;;8236:30;-1:-1:-1;;;8282:18:1;;;8275:41;8333:18;;49886:35:0;8022:335:1;49886:35:0;49941:18;;-1:-1:-1;;;49941:18:0;;;;49940:19;49932:44;;;;-1:-1:-1;;;49932:44:0;;8564:2:1;49932:44:0;;;8546:21:1;8603:2;8583:18;;;8576:30;-1:-1:-1;;;8622:18:1;;;8615:42;8674:18;;49932:44:0;8362:336:1;49932:44:0;44891:1;49995:13;:31;;49987:65;;;;-1:-1:-1;;;49987:65:0;;;;;;;:::i;:::-;50110:9;50071:35;50093:13;45067:10;50071:35;:::i;:::-;:48;;50063:77;;;;-1:-1:-1;;;50063:77:0;;;;;;;:::i;:::-;44790:3;50175:13;50159;32949:7;:14;;32861:110;50159:13;:29;;;;:::i;:::-;:50;;50151:85;;;;-1:-1:-1;;;50151:85:0;;;;;;;:::i;:::-;50272:10;50255:28;;;;:16;:28;;;;;;44948:1;;50255:44;;50286:13;;50255:44;:::i;:::-;:68;;50247:93;;;;-1:-1:-1;;;50247:93:0;;;;;;;:::i;:::-;50359:35;50378:4;50384:9;50359:18;:35::i;:::-;50351:62;;;;-1:-1:-1;;;50351:62:0;;;;;;;:::i;:::-;50443:10;50426:28;;;;:16;:28;;;;;:45;;50458:13;;50426:28;:45;;50458:13;;50426:45;:::i;:::-;;;;-1:-1:-1;50488:9:0;;-1:-1:-1;50484:144:0;50507:13;50503:1;:17;50484:144;;;50542:14;50559:13;32949:7;:14;;32861:110;50559:13;50542:30;;50586;50593:10;50605:9;50586:5;:30::i;:::-;-1:-1:-1;50522:3:0;;;;:::i;:::-;;;;50484:144;;;;49777:858;;;:::o;21121:412::-;21202:13;21218:24;21234:7;21218:15;:24::i;:::-;21202:40;;21267:5;-1:-1:-1;;;;;21261:11:0;:2;-1:-1:-1;;;;;21261:11:0;;;21253:57;;;;-1:-1:-1;;;21253:57:0;;11213:2:1;21253:57:0;;;11195:21:1;11252:2;11232:18;;;11225:30;11291:34;11271:18;;;11264:62;-1:-1:-1;;;11342:18:1;;;11335:31;11383:19;;21253:57:0;11011:397:1;21253:57:0;17550:10;-1:-1:-1;;;;;21345:21:0;;;;:62;;-1:-1:-1;21370:37:0;21387:5;17550:10;22258:164;:::i;21370:37::-;21323:168;;;;-1:-1:-1;;;21323:168:0;;11615:2:1;21323:168:0;;;11597:21:1;11654:2;11634:18;;;11627:30;11693:34;11673:18;;;11666:62;11764:26;11744:18;;;11737:54;11808:19;;21323:168:0;11413:420:1;21323:168:0;21504:21;21513:2;21517:7;21504:8;:21::i;:::-;21191:342;21121:412;;:::o;45178:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53396:104::-;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;53475:17:::1;:10;53488:4:::0;;53475:17:::1;:::i;22491:339::-:0;22686:41;17550:10;22719:7;22686:18;:41::i;:::-;22678:103;;;;-1:-1:-1;;;22678:103:0;;;;;;;:::i;:::-;22794:28;22804:4;22810:2;22814:7;22794:9;:28::i;47796:322::-;47857:19;;;;:9;:19;;;;;;-1:-1:-1;;;;;47857:19:0;47880:10;47857:33;47849:59;;;;-1:-1:-1;;;47849:59:0;;12458:2:1;47849:59:0;;;12440:21:1;12497:2;12477:18;;;12470:30;-1:-1:-1;;;12516:18:1;;;12509:43;12569:18;;47849:59:0;12256:337:1;47849:59:0;47963:16;;;;:6;:16;;;;;:26;;;47945:44;;:15;:44;:::i;:::-;47919:21;;;;:11;:21;;;;;:71;;:21;;;:71;;;;;:::i;:::-;;;;-1:-1:-1;48001:18:0;;-1:-1:-1;48010:8:0;48001;:18::i;:::-;48030:46;48048:4;48055:10;48067:8;48030:9;:46::i;:::-;48094:16;;;;:6;:16;;;;;48087:23;;;;;;47796:322::o;32007:778::-;32212:21;;-1:-1:-1;;;32212:21:0;;-1:-1:-1;;;;;2083:32:1;;32212:21:0;;;2065:51:1;32149:15:0;;32212:4;;:14;;2038:18:1;;32212:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32204:5;:29;32182:122;;;;-1:-1:-1;;;32182:122:0;;;;;;;:::i;:::-;32358:7;:14;32317:13;;;32383:274;32403:6;32399:1;:10;32383:274;;;32444:7;32452:1;32444:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;32435:19:0;;;32444:10;;32435:19;32431:215;;;32488:5;32479;:14;32475:155;;;32596:1;-1:-1:-1;32589:8:0;;-1:-1:-1;;32589:8:0;32475:155;32623:7;;;:::i;:::-;;;32475:155;32411:3;;;:::i;:::-;;;32383:274;;;-1:-1:-1;32669:12:0;;-1:-1:-1;32669:12:0;;-1:-1:-1;32716:61:0;;-1:-1:-1;;;32716:61:0;;;;;;;:::i;51512:670::-;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;51621:6:::1;::::0;51577:21:::1;::::0;51611:37:::1;::::0;-1:-1:-1;;;;;51621:6:0::1;51644:3;51629:12;51577:21:::0;51639:2:::1;51629:12;:::i;:::-;:18;;;;:::i;:::-;51611:9;:37::i;:::-;51669:6;::::0;51659:37:::1;::::0;-1:-1:-1;;;;;51669:6:0::1;51692:3;51677:12;:7:::0;51687:2:::1;51677:12;:::i;51659:37::-;51717:6;::::0;51707:37:::1;::::0;-1:-1:-1;;;;;51717:6:0::1;51740:3;51725:12;:7:::0;51735:2:::1;51725:12;:::i;51707:37::-;51765:6;::::0;51755:36:::1;::::0;-1:-1:-1;;;;;51765:6:0::1;51787:3;51773:11;:7:::0;51783:1:::1;51773:11;:::i;51755:36::-;51812:6;::::0;51802:36:::1;::::0;-1:-1:-1;;;;;51812:6:0::1;51834:3;51820:11;:7:::0;51830:1:::1;51820:11;:::i;51802:36::-;51859:6;::::0;51849:36:::1;::::0;-1:-1:-1;;;;;51859:6:0::1;51881:3;51867:11;:7:::0;51859:6;51867:11:::1;:::i;51849:36::-;51906:6;::::0;51896:38:::1;::::0;-1:-1:-1;;;;;51906:6:0::1;51929:4;51914:12;:7:::0;51924:2:::1;51914:12;:::i;51896:38::-;51955:6;::::0;51945:36:::1;::::0;-1:-1:-1;;;;;51955:6:0::1;51977:3;51963:11;:7:::0;51973:1:::1;51963:11;:::i;51945:36::-;52002:6;::::0;51992:37:::1;::::0;-1:-1:-1;;;;;52002:6:0::1;52024:4;52010:11;:7:::0;52020:1:::1;52010:11;:::i;51992:37::-;52050:7;::::0;52040:37:::1;::::0;-1:-1:-1;;;;;52050:7:0::1;52073:3;52059:11;:7:::0;52069:1:::1;52059:11;:::i;52040:37::-;52098:7;::::0;52088:38:::1;::::0;-1:-1:-1;;;;;52098:7:0::1;52122:3;52107:12;:7:::0;52117:2:::1;52107:12;:::i;52088:38::-;52147:7;::::0;52137:37:::1;::::0;-1:-1:-1;;;;;52147:7:0::1;52170:3;52156:11;:7:::0;52166:1:::1;52156:11;:::i;52137:37::-;51551:631;51512:670::o:0;22901:185::-;23039:39;23056:4;23062:2;23066:7;23039:39;;;;;;;;;;;;:16;:39::i;33048:292::-;33223:7;:14;33168:7;;33215:22;;33193:116;;;;-1:-1:-1;;;33193:116:0;;13920:2:1;33193:116:0;;;13902:21:1;13959:2;13939:18;;;13932:30;13998:34;13978:18;;;13971:62;-1:-1:-1;;;14049:18:1;;;14042:42;14101:19;;33193:116:0;13718:408:1;33193:116:0;-1:-1:-1;33327:5:0;33048:292::o;53286:98::-;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;53357:19:::1;:13;53373:3:::0;;53357:19:::1;:::i;20480:239::-:0;20552:7;20572:13;20588:7;20596;20588:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;20588:16:0;;-1:-1:-1;20623:19:0;20615:73;;;;-1:-1:-1;;;20615:73:0;;14333:2:1;20615:73:0;;;14315:21:1;14372:2;14352:18;;;14345:30;14411:34;14391:18;;;14384:62;-1:-1:-1;;;14462:18:1;;;14455:39;14511:19;;20615:73:0;14131:405:1;20000:418:0;20072:7;-1:-1:-1;;;;;20100:19:0;;20092:74;;;;-1:-1:-1;;;20092:74:0;;14743:2:1;20092:74:0;;;14725:21:1;14782:2;14762:18;;;14755:30;14821:34;14801:18;;;14794:62;-1:-1:-1;;;14872:18:1;;;14865:40;14922:19;;20092:74:0;14541:406:1;20092:74:0;20218:7;:14;20179:10;;;20243:119;20264:6;20260:1;:10;20243:119;;;20303:7;20311:1;20303:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;20294:19:0;;;20303:10;;20294:19;20290:61;;;20330:7;;;:::i;:::-;;;20290:61;20272:3;;;:::i;:::-;;;20243:119;;;-1:-1:-1;20405:5:0;;20000:418;-1:-1:-1;;;20000:418:0:o;37078:94::-;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;37143:21:::1;37161:1;37143:9;:21::i;:::-;37078:94::o:0;53179:99::-;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;53259:11:::1;::::0;;-1:-1:-1;;;;53244:26:0;::::1;-1:-1:-1::0;;;53259:11:0;;;::::1;;;53258:12;53244:26:::0;;::::1;;::::0;;53179:99::o;52856:95::-;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;52932:11:::1;::::0;;-1:-1:-1;;;;52917:26:0;::::1;-1:-1:-1::0;;;52932:11:0;;;::::1;;;52931:12;52917:26:::0;;::::1;;::::0;;52856:95::o;50643:860::-;50768:11;;-1:-1:-1;;;50768:11:0;;;;50767:12;:34;;;;-1:-1:-1;50783:18:0;;-1:-1:-1;;;50783:18:0;;;;50767:34;50759:61;;;;-1:-1:-1;;;50759:61:0;;15154:2:1;50759:61:0;;;15136:21:1;15193:2;15173:18;;;15166:30;-1:-1:-1;;;15212:18:1;;;15205:44;15266:18;;50759:61:0;14952:338:1;50759:61:0;44891:1;50839:13;:31;;50831:65;;;;-1:-1:-1;;;50831:65:0;;;;;;;:::i;:::-;50954:9;50915:35;50937:13;45067:10;50915:35;:::i;:::-;:48;;50907:77;;;;-1:-1:-1;;;50907:77:0;;;;;;;:::i;:::-;44790:3;51019:13;51003;32949:7;:14;;32861:110;51003:13;:29;;;;:::i;:::-;:50;;50995:85;;;;-1:-1:-1;;;50995:85:0;;;;;;;:::i;:::-;51123:10;51099:35;;;;:23;:35;;;;;;45011:1;;51099:51;;51137:13;;51099:51;:::i;:::-;:83;;51091:108;;;;-1:-1:-1;;;51091:108:0;;;;;;;:::i;:::-;51218:35;51237:4;51243:9;51218:18;:35::i;:::-;51210:62;;;;-1:-1:-1;;;51210:62:0;;;;;;;:::i;:::-;51309:10;51285:35;;;;:23;:35;;;;;:52;;51324:13;;51285:35;:52;;51324:13;;51285:52;:::i;:::-;;;;-1:-1:-1;51355:9:0;;-1:-1:-1;51350:146:0;51374:13;51370:1;:17;51350:146;;;51409:14;51426:13;32949:7;:14;;32861:110;51426:13;51409:30;;51454;51461:10;51473:9;51454:5;:30::i;:::-;-1:-1:-1;51389:3:0;;;;:::i;:::-;;;;51350:146;;54396:336;54455:16;54484:18;54505:15;54515:4;54505:9;:15::i;:::-;54484:36;;54531:25;54573:10;54559:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54559:25:0;;54531:53;;54599:9;54595:104;54614:10;54610:1;:14;54595:104;;;54659:28;54679:4;54685:1;54659:19;:28::i;:::-;54645:8;54654:1;54645:11;;;;;;;;:::i;:::-;;;;;;;;;;:42;54626:3;;;;:::i;:::-;;;;54595:104;;;-1:-1:-1;54716:8:0;54396:336;-1:-1:-1;;;54396:336:0:o;20955:104::-;21011:13;21044:7;21037:14;;;;;:::i;21892:295::-;-1:-1:-1;;;;;21995:24:0;;17550:10;21995:24;;21987:62;;;;-1:-1:-1;;;21987:62:0;;15497:2:1;21987:62:0;;;15479:21:1;15536:2;15516:18;;;15509:30;15575:27;15555:18;;;15548:55;15620:18;;21987:62:0;15295:349:1;21987:62:0;17550:10;22062:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22062:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22062:53:0;;;;;;;;;;22131:48;;540:41:1;;;22062:42:0;;17550:10;22131:48;;513:18:1;22131:48:0;;;;;;;21892:295;;:::o;47541:247::-;47592:46;47602:10;47622:4;47629:8;47592:9;:46::i;:::-;47673:1;47649:21;;;:11;:21;;;;;;;;:25;;;47704:32;;;;;;;;;;47720:15;47704:32;;;;;;47685:16;;;:6;:16;;;;;:51;;;;;;;;;;53739:9;:19;;;;;:28;;-1:-1:-1;;;;;;53739:28:0;47759:10;53739:28;;;51551:631:::1;51512:670::o:0;48945:823::-;49063:8;;-1:-1:-1;;;49063:8:0;;;;49062:9;:24;;;;-1:-1:-1;49075:11:0;;-1:-1:-1;;;49075:11:0;;;;49062:24;49054:51;;;;-1:-1:-1;;;49054:51:0;;15154:2:1;49054:51:0;;;15136:21:1;15193:2;15173:18;;;15166:30;-1:-1:-1;;;15212:18:1;;;15205:44;15266:18;;49054:51:0;14952:338:1;49054:51:0;44891:1;49124:13;:31;;49116:65;;;;-1:-1:-1;;;49116:65:0;;;;;;;:::i;:::-;49231:9;49200:27;49214:13;45122:11;49200:27;:::i;:::-;:40;;49192:69;;;;-1:-1:-1;;;49192:69:0;;;;;;;:::i;:::-;44735:4;49296:13;49280;32949:7;:14;;32861:110;49280:13;:29;;;;:::i;:::-;:42;;49272:77;;;;-1:-1:-1;;;49272:77:0;;;;;;;:::i;:::-;49390:10;49368:33;;;;:21;:33;;;;;;45011:1;;49368:49;;49404:13;;49368:49;:::i;:::-;:81;;49360:106;;;;-1:-1:-1;;;49360:106:0;;;;;;;:::i;:::-;49485:35;49504:4;49510:9;49485:18;:35::i;:::-;49477:62;;;;-1:-1:-1;;;49477:62:0;;;;;;;:::i;:::-;49574:10;49552:33;;;;:21;:33;;;;;:50;;49589:13;;49552:33;:50;;49589:13;;49552:50;:::i;:::-;;;;-1:-1:-1;49620:9:0;;-1:-1:-1;49615:146:0;49639:13;49635:1;:17;49615:146;;;49674:14;49691:13;32949:7;:14;;32861:110;49691:13;49674:30;;49719;49726:10;49738:9;49719:5;:30::i;:::-;-1:-1:-1;49654:3:0;;;;:::i;:::-;;;;49615:146;;23157:328;23332:41;17550:10;23365:7;23332:18;:41::i;:::-;23324:103;;;;-1:-1:-1;;;23324:103:0;;;;;;;:::i;:::-;23438:39;23452:4;23458:2;23462:7;23471:5;23438:13;:39::i;54125:262::-;54200:13;54234:16;54242:7;54234;:16::i;:::-;54226:76;;;;-1:-1:-1;;;54226:76:0;;15851:2:1;54226:76:0;;;15833:21:1;15890:2;15870:18;;;15863:30;15929:34;15909:18;;;15902:62;-1:-1:-1;;;15980:18:1;;;15973:45;16035:19;;54226:76:0;15649:411:1;54226:76:0;54344:13;54359:18;:7;:16;:18::i;:::-;54327:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54313:66;;54125:262;;;:::o;52378:435::-;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;44735:4:::1;52483:14;52467:13;32949:7:::0;:14;;32861:110;52467:13:::1;:30;;;;:::i;:::-;:43;;52459:64;;;::::0;-1:-1:-1;;;52459:64:0;;17762:2:1;52459:64:0::1;::::0;::::1;17744:21:1::0;17801:1;17781:18;;;17774:29;-1:-1:-1;;;17819:18:1;;;17812:38;17867:18;;52459:64:0::1;17560:331:1::0;52459:64:0::1;44839:2;52557:14;52542:12;;:29;;;;:::i;:::-;:43;;52534:64;;;::::0;-1:-1:-1;;;52534:64:0;;18098:2:1;52534:64:0::1;::::0;::::1;18080:21:1::0;18137:1;18117:18;;;18110:29;-1:-1:-1;;;18155:18:1;;;18148:38;18203:18;;52534:64:0::1;17896:331:1::0;52534:64:0::1;52635:14;52619:12;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;52667:9:0::1;::::0;-1:-1:-1;52662:144:0::1;52686:14;52682:1;:18;52662:144;;;52722:14;52739:13;32949:7:::0;:14;;32861:110;52739:13:::1;52722:30;;52767:27;52778:3;52783:9;52767;:27::i;:::-;-1:-1:-1::0;52702:3:0;::::1;::::0;::::1;:::i;:::-;;;;52662:144;;48126:811:::0;48236:8;;-1:-1:-1;;;48236:8:0;;;;48228:32;;;;-1:-1:-1;;;48228:32:0;;8224:2:1;48228:32:0;;;8206:21:1;8263:2;8243:18;;;8236:30;-1:-1:-1;;;8282:18:1;;;8275:41;8333:18;;48228:32:0;8022:335:1;48228:32:0;48280:11;;-1:-1:-1;;;48280:11:0;;;;48279:12;48271:37;;;;-1:-1:-1;;;48271:37:0;;8564:2:1;48271:37:0;;;8546:21:1;8603:2;8583:18;;;8576:30;-1:-1:-1;;;8622:18:1;;;8615:42;8674:18;;48271:37:0;8362:336:1;48271:37:0;44891:1;48327:13;:31;;48319:65;;;;-1:-1:-1;;;48319:65:0;;;;;;;:::i;:::-;48434:9;48403:27;48417:13;45122:11;48403:27;:::i;:::-;:40;;48395:69;;;;-1:-1:-1;;;48395:69:0;;;;;;;:::i;:::-;44735:4;48499:13;48483;32949:7;:14;;32861:110;48483:13;:29;;;;:::i;:::-;:42;;48475:77;;;;-1:-1:-1;;;48475:77:0;;;;;;;:::i;:::-;48581:10;48571:21;;;;:9;:21;;;;;;44948:1;;48571:37;;48595:13;;48571:37;:::i;:::-;:61;;48563:86;;;;-1:-1:-1;;;48563:86:0;;;;;;;:::i;:::-;48668:35;48687:4;48693:9;48668:18;:35::i;:::-;48660:62;;;;-1:-1:-1;;;48660:62:0;;;;;;;:::i;:::-;48745:10;48735:21;;;;:9;:21;;;;;:38;;48760:13;;48735:21;:38;;48760:13;;48735:38;:::i;:::-;;;;-1:-1:-1;48790:9:0;;-1:-1:-1;48786:144:0;48809:13;48805:1;:17;48786:144;;;48844:14;48861:13;32949:7;:14;;32861:110;48861:13;48844:30;;48888;48895:10;48907:9;48888:5;:30::i;:::-;-1:-1:-1;48824:3:0;;;;:::i;:::-;;;;48786:144;;53054:116;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;53144:18:::1;::::0;;-1:-1:-1;;;;53122:40:0;::::1;-1:-1:-1::0;;;53144:18:0;;;::::1;;;53143:19;53122:40:::0;;::::1;;::::0;;53054:116::o;37327:192::-;36473:7;36500:6;-1:-1:-1;;;;;36500:6:0;17550:10;36647:23;36639:68;;;;-1:-1:-1;;;36639:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37416:22:0;::::1;37408:73;;;::::0;-1:-1:-1;;;37408:73:0;;18434:2:1;37408:73:0::1;::::0;::::1;18416:21:1::0;18473:2;18453:18;;;18446:30;18512:34;18492:18;;;18485:62;-1:-1:-1;;;18563:18:1;;;18556:36;18609:19;;37408:73:0::1;18232:402:1::0;37408:73:0::1;37492:19;37502:8;37492:9;:19::i;19631:305::-:0;19733:4;-1:-1:-1;;;;;;19770:40:0;;-1:-1:-1;;;19770:40:0;;:105;;-1:-1:-1;;;;;;;19827:48:0;;-1:-1:-1;;;19827:48:0;19770:105;:158;;;-1:-1:-1;;;;;;;;;;18597:40:0;;;19892:36;18488:157;24995:155;25094:7;:14;25060:4;;25084:24;;:58;;;;;25140:1;-1:-1:-1;;;;;25112:30:0;:7;25120;25112:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;25112:16:0;:30;;25077:65;24995:155;-1:-1:-1;;24995:155:0:o;53958:159::-;54045:4;54086:23;:4;54099:9;54086:12;:23::i;:::-;54069:13;;-1:-1:-1;;;;;54069:40:0;;;:13;;:40;;53958:159;-1:-1:-1;;;53958:159:0:o;27004:346::-;-1:-1:-1;;;;;27084:16:0;;27076:61;;;;-1:-1:-1;;;27076:61:0;;18841:2:1;27076:61:0;;;18823:21:1;;;18860:18;;;18853:30;18919:34;18899:18;;;18892:62;18971:18;;27076:61:0;18639:356:1;27076:61:0;27157:16;27165:7;27157;:16::i;:::-;27156:17;27148:58;;;;-1:-1:-1;;;27148:58:0;;19202:2:1;27148:58:0;;;19184:21:1;19241:2;19221:18;;;19214:30;19280;19260:18;;;19253:58;19328:18;;27148:58:0;19000:352:1;27148:58:0;27275:7;:16;;;;;;;-1:-1:-1;27275:16:0;;;;;;;-1:-1:-1;;;;;;27275:16:0;-1:-1:-1;;;;;27275:16:0;;;;;;;;27309:33;;27334:7;;-1:-1:-1;27309:33:0;;-1:-1:-1;;27309:33:0;27004:346;;:::o;28884:175::-;28959:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;28959:29:0;-1:-1:-1;;;;;28959:29:0;;;;;;;;:24;;29013;28959;29013:15;:24::i;:::-;-1:-1:-1;;;;;29004:47:0;;;;;;;;;;;28884:175;;:::o;25317:349::-;25410:4;25435:16;25443:7;25435;:16::i;:::-;25427:73;;;;-1:-1:-1;;;25427:73:0;;19559:2:1;25427:73:0;;;19541:21:1;19598:2;19578:18;;;19571:30;19637:34;19617:18;;;19610:62;-1:-1:-1;;;19688:18:1;;;19681:42;19740:19;;25427:73:0;19357:408:1;25427:73:0;25511:13;25527:24;25543:7;25527:15;:24::i;:::-;25511:40;;25581:5;-1:-1:-1;;;;;25570:16:0;:7;-1:-1:-1;;;;;25570:16:0;;:51;;;;25614:7;-1:-1:-1;;;;;25590:31:0;:20;25602:7;25590:11;:20::i;:::-;-1:-1:-1;;;;;25590:31:0;;25570:51;:87;;;-1:-1:-1;;;;;;22379:25:0;;;22355:4;22379:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;25625:32;25562:96;25317:349;-1:-1:-1;;;;25317:349:0:o;28249:517::-;28409:4;-1:-1:-1;;;;;28381:32:0;:24;28397:7;28381:15;:24::i;:::-;-1:-1:-1;;;;;28381:32:0;;28373:86;;;;-1:-1:-1;;;28373:86:0;;19972:2:1;28373:86:0;;;19954:21:1;20011:2;19991:18;;;19984:30;20050:34;20030:18;;;20023:62;-1:-1:-1;;;20101:18:1;;;20094:39;20150:19;;28373:86:0;19770:405:1;28373:86:0;-1:-1:-1;;;;;28478:16:0;;28470:65;;;;-1:-1:-1;;;28470:65:0;;20382:2:1;28470:65:0;;;20364:21:1;20421:2;20401:18;;;20394:30;20460:34;20440:18;;;20433:62;-1:-1:-1;;;20511:18:1;;;20504:34;20555:19;;28470:65:0;20180:400:1;28470:65:0;28652:29;28669:1;28673:7;28652:8;:29::i;:::-;28711:2;28692:7;28700;28692:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;28692:21:0;-1:-1:-1;;;;;28692:21:0;;;;;;28731:27;;28750:7;;28731:27;;;;;;;;;;28692:16;28731:27;28249:517;;;:::o;53783:167::-;53847:19;;;;:9;:19;;;;;;-1:-1:-1;;;;;53847:19:0;53870:10;53847:33;53839:60;;;;-1:-1:-1;;;53839:60:0;;20787:2:1;53839:60:0;;;20769:21:1;20826:2;20806:18;;;20799:30;-1:-1:-1;;;20845:18:1;;;20838:44;20899:18;;53839:60:0;20585:338:1;53839:60:0;53940:1;53910:19;;;:9;:19;;;;;:32;;-1:-1:-1;;;;;;53910:32:0;;;53783:167::o;52190:180::-;52264:12;52282:8;-1:-1:-1;;;;;52282:13:0;52303:7;52282:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52263:52;;;52334:7;52326:36;;;;-1:-1:-1;;;52326:36:0;;21340:2:1;52326:36:0;;;21322:21:1;21379:2;21359:18;;;21352:30;-1:-1:-1;;;21398:18:1;;;21391:46;21454:18;;52326:36:0;21138:340:1;37527:173:0;37583:16;37602:6;;-1:-1:-1;;;;;37619:17:0;;;-1:-1:-1;;;;;;37619:17:0;;;;;;37652:40;;37602:6;;;;;;;37652:40;;37583:16;37652:40;37572:128;37527:173;:::o;24367:315::-;24524:28;24534:4;24540:2;24544:7;24524:9;:28::i;:::-;24571:48;24594:4;24600:2;24604:7;24613:5;24571:22;:48::i;:::-;24563:111;;;;-1:-1:-1;;;24563:111:0;;;;;;;:::i;33664:723::-;33720:13;33941:10;33937:53;;-1:-1:-1;;33968:10:0;;;;;;;;;;;;-1:-1:-1;;;33968:10:0;;;;;33664:723::o;33937:53::-;34015:5;34000:12;34056:78;34063:9;;34056:78;;34089:8;;;;:::i;:::-;;-1:-1:-1;34112:10:0;;-1:-1:-1;34120:2:0;34112:10;;:::i;:::-;;;34056:78;;;34144:19;34176:6;34166:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34166:17:0;;34144:39;;34194:154;34201:10;;34194:154;;34228:11;34238:1;34228:11;;:::i;:::-;;-1:-1:-1;34297:10:0;34305:2;34297:5;:10;:::i;:::-;34284:24;;:2;:24;:::i;:::-;34271:39;;34254:6;34261;34254:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;34254:56:0;;;;;;;;-1:-1:-1;34325:11:0;34334:2;34325:11;;:::i;:::-;;;34194:154;;26008:110;26084:26;26094:2;26098:7;26084:26;;;;;;;;;;;;:9;:26::i;:::-;26008:110;;:::o;41761:231::-;41839:7;41860:17;41879:18;41901:27;41912:4;41918:9;41901:10;:27::i;:::-;41859:69;;;;41939:18;41951:5;41939:11;:18::i;29626:799::-;29781:4;-1:-1:-1;;;;;29802:13:0;;9829:20;9877:8;29798:620;;29838:72;;-1:-1:-1;;;29838:72:0;;-1:-1:-1;;;;;29838:36:0;;;;;:72;;17550:10;;29889:4;;29895:7;;29904:5;;29838:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29838:72:0;;;;;;;;-1:-1:-1;;29838:72:0;;;;;;;;;;;;:::i;:::-;;;29834:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30080:13:0;;30076:272;;30123:60;;-1:-1:-1;;;30123:60:0;;;;;;;:::i;30076:272::-;30298:6;30292:13;30283:6;30279:2;30275:15;30268:38;29834:529;-1:-1:-1;;;;;;29961:51:0;-1:-1:-1;;;29961:51:0;;-1:-1:-1;29954:58:0;;29798:620;-1:-1:-1;30402:4:0;29626:799;;;;;;:::o;26347:321::-;26477:18;26483:2;26487:7;26477:5;:18::i;:::-;26528:54;26559:1;26563:2;26567:7;26576:5;26528:22;:54::i;:::-;26506:154;;;;-1:-1:-1;;;26506:154:0;;;;;;;:::i;39651:1308::-;39732:7;39741:12;39966:9;:16;39986:2;39966:22;39962:990;;;40262:4;40247:20;;40241:27;40312:4;40297:20;;40291:27;40370:4;40355:20;;40349:27;40005:9;40341:36;40413:25;40424:4;40341:36;40241:27;40291;40413:10;:25::i;:::-;40406:32;;;;;;;;;39962:990;40460:9;:16;40480:2;40460:22;40456:496;;;40735:4;40720:20;;40714:27;40786:4;40771:20;;40765:27;40828:23;40839:4;40714:27;40765;40828:10;:23::i;:::-;40821:30;;;;;;;;40456:496;-1:-1:-1;40900:1:0;;-1:-1:-1;40904:35:0;40456:496;39651:1308;;;;;:::o;37922:643::-;38000:20;37991:5;:29;;;;;;;;:::i;:::-;;37987:571;;;37922:643;:::o;37987:571::-;38098:29;38089:5;:38;;;;;;;;:::i;:::-;;38085:473;;;38144:34;;-1:-1:-1;;;38144:34:0;;23112:2:1;38144:34:0;;;23094:21:1;23151:2;23131:18;;;23124:30;23190:26;23170:18;;;23163:54;23234:18;;38144:34:0;22910:348:1;38085:473:0;38209:35;38200:5;:44;;;;;;;;:::i;:::-;;38196:362;;;38261:41;;-1:-1:-1;;;38261:41:0;;23465:2:1;38261:41:0;;;23447:21:1;23504:2;23484:18;;;23477:30;23543:33;23523:18;;;23516:61;23594:18;;38261:41:0;23263:355:1;38196:362:0;38333:30;38324:5;:39;;;;;;;;:::i;:::-;;38320:238;;;38380:44;;-1:-1:-1;;;38380:44:0;;23825:2:1;38380:44:0;;;23807:21:1;23864:2;23844:18;;;23837:30;23903:34;23883:18;;;23876:62;-1:-1:-1;;;23954:18:1;;;23947:32;23996:19;;38380:44:0;23623:398:1;38320:238:0;38455:30;38446:5;:39;;;;;;;;:::i;:::-;;38442:116;;;38502:44;;-1:-1:-1;;;38502:44:0;;24228:2:1;38502:44:0;;;24210:21:1;24267:2;24247:18;;;24240:30;24306:34;24286:18;;;24279:62;-1:-1:-1;;;24357:18:1;;;24350:32;24399:19;;38502:44:0;24026:398:1;42828:1632:0;42959:7;;43893:66;43880:79;;43876:163;;;-1:-1:-1;43992:1:0;;-1:-1:-1;43996:30:0;43976:51;;43876:163;44053:1;:7;;44058:2;44053:7;;:18;;;;;44064:1;:7;;44069:2;44064:7;;44053:18;44049:102;;;-1:-1:-1;44104:1:0;;-1:-1:-1;44108:30:0;44088:51;;44049:102;44265:24;;;44248:14;44265:24;;;;;;;;;24656:25:1;;;24729:4;24717:17;;24697:18;;;24690:45;;;;24751:18;;;24744:34;;;24794:18;;;24787:34;;;44265:24:0;;24628:19:1;;44265:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44265:24:0;;-1:-1:-1;;44265:24:0;;;-1:-1:-1;;;;;;;44304:20:0;;44300:103;;44357:1;44361:29;44341:50;;;;;;;44300:103;44423:6;-1:-1:-1;44431:20:0;;-1:-1:-1;42828:1632:0;;;;;;;;:::o;42255:391::-;42369:7;;-1:-1:-1;;;;;42470:75:0;;42572:3;42568:12;;;42582:2;42564:21;42613:25;42624:4;42564:21;42633:1;42470:75;42613:10;:25::i;:::-;42606:32;;;;;;42255:391;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:173::-;660:20;;-1:-1:-1;;;;;709:31:1;;699:42;;689:70;;755:1;752;745:12;689:70;592:173;;;:::o;770:186::-;829:6;882:2;870:9;861:7;857:23;853:32;850:52;;;898:1;895;888:12;850:52;921:29;940:9;921:29;:::i;961:258::-;1033:1;1043:113;1057:6;1054:1;1051:13;1043:113;;;1133:11;;;1127:18;1114:11;;;1107:39;1079:2;1072:10;1043:113;;;1174:6;1171:1;1168:13;1165:48;;;-1:-1:-1;;1209:1:1;1191:16;;1184:27;961:258::o;1224:269::-;1277:3;1315:5;1309:12;1342:6;1337:3;1330:19;1358:63;1414:6;1407:4;1402:3;1398:14;1391:4;1384:5;1380:16;1358:63;:::i;:::-;1475:2;1454:15;-1:-1:-1;;1450:29:1;1441:39;;;;1482:4;1437:50;;1224:269;-1:-1:-1;;1224:269:1:o;1498:231::-;1647:2;1636:9;1629:21;1610:4;1667:56;1719:2;1708:9;1704:18;1696:6;1667:56;:::i;1734:180::-;1793:6;1846:2;1834:9;1825:7;1821:23;1817:32;1814:52;;;1862:1;1859;1852:12;1814:52;-1:-1:-1;1885:23:1;;1734:180;-1:-1:-1;1734:180:1:o;2127:127::-;2188:10;2183:3;2179:20;2176:1;2169:31;2219:4;2216:1;2209:15;2243:4;2240:1;2233:15;2259:718;2301:5;2354:3;2347:4;2339:6;2335:17;2331:27;2321:55;;2372:1;2369;2362:12;2321:55;2408:6;2395:20;2434:18;2471:2;2467;2464:10;2461:36;;;2477:18;;:::i;:::-;2552:2;2546:9;2520:2;2606:13;;-1:-1:-1;;2602:22:1;;;2626:2;2598:31;2594:40;2582:53;;;2650:18;;;2670:22;;;2647:46;2644:72;;;2696:18;;:::i;:::-;2736:10;2732:2;2725:22;2771:2;2763:6;2756:18;2817:3;2810:4;2805:2;2797:6;2793:15;2789:26;2786:35;2783:55;;;2834:1;2831;2824:12;2783:55;2898:2;2891:4;2883:6;2879:17;2872:4;2864:6;2860:17;2847:54;2945:1;2938:4;2933:2;2925:6;2921:15;2917:26;2910:37;2965:6;2956:15;;;;;;2259:718;;;;:::o;2982:456::-;3068:6;3076;3084;3137:2;3125:9;3116:7;3112:23;3108:32;3105:52;;;3153:1;3150;3143:12;3105:52;3189:9;3176:23;3166:33;;3250:2;3239:9;3235:18;3222:32;3277:18;3269:6;3266:30;3263:50;;;3309:1;3306;3299:12;3263:50;3332:49;3373:7;3364:6;3353:9;3349:22;3332:49;:::i;:::-;3322:59;;;3428:2;3417:9;3413:18;3400:32;3390:42;;2982:456;;;;;:::o;3443:254::-;3511:6;3519;3572:2;3560:9;3551:7;3547:23;3543:32;3540:52;;;3588:1;3585;3578:12;3540:52;3611:29;3630:9;3611:29;:::i;:::-;3601:39;3687:2;3672:18;;;;3659:32;;-1:-1:-1;;;3443:254:1:o;3884:592::-;3955:6;3963;4016:2;4004:9;3995:7;3991:23;3987:32;3984:52;;;4032:1;4029;4022:12;3984:52;4072:9;4059:23;4101:18;4142:2;4134:6;4131:14;4128:34;;;4158:1;4155;4148:12;4128:34;4196:6;4185:9;4181:22;4171:32;;4241:7;4234:4;4230:2;4226:13;4222:27;4212:55;;4263:1;4260;4253:12;4212:55;4303:2;4290:16;4329:2;4321:6;4318:14;4315:34;;;4345:1;4342;4335:12;4315:34;4390:7;4385:2;4376:6;4372:2;4368:15;4364:24;4361:37;4358:57;;;4411:1;4408;4401:12;4358:57;4442:2;4434:11;;;;;4464:6;;-1:-1:-1;3884:592:1;;-1:-1:-1;;;;3884:592:1:o;4481:328::-;4558:6;4566;4574;4627:2;4615:9;4606:7;4602:23;4598:32;4595:52;;;4643:1;4640;4633:12;4595:52;4666:29;4685:9;4666:29;:::i;:::-;4656:39;;4714:38;4748:2;4737:9;4733:18;4714:38;:::i;:::-;4704:48;;4799:2;4788:9;4784:18;4771:32;4761:42;;4481:328;;;;;:::o;4814:632::-;4985:2;5037:21;;;5107:13;;5010:18;;;5129:22;;;4956:4;;4985:2;5208:15;;;;5182:2;5167:18;;;4956:4;5251:169;5265:6;5262:1;5259:13;5251:169;;;5326:13;;5314:26;;5395:15;;;;5360:12;;;;5287:1;5280:9;5251:169;;;-1:-1:-1;5437:3:1;;4814:632;-1:-1:-1;;;;;;4814:632:1:o;5451:347::-;5516:6;5524;5577:2;5565:9;5556:7;5552:23;5548:32;5545:52;;;5593:1;5590;5583:12;5545:52;5616:29;5635:9;5616:29;:::i;:::-;5606:39;;5695:2;5684:9;5680:18;5667:32;5742:5;5735:13;5728:21;5721:5;5718:32;5708:60;;5764:1;5761;5754:12;5708:60;5787:5;5777:15;;;5451:347;;;;;:::o;5803:537::-;5898:6;5906;5914;5922;5975:3;5963:9;5954:7;5950:23;5946:33;5943:53;;;5992:1;5989;5982:12;5943:53;6015:29;6034:9;6015:29;:::i;:::-;6005:39;;6063:38;6097:2;6086:9;6082:18;6063:38;:::i;:::-;6053:48;;6148:2;6137:9;6133:18;6120:32;6110:42;;6203:2;6192:9;6188:18;6175:32;6230:18;6222:6;6219:30;6216:50;;;6262:1;6259;6252:12;6216:50;6285:49;6326:7;6317:6;6306:9;6302:22;6285:49;:::i;:::-;6275:59;;;5803:537;;;;;;;:::o;6598:260::-;6666:6;6674;6727:2;6715:9;6706:7;6702:23;6698:32;6695:52;;;6743:1;6740;6733:12;6695:52;6766:29;6785:9;6766:29;:::i;:::-;6756:39;;6814:38;6848:2;6837:9;6833:18;6814:38;:::i;:::-;6804:48;;6598:260;;;;;:::o;6863:356::-;7065:2;7047:21;;;7084:18;;;7077:30;7143:34;7138:2;7123:18;;7116:62;7210:2;7195:18;;6863:356::o;7224:380::-;7303:1;7299:12;;;;7346;;;7367:61;;7421:4;7413:6;7409:17;7399:27;;7367:61;7474:2;7466:6;7463:14;7443:18;7440:38;7437:161;;;7520:10;7515:3;7511:20;7508:1;7501:31;7555:4;7552:1;7545:15;7583:4;7580:1;7573:15;7437:161;;7224:380;;;:::o;8703:345::-;8905:2;8887:21;;;8944:2;8924:18;;;8917:30;-1:-1:-1;;;8978:2:1;8963:18;;8956:51;9039:2;9024:18;;8703:345::o;9053:127::-;9114:10;9109:3;9105:20;9102:1;9095:31;9145:4;9142:1;9135:15;9169:4;9166:1;9159:15;9185:168;9225:7;9291:1;9287;9283:6;9279:14;9276:1;9273:21;9268:1;9261:9;9254:17;9250:45;9247:71;;;9298:18;;:::i;:::-;-1:-1:-1;9338:9:1;;9185:168::o;9358:340::-;9560:2;9542:21;;;9599:2;9579:18;;;9572:30;-1:-1:-1;;;9633:2:1;9618:18;;9611:46;9689:2;9674:18;;9358:340::o;9703:128::-;9743:3;9774:1;9770:6;9767:1;9764:13;9761:39;;;9780:18;;:::i;:::-;-1:-1:-1;9816:9:1;;9703:128::o;9836:346::-;10038:2;10020:21;;;10077:2;10057:18;;;10050:30;-1:-1:-1;;;10111:2:1;10096:18;;10089:52;10173:2;10158:18;;9836:346::o;10187:336::-;10389:2;10371:21;;;10428:2;10408:18;;;10401:30;-1:-1:-1;;;10462:2:1;10447:18;;10440:42;10514:2;10499:18;;10187:336::o;10528:338::-;10730:2;10712:21;;;10769:2;10749:18;;;10742:30;-1:-1:-1;;;10803:2:1;10788:18;;10781:44;10857:2;10842:18;;10528:338::o;10871:135::-;10910:3;-1:-1:-1;;10931:17:1;;10928:43;;;10951:18;;:::i;:::-;-1:-1:-1;10998:1:1;10987:13;;10871:135::o;11838:413::-;12040:2;12022:21;;;12079:2;12059:18;;;12052:30;12118:34;12113:2;12098:18;;12091:62;-1:-1:-1;;;12184:2:1;12169:18;;12162:47;12241:3;12226:19;;11838:413::o;12598:125::-;12638:4;12666:1;12663;12660:8;12657:34;;;12671:18;;:::i;:::-;-1:-1:-1;12708:9:1;;12598:125::o;12728:184::-;12798:6;12851:2;12839:9;12830:7;12826:23;12822:32;12819:52;;;12867:1;12864;12857:12;12819:52;-1:-1:-1;12890:16:1;;12728:184;-1:-1:-1;12728:184:1:o;12917:407::-;13119:2;13101:21;;;13158:2;13138:18;;;13131:30;13197:34;13192:2;13177:18;;13170:62;-1:-1:-1;;;13263:2:1;13248:18;;13241:41;13314:3;13299:19;;12917:407::o;13329:127::-;13390:10;13385:3;13381:20;13378:1;13371:31;13421:4;13418:1;13411:15;13445:4;13442:1;13435:15;13461:127;13522:10;13517:3;13513:20;13510:1;13503:31;13553:4;13550:1;13543:15;13577:4;13574:1;13567:15;13593:120;13633:1;13659;13649:35;;13664:18;;:::i;:::-;-1:-1:-1;13698:9:1;;13593:120::o;16191:185::-;16233:3;16271:5;16265:12;16286:52;16331:6;16326:3;16319:4;16312:5;16308:16;16286:52;:::i;:::-;16354:16;;;;;16191:185;-1:-1:-1;;16191:185:1:o;16381:1174::-;16557:3;16586:1;16619:6;16613:13;16649:3;16671:1;16699:9;16695:2;16691:18;16681:28;;16759:2;16748:9;16744:18;16781;16771:61;;16825:4;16817:6;16813:17;16803:27;;16771:61;16851:2;16899;16891:6;16888:14;16868:18;16865:38;16862:165;;;-1:-1:-1;;;16926:33:1;;16982:4;16979:1;16972:15;17012:4;16933:3;17000:17;16862:165;17043:18;17070:104;;;;17188:1;17183:320;;;;17036:467;;17070:104;-1:-1:-1;;17103:24:1;;17091:37;;17148:16;;;;-1:-1:-1;17070:104:1;;17183:320;16138:1;16131:14;;;16175:4;16162:18;;17278:1;17292:165;17306:6;17303:1;17300:13;17292:165;;;17384:14;;17371:11;;;17364:35;17427:16;;;;17321:10;;17292:165;;;17296:3;;17486:6;17481:3;17477:16;17470:23;;17036:467;;;;;;;17519:30;17545:3;17537:6;17519:30;:::i;:::-;17512:37;16381:1174;-1:-1:-1;;;;;16381:1174:1:o;21483:414::-;21685:2;21667:21;;;21724:2;21704:18;;;21697:30;21763:34;21758:2;21743:18;;21736:62;-1:-1:-1;;;21829:2:1;21814:18;;21807:48;21887:3;21872:19;;21483:414::o;21902:112::-;21934:1;21960;21950:35;;21965:18;;:::i;:::-;-1:-1:-1;21999:9:1;;21902:112::o;22019:500::-;-1:-1:-1;;;;;22288:15:1;;;22270:34;;22340:15;;22335:2;22320:18;;22313:43;22387:2;22372:18;;22365:34;;;22435:3;22430:2;22415:18;;22408:31;;;22213:4;;22456:57;;22493:19;;22485:6;22456:57;:::i;:::-;22448:65;22019:500;-1:-1:-1;;;;;;22019:500:1:o;22524:249::-;22593:6;22646:2;22634:9;22625:7;22621:23;22617:32;22614:52;;;22662:1;22659;22652:12;22614:52;22694:9;22688:16;22713:30;22737:5;22713:30;:::i;22778:127::-;22839:10;22834:3;22830:20;22827:1;22820:31;22870:4;22867:1;22860:15;22894:4;22891:1;22884:15
Swarm Source
ipfs://672fc76424cd92c353e6de815b9bcc53701f37d5371e3774b462983f8ad2f3fe
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.