ETH Price: $3,268.94 (+0.11%)
Gas: 20 Gwei

Token

Zodiac Envelopes (ZODPASS)
 

Overview

Max Total Supply

203 ZODPASS

Holders

125

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 ZODPASS
0xd8427794f8e9af9bc0e027eb9d4d3ee63b2491b3
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ZodiacEnvelopes

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

// Amended by LeZig
/* ______     ______     _____     __     ______     ______        ______     __   __     __   __   ______     __         ______     ______   ______     ______    
/\___  \   /\  __ \   /\  __-.  /\ \   /\  __ \   /\  ___\      /\  ___\   /\ "-.\ \   /\ \ / /  /\  ___\   /\ \       /\  __ \   /\  == \ /\  ___\   /\  ___\   
\/_/  /__  \ \ \/\ \  \ \ \/\ \ \ \ \  \ \  __ \  \ \ \____     \ \  __\   \ \ \-.  \  \ \ \'/   \ \  __\   \ \ \____  \ \ \/\ \  \ \  _-/ \ \  __\   \ \___  \  
  /\_____\  \ \_____\  \ \____-  \ \_\  \ \_\ \_\  \ \_____\     \ \_____\  \ \_\\"\_\  \ \__|    \ \_____\  \ \_____\  \ \_____\  \ \_\    \ \_____\  \/\_____\ 
  \/_____/   \/_____/   \/____/   \/_/   \/_/\/_/   \/_____/      \/_____/   \/_/ \/_/   \/_/      \/_____/   \/_____/   \/_____/   \/_/     \/_____/   \/_____/                                                                                                                                                   
*/

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
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/IERC721.sol
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/extensions/IERC721Enumerable.sol
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/introspection/ERC165.sol
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: @openzeppelin/contracts/utils/Strings.sol



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/utils/Address.sol



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/token/ERC721/extensions/IERC721Metadata.sol



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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol



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/utils/Context.sol
pragma solidity ^0.8.0;
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
 function _msgSender() internal view virtual returns (address) {
 return msg.sender;
 }

 function _msgData() internal view virtual returns (bytes calldata) {
 return msg.data;
 }
}


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

 // Token name
 string private _name;

 // Token symbol
 string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 _approve(to, tokenId);
 }

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

 return _tokenApprovals[tokenId];
 }

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

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

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

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

 _transfer(from, to, tokenId);
 }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 _beforeTokenTransfer(from, to, tokenId);

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

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

 emit Transfer(from, to, tokenId);
 }

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
 address private _owner;

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

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

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

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

 /**
 * @dev Leaves the contract without owner. It will not be possible to call
 * `onlyOwner` functions anymore. Can only be called by the current owner.
 *
 * NOTE: Renouncing ownership will leave the contract without an owner,
 * thereby removing any functionality that is only available to the owner.
 */
 function renounceOwnership() public virtual onlyOwner {
 _setOwner(address(0));
 }

 /**
 * @dev Transfers ownership of the contract to a new account (`newOwner`).
 * Can only be called by the current owner.
 */
 function transferOwnership(address newOwner) public virtual onlyOwner {
 require(newOwner != address(0), "Ownable: new owner is the zero address");
 _setOwner(newOwner);
 }

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

pragma solidity ^0.8.0;

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

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

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

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

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

pragma solidity ^0.8.0;

contract ZodiacEnvelopes is
 Ownable,
 ERC721Enumerable
 {
    using Strings for uint256;
    using Address for address;
    using Counters for Counters.Counter;

    Counters.Counter public _supply;
    uint256 constant private _gold_modulo = 100;
    uint256 constant private _max_supply = 8888;
    uint256 public _reserved_tokens = 50;

    bool public _paused;

    Counters.Counter private _minted_tokens_red;
    Counters.Counter private _minted_tokens_gold;

    string public _base_URI;

    constructor(
        string memory base_URI_, 
        string memory name_,
        string memory symbol_
    ) ERC721(name_, symbol_) {
        _set_base_uri(base_URI_);
    }

    function _is_gold(uint256 _token_id) public view returns (bool) {
        require(_exists(_token_id), "Gold query for nonexistent token");
        return _token_id % _gold_modulo == 0 && _token_id > 0;
    }

    function _update_minted_tokens_count(uint256 _token_id_minted) internal {
        if (_is_gold(_token_id_minted)) _minted_tokens_gold.increment();
        else _minted_tokens_red.increment();
    }

    function _mint() public {
        require(_supply.current() + 1 <= _max_supply, "Max supply exceeded");
        require(!_paused, "Contract paused");
        require(msg.sender == tx.origin, "Only EOA mint");
        _supply.increment();
        _safeMint(msg.sender, _supply.current());
        _update_minted_tokens_count(_supply.current());
    }

    function _dev_mint(uint256 _mint_amount) public onlyOwner {
        require(_mint_amount > 0 && _mint_amount <= _reserved_tokens, "Team reserve down");
        require(_supply.current() + _mint_amount <= _max_supply, "Max supply exceeded");
        for (uint256 i = 0; i < _mint_amount; i++) {
            _supply.increment();
            _safeMint(msg.sender, _supply.current());
            _reserved_tokens--;
            _update_minted_tokens_count(_supply.current());
        }
    }

    function _withdraw() public onlyOwner {
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
    }

    function _set_paused(bool paused_) public onlyOwner {
        _paused = paused_;
    }

    function _set_base_uri(string memory _uri) public onlyOwner {
        _base_URI = _uri;
    }

    function _get_minted_tokens_red() public view returns (uint256) {
        return _minted_tokens_red.current();
    }

    function _get_minted_tokens_gold() public view returns (uint256) {
        return _minted_tokens_gold.current();
    }

    function _get_max_supply() public pure returns (uint256) {
        return _max_supply;
    }

    function _wallet_of_owner(address _owner)
    public
    view
    returns (uint256[] memory) {
        uint256 _owner_token_count = balanceOf(_owner);
        uint256[] memory _owned_token_ids = new uint256[](_owner_token_count);
        for (uint256 i; i < _owner_token_count; i++) {
            _owned_token_ids[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return _owned_token_ids;
    }

    function tokenURI(uint256 _token_id)
    public
    view
    virtual
    override
    returns (string memory){
        require(_exists(_token_id), "URI query for nonexistent token");
        return bytes(_base_URI).length > 0 ?
            string(abi.encodePacked(_base_URI, _token_id.toString(), ".json"))
            : 
            "";
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"base_URI_","type":"string"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"_base_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mint_amount","type":"uint256"}],"name":"_dev_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_get_max_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"_get_minted_tokens_gold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_get_minted_tokens_red","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_token_id","type":"uint256"}],"name":"_is_gold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reserved_tokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"_set_base_uri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused_","type":"bool"}],"name":"_set_paused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_supply","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"_wallet_of_owner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_token_id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526032600c553480156200001657600080fd5b5060405162002604380380620026048339810160408190526200003991620002b3565b818162000046336200008e565b81516200005b90600190602085019062000156565b5080516200007190600290602084019062000156565b5050506200008583620000de60201b60201c565b50505062000397565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200013d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b80516200015290601090602084019062000156565b5050565b828054620001649062000344565b90600052602060002090601f016020900481019282620001885760008555620001d3565b82601f10620001a357805160ff1916838001178555620001d3565b82800160010185558215620001d3579182015b82811115620001d3578251825591602001919060010190620001b6565b50620001e1929150620001e5565b5090565b5b80821115620001e15760008155600101620001e6565b600082601f8301126200020e57600080fd5b81516001600160401b03808211156200022b576200022b62000381565b604051601f8301601f19908116603f0116810190828211818310171562000256576200025662000381565b816040528381526020925086838588010111156200027357600080fd5b600091505b8382101562000297578582018301518183018401529082019062000278565b83821115620002a95760008385830101525b9695505050505050565b600080600060608486031215620002c957600080fd5b83516001600160401b0380821115620002e157600080fd5b620002ef87838801620001fc565b945060208601519150808211156200030657600080fd5b6200031487838801620001fc565b935060408601519150808211156200032b57600080fd5b506200033a86828701620001fc565b9150509250925092565b600181811c908216806200035957607f821691505b602082108114156200037b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61225d80620003a76000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636b9bd2f81161011a578063b88d4fde116100ad578063dc4f59d31161007c578063dc4f59d3146103e9578063de4fbbdc146103fc578063e985e9c514610404578063ed641e8514610440578063f2fde38b1461045357600080fd5b8063b88d4fde146103b3578063c0702d9c146103c6578063c10eb14d146103ce578063c87b56dd146103d657600080fd5b80638da5cb5b116100e95780638da5cb5b1461037e57806395d89b411461038f578063a22cb46514610397578063b70a91bb146103aa57600080fd5b80636b9bd2f81461033b57806370a082311461035b578063715018a61461036e57806384ae8db01461037657600080fd5b806323b872dd116101925780634f6ccce7116101615780634f6ccce7146102fa5780635018c7b61461030d578063552bc35f146103155780636352211e1461032857600080fd5b806323b872dd146102ae5780632f745c59146102c157806342842e0e146102d457806346114e0e146102e757600080fd5b8063095ea7b3116101ce578063095ea7b31461027a578063159457901461028f57806316c61ccc1461029957806318160ddd146102a657600080fd5b8063018147b61461020057806301ffc9a71461021757806306fdde031461023a578063081812fc1461024f575b600080fd5b6122b85b6040519081526020015b60405180910390f35b61022a610225366004611da8565b610466565b604051901515815260200161020e565b610242610491565b60405161020e9190611fc8565b61026261025d366004611e2b565b610523565b6040516001600160a01b03909116815260200161020e565b61028d610288366004611d63565b6105bd565b005b600b546102049081565b600d5461022a9060ff1681565b600954610204565b61028d6102bc366004611c81565b6106d3565b6102046102cf366004611d63565b610704565b61028d6102e2366004611c81565b61079a565b61028d6102f5366004611d8d565b6107b5565b610204610308366004611e2b565b6107f2565b610204610885565b61028d610323366004611e2b565b610895565b610262610336366004611e2b565b6109d3565b61034e610349366004611c2c565b610a4a565b60405161020e9190611f84565b610204610369366004611c2c565b610aec565b61028d610b73565b610204610ba9565b6000546001600160a01b0316610262565b610242610bb4565b61028d6103a5366004611d39565b610bc3565b610204600c5481565b61028d6103c1366004611cbd565b610c88565b61028d610cc0565b61028d610dc6565b6102426103e4366004611e2b565b610e53565b61022a6103f7366004611e2b565b610f16565b610242610f93565b61022a610412366004611c4e565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61028d61044e366004611de2565b611021565b61028d610461366004611c2c565b61105e565b60006001600160e01b0319821663780e9d6360e01b148061048b575061048b826110f6565b92915050565b6060600180546104a090612139565b80601f01602080910402602001604051908101604052809291908181526020018280546104cc90612139565b80156105195780601f106104ee57610100808354040283529160200191610519565b820191906000526020600020905b8154815290600101906020018083116104fc57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03166105a15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006105c8826109d3565b9050806001600160a01b0316836001600160a01b031614156106365760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610598565b336001600160a01b038216148061065257506106528133610412565b6106c45760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610598565b6106ce8383611146565b505050565b6106dd33826111b4565b6106f95760405162461bcd60e51b815260040161059890612062565b6106ce8383836112ab565b600061070f83610aec565b82106107715760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610598565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6106ce83838360405180602001604052806000815250610c88565b6000546001600160a01b031633146107df5760405162461bcd60e51b81526004016105989061202d565b600d805460ff1916911515919091179055565b60006107fd60095490565b82106108605760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610598565b60098281548110610873576108736121e5565b90600052602060002001549050919050565b6000610890600f5490565b905090565b6000546001600160a01b031633146108bf5760405162461bcd60e51b81526004016105989061202d565b6000811180156108d15750600c548111155b6109115760405162461bcd60e51b81526020600482015260116024820152702a32b0b6903932b9b2b93b32903237bbb760791b6044820152606401610598565b6122b88161091e600b5490565b61092891906120b3565b111561096c5760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610598565b60005b818110156109cf57610985600b80546001019055565b61099733610992600b5490565b611456565b600c80549060006109a783612122565b91905055506109bd6109b8600b5490565b611470565b806109c781612174565b91505061096f565b5050565b6000818152600360205260408120546001600160a01b03168061048b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610598565b60606000610a5783610aec565b905060008167ffffffffffffffff811115610a7457610a746121fb565b604051908082528060200260200182016040528015610a9d578160200160208202803683370190505b50905060005b82811015610ae457610ab58582610704565b828281518110610ac757610ac76121e5565b602090810291909101015280610adc81612174565b915050610aa3565b509392505050565b60006001600160a01b038216610b575760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610598565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610b9d5760405162461bcd60e51b81526004016105989061202d565b610ba7600061149a565b565b6000610890600e5490565b6060600280546104a090612139565b6001600160a01b038216331415610c1c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610598565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c9233836111b4565b610cae5760405162461bcd60e51b815260040161059890612062565b610cba848484846114ea565b50505050565b6122b8610ccc600b5490565b610cd79060016120b3565b1115610d1b5760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610598565b600d5460ff1615610d605760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b6044820152606401610598565b333214610d9f5760405162461bcd60e51b815260206004820152600d60248201526c13db9b1e481153d0481b5a5b9d609a1b6044820152606401610598565b610dad600b80546001019055565b610dba33610992600b5490565b610ba76109b8600b5490565b6000546001600160a01b03163314610df05760405162461bcd60e51b81526004016105989061202d565b600080546040516001600160a01b039091169047908381818185875af1925050503d8060008114610e3d576040519150601f19603f3d011682016040523d82523d6000602084013e610e42565b606091505b5050905080610e5057600080fd5b50565b6000818152600360205260409020546060906001600160a01b0316610eba5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610598565b600060108054610ec990612139565b905011610ee5576040518060200160405280600081525061048b565b6010610ef08361151d565b604051602001610f01929190611e8c565b60405160208183030381529060405292915050565b6000818152600360205260408120546001600160a01b0316610f7a5760405162461bcd60e51b815260206004820181905260248201527f476f6c6420717565727920666f72206e6f6e6578697374656e7420746f6b656e6044820152606401610598565b610f8560648361218f565b15801561048b575050151590565b60108054610fa090612139565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcc90612139565b80156110195780601f10610fee57610100808354040283529160200191611019565b820191906000526020600020905b815481529060010190602001808311610ffc57829003601f168201915b505050505081565b6000546001600160a01b0316331461104b5760405162461bcd60e51b81526004016105989061202d565b80516109cf906010906020840190611af1565b6000546001600160a01b031633146110885760405162461bcd60e51b81526004016105989061202d565b6001600160a01b0381166110ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610598565b610e508161149a565b60006001600160e01b031982166380ac58cd60e01b148061112757506001600160e01b03198216635b5e139f60e01b145b8061048b57506301ffc9a760e01b6001600160e01b031983161461048b565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061117b826109d3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b031661122d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610598565b6000611238836109d3565b9050806001600160a01b0316846001600160a01b031614806112735750836001600160a01b031661126884610523565b6001600160a01b0316145b806112a357506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166112be826109d3565b6001600160a01b0316146113265760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610598565b6001600160a01b0382166113885760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610598565b61139383838361161b565b61139e600082611146565b6001600160a01b03831660009081526004602052604081208054600192906113c79084906120df565b90915550506001600160a01b03821660009081526004602052604081208054600192906113f59084906120b3565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6109cf8282604051806020016040528060008152506116d3565b61147981610f16565b1561148c57610e50600f80546001019055565b610e50600e80546001019055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6114f58484846112ab565b61150184848484611706565b610cba5760405162461bcd60e51b815260040161059890611fdb565b6060816115415750506040805180820190915260018152600360fc1b602082015290565b8160005b811561156b578061155581612174565b91506115649050600a836120cb565b9150611545565b60008167ffffffffffffffff811115611586576115866121fb565b6040519080825280601f01601f1916602001820160405280156115b0576020820181803683370190505b5090505b84156112a3576115c56001836120df565b91506115d2600a8661218f565b6115dd9060306120b3565b60f81b8183815181106115f2576115f26121e5565b60200101906001600160f81b031916908160001a905350611614600a866120cb565b94506115b4565b6001600160a01b0383166116765761167181600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b611699565b816001600160a01b0316836001600160a01b031614611699576116998382611813565b6001600160a01b0382166116b0576106ce816118b0565b826001600160a01b0316826001600160a01b0316146106ce576106ce828261195f565b6116dd83836119a3565b6116ea6000848484611706565b6106ce5760405162461bcd60e51b815260040161059890611fdb565b60006001600160a01b0384163b1561180857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061174a903390899088908890600401611f47565b602060405180830381600087803b15801561176457600080fd5b505af1925050508015611794575060408051601f3d908101601f1916820190925261179191810190611dc5565b60015b6117ee573d8080156117c2576040519150601f19603f3d011682016040523d82523d6000602084013e6117c7565b606091505b5080516117e65760405162461bcd60e51b815260040161059890611fdb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112a3565b506001949350505050565b6000600161182084610aec565b61182a91906120df565b60008381526008602052604090205490915080821461187d576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009546000906118c2906001906120df565b6000838152600a6020526040812054600980549394509092849081106118ea576118ea6121e5565b90600052602060002001549050806009838154811061190b5761190b6121e5565b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480611943576119436121cf565b6001900381819060005260206000200160009055905550505050565b600061196a83610aec565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160a01b0382166119f95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610598565b6000818152600360205260409020546001600160a01b031615611a5e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610598565b611a6a6000838361161b565b6001600160a01b0382166000908152600460205260408120805460019290611a939084906120b3565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611afd90612139565b90600052602060002090601f016020900481019282611b1f5760008555611b65565b82601f10611b3857805160ff1916838001178555611b65565b82800160010185558215611b65579182015b82811115611b65578251825591602001919060010190611b4a565b50611b71929150611b75565b5090565b5b80821115611b715760008155600101611b76565b600067ffffffffffffffff80841115611ba557611ba56121fb565b604051601f8501601f19908116603f01168101908282118183101715611bcd57611bcd6121fb565b81604052809350858152868686011115611be657600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611c1757600080fd5b919050565b80358015158114611c1757600080fd5b600060208284031215611c3e57600080fd5b611c4782611c00565b9392505050565b60008060408385031215611c6157600080fd5b611c6a83611c00565b9150611c7860208401611c00565b90509250929050565b600080600060608486031215611c9657600080fd5b611c9f84611c00565b9250611cad60208501611c00565b9150604084013590509250925092565b60008060008060808587031215611cd357600080fd5b611cdc85611c00565b9350611cea60208601611c00565b925060408501359150606085013567ffffffffffffffff811115611d0d57600080fd5b8501601f81018713611d1e57600080fd5b611d2d87823560208401611b8a565b91505092959194509250565b60008060408385031215611d4c57600080fd5b611d5583611c00565b9150611c7860208401611c1c565b60008060408385031215611d7657600080fd5b611d7f83611c00565b946020939093013593505050565b600060208284031215611d9f57600080fd5b611c4782611c1c565b600060208284031215611dba57600080fd5b8135611c4781612211565b600060208284031215611dd757600080fd5b8151611c4781612211565b600060208284031215611df457600080fd5b813567ffffffffffffffff811115611e0b57600080fd5b8201601f81018413611e1c57600080fd5b6112a384823560208401611b8a565b600060208284031215611e3d57600080fd5b5035919050565b60008151808452611e5c8160208601602086016120f6565b601f01601f19169290920160200192915050565b60008151611e828185602086016120f6565b9290920192915050565b600080845481600182811c915080831680611ea857607f831692505b6020808410821415611ec857634e487b7160e01b86526022600452602486fd5b818015611edc5760018114611eed57611f1a565b60ff19861689528489019650611f1a565b60008b81526020902060005b86811015611f125781548b820152908501908301611ef9565b505084890196505b505050505050611f3e611f2d8286611e70565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611f7a90830184611e44565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611fbc57835183529284019291840191600101611fa0565b50909695505050505050565b602081526000611c476020830184611e44565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156120c6576120c66121a3565b500190565b6000826120da576120da6121b9565b500490565b6000828210156120f1576120f16121a3565b500390565b60005b838110156121115781810151838201526020016120f9565b83811115610cba5750506000910152565b600081612131576121316121a3565b506000190190565b600181811c9082168061214d57607f821691505b6020821081141561216e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612188576121886121a3565b5060010190565b60008261219e5761219e6121b9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610e5057600080fdfea2646970667358221220b04ff664f42e8a189fea67d6e2c6ee8126d26b0a2aadf23750fed8f1cc8ed55964736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d514b745839734170534a71624c4c6e6b4a726f44567551474b67357941486f31335447794b7058665a4477722f0000000000000000000000000000000000000000000000000000000000000000000000000000000000105a6f6469616320456e76656c6f7065730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075a4f445041535300000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636b9bd2f81161011a578063b88d4fde116100ad578063dc4f59d31161007c578063dc4f59d3146103e9578063de4fbbdc146103fc578063e985e9c514610404578063ed641e8514610440578063f2fde38b1461045357600080fd5b8063b88d4fde146103b3578063c0702d9c146103c6578063c10eb14d146103ce578063c87b56dd146103d657600080fd5b80638da5cb5b116100e95780638da5cb5b1461037e57806395d89b411461038f578063a22cb46514610397578063b70a91bb146103aa57600080fd5b80636b9bd2f81461033b57806370a082311461035b578063715018a61461036e57806384ae8db01461037657600080fd5b806323b872dd116101925780634f6ccce7116101615780634f6ccce7146102fa5780635018c7b61461030d578063552bc35f146103155780636352211e1461032857600080fd5b806323b872dd146102ae5780632f745c59146102c157806342842e0e146102d457806346114e0e146102e757600080fd5b8063095ea7b3116101ce578063095ea7b31461027a578063159457901461028f57806316c61ccc1461029957806318160ddd146102a657600080fd5b8063018147b61461020057806301ffc9a71461021757806306fdde031461023a578063081812fc1461024f575b600080fd5b6122b85b6040519081526020015b60405180910390f35b61022a610225366004611da8565b610466565b604051901515815260200161020e565b610242610491565b60405161020e9190611fc8565b61026261025d366004611e2b565b610523565b6040516001600160a01b03909116815260200161020e565b61028d610288366004611d63565b6105bd565b005b600b546102049081565b600d5461022a9060ff1681565b600954610204565b61028d6102bc366004611c81565b6106d3565b6102046102cf366004611d63565b610704565b61028d6102e2366004611c81565b61079a565b61028d6102f5366004611d8d565b6107b5565b610204610308366004611e2b565b6107f2565b610204610885565b61028d610323366004611e2b565b610895565b610262610336366004611e2b565b6109d3565b61034e610349366004611c2c565b610a4a565b60405161020e9190611f84565b610204610369366004611c2c565b610aec565b61028d610b73565b610204610ba9565b6000546001600160a01b0316610262565b610242610bb4565b61028d6103a5366004611d39565b610bc3565b610204600c5481565b61028d6103c1366004611cbd565b610c88565b61028d610cc0565b61028d610dc6565b6102426103e4366004611e2b565b610e53565b61022a6103f7366004611e2b565b610f16565b610242610f93565b61022a610412366004611c4e565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61028d61044e366004611de2565b611021565b61028d610461366004611c2c565b61105e565b60006001600160e01b0319821663780e9d6360e01b148061048b575061048b826110f6565b92915050565b6060600180546104a090612139565b80601f01602080910402602001604051908101604052809291908181526020018280546104cc90612139565b80156105195780601f106104ee57610100808354040283529160200191610519565b820191906000526020600020905b8154815290600101906020018083116104fc57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03166105a15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006105c8826109d3565b9050806001600160a01b0316836001600160a01b031614156106365760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610598565b336001600160a01b038216148061065257506106528133610412565b6106c45760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610598565b6106ce8383611146565b505050565b6106dd33826111b4565b6106f95760405162461bcd60e51b815260040161059890612062565b6106ce8383836112ab565b600061070f83610aec565b82106107715760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610598565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6106ce83838360405180602001604052806000815250610c88565b6000546001600160a01b031633146107df5760405162461bcd60e51b81526004016105989061202d565b600d805460ff1916911515919091179055565b60006107fd60095490565b82106108605760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610598565b60098281548110610873576108736121e5565b90600052602060002001549050919050565b6000610890600f5490565b905090565b6000546001600160a01b031633146108bf5760405162461bcd60e51b81526004016105989061202d565b6000811180156108d15750600c548111155b6109115760405162461bcd60e51b81526020600482015260116024820152702a32b0b6903932b9b2b93b32903237bbb760791b6044820152606401610598565b6122b88161091e600b5490565b61092891906120b3565b111561096c5760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610598565b60005b818110156109cf57610985600b80546001019055565b61099733610992600b5490565b611456565b600c80549060006109a783612122565b91905055506109bd6109b8600b5490565b611470565b806109c781612174565b91505061096f565b5050565b6000818152600360205260408120546001600160a01b03168061048b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610598565b60606000610a5783610aec565b905060008167ffffffffffffffff811115610a7457610a746121fb565b604051908082528060200260200182016040528015610a9d578160200160208202803683370190505b50905060005b82811015610ae457610ab58582610704565b828281518110610ac757610ac76121e5565b602090810291909101015280610adc81612174565b915050610aa3565b509392505050565b60006001600160a01b038216610b575760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610598565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610b9d5760405162461bcd60e51b81526004016105989061202d565b610ba7600061149a565b565b6000610890600e5490565b6060600280546104a090612139565b6001600160a01b038216331415610c1c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610598565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c9233836111b4565b610cae5760405162461bcd60e51b815260040161059890612062565b610cba848484846114ea565b50505050565b6122b8610ccc600b5490565b610cd79060016120b3565b1115610d1b5760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610598565b600d5460ff1615610d605760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b6044820152606401610598565b333214610d9f5760405162461bcd60e51b815260206004820152600d60248201526c13db9b1e481153d0481b5a5b9d609a1b6044820152606401610598565b610dad600b80546001019055565b610dba33610992600b5490565b610ba76109b8600b5490565b6000546001600160a01b03163314610df05760405162461bcd60e51b81526004016105989061202d565b600080546040516001600160a01b039091169047908381818185875af1925050503d8060008114610e3d576040519150601f19603f3d011682016040523d82523d6000602084013e610e42565b606091505b5050905080610e5057600080fd5b50565b6000818152600360205260409020546060906001600160a01b0316610eba5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610598565b600060108054610ec990612139565b905011610ee5576040518060200160405280600081525061048b565b6010610ef08361151d565b604051602001610f01929190611e8c565b60405160208183030381529060405292915050565b6000818152600360205260408120546001600160a01b0316610f7a5760405162461bcd60e51b815260206004820181905260248201527f476f6c6420717565727920666f72206e6f6e6578697374656e7420746f6b656e6044820152606401610598565b610f8560648361218f565b15801561048b575050151590565b60108054610fa090612139565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcc90612139565b80156110195780601f10610fee57610100808354040283529160200191611019565b820191906000526020600020905b815481529060010190602001808311610ffc57829003601f168201915b505050505081565b6000546001600160a01b0316331461104b5760405162461bcd60e51b81526004016105989061202d565b80516109cf906010906020840190611af1565b6000546001600160a01b031633146110885760405162461bcd60e51b81526004016105989061202d565b6001600160a01b0381166110ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610598565b610e508161149a565b60006001600160e01b031982166380ac58cd60e01b148061112757506001600160e01b03198216635b5e139f60e01b145b8061048b57506301ffc9a760e01b6001600160e01b031983161461048b565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061117b826109d3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b031661122d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610598565b6000611238836109d3565b9050806001600160a01b0316846001600160a01b031614806112735750836001600160a01b031661126884610523565b6001600160a01b0316145b806112a357506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166112be826109d3565b6001600160a01b0316146113265760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610598565b6001600160a01b0382166113885760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610598565b61139383838361161b565b61139e600082611146565b6001600160a01b03831660009081526004602052604081208054600192906113c79084906120df565b90915550506001600160a01b03821660009081526004602052604081208054600192906113f59084906120b3565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6109cf8282604051806020016040528060008152506116d3565b61147981610f16565b1561148c57610e50600f80546001019055565b610e50600e80546001019055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6114f58484846112ab565b61150184848484611706565b610cba5760405162461bcd60e51b815260040161059890611fdb565b6060816115415750506040805180820190915260018152600360fc1b602082015290565b8160005b811561156b578061155581612174565b91506115649050600a836120cb565b9150611545565b60008167ffffffffffffffff811115611586576115866121fb565b6040519080825280601f01601f1916602001820160405280156115b0576020820181803683370190505b5090505b84156112a3576115c56001836120df565b91506115d2600a8661218f565b6115dd9060306120b3565b60f81b8183815181106115f2576115f26121e5565b60200101906001600160f81b031916908160001a905350611614600a866120cb565b94506115b4565b6001600160a01b0383166116765761167181600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b611699565b816001600160a01b0316836001600160a01b031614611699576116998382611813565b6001600160a01b0382166116b0576106ce816118b0565b826001600160a01b0316826001600160a01b0316146106ce576106ce828261195f565b6116dd83836119a3565b6116ea6000848484611706565b6106ce5760405162461bcd60e51b815260040161059890611fdb565b60006001600160a01b0384163b1561180857604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061174a903390899088908890600401611f47565b602060405180830381600087803b15801561176457600080fd5b505af1925050508015611794575060408051601f3d908101601f1916820190925261179191810190611dc5565b60015b6117ee573d8080156117c2576040519150601f19603f3d011682016040523d82523d6000602084013e6117c7565b606091505b5080516117e65760405162461bcd60e51b815260040161059890611fdb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112a3565b506001949350505050565b6000600161182084610aec565b61182a91906120df565b60008381526008602052604090205490915080821461187d576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009546000906118c2906001906120df565b6000838152600a6020526040812054600980549394509092849081106118ea576118ea6121e5565b90600052602060002001549050806009838154811061190b5761190b6121e5565b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480611943576119436121cf565b6001900381819060005260206000200160009055905550505050565b600061196a83610aec565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160a01b0382166119f95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610598565b6000818152600360205260409020546001600160a01b031615611a5e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610598565b611a6a6000838361161b565b6001600160a01b0382166000908152600460205260408120805460019290611a939084906120b3565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611afd90612139565b90600052602060002090601f016020900481019282611b1f5760008555611b65565b82601f10611b3857805160ff1916838001178555611b65565b82800160010185558215611b65579182015b82811115611b65578251825591602001919060010190611b4a565b50611b71929150611b75565b5090565b5b80821115611b715760008155600101611b76565b600067ffffffffffffffff80841115611ba557611ba56121fb565b604051601f8501601f19908116603f01168101908282118183101715611bcd57611bcd6121fb565b81604052809350858152868686011115611be657600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611c1757600080fd5b919050565b80358015158114611c1757600080fd5b600060208284031215611c3e57600080fd5b611c4782611c00565b9392505050565b60008060408385031215611c6157600080fd5b611c6a83611c00565b9150611c7860208401611c00565b90509250929050565b600080600060608486031215611c9657600080fd5b611c9f84611c00565b9250611cad60208501611c00565b9150604084013590509250925092565b60008060008060808587031215611cd357600080fd5b611cdc85611c00565b9350611cea60208601611c00565b925060408501359150606085013567ffffffffffffffff811115611d0d57600080fd5b8501601f81018713611d1e57600080fd5b611d2d87823560208401611b8a565b91505092959194509250565b60008060408385031215611d4c57600080fd5b611d5583611c00565b9150611c7860208401611c1c565b60008060408385031215611d7657600080fd5b611d7f83611c00565b946020939093013593505050565b600060208284031215611d9f57600080fd5b611c4782611c1c565b600060208284031215611dba57600080fd5b8135611c4781612211565b600060208284031215611dd757600080fd5b8151611c4781612211565b600060208284031215611df457600080fd5b813567ffffffffffffffff811115611e0b57600080fd5b8201601f81018413611e1c57600080fd5b6112a384823560208401611b8a565b600060208284031215611e3d57600080fd5b5035919050565b60008151808452611e5c8160208601602086016120f6565b601f01601f19169290920160200192915050565b60008151611e828185602086016120f6565b9290920192915050565b600080845481600182811c915080831680611ea857607f831692505b6020808410821415611ec857634e487b7160e01b86526022600452602486fd5b818015611edc5760018114611eed57611f1a565b60ff19861689528489019650611f1a565b60008b81526020902060005b86811015611f125781548b820152908501908301611ef9565b505084890196505b505050505050611f3e611f2d8286611e70565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611f7a90830184611e44565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611fbc57835183529284019291840191600101611fa0565b50909695505050505050565b602081526000611c476020830184611e44565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156120c6576120c66121a3565b500190565b6000826120da576120da6121b9565b500490565b6000828210156120f1576120f16121a3565b500390565b60005b838110156121115781810151838201526020016120f9565b83811115610cba5750506000910152565b600081612131576121316121a3565b506000190190565b600181811c9082168061214d57607f821691505b6020821081141561216e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612188576121886121a3565b5060010190565b60008261219e5761219e6121b9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610e5057600080fdfea2646970667358221220b04ff664f42e8a189fea67d6e2c6ee8126d26b0a2aadf23750fed8f1cc8ed55964736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d514b745839734170534a71624c4c6e6b4a726f44567551474b67357941486f31335447794b7058665a4477722f0000000000000000000000000000000000000000000000000000000000000000000000000000000000105a6f6469616320456e76656c6f7065730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075a4f445041535300000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : base_URI_ (string): ipfs://QmQKtX9sApSJqbLLnkJroDVuQGKg5yAHo13TGyKpXfZDwr/
Arg [1] : name_ (string): Zodiac Envelopes
Arg [2] : symbol_ (string): ZODPASS

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [4] : 697066733a2f2f516d514b745839734170534a71624c4c6e6b4a726f44567551
Arg [5] : 474b67357941486f31335447794b7058665a4477722f00000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [7] : 5a6f6469616320456e76656c6f70657300000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [9] : 5a4f445041535300000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

40653:3491:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43268:94;40955:4;43268:94;;;17178:25:1;;;17166:2;17151:18;43268:94:0;;;;;;;;31795:214;;;;;;:::i;:::-;;:::i;:::-;;;7889:14:1;;7882:22;7864:41;;7852:2;7837:18;31795:214:0;7724:187:1;21256:90:0;;;:::i;:::-;;;;;;;:::i;22623:204::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6550:32:1;;;6532:51;;6520:2;6505:18;22623:204:0;6386:203:1;22220:351:0;;;;;;:::i;:::-;;:::i;:::-;;40828:31;;;;;;;41011:19;;;;;;;;;32380:103;32461:10;:17;32380:103;;23420:291;;;;;;:::i;:::-;;:::i;32079:239::-;;;;;;:::i;:::-;;:::i;23768:151::-;;;;;;:::i;:::-;;:::i;42815:88::-;;;;;;:::i;:::-;;:::i;32546:216::-;;;;;;:::i;:::-;;:::i;43140:120::-;;;:::i;42154:497::-;;;;;;:::i;:::-;;:::i;20988:215::-;;;;;;:::i;:::-;;:::i;43370:409::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20749:191::-;;;;;;:::i;:::-;;:::i;38854:84::-;;;:::i;43014:118::-;;;:::i;38274:77::-;38320:7;38340:6;-1:-1:-1;;;;;38340:6:0;38274:77;;21401:94;;;:::i;22885:271::-;;;;;;:::i;:::-;;:::i;40966:36::-;;;;;;23976:280;;;;;;:::i;:::-;;:::i;41790:356::-;;;:::i;42659:148::-;;;:::i;43787:354::-;;;;;;:::i;:::-;;:::i;41364:210::-;;;;;;:::i;:::-;;:::i;41142:23::-;;;:::i;23213:154::-;;;;;;:::i;:::-;-1:-1:-1;;;;;23327:25:0;;;23310:4;23327:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23213:154;42911:95;;;;;;:::i;:::-;;:::i;39075:175::-;;;;;;:::i;:::-;;:::i;31795:214::-;31897:4;-1:-1:-1;;;;;;31914:50:0;;-1:-1:-1;;;31914:50:0;;:90;;;31968:36;31992:11;31968:23;:36::i;:::-;31907:97;31795:214;-1:-1:-1;;31795:214:0:o;21256:90::-;21310:13;21336:5;21329:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21256:90;:::o;22623:204::-;22699:7;25692:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25692:16:0;22712:73;;;;-1:-1:-1;;;22712:73:0;;13768:2:1;22712:73:0;;;13750:21:1;13807:2;13787:18;;;13780:30;13846:34;13826:18;;;13819:62;-1:-1:-1;;;13897:18:1;;;13890:42;13949:19;;22712:73:0;;;;;;;;;-1:-1:-1;22798:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22798:24:0;;22623:204::o;22220:351::-;22294:13;22310:23;22325:7;22310:14;:23::i;:::-;22294:39;;22351:5;-1:-1:-1;;;;;22345:11:0;:2;-1:-1:-1;;;;;22345:11:0;;;22337:57;;;;-1:-1:-1;;;22337:57:0;;15659:2:1;22337:57:0;;;15641:21:1;15698:2;15678:18;;;15671:30;15737:34;15717:18;;;15710:62;-1:-1:-1;;;15788:18:1;;;15781:31;15829:19;;22337:57:0;15457:397:1;22337:57:0;19094:10;-1:-1:-1;;;;;22411:21:0;;;;:62;;-1:-1:-1;22436:37:0;22453:5;19094:10;23213:154;:::i;22436:37::-;22400:139;;;;-1:-1:-1;;;22400:139:0;;12161:2:1;22400:139:0;;;12143:21:1;12200:2;12180:18;;;12173:30;12239:34;12219:18;;;12212:62;12310:26;12290:18;;;12283:54;12354:19;;22400:139:0;11959:420:1;22400:139:0;22545:21;22554:2;22558:7;22545:8;:21::i;:::-;22290:281;22220:351;;:::o;23420:291::-;23577:41;19094:10;23610:7;23577:18;:41::i;:::-;23569:103;;;;-1:-1:-1;;;23569:103:0;;;;;;;:::i;:::-;23678:28;23688:4;23694:2;23698:7;23678:9;:28::i;32079:239::-;32176:7;32205:23;32222:5;32205:16;:23::i;:::-;32197:5;:31;32189:87;;;;-1:-1:-1;;;32189:87:0;;9050:2:1;32189:87:0;;;9032:21:1;9089:2;9069:18;;;9062:30;9128:34;9108:18;;;9101:62;-1:-1:-1;;;9179:18:1;;;9172:41;9230:19;;32189:87:0;8848:407:1;32189:87:0;-1:-1:-1;;;;;;32287:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;32079:239::o;23768:151::-;23875:39;23892:4;23898:2;23902:7;23875:39;;;;;;;;;;;;:16;:39::i;42815:88::-;38320:7;38340:6;-1:-1:-1;;;;;38340:6:0;19094:10;38463:23;38455:68;;;;-1:-1:-1;;;38455:68:0;;;;;;;:::i;:::-;42878:7:::1;:17:::0;;-1:-1:-1;;42878:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42815:88::o;32546:216::-;32621:7;32650:30;32461:10;:17;;32380:103;32650:30;32642:5;:38;32634:95;;;;-1:-1:-1;;;32634:95:0;;16821:2:1;32634:95:0;;;16803:21:1;16860:2;16840:18;;;16833:30;16899:34;16879:18;;;16872:62;-1:-1:-1;;;16950:18:1;;;16943:42;17002:19;;32634:95:0;16619:408:1;32634:95:0;32740:10;32751:5;32740:17;;;;;;;;:::i;:::-;;;;;;;;;32733:24;;32546:216;;;:::o;43140:120::-;43196:7;43223:29;:19;40217:14;;40132:104;43223:29;43216:36;;43140:120;:::o;42154:497::-;38320:7;38340:6;-1:-1:-1;;;;;38340:6:0;19094:10;38463:23;38455:68;;;;-1:-1:-1;;;38455:68:0;;;;;;;:::i;:::-;42246:1:::1;42231:12;:16;:52;;;;;42267:16;;42251:12;:32;;42231:52;42223:82;;;::::0;-1:-1:-1;;;42223:82:0;;15313:2:1;42223:82:0::1;::::0;::::1;15295:21:1::0;15352:2;15332:18;;;15325:30;-1:-1:-1;;;15371:18:1;;;15364:47;15428:18;;42223:82:0::1;15111:341:1::0;42223:82:0::1;40955:4;42344:12;42324:17;:7;40217:14:::0;;40132:104;42324:17:::1;:32;;;;:::i;:::-;:47;;42316:79;;;::::0;-1:-1:-1;;;42316:79:0;;8342:2:1;42316:79:0::1;::::0;::::1;8324:21:1::0;8381:2;8361:18;;;8354:30;-1:-1:-1;;;8400:18:1;;;8393:49;8459:18;;42316:79:0::1;8140:343:1::0;42316:79:0::1;42411:9;42406:238;42430:12;42426:1;:16;42406:238;;;42464:19;:7;40312:19:::0;;40330:1;40312:19;;;40241:99;42464:19:::1;42498:40;42508:10;42520:17;:7;40217:14:::0;;40132:104;42520:17:::1;42498:9;:40::i;:::-;42553:16;:18:::0;;;:16:::1;:18;::::0;::::1;:::i;:::-;;;;;;42586:46;42614:17;:7;40217:14:::0;;40132:104;42614:17:::1;42586:27;:46::i;:::-;42444:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42406:238;;;;42154:497:::0;:::o;20988:215::-;21060:7;21089:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21089:16:0;21117:19;21109:73;;;;-1:-1:-1;;;21109:73:0;;12997:2:1;21109:73:0;;;12979:21:1;13036:2;13016:18;;;13009:30;13075:34;13055:18;;;13048:62;-1:-1:-1;;;13126:18:1;;;13119:39;13175:19;;21109:73:0;12795:405:1;43370:409:0;43448:16;43477:26;43506:17;43516:6;43506:9;:17::i;:::-;43477:46;;43534:33;43584:18;43570:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43570:33:0;;43534:69;;43619:9;43614:124;43634:18;43630:1;:22;43614:124;;;43696:30;43716:6;43724:1;43696:19;:30::i;:::-;43674:16;43691:1;43674:19;;;;;;;;:::i;:::-;;;;;;;;;;:52;43654:3;;;;:::i;:::-;;;;43614:124;;;-1:-1:-1;43755:16:0;43370:409;-1:-1:-1;;;43370:409:0:o;20749:191::-;20821:7;-1:-1:-1;;;;;20842:19:0;;20834:74;;;;-1:-1:-1;;;20834:74:0;;12586:2:1;20834:74:0;;;12568:21:1;12625:2;12605:18;;;12598:30;12664:34;12644:18;;;12637:62;-1:-1:-1;;;12715:18:1;;;12708:40;12765:19;;20834:74:0;12384:406:1;20834:74:0;-1:-1:-1;;;;;;20919:16:0;;;;;:9;:16;;;;;;;20749:191::o;38854:84::-;38320:7;38340:6;-1:-1:-1;;;;;38340:6:0;19094:10;38463:23;38455:68;;;;-1:-1:-1;;;38455:68:0;;;;;;;:::i;:::-;38912:21:::1;38930:1;38912:9;:21::i;:::-;38854:84::o:0;43014:118::-;43069:7;43096:28;:18;40217:14;;40132:104;21401:94;21457:13;21483:7;21476:14;;;;;:::i;22885:271::-;-1:-1:-1;;;;;22981:24:0;;19094:10;22981:24;;22973:62;;;;-1:-1:-1;;;22973:62:0;;11394:2:1;22973:62:0;;;11376:21:1;11433:2;11413:18;;;11406:30;11472:27;11452:18;;;11445:55;11517:18;;22973:62:0;11192:349:1;22973:62:0;19094:10;23041:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23041:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;23041:53:0;;;;;;;;;;23103:48;;7864:41:1;;;23041:42:0;;19094:10;23103:48;;7837:18:1;23103:48:0;;;;;;;22885:271;;:::o;23976:280::-;24113:41;19094:10;24146:7;24113:18;:41::i;:::-;24105:103;;;;-1:-1:-1;;;24105:103:0;;;;;;;:::i;:::-;24212:39;24226:4;24232:2;24236:7;24245:5;24212:13;:39::i;:::-;23976:280;;;;:::o;41790:356::-;40955:4;41833:17;:7;40217:14;;40132:104;41833:17;:21;;41853:1;41833:21;:::i;:::-;:36;;41825:68;;;;-1:-1:-1;;;41825:68:0;;8342:2:1;41825:68:0;;;8324:21:1;8381:2;8361:18;;;8354:30;-1:-1:-1;;;8400:18:1;;;8393:49;8459:18;;41825:68:0;8140:343:1;41825:68:0;41913:7;;;;41912:8;41904:36;;;;-1:-1:-1;;;41904:36:0;;10645:2:1;41904:36:0;;;10627:21:1;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10703:18:1;;;10696:45;10758:18;;41904:36:0;10443:339:1;41904:36:0;41959:10;41973:9;41959:23;41951:49;;;;-1:-1:-1;;;41951:49:0;;16061:2:1;41951:49:0;;;16043:21:1;16100:2;16080:18;;;16073:30;-1:-1:-1;;;16119:18:1;;;16112:43;16172:18;;41951:49:0;15859:337:1;41951:49:0;42011:19;:7;40312:19;;40330:1;40312:19;;;40241:99;42011:19;42041:40;42051:10;42063:17;:7;40217:14;;40132:104;42041:40;42092:46;42120:17;:7;40217:14;;40132:104;42659:148;38320:7;38340:6;-1:-1:-1;;;;;38340:6:0;19094:10;38463:23;38455:68;;;;-1:-1:-1;;;38455:68:0;;;;;;;:::i;:::-;42709:7:::1;38340:6:::0;;42722:55:::1;::::0;-1:-1:-1;;;;;38340:6:0;;;;42751:21:::1;::::0;42709:7;42722:55;42709:7;42722:55;42751:21;38340:6;42722:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42708:69;;;42796:2;42788:11;;;::::0;::::1;;42697:110;42659:148::o:0;43787:354::-;25675:4;25692:16;;;:7;:16;;;;;;43887:13;;-1:-1:-1;;;;;25692:16:0;43912:62;;;;-1:-1:-1;;;43912:62:0;;8690:2:1;43912:62:0;;;8672:21:1;8729:2;8709:18;;;8702:30;8768:33;8748:18;;;8741:61;8819:18;;43912:62:0;8488:355:1;43912:62:0;44018:1;43998:9;43992:23;;;;;:::i;:::-;;;:27;:141;;;;;;;;;;;;;;;;;44059:9;44070:20;:9;:18;:20::i;:::-;44042:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43985:148;43787:354;-1:-1:-1;;43787:354:0:o;41364:210::-;41422:4;25692:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25692:16:0;41439:63;;;;-1:-1:-1;;;41439:63:0;;14952:2:1;41439:63:0;;;14934:21:1;;;14971:18;;;14964:30;15030:34;15010:18;;;15003:62;15082:18;;41439:63:0;14750:356:1;41439:63:0;41520:24;40906:3;41520:9;:24;:::i;:::-;:29;:46;;;;-1:-1:-1;;41553:13:0;;;41364:210::o;41142:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42911:95::-;38320:7;38340:6;-1:-1:-1;;;;;38340:6:0;19094:10;38463:23;38455:68;;;;-1:-1:-1;;;38455:68:0;;;;;;;:::i;:::-;42982:16;;::::1;::::0;:9:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;39075:175::-:0;38320:7;38340:6;-1:-1:-1;;;;;38340:6:0;19094:10;38463:23;38455:68;;;;-1:-1:-1;;;38455:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39157:22:0;::::1;39149:73;;;::::0;-1:-1:-1;;;39149:73:0;;9881:2:1;39149:73:0::1;::::0;::::1;9863:21:1::0;9920:2;9900:18;;;9893:30;9959:34;9939:18;;;9932:62;-1:-1:-1;;;10010:18:1;;;10003:36;10056:19;;39149:73:0::1;9679:402:1::0;39149:73:0::1;39226:19;39236:8;39226:9;:19::i;20437:262::-:0;20539:4;-1:-1:-1;;;;;;20558:40:0;;-1:-1:-1;;;20558:40:0;;:94;;-1:-1:-1;;;;;;;20604:48:0;;-1:-1:-1;;;20604:48:0;20558:94;:136;;;-1:-1:-1;;;;;;;;;;7947:40:0;;;20658:36;7845:147;29040:157;29108:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;29108:29:0;-1:-1:-1;;;;;29108:29:0;;;;;;;;:24;;29155:23;29108:24;29155:14;:23::i;:::-;-1:-1:-1;;;;;29146:46:0;;;;;;;;;;;29040:157;;:::o;25864:324::-;25957:4;25692:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25692:16:0;25967:73;;;;-1:-1:-1;;;25967:73:0;;11748:2:1;25967:73:0;;;11730:21:1;11787:2;11767:18;;;11760:30;11826:34;11806:18;;;11799:62;-1:-1:-1;;;11877:18:1;;;11870:42;11929:19;;25967:73:0;11546:408:1;25967:73:0;26044:13;26060:23;26075:7;26060:14;:23::i;:::-;26044:39;;26106:5;-1:-1:-1;;;;;26095:16:0;:7;-1:-1:-1;;;;;26095:16:0;;:51;;;;26139:7;-1:-1:-1;;;;;26115:31:0;:20;26127:7;26115:11;:20::i;:::-;-1:-1:-1;;;;;26115:31:0;;26095:51;:87;;;-1:-1:-1;;;;;;23327:25:0;;;23310:4;23327:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;26150:32;26087:96;25864:324;-1:-1:-1;;;;25864:324:0:o;28456:488::-;28584:4;-1:-1:-1;;;;;28557:31:0;:23;28572:7;28557:14;:23::i;:::-;-1:-1:-1;;;;;28557:31:0;;28549:85;;;;-1:-1:-1;;;28549:85:0;;14542:2:1;28549:85:0;;;14524:21:1;14581:2;14561:18;;;14554:30;14620:34;14600:18;;;14593:62;-1:-1:-1;;;14671:18:1;;;14664:39;14720:19;;28549:85:0;14340:405:1;28549:85:0;-1:-1:-1;;;;;28646:16:0;;28638:65;;;;-1:-1:-1;;;28638:65:0;;10989:2:1;28638:65:0;;;10971:21:1;11028:2;11008:18;;;11001:30;11067:34;11047:18;;;11040:62;-1:-1:-1;;;11118:18:1;;;11111:34;11162:19;;28638:65:0;10787:400:1;28638:65:0;28709:39;28730:4;28736:2;28740:7;28709:20;:39::i;:::-;28799:29;28816:1;28820:7;28799:8;:29::i;:::-;-1:-1:-1;;;;;28834:15:0;;;;;;:9;:15;;;;;:20;;28853:1;;28834:15;:20;;28853:1;;28834:20;:::i;:::-;;;;-1:-1:-1;;;;;;;28858:13:0;;;;;;:9;:13;;;;;:18;;28875:1;;28858:13;:18;;28875:1;;28858:18;:::i;:::-;;;;-1:-1:-1;;28880:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28880:21:0;-1:-1:-1;;;;;28880:21:0;;;;;;;;;28912:27;;28880:16;;28912:27;;;;;;;28456:488;;;:::o;26488:100::-;26557:26;26567:2;26571:7;26557:26;;;;;;;;;;;;:9;:26::i;41582:200::-;41669:26;41678:16;41669:8;:26::i;:::-;41665:109;;;41697:31;:19;40312;;40330:1;40312:19;;;40241:99;41665:109;41744:30;:18;40312:19;;40330:1;40312:19;;;40241:99;39255:149;39304:16;39323:6;;-1:-1:-1;;;;;39333:17:0;;;-1:-1:-1;;;;;;39333:17:0;;;;;;39359:40;;39323:6;;;;;;;39359:40;;39304:16;39359:40;39300:104;39255:149;:::o;25064:267::-;25183:28;25193:4;25199:2;25203:7;25183:9;:28::i;:::-;25223:48;25246:4;25252:2;25256:7;25265:5;25223:22;:48::i;:::-;25215:111;;;;-1:-1:-1;;;25215:111:0;;;;;;;:::i;8293:570::-;8349:13;8549:10;8545:35;;-1:-1:-1;;8565:10:0;;;;;;;;;;;;-1:-1:-1;;;8565:10:0;;;;;8293:570::o;8545:35::-;8598:5;8583:12;8625:49;8632:9;;8625:49;;8647:8;;;;:::i;:::-;;-1:-1:-1;8659:10:0;;-1:-1:-1;8667:2:0;8659:10;;:::i;:::-;;;8625:49;;;8677:19;8709:6;8699:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8699:17:0;;8677:39;;8720:114;8727:10;;8720:114;;8743:11;8753:1;8743:11;;:::i;:::-;;-1:-1:-1;8801:10:0;8809:2;8801:5;:10;:::i;:::-;8788:24;;:2;:24;:::i;:::-;8775:39;;8758:6;8765;8758:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8758:56:0;;;;;;;;-1:-1:-1;8818:11:0;8827:2;8818:11;;:::i;:::-;;;8720:114;;33313:469;-1:-1:-1;;;;;33481:18:0;;33477:151;;33505:40;33537:7;34538:10;:17;;34511:24;;;;:15;:24;;;;;:44;;;34559:24;;;;;;;;;;;;34441:147;33505:40;33477:151;;;33568:2;-1:-1:-1;;;;;33560:10:0;:4;-1:-1:-1;;;;;33560:10:0;;33556:72;;33576:47;33609:4;33615:7;33576:32;:47::i;:::-;-1:-1:-1;;;;;33635:16:0;;33631:147;;33657:45;33694:7;33657:36;:45::i;33631:147::-;33723:4;-1:-1:-1;;;;;33717:10:0;:2;-1:-1:-1;;;;;33717:10:0;;33713:65;;33733:40;33761:2;33765:7;33733:27;:40::i;26797:251::-;26896:18;26902:2;26906:7;26896:5;:18::i;:::-;26929:54;26960:1;26964:2;26968:7;26977:5;26929:22;:54::i;:::-;26918:125;;;;-1:-1:-1;;;26918:125:0;;;;;;;:::i;29720:560::-;29844:4;-1:-1:-1;;;;;29858:13:0;;10681:20;10715:8;29854:422;;29883:72;;-1:-1:-1;;;29883:72:0;;-1:-1:-1;;;;;29883:36:0;;;;;:72;;19094:10;;29934:4;;29940:7;;29949:5;;29883:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29883:72:0;;;;;;;;-1:-1:-1;;29883:72:0;;;;;;;;;;;;:::i;:::-;;;29879:367;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30084:13:0;;30080:162;;30108:60;;-1:-1:-1;;;30108:60:0;;;;;;;:::i;30080:162::-;30226:6;30220:13;30211:6;30207:2;30203:15;30196:38;29879:367;-1:-1:-1;;;;;;29991:51:0;-1:-1:-1;;;29991:51:0;;-1:-1:-1;29984:58:0;;29854:422;-1:-1:-1;30267:4:0;29720:560;;;;;;:::o;35181:882::-;35426:22;35476:1;35451:22;35468:4;35451:16;:22::i;:::-;:26;;;;:::i;:::-;35481:18;35502:26;;;:17;:26;;;;;;35426:51;;-1:-1:-1;35621:28:0;;;35617:288;;-1:-1:-1;;;;;35677:18:0;;35655:19;35677:18;;;:12;:18;;;;;;;;:34;;;;;;;;;35717:30;;;;;;:44;;;35823:30;;:17;:30;;;;;:43;;;35617:288;-1:-1:-1;35987:26:0;;;;:17;:26;;;;;;;;35980:33;;;-1:-1:-1;;;;;36024:18:0;;;;;:12;:18;;;;;:34;;;;;;;36017:41;35181:882::o;36336:985::-;36593:10;:17;36568:22;;36593:21;;36613:1;;36593:21;:::i;:::-;36618:18;36639:24;;;:15;:24;;;;;;36984:10;:26;;36568:46;;-1:-1:-1;36639:24:0;;36568:46;;36984:26;;;;;;:::i;:::-;;;;;;;;;36962:48;;37041:11;37016:10;37027;37016:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;37114:28;;;:15;:28;;;;;;;:41;;;37272:24;;;;;37265:31;37300:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;36407:914;;;36336:985;:::o;34061:197::-;34139:14;34156:20;34173:2;34156:16;:20::i;:::-;-1:-1:-1;;;;;34180:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;34218:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;34061:197:0:o;27334:337::-;-1:-1:-1;;;;;27407:16:0;;27399:61;;;;-1:-1:-1;;;27399:61:0;;13407:2:1;27399:61:0;;;13389:21:1;;;13426:18;;;13419:30;13485:34;13465:18;;;13458:62;13537:18;;27399:61:0;13205:356:1;27399:61:0;25675:4;25692:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25692:16:0;:30;27464:58;;;;-1:-1:-1;;;27464:58:0;;10288:2:1;27464:58:0;;;10270:21:1;10327:2;10307:18;;;10300:30;10366;10346:18;;;10339:58;10414:18;;27464:58:0;10086:352:1;27464:58:0;27528:45;27557:1;27561:2;27565:7;27528:20;:45::i;:::-;-1:-1:-1;;;;;27579:13:0;;;;;;:9;:13;;;;;:18;;27596:1;;27579:13;:18;;27596:1;;27579:18;:::i;:::-;;;;-1:-1:-1;;27601:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;27601:21:0;-1:-1:-1;;;;;27601:21:0;;;;;;;;27633:33;;27601:16;;;27633:33;;27601:16;;27633:33;27334:337;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:186;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;:::-;1134:39;993:186;-1:-1:-1;;;993:186:1:o;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:328::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1634:29;1653:9;1634:29;:::i;:::-;1624:39;;1682:38;1716:2;1705:9;1701:18;1682:38;:::i;:::-;1672:48;;1767:2;1756:9;1752:18;1739:32;1729:42;;1449:328;;;;;:::o;1782:666::-;1877:6;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;1994:29;2013:9;1994:29;:::i;:::-;1984:39;;2042:38;2076:2;2065:9;2061:18;2042:38;:::i;:::-;2032:48;;2127:2;2116:9;2112:18;2099:32;2089:42;;2182:2;2171:9;2167:18;2154:32;2209:18;2201:6;2198:30;2195:50;;;2241:1;2238;2231:12;2195:50;2264:22;;2317:4;2309:13;;2305:27;-1:-1:-1;2295:55:1;;2346:1;2343;2336:12;2295:55;2369:73;2434:7;2429:2;2416:16;2411:2;2407;2403:11;2369:73;:::i;:::-;2359:83;;;1782:666;;;;;;;:::o;2453:254::-;2518:6;2526;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2618:29;2637:9;2618:29;:::i;:::-;2608:39;;2666:35;2697:2;2686:9;2682:18;2666:35;:::i;2712:254::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2880:29;2899:9;2880:29;:::i;:::-;2870:39;2956:2;2941:18;;;;2928:32;;-1:-1:-1;;;2712:254:1:o;2971:180::-;3027:6;3080:2;3068:9;3059:7;3055:23;3051:32;3048:52;;;3096:1;3093;3086:12;3048:52;3119:26;3135:9;3119:26;:::i;3156:245::-;3214:6;3267:2;3255:9;3246:7;3242:23;3238:32;3235:52;;;3283:1;3280;3273:12;3235:52;3322:9;3309:23;3341:30;3365:5;3341:30;:::i;3406:249::-;3475:6;3528:2;3516:9;3507:7;3503:23;3499:32;3496:52;;;3544:1;3541;3534:12;3496:52;3576:9;3570:16;3595:30;3619:5;3595:30;:::i;3660:450::-;3729:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:52;;;3798:1;3795;3788:12;3750:52;3838:9;3825:23;3871:18;3863:6;3860:30;3857:50;;;3903:1;3900;3893:12;3857:50;3926:22;;3979:4;3971:13;;3967:27;-1:-1:-1;3957:55:1;;4008:1;4005;3998:12;3957:55;4031:73;4096:7;4091:2;4078:16;4073:2;4069;4065:11;4031:73;:::i;4115:180::-;4174:6;4227:2;4215:9;4206:7;4202:23;4198:32;4195:52;;;4243:1;4240;4233:12;4195:52;-1:-1:-1;4266:23:1;;4115:180;-1:-1:-1;4115:180:1:o;4300:257::-;4341:3;4379:5;4373:12;4406:6;4401:3;4394:19;4422:63;4478:6;4471:4;4466:3;4462:14;4455:4;4448:5;4444:16;4422:63;:::i;:::-;4539:2;4518:15;-1:-1:-1;;4514:29:1;4505:39;;;;4546:4;4501:50;;4300:257;-1:-1:-1;;4300:257:1:o;4562:185::-;4604:3;4642:5;4636:12;4657:52;4702:6;4697:3;4690:4;4683:5;4679:16;4657:52;:::i;:::-;4725:16;;;;;4562:185;-1:-1:-1;;4562:185:1:o;4870:1301::-;5147:3;5176:1;5209:6;5203:13;5239:3;5261:1;5289:9;5285:2;5281:18;5271:28;;5349:2;5338:9;5334:18;5371;5361:61;;5415:4;5407:6;5403:17;5393:27;;5361:61;5441:2;5489;5481:6;5478:14;5458:18;5455:38;5452:165;;;-1:-1:-1;;;5516:33:1;;5572:4;5569:1;5562:15;5602:4;5523:3;5590:17;5452:165;5633:18;5660:104;;;;5778:1;5773:320;;;;5626:467;;5660:104;-1:-1:-1;;5693:24:1;;5681:37;;5738:16;;;;-1:-1:-1;5660:104:1;;5773:320;17287:1;17280:14;;;17324:4;17311:18;;5868:1;5882:165;5896:6;5893:1;5890:13;5882:165;;;5974:14;;5961:11;;;5954:35;6017:16;;;;5911:10;;5882:165;;;5886:3;;6076:6;6071:3;6067:16;6060:23;;5626:467;;;;;;;6109:56;6134:30;6160:3;6152:6;6134:30;:::i;:::-;-1:-1:-1;;;4812:20:1;;4857:1;4848:11;;4752:113;6109:56;6102:63;4870:1301;-1:-1:-1;;;;;4870:1301:1:o;6594:488::-;-1:-1:-1;;;;;6863:15:1;;;6845:34;;6915:15;;6910:2;6895:18;;6888:43;6962:2;6947:18;;6940:34;;;7010:3;7005:2;6990:18;;6983:31;;;6788:4;;7031:45;;7056:19;;7048:6;7031:45;:::i;:::-;7023:53;6594:488;-1:-1:-1;;;;;;6594:488:1:o;7087:632::-;7258:2;7310:21;;;7380:13;;7283:18;;;7402:22;;;7229:4;;7258:2;7481:15;;;;7455:2;7440:18;;;7229:4;7524:169;7538:6;7535:1;7532:13;7524:169;;;7599:13;;7587:26;;7668:15;;;;7633:12;;;;7560:1;7553:9;7524:169;;;-1:-1:-1;7710:3:1;;7087:632;-1:-1:-1;;;;;;7087:632:1:o;7916:219::-;8065:2;8054:9;8047:21;8028:4;8085:44;8125:2;8114:9;8110:18;8102:6;8085:44;:::i;9260:414::-;9462:2;9444:21;;;9501:2;9481:18;;;9474:30;9540:34;9535:2;9520:18;;9513:62;-1:-1:-1;;;9606:2:1;9591:18;;9584:48;9664:3;9649:19;;9260:414::o;13979:356::-;14181:2;14163:21;;;14200:18;;;14193:30;14259:34;14254:2;14239:18;;14232:62;14326:2;14311:18;;13979:356::o;16201:413::-;16403:2;16385:21;;;16442:2;16422:18;;;16415:30;16481:34;16476:2;16461:18;;16454:62;-1:-1:-1;;;16547:2:1;16532:18;;16525:47;16604:3;16589:19;;16201:413::o;17340:128::-;17380:3;17411:1;17407:6;17404:1;17401:13;17398:39;;;17417:18;;:::i;:::-;-1:-1:-1;17453:9:1;;17340:128::o;17473:120::-;17513:1;17539;17529:35;;17544:18;;:::i;:::-;-1:-1:-1;17578:9:1;;17473:120::o;17598:125::-;17638:4;17666:1;17663;17660:8;17657:34;;;17671:18;;:::i;:::-;-1:-1:-1;17708:9:1;;17598:125::o;17728:258::-;17800:1;17810:113;17824:6;17821:1;17818:13;17810:113;;;17900:11;;;17894:18;17881:11;;;17874:39;17846:2;17839:10;17810:113;;;17941:6;17938:1;17935:13;17932:48;;;-1:-1:-1;;17976:1:1;17958:16;;17951:27;17728:258::o;17991:136::-;18030:3;18058:5;18048:39;;18067:18;;:::i;:::-;-1:-1:-1;;;18103:18:1;;17991:136::o;18132:380::-;18211:1;18207:12;;;;18254;;;18275:61;;18329:4;18321:6;18317:17;18307:27;;18275:61;18382:2;18374:6;18371:14;18351:18;18348:38;18345:161;;;18428:10;18423:3;18419:20;18416:1;18409:31;18463:4;18460:1;18453:15;18491:4;18488:1;18481:15;18345:161;;18132:380;;;:::o;18517:135::-;18556:3;-1:-1:-1;;18577:17:1;;18574:43;;;18597:18;;:::i;:::-;-1:-1:-1;18644:1:1;18633:13;;18517:135::o;18657:112::-;18689:1;18715;18705:35;;18720:18;;:::i;:::-;-1:-1:-1;18754:9:1;;18657:112::o;18774:127::-;18835:10;18830:3;18826:20;18823:1;18816:31;18866:4;18863:1;18856:15;18890:4;18887:1;18880:15;18906:127;18967:10;18962:3;18958:20;18955:1;18948:31;18998:4;18995:1;18988:15;19022:4;19019:1;19012:15;19038:127;19099:10;19094:3;19090:20;19087:1;19080:31;19130:4;19127:1;19120:15;19154:4;19151:1;19144:15;19170:127;19231:10;19226:3;19222:20;19219:1;19212:31;19262:4;19259:1;19252:15;19286:4;19283:1;19276:15;19302:127;19363:10;19358:3;19354:20;19351:1;19344:31;19394:4;19391:1;19384:15;19418:4;19415:1;19408:15;19434:131;-1:-1:-1;;;;;;19508:32:1;;19498:43;;19488:71;;19555:1;19552;19545:12

Swarm Source

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