ERC-721
Overview
Max Total Supply
3,333 dragon
Holders
138
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
6 dragonLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OmniDragons
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-15 */ /** *Submitted for verification at polygonscan.com on 2022-04-14 */ /** *Submitted for verification at snowtrace.io on 2022-04-12 */ // Sources flattened with hardhat v2.9.2 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (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/[email protected] // OpenZeppelin Contracts v4.4.1 (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/[email protected] // OpenZeppelin Contracts v4.4.1 (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/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (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/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (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/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (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/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (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 { _setApprovalForAll(_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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/interfaces/ILayerZeroReceiver.sol pragma solidity >=0.5.0; interface ILayerZeroReceiver { // @notice LayerZero endpoint will invoke this function to deliver the message on the destination // @param _srcChainId - the source endpoint identifier // @param _srcAddress - the source sending contract address from the source chain // @param _nonce - the ordered message nonce // @param _payload - the signed payload is the UA bytes has encoded to be sent function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external; } // File contracts/interfaces/ILayerZeroUserApplicationConfig.sol pragma solidity >=0.5.0; interface ILayerZeroUserApplicationConfig { // @notice set the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _configType - type of configuration. every messaging library has its own convention. // @param _config - configuration in the bytes. can encode arbitrary content. function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external; // @notice set the send() LayerZero messaging library version to _version // @param _version - new messaging library version function setSendVersion(uint16 _version) external; // @notice set the lzReceive() LayerZero messaging library version to _version // @param _version - new messaging library version function setReceiveVersion(uint16 _version) external; // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload // @param _srcChainId - the chainId of the source chain // @param _srcAddress - the contract address of the source contract at the source chain function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external; } // File contracts/interfaces/ILayerZeroEndpoint.sol pragma solidity >=0.5.0; interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig { // @notice send a LayerZero message to the specified address at a LayerZero endpoint. // @param _dstChainId - the destination chain identifier // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains // @param _payload - a custom bytes payload to send to the destination contract // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable; // @notice used by the messaging library to publish verified payload // @param _srcChainId - the source chain identifier // @param _srcAddress - the source contract (as bytes) at the source chain // @param _dstAddress - the address on destination chain // @param _nonce - the unbound message ordering nonce // @param _gasLimit - the gas limit for external contract execution // @param _payload - verified payload to send to the destination contract function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external; // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64); // @notice get the outboundNonce from this source chain which, consequently, is always an EVM // @param _srcAddress - the source chain contract address function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64); // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery // @param _dstChainId - the destination chain identifier // @param _userApplication - the user app address on this EVM chain // @param _payload - the custom message to send over LayerZero // @param _payInZRO - if false, user app pays the protocol fee in native token // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee); // @notice get this Endpoint's immutable source identifier function getChainId() external view returns (uint16); // @notice the interface to retry failed message on this Endpoint destination // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address // @param _payload - the payload to be retried function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external; // @notice query if any STORED payload (message blocking) at the endpoint. // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool); // @notice query if the _libraryAddress is valid for sending msgs. // @param _userApplication - the user app address on this EVM chain function getSendLibraryAddress(address _userApplication) external view returns (address); // @notice query if the _libraryAddress is valid for receiving msgs. // @param _userApplication - the user app address on this EVM chain function getReceiveLibraryAddress(address _userApplication) external view returns (address); // @notice query if the non-reentrancy guard for send() is on // @return true if the guard is on. false otherwise function isSendingPayload() external view returns (bool); // @notice query if the non-reentrancy guard for receive() is on // @return true if the guard is on. false otherwise function isReceivingPayload() external view returns (bool); // @notice get the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _userApplication - the contract address of the user application // @param _configType - type of configuration. every messaging library has its own convention. function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory); // @notice get the send() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getSendVersion(address _userApplication) external view returns (uint16); // @notice get the lzReceive() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getReceiveVersion(address _userApplication) external view returns (uint16); } // File contracts/NonBlockingReceiver.sol pragma solidity 0.8.4; abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver { ILayerZeroEndpoint public endpoint; struct FailedMessages { uint payloadLength; bytes32 payloadHash; } mapping(uint16 => mapping(bytes => mapping(uint => FailedMessages))) public failedMessages; mapping(uint16 => bytes) public trustedSourceLookup; event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload); // abstract function function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) virtual internal; function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) external override { require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security require(_srcAddress.length == trustedSourceLookup[_srcChainId].length && keccak256(_srcAddress) == keccak256(trustedSourceLookup[_srcChainId]), "NonblockingReceiver: invalid source sending contract"); // try-catch all errors/exceptions // having failed messages does not block messages passing try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) { // do nothing } catch { // error / exception failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(_payload.length, keccak256(_payload)); emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload); } } function onLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public { // only internal transaction require(msg.sender == address(this), "NonblockingReceiver: caller must be Bridge."); _LzReceive( _srcChainId, _srcAddress, _nonce, _payload); } function _lzSend(uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _txParam) internal { endpoint.send{value: msg.value}(_dstChainId, trustedSourceLookup[_dstChainId], _payload, _refundAddress, _zroPaymentAddress, _txParam); } function retryMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes calldata _payload) external payable { // assert there is message to retry FailedMessages storage failedMsg = failedMessages[_srcChainId][_srcAddress][_nonce]; require(failedMsg.payloadHash != bytes32(0), "NonblockingReceiver: no stored message"); require(_payload.length == failedMsg.payloadLength && keccak256(_payload) == failedMsg.payloadHash, "LayerZero: invalid payload"); // clear the stored message failedMsg.payloadLength = 0; failedMsg.payloadHash = bytes32(0); // execute the message. revert if it fails again this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } function setTrustedSource(uint16 _chainId, bytes calldata _trustedSource) external onlyOwner { require(trustedSourceLookup[_chainId].length == 0, "The trusted source address has already been set for the chainId!"); trustedSourceLookup[_chainId] = _trustedSource; } } // File contracts/OmnichainNonFungibleToken.sol pragma solidity 0.8.4; /// @title A LayerZero OmnichainNonFungibleToken Contract /// @author Omni Dragons /// @notice You can use this to mint ONFT and transfer across chain /// @dev All function calls are currently implemented without side effects contract OmniDragons is ERC721, NonblockingReceiver, ILayerZeroUserApplicationConfig { using Strings for uint256; string public baseTokenURI; string public baseNotRevealedURI; address _owner; uint256 public nextTokenId; uint256 public immutable maxSupply; uint256 public immutable maxMintPerTx = 2; uint256 public immutable maxPerWallet = 10; uint256 public immutable price = 0.002 ether; bool public paused = true; bool public revealed = false; /// @notice Constructor for the OmnichainNonFungibleToken /// @param _baseTokenURI the Uniform Resource Identifier (URI) for tokenId token /// @param _layerZeroEndpoint handles message transmission across chains /// @param _startToken the starting mint number on this chain /// @param _maxSupply the max number of mints on this chain constructor( string memory _baseTokenURI, string memory _baseNotRevealedURI, address _layerZeroEndpoint, uint256 _startToken, uint256 _maxSupply ) ERC721("Omni Dragons", "dragon"){ setBaseURI(_baseTokenURI); setBaseNotRevealedURI(_baseNotRevealedURI); endpoint = ILayerZeroEndpoint(_layerZeroEndpoint); nextTokenId = _startToken; maxSupply = _maxSupply; _owner = msg.sender; } function mint(uint8 _amountMintDragons) external payable { require(!paused, "OMNI_DRAGONS: IS PAUSED"); require(_amountMintDragons > 0 && _amountMintDragons <= maxMintPerTx, "OMNI_DRAGONS: CAN ONLY MINT 5 PER TX"); require(nextTokenId + _amountMintDragons <= maxSupply, "OMNI_DRAGONS: MAX_SUPPLY_FOR_CHAIN"); require(_amountMintDragons <= maxMintPerTx && balanceOf(msg.sender) < maxPerWallet, "OMNI_DRAGONS: MAX_15_OMNI_DRAGONS_PER_WALLET"); require(_amountMintDragons * price == msg.value, "OMNI_DRAGONS: NOT ENOUGHT VALUE SENT"); unchecked { for(uint256 i = 0; i < _amountMintDragons; i++){ _safeMint(msg.sender, nextTokenId++); } } } function airdropDragons(address[] memory _airdropAdress) public onlyOwner { for (uint8 i = 0; i < _airdropAdress.length; i++) { require(nextTokenId + i <= maxSupply, "OMNI_DRAGONS: MAX_SUPPLY_FOR_CHAIN"); _safeMint(_airdropAdress[i], nextTokenId++); } } function totalSupply() public view returns (uint) { return maxSupply; } function setPaused(bool _statePaused) public onlyOwner { paused = _statePaused; } /// @notice Burn OmniChainNFT_tokenId on source chain and mint on destination chain /// @param _chainId the destination chain id you want to transfer too /// @param omniChainNFT_tokenId the id of the ONFT you want to transfer function traverseNFT( uint16 _chainId, uint256 omniChainNFT_tokenId ) public payable { require(trustedSourceLookup[_chainId].length != 0, "This chain is not a trusted source source."); // burn ONFT on source chain _burn(omniChainNFT_tokenId); // encode payload w/ sender address and ONFT token id bytes memory payload = abi.encode(msg.sender, omniChainNFT_tokenId); // encode adapterParams w/ extra gas for destination chain // This example uses 500,000 gas. Your implementation may need more. uint16 version = 1; uint gas = 350000; bytes memory adapterParams = abi.encodePacked(version, gas); // use LayerZero estimateFees for cross chain delivery (uint quotedLayerZeroFee, ) = endpoint.estimateFees(_chainId, address(this), payload, false, adapterParams); require(msg.value >= quotedLayerZeroFee, "Not enough gas to cover cross chain transfer."); endpoint.send{value:msg.value}( _chainId, // destination chainId trustedSourceLookup[_chainId], // destination address of OmnichainNFT payload, // abi.encode()'ed bytes payable(msg.sender), // refund address address(0x0), // future parameter adapterParams // adapterParams ); } /// @notice Set the baseTokenURI /// @param _baseTokenURI to set function setBaseURI(string memory _baseTokenURI) public onlyOwner { baseTokenURI = _baseTokenURI; } function setBaseNotRevealedURI(string memory _baseRevealedURI) public onlyOwner { baseNotRevealedURI = _baseRevealedURI; } /// @notice Get the base URI function _baseURI() override internal view returns (string memory) { return baseTokenURI; } function tokenURI(uint256 tokenId) public view virtual override returns(string memory){ require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token"); if(revealed == false) { return baseNotRevealedURI; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(),".json")) : ""; } function reveal() public onlyOwner { revealed = true; } function withdraw() external onlyOwner { uint256 balance = address(this).balance; (bool success, ) = _msgSender().call{value: balance}(""); require(success, "Failed to send"); } /// @notice Override the _LzReceive internal function of the NonblockingReceiver // @param _srcChainId - the source endpoint identifier // @param _srcAddress - the source sending contract address from the source chain // @param _nonce - the ordered message nonce // @param _payload - the signed payload is the UA bytes has encoded to be sent /// @dev safe mints the ONFT on your destination chain function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal override { (address _dstAddress, uint256 tokenId) = abi.decode(_payload, (address, uint256)); _safeMint(_dstAddress, tokenId); } //---------------------------DAO CALL---------------------------------------- // generic config for user Application function setConfig( uint16 _version, uint16 _chainId, uint256 _configType, bytes calldata _config ) external override onlyOwner { endpoint.setConfig(_version, _chainId, _configType, _config); } function setSendVersion(uint16 _version) external override onlyOwner { endpoint.setSendVersion(_version); } function setReceiveVersion(uint16 _version) external override onlyOwner { endpoint.setReceiveVersion(_version); } function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external override onlyOwner { endpoint.forceResumeReceive(_srcChainId, _srcAddress); } function renounceOwnership() public override onlyOwner {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"},{"internalType":"string","name":"_baseNotRevealedURI","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"},{"internalType":"uint256","name":"_startToken","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"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":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","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":[{"internalType":"address[]","name":"_airdropAdress","type":"address[]"}],"name":"airdropDragons","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":[],"name":"baseNotRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"contract ILayerZeroEndpoint","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"forceResumeReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMintPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_amountMintDragons","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseRevealedURI","type":"string"}],"name":"setBaseNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_configType","type":"uint256"},{"internalType":"bytes","name":"_config","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_statePaused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setReceiveVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setSendVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedSource","type":"bytes"}],"name":"setTrustedSource","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"omniChainNFT_tokenId","type":"uint256"}],"name":"traverseNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedSourceLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610100604052600260a052600a60c05266071afd498d000060e052600e805461ffff191660011790553480156200003557600080fd5b5060405162003a2638038062003a268339810160408190526200005891620003a0565b604080518082018252600c81526b4f6d6e6920447261676f6e7360a01b602080830191825283518085019094526006845265323930b3b7b760d11b908401528151919291620000aa9160009162000247565b508051620000c090600190602084019062000247565b505050620000dd620000d76200012e60201b60201c565b62000132565b620000e88562000184565b620000f384620001ec565b600780546001600160a01b039094166001600160a01b0319948516179055600d91909155608052600c805490911633179055506200048d9050565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620001d35760405162461bcd60e51b8152602060048201819052602482015260008051602062003a0683398151915260448201526064015b60405180910390fd5b8051620001e890600a90602084019062000247565b5050565b6006546001600160a01b03163314620002375760405162461bcd60e51b8152602060048201819052602482015260008051602062003a068339815191526044820152606401620001ca565b8051620001e890600b9060208401905b82805462000255906200043a565b90600052602060002090601f016020900481019282620002795760008555620002c4565b82601f106200029457805160ff1916838001178555620002c4565b82800160010185558215620002c4579182015b82811115620002c4578251825591602001919060010190620002a7565b50620002d2929150620002d6565b5090565b5b80821115620002d25760008155600101620002d7565b600082601f830112620002fe578081fd5b81516001600160401b03808211156200031b576200031b62000477565b604051601f8301601f19908116603f0116810190828211818310171562000346576200034662000477565b8160405283815260209250868385880101111562000362578485fd5b8491505b8382101562000385578582018301518183018401529082019062000366565b838211156200039657848385830101525b9695505050505050565b600080600080600060a08688031215620003b8578081fd5b85516001600160401b0380821115620003cf578283fd5b620003dd89838a01620002ed565b96506020880151915080821115620003f3578283fd5b506200040288828901620002ed565b604088015190955090506001600160a01b038116811462000421578182fd5b6060870151608090970151959894975095949392505050565b600181811c908216806200044f57607f821691505b602082108114156200047157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160e05161350e620004f8600039600081816106bc015261139c0152600081816104a0015261130b0152600081816108210152818161120d01526112dd0152600081816103b6015281816107cd0152818161128d0152611550015261350e6000f3fe6080604052600436106102715760003560e01c806370a082311161014f578063a475b5dd116100c1578063d547cfb71161007a578063d547cfb7146107a6578063d5abeb01146107bb578063d73f057e146107ef578063de7fcb1d1461080f578063e985e9c514610843578063f2fde38b1461088c57600080fd5b8063a475b5dd146106fe578063b716c78314610713578063b88d4fde14610733578063c87b56dd14610753578063cbed8b9c14610773578063d1deba1f1461079357600080fd5b80638da5cb5b116101135780638da5cb5b146105f95780638ee749121461061757806395d89b4114610682578063971c593214610697578063a035b1fe146106aa578063a22cb465146106de57600080fd5b806370a082311461056e578063715018a61461058e57806375794a3c146105a357806381c986ee146105b95780638bff45e1146105d957600080fd5b80632f1a7b54116101e857806351830227116101ac57806351830227146104c257806355f804b3146104e15780635c975abb146105015780635e280f111461051b5780636352211e1461053b5780636ecd23061461055b57600080fd5b80632f1a7b54146104245780633ccfd60b1461043957806342842e0e1461044e57806342d65a8d1461046e578063453c23101461048e57600080fd5b8063095ea7b31161023a578063095ea7b31461034757806310ddb1371461036757806316c38b3c1461038757806318160ddd146103a75780631c37a822146103e457806323b872dd1461040457600080fd5b80621d35671461027657806301ffc9a71461029857806306fdde03146102cd57806307e0db17146102ef578063081812fc1461030f575b600080fd5b34801561028257600080fd5b50610296610291366004612d36565b6108ac565b005b3480156102a457600080fd5b506102b86102b3366004612b73565b610aa6565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610af8565b6040516102c49190612fe9565b3480156102fb57600080fd5b5061029661030a366004612bf0565b610b8a565b34801561031b57600080fd5b5061032f61032a366004612e21565b610c19565b6040516001600160a01b0390911681526020016102c4565b34801561035357600080fd5b50610296610362366004612a7b565b610cae565b34801561037357600080fd5b50610296610382366004612bf0565b610dc4565b34801561039357600080fd5b506102966103a2366004612b59565b610e22565b3480156103b357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020016102c4565b3480156103f057600080fd5b506102966103ff366004612d36565b610e5f565b34801561041057600080fd5b5061029661041f36600461299e565b610ece565b34801561043057600080fd5b506102e2610eff565b34801561044557600080fd5b50610296610f8d565b34801561045a57600080fd5b5061029661046936600461299e565b611046565b34801561047a57600080fd5b50610296610489366004612c0a565b611061565b34801561049a57600080fd5b506103d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ce57600080fd5b50600e546102b890610100900460ff1681565b3480156104ed57600080fd5b506102966104fc366004612bab565b6110f6565b34801561050d57600080fd5b50600e546102b89060ff1681565b34801561052757600080fd5b5060075461032f906001600160a01b031681565b34801561054757600080fd5b5061032f610556366004612e21565b611133565b610296610569366004612e5c565b6111aa565b34801561057a57600080fd5b506103d661058936600461291d565b611449565b34801561059a57600080fd5b506102966114d0565b3480156105af57600080fd5b506103d6600d5481565b3480156105c557600080fd5b506102e26105d4366004612bf0565b6114fc565b3480156105e557600080fd5b506102966105f4366004612aa6565b611515565b34801561060557600080fd5b506006546001600160a01b031661032f565b34801561062357600080fd5b5061066d610632366004612c5a565b600860209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b604080519283526020830191909152016102c4565b34801561068e57600080fd5b506102e26115fa565b6102966106a5366004612e06565b611609565b3480156106b657600080fd5b506103d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ea57600080fd5b506102966106f9366004612a47565b611857565b34801561070a57600080fd5b50610296611862565b34801561071f57600080fd5b5061029661072e366004612bab565b61189d565b34801561073f57600080fd5b5061029661074e3660046129de565b6118da565b34801561075f57600080fd5b506102e261076e366004612e21565b61190c565b34801561077f57600080fd5b5061029661078e366004612dab565b611a88565b6102966107a1366004612cae565b611b23565b3480156107b257600080fd5b506102e2611cb0565b3480156107c757600080fd5b506103d67f000000000000000000000000000000000000000000000000000000000000000081565b3480156107fb57600080fd5b5061029661080a366004612c0a565b611cbd565b34801561081b57600080fd5b506103d67f000000000000000000000000000000000000000000000000000000000000000081565b34801561084f57600080fd5b506102b861085e366004612966565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561089857600080fd5b506102966108a736600461291d565b611d9a565b6007546001600160a01b031633146108c357600080fd5b61ffff8416600090815260096020526040902080546108e1906133e1565b90508351148015610920575061ffff841660009081526009602052604090819020905161090e9190612efe565b60405180910390208380519060200120145b61098e5760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a822906109b79087908790879087906004016131d0565b600060405180830381600087803b1580156109d157600080fd5b505af19250505080156109e2575060015b610aa0576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff16815260200190815260200160002084604051610a2c9190612ee2565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d90610a979086908690869086906131d0565b60405180910390a15b50505050565b60006001600160e01b031982166380ac58cd60e01b1480610ad757506001600160e01b03198216635b5e139f60e01b145b80610af257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008054610b07906133e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b33906133e1565b8015610b805780601f10610b5557610100808354040283529160200191610b80565b820191906000526020600020905b815481529060010190602001808311610b6357829003601f168201915b5050505050905090565b6006546001600160a01b03163314610bb45760405162461bcd60e51b815260040161098590613090565b6007546040516307e0db1760e01b815261ffff831660048201526001600160a01b03909116906307e0db17906024015b600060405180830381600087803b158015610bfe57600080fd5b505af1158015610c12573d6000803e3d6000fd5b5050505050565b6000818152600260205260408120546001600160a01b0316610c925760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610985565b506000908152600460205260409020546001600160a01b031690565b6000610cb982611133565b9050806001600160a01b0316836001600160a01b03161415610d275760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610985565b336001600160a01b0382161480610d435750610d43813361085e565b610db55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610985565b610dbf8383611e35565b505050565b6006546001600160a01b03163314610dee5760405162461bcd60e51b815260040161098590613090565b6007546040516310ddb13760e01b815261ffff831660048201526001600160a01b03909116906310ddb13790602401610be4565b6006546001600160a01b03163314610e4c5760405162461bcd60e51b815260040161098590613090565b600e805460ff1916911515919091179055565b333014610ec25760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526a10313290213934b233b29760a91b6064820152608401610985565b610aa084848484611ea3565b610ed83382611ed0565b610ef45760405162461bcd60e51b8152600401610985906130c5565b610dbf838383611fc7565b600b8054610f0c906133e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f38906133e1565b8015610f855780601f10610f5a57610100808354040283529160200191610f85565b820191906000526020600020905b815481529060010190602001808311610f6857829003601f168201915b505050505081565b6006546001600160a01b03163314610fb75760405162461bcd60e51b815260040161098590613090565b6040514790600090339083908381818185875af1925050503d8060008114610ffb576040519150601f19603f3d011682016040523d82523d6000602084013e611000565b606091505b50509050806110425760405162461bcd60e51b815260206004820152600e60248201526d11985a5b1959081d1bc81cd95b9960921b6044820152606401610985565b5050565b610dbf838383604051806020016040528060008152506118da565b6006546001600160a01b0316331461108b5760405162461bcd60e51b815260040161098590613090565b6007546040516342d65a8d60e01b81526001600160a01b03909116906342d65a8d906110bf9086908690869060040161316a565b600060405180830381600087803b1580156110d957600080fd5b505af11580156110ed573d6000803e3d6000fd5b50505050505050565b6006546001600160a01b031633146111205760405162461bcd60e51b815260040161098590613090565b805161104290600a906020840190612716565b6000818152600260205260408120546001600160a01b031680610af25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610985565b600e5460ff16156111fd5760405162461bcd60e51b815260206004820152601760248201527f4f4d4e495f445241474f4e533a204953205041555345440000000000000000006044820152606401610985565b60008160ff1611801561123357507f00000000000000000000000000000000000000000000000000000000000000008160ff1611155b61128b5760405162461bcd60e51b8152602060048201526024808201527f4f4d4e495f445241474f4e533a2043414e204f4e4c59204d494e5420352050456044820152630a440a8b60e31b6064820152608401610985565b7f00000000000000000000000000000000000000000000000000000000000000008160ff16600d546112bd9190613353565b11156112db5760405162461bcd60e51b81526004016109859061304e565b7f00000000000000000000000000000000000000000000000000000000000000008160ff161115801561133557507f000000000000000000000000000000000000000000000000000000000000000061133333611449565b105b6113965760405162461bcd60e51b815260206004820152602c60248201527f4f4d4e495f445241474f4e533a204d41585f31355f4f4d4e495f445241474f4e60448201526b14d7d4115497d5d05313115560a21b6064820152608401610985565b346113c47f000000000000000000000000000000000000000000000000000000000000000060ff841661337f565b1461141d5760405162461bcd60e51b8152602060048201526024808201527f4f4d4e495f445241474f4e533a204e4f5420454e4f554748542056414c55452060448201526314d1539560e21b6064820152608401610985565b60005b8160ff1681101561104257600d805460018101909155611441903390612163565b600101611420565b60006001600160a01b0382166114b45760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610985565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146114fa5760405162461bcd60e51b815260040161098590613090565b565b60096020526000908152604090208054610f0c906133e1565b6006546001600160a01b0316331461153f5760405162461bcd60e51b815260040161098590613090565b60005b81518160ff161015611042577f00000000000000000000000000000000000000000000000000000000000000008160ff16600d546115809190613353565b111561159e5760405162461bcd60e51b81526004016109859061304e565b6115e8828260ff16815181106115c457634e487b7160e01b600052603260045260246000fd5b6020026020010151600d60008154809291906115df9061341c565b91905055612163565b806115f281613437565b915050611542565b606060018054610b07906133e1565b61ffff821660009081526009602052604090208054611627906133e1565b1515905061168a5760405162461bcd60e51b815260206004820152602a60248201527f5468697320636861696e206973206e6f742061207472757374656420736f757260448201526931b29039b7bab931b29760b11b6064820152608401610985565b6116938161217d565b60408051336020820152808201839052815180820383018152606082018352600160f01b60808301526205573060828084018290528451808503909101815260a284019485905260075463040a7bb160e41b90955291936001939192916000916001600160a01b0316906340a7bb1090611719908a9030908a908790899060a601613116565b604080518083038186803b15801561173057600080fd5b505afa158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190612e39565b509050803410156117d15760405162461bcd60e51b815260206004820152602d60248201527f4e6f7420656e6f7567682067617320746f20636f7665722063726f737320636860448201526c30b4b7103a3930b739b332b91760991b6064820152608401610985565b60075461ffff8816600090815260096020526040808220905162c5803160e81b81526001600160a01b039093169263c580310092349261181c928d928c913391908b90600401613219565b6000604051808303818588803b15801561183557600080fd5b505af1158015611849573d6000803e3d6000fd5b505050505050505050505050565b611042338383612218565b6006546001600160a01b0316331461188c5760405162461bcd60e51b815260040161098590613090565b600e805461ff001916610100179055565b6006546001600160a01b031633146118c75760405162461bcd60e51b815260040161098590613090565b805161104290600b906020840190612716565b6118e43383611ed0565b6119005760405162461bcd60e51b8152600401610985906130c5565b610aa0848484846122e7565b6000818152600260205260409020546060906001600160a01b031661198b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610985565b600e54610100900460ff16611a2c57600b80546119a7906133e1565b80601f01602080910402602001604051908101604052809291908181526020018280546119d3906133e1565b8015611a205780601f106119f557610100808354040283529160200191611a20565b820191906000526020600020905b815481529060010190602001808311611a0357829003601f168201915b50505050509050919050565b6000611a3661231a565b90506000815111611a565760405180602001604052806000815250611a81565b80611a6084612329565b604051602001611a71929190612f6d565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314611ab25760405162461bcd60e51b815260040161098590613090565b6007546040516332fb62e760e21b81526001600160a01b039091169063cbed8b9c90611aea90889088908890889088906004016132f5565b600060405180830381600087803b158015611b0457600080fd5b505af1158015611b18573d6000803e3d6000fd5b505050505050505050565b61ffff85166000908152600860205260408082209051611b44908790612ee2565b90815260408051602092819003830190206001600160401b0387166000908152925290206001810154909150611bcb5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b6064820152608401610985565b805482148015611bf5575080600101548383604051611beb929190612ed2565b6040518091039020145b611c415760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f61640000000000006044820152606401610985565b60008082556001820155604051630e1bd41160e11b81523090631c37a82290611c769089908990899089908990600401613191565b600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b50505050505050505050565b600a8054610f0c906133e1565b6006546001600160a01b03163314611ce75760405162461bcd60e51b815260040161098590613090565b61ffff831660009081526009602052604090208054611d05906133e1565b159050611d7c576040805162461bcd60e51b81526020600482015260248101919091527f546865207472757374656420736f75726365206164647265737320686173206160448201527f6c7265616479206265656e2073657420666f722074686520636861696e4964216064820152608401610985565b61ffff83166000908152600960205260409020610aa090838361279a565b6006546001600160a01b03163314611dc45760405162461bcd60e51b815260040161098590613090565b6001600160a01b038116611e295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610985565b611e3281612442565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e6a82611133565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611eba9190612939565b91509150611ec88282612163565b505050505050565b6000818152600260205260408120546001600160a01b0316611f495760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610985565b6000611f5483611133565b9050806001600160a01b0316846001600160a01b03161480611f8f5750836001600160a01b0316611f8484610c19565b6001600160a01b0316145b80611fbf57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611fda82611133565b6001600160a01b03161461203e5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610985565b6001600160a01b0382166120a05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610985565b6120ab600082611e35565b6001600160a01b03831660009081526003602052604081208054600192906120d490849061339e565b90915550506001600160a01b0382166000908152600360205260408120805460019290612102908490613353565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611042828260405180602001604052806000815250612494565b600061218882611133565b9050612195600083611e35565b6001600160a01b03811660009081526003602052604081208054600192906121be90849061339e565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b0316141561227a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610985565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6122f2848484611fc7565b6122fe848484846124c7565b610aa05760405162461bcd60e51b815260040161098590612ffc565b6060600a8054610b07906133e1565b60608161234d5750506040805180820190915260018152600360fc1b602082015290565b8160005b811561237757806123618161341c565b91506123709050600a8361336b565b9150612351565b6000816001600160401b0381111561239f57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123c9576020820181803683370190505b5090505b8415611fbf576123de60018361339e565b91506123eb600a86613457565b6123f6906030613353565b60f81b81838151811061241957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061243b600a8661336b565b94506123cd565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61249e83836125d4565b6124ab60008484846124c7565b610dbf5760405162461bcd60e51b815260040161098590612ffc565b60006001600160a01b0384163b156125c957604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061250b903390899088908890600401612fac565b602060405180830381600087803b15801561252557600080fd5b505af1925050508015612555575060408051601f3d908101601f1916820190925261255291810190612b8f565b60015b6125af573d808015612583576040519150601f19603f3d011682016040523d82523d6000602084013e612588565b606091505b5080516125a75760405162461bcd60e51b815260040161098590612ffc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611fbf565b506001949350505050565b6001600160a01b03821661262a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610985565b6000818152600260205260409020546001600160a01b03161561268f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610985565b6001600160a01b03821660009081526003602052604081208054600192906126b8908490613353565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612722906133e1565b90600052602060002090601f016020900481019282612744576000855561278a565b82601f1061275d57805160ff191683800117855561278a565b8280016001018555821561278a579182015b8281111561278a57825182559160200191906001019061276f565b5061279692915061280e565b5090565b8280546127a6906133e1565b90600052602060002090601f0160209004810192826127c8576000855561278a565b82601f106127e15782800160ff1982351617855561278a565b8280016001018555821561278a579182015b8281111561278a5782358255916020019190600101906127f3565b5b80821115612796576000815560010161280f565b60006001600160401b0383111561283c5761283c613497565b61284f601f8401601f1916602001613323565b905082815283838301111561286357600080fd5b828260208301376000602084830101529392505050565b8035801515811461288a57600080fd5b919050565b60008083601f8401126128a0578182fd5b5081356001600160401b038111156128b6578182fd5b6020830191508360208285010111156128ce57600080fd5b9250929050565b600082601f8301126128e5578081fd5b611a8183833560208501612823565b803561ffff8116811461288a57600080fd5b80356001600160401b038116811461288a57600080fd5b60006020828403121561292e578081fd5b8135611a81816134ad565b6000806040838503121561294b578081fd5b8251612956816134ad565b6020939093015192949293505050565b60008060408385031215612978578182fd5b8235612983816134ad565b91506020830135612993816134ad565b809150509250929050565b6000806000606084860312156129b2578081fd5b83356129bd816134ad565b925060208401356129cd816134ad565b929592945050506040919091013590565b600080600080608085870312156129f3578081fd5b84356129fe816134ad565b93506020850135612a0e816134ad565b92506040850135915060608501356001600160401b03811115612a2f578182fd5b612a3b878288016128d5565b91505092959194509250565b60008060408385031215612a59578182fd5b8235612a64816134ad565b9150612a726020840161287a565b90509250929050565b60008060408385031215612a8d578182fd5b8235612a98816134ad565b946020939093013593505050565b60006020808385031215612ab8578182fd5b82356001600160401b0380821115612ace578384fd5b818501915085601f830112612ae1578384fd5b813581811115612af357612af3613497565b8060051b9150612b04848301613323565b8181528481019084860184860187018a1015612b1e578788fd5b8795505b83861015612b4c5780359450612b37856134ad565b84835260019590950194918601918601612b22565b5098975050505050505050565b600060208284031215612b6a578081fd5b611a818261287a565b600060208284031215612b84578081fd5b8135611a81816134c2565b600060208284031215612ba0578081fd5b8151611a81816134c2565b600060208284031215612bbc578081fd5b81356001600160401b03811115612bd1578182fd5b8201601f81018413612be1578182fd5b611fbf84823560208401612823565b600060208284031215612c01578081fd5b611a81826128f4565b600080600060408486031215612c1e578081fd5b612c27846128f4565b925060208401356001600160401b03811115612c41578182fd5b612c4d8682870161288f565b9497909650939450505050565b600080600060608486031215612c6e578081fd5b612c77846128f4565b925060208401356001600160401b03811115612c91578182fd5b612c9d868287016128d5565b925050604084013590509250925092565b600080600080600060808688031215612cc5578283fd5b612cce866128f4565b945060208601356001600160401b0380821115612ce9578485fd5b612cf589838a016128d5565b9550612d0360408901612906565b94506060880135915080821115612d18578283fd5b50612d258882890161288f565b969995985093965092949392505050565b60008060008060808587031215612d4b578182fd5b612d54856128f4565b935060208501356001600160401b0380821115612d6f578384fd5b612d7b888389016128d5565b9450612d8960408801612906565b93506060870135915080821115612d9e578283fd5b50612a3b878288016128d5565b600080600080600060808688031215612dc2578283fd5b612dcb866128f4565b9450612dd9602087016128f4565b93506040860135925060608601356001600160401b03811115612dfa578182fd5b612d258882890161288f565b60008060408385031215612e18578182fd5b612a98836128f4565b600060208284031215612e32578081fd5b5035919050565b60008060408385031215612e4b578182fd5b505080516020909101519092909150565b600060208284031215612e6d578081fd5b813560ff81168114611a81578182fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452612ebe8160208601602086016133b5565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b60008251612ef48184602087016133b5565b9190910192915050565b6000808354612f0c816133e1565b60018281168015612f245760018114612f3557612f61565b60ff19841687528287019450612f61565b8786526020808720875b85811015612f585781548a820152908401908201612f3f565b50505082870194505b50929695505050505050565b60008351612f7f8184602088016133b5565b835190830190612f938183602088016133b5565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612fdf90830184612ea6565b9695505050505050565b602081526000611a816020830184612ea6565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f4f4d4e495f445241474f4e533a204d41585f535550504c595f464f525f43484160408201526124a760f11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061314490830186612ea6565b8415156060840152828103608084015261315e8185612ea6565b98975050505050505050565b61ffff84168152604060208201526000613188604083018486612e7d565b95945050505050565b61ffff861681526080602082015260006131ae6080830187612ea6565b6001600160401b0386166040840152828103606084015261315e818587612e7d565b61ffff851681526080602082015260006131ed6080830186612ea6565b6001600160401b0385166040840152828103606084015261320e8185612ea6565b979650505050505050565b61ffff871681526000602060c081840152818854613236816133e1565b8060c087015260e0600180841660008114613258576001811461326d57613298565b60ff1985168984015261010089019550613298565b8d8852868820885b858110156132905781548b8201860152908301908801613275565b8a0184019650505b505050505083810360408501526132af8189612ea6565b9150506132c760608401876001600160a01b03169052565b6001600160a01b038516608084015282810360a08401526132e88185612ea6565b9998505050505050505050565b600061ffff80881683528087166020840152508460408301526080606083015261320e608083018486612e7d565b604051601f8201601f191681016001600160401b038111828210171561334b5761334b613497565b604052919050565b600082198211156133665761336661346b565b500190565b60008261337a5761337a613481565b500490565b60008160001904831182151516156133995761339961346b565b500290565b6000828210156133b0576133b061346b565b500390565b60005b838110156133d05781810151838201526020016133b8565b83811115610aa05750506000910152565b600181811c908216806133f557607f821691505b6020821081141561341657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156134305761343061346b565b5060010190565b600060ff821660ff81141561344e5761344e61346b565b60010192915050565b60008261346657613466613481565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611e3257600080fd5b6001600160e01b031981168114611e3257600080fdfea2646970667358221220b4fb2c404fb8ac4774752866a0c1784eddd44d28c682acfff721f22fbb74817c64736f6c634300080400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000d05000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d576373386e453657463357586a325a454e3973526a687a4e396138686735687455486a6945354232415641752f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a7668483674766374327859676f586e5a73394463656e594850336a65564261716a683743775467346a78572f000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102715760003560e01c806370a082311161014f578063a475b5dd116100c1578063d547cfb71161007a578063d547cfb7146107a6578063d5abeb01146107bb578063d73f057e146107ef578063de7fcb1d1461080f578063e985e9c514610843578063f2fde38b1461088c57600080fd5b8063a475b5dd146106fe578063b716c78314610713578063b88d4fde14610733578063c87b56dd14610753578063cbed8b9c14610773578063d1deba1f1461079357600080fd5b80638da5cb5b116101135780638da5cb5b146105f95780638ee749121461061757806395d89b4114610682578063971c593214610697578063a035b1fe146106aa578063a22cb465146106de57600080fd5b806370a082311461056e578063715018a61461058e57806375794a3c146105a357806381c986ee146105b95780638bff45e1146105d957600080fd5b80632f1a7b54116101e857806351830227116101ac57806351830227146104c257806355f804b3146104e15780635c975abb146105015780635e280f111461051b5780636352211e1461053b5780636ecd23061461055b57600080fd5b80632f1a7b54146104245780633ccfd60b1461043957806342842e0e1461044e57806342d65a8d1461046e578063453c23101461048e57600080fd5b8063095ea7b31161023a578063095ea7b31461034757806310ddb1371461036757806316c38b3c1461038757806318160ddd146103a75780631c37a822146103e457806323b872dd1461040457600080fd5b80621d35671461027657806301ffc9a71461029857806306fdde03146102cd57806307e0db17146102ef578063081812fc1461030f575b600080fd5b34801561028257600080fd5b50610296610291366004612d36565b6108ac565b005b3480156102a457600080fd5b506102b86102b3366004612b73565b610aa6565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e2610af8565b6040516102c49190612fe9565b3480156102fb57600080fd5b5061029661030a366004612bf0565b610b8a565b34801561031b57600080fd5b5061032f61032a366004612e21565b610c19565b6040516001600160a01b0390911681526020016102c4565b34801561035357600080fd5b50610296610362366004612a7b565b610cae565b34801561037357600080fd5b50610296610382366004612bf0565b610dc4565b34801561039357600080fd5b506102966103a2366004612b59565b610e22565b3480156103b357600080fd5b507f0000000000000000000000000000000000000000000000000000000000000d055b6040519081526020016102c4565b3480156103f057600080fd5b506102966103ff366004612d36565b610e5f565b34801561041057600080fd5b5061029661041f36600461299e565b610ece565b34801561043057600080fd5b506102e2610eff565b34801561044557600080fd5b50610296610f8d565b34801561045a57600080fd5b5061029661046936600461299e565b611046565b34801561047a57600080fd5b50610296610489366004612c0a565b611061565b34801561049a57600080fd5b506103d67f000000000000000000000000000000000000000000000000000000000000000a81565b3480156104ce57600080fd5b50600e546102b890610100900460ff1681565b3480156104ed57600080fd5b506102966104fc366004612bab565b6110f6565b34801561050d57600080fd5b50600e546102b89060ff1681565b34801561052757600080fd5b5060075461032f906001600160a01b031681565b34801561054757600080fd5b5061032f610556366004612e21565b611133565b610296610569366004612e5c565b6111aa565b34801561057a57600080fd5b506103d661058936600461291d565b611449565b34801561059a57600080fd5b506102966114d0565b3480156105af57600080fd5b506103d6600d5481565b3480156105c557600080fd5b506102e26105d4366004612bf0565b6114fc565b3480156105e557600080fd5b506102966105f4366004612aa6565b611515565b34801561060557600080fd5b506006546001600160a01b031661032f565b34801561062357600080fd5b5061066d610632366004612c5a565b600860209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b604080519283526020830191909152016102c4565b34801561068e57600080fd5b506102e26115fa565b6102966106a5366004612e06565b611609565b3480156106b657600080fd5b506103d67f00000000000000000000000000000000000000000000000000071afd498d000081565b3480156106ea57600080fd5b506102966106f9366004612a47565b611857565b34801561070a57600080fd5b50610296611862565b34801561071f57600080fd5b5061029661072e366004612bab565b61189d565b34801561073f57600080fd5b5061029661074e3660046129de565b6118da565b34801561075f57600080fd5b506102e261076e366004612e21565b61190c565b34801561077f57600080fd5b5061029661078e366004612dab565b611a88565b6102966107a1366004612cae565b611b23565b3480156107b257600080fd5b506102e2611cb0565b3480156107c757600080fd5b506103d67f0000000000000000000000000000000000000000000000000000000000000d0581565b3480156107fb57600080fd5b5061029661080a366004612c0a565b611cbd565b34801561081b57600080fd5b506103d67f000000000000000000000000000000000000000000000000000000000000000281565b34801561084f57600080fd5b506102b861085e366004612966565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561089857600080fd5b506102966108a736600461291d565b611d9a565b6007546001600160a01b031633146108c357600080fd5b61ffff8416600090815260096020526040902080546108e1906133e1565b90508351148015610920575061ffff841660009081526009602052604090819020905161090e9190612efe565b60405180910390208380519060200120145b61098e5760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a822906109b79087908790879087906004016131d0565b600060405180830381600087803b1580156109d157600080fd5b505af19250505080156109e2575060015b610aa0576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff16815260200190815260200160002084604051610a2c9190612ee2565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d90610a979086908690869086906131d0565b60405180910390a15b50505050565b60006001600160e01b031982166380ac58cd60e01b1480610ad757506001600160e01b03198216635b5e139f60e01b145b80610af257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008054610b07906133e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b33906133e1565b8015610b805780601f10610b5557610100808354040283529160200191610b80565b820191906000526020600020905b815481529060010190602001808311610b6357829003601f168201915b5050505050905090565b6006546001600160a01b03163314610bb45760405162461bcd60e51b815260040161098590613090565b6007546040516307e0db1760e01b815261ffff831660048201526001600160a01b03909116906307e0db17906024015b600060405180830381600087803b158015610bfe57600080fd5b505af1158015610c12573d6000803e3d6000fd5b5050505050565b6000818152600260205260408120546001600160a01b0316610c925760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610985565b506000908152600460205260409020546001600160a01b031690565b6000610cb982611133565b9050806001600160a01b0316836001600160a01b03161415610d275760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610985565b336001600160a01b0382161480610d435750610d43813361085e565b610db55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610985565b610dbf8383611e35565b505050565b6006546001600160a01b03163314610dee5760405162461bcd60e51b815260040161098590613090565b6007546040516310ddb13760e01b815261ffff831660048201526001600160a01b03909116906310ddb13790602401610be4565b6006546001600160a01b03163314610e4c5760405162461bcd60e51b815260040161098590613090565b600e805460ff1916911515919091179055565b333014610ec25760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526a10313290213934b233b29760a91b6064820152608401610985565b610aa084848484611ea3565b610ed83382611ed0565b610ef45760405162461bcd60e51b8152600401610985906130c5565b610dbf838383611fc7565b600b8054610f0c906133e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f38906133e1565b8015610f855780601f10610f5a57610100808354040283529160200191610f85565b820191906000526020600020905b815481529060010190602001808311610f6857829003601f168201915b505050505081565b6006546001600160a01b03163314610fb75760405162461bcd60e51b815260040161098590613090565b6040514790600090339083908381818185875af1925050503d8060008114610ffb576040519150601f19603f3d011682016040523d82523d6000602084013e611000565b606091505b50509050806110425760405162461bcd60e51b815260206004820152600e60248201526d11985a5b1959081d1bc81cd95b9960921b6044820152606401610985565b5050565b610dbf838383604051806020016040528060008152506118da565b6006546001600160a01b0316331461108b5760405162461bcd60e51b815260040161098590613090565b6007546040516342d65a8d60e01b81526001600160a01b03909116906342d65a8d906110bf9086908690869060040161316a565b600060405180830381600087803b1580156110d957600080fd5b505af11580156110ed573d6000803e3d6000fd5b50505050505050565b6006546001600160a01b031633146111205760405162461bcd60e51b815260040161098590613090565b805161104290600a906020840190612716565b6000818152600260205260408120546001600160a01b031680610af25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610985565b600e5460ff16156111fd5760405162461bcd60e51b815260206004820152601760248201527f4f4d4e495f445241474f4e533a204953205041555345440000000000000000006044820152606401610985565b60008160ff1611801561123357507f00000000000000000000000000000000000000000000000000000000000000028160ff1611155b61128b5760405162461bcd60e51b8152602060048201526024808201527f4f4d4e495f445241474f4e533a2043414e204f4e4c59204d494e5420352050456044820152630a440a8b60e31b6064820152608401610985565b7f0000000000000000000000000000000000000000000000000000000000000d058160ff16600d546112bd9190613353565b11156112db5760405162461bcd60e51b81526004016109859061304e565b7f00000000000000000000000000000000000000000000000000000000000000028160ff161115801561133557507f000000000000000000000000000000000000000000000000000000000000000a61133333611449565b105b6113965760405162461bcd60e51b815260206004820152602c60248201527f4f4d4e495f445241474f4e533a204d41585f31355f4f4d4e495f445241474f4e60448201526b14d7d4115497d5d05313115560a21b6064820152608401610985565b346113c47f00000000000000000000000000000000000000000000000000071afd498d000060ff841661337f565b1461141d5760405162461bcd60e51b8152602060048201526024808201527f4f4d4e495f445241474f4e533a204e4f5420454e4f554748542056414c55452060448201526314d1539560e21b6064820152608401610985565b60005b8160ff1681101561104257600d805460018101909155611441903390612163565b600101611420565b60006001600160a01b0382166114b45760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610985565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146114fa5760405162461bcd60e51b815260040161098590613090565b565b60096020526000908152604090208054610f0c906133e1565b6006546001600160a01b0316331461153f5760405162461bcd60e51b815260040161098590613090565b60005b81518160ff161015611042577f0000000000000000000000000000000000000000000000000000000000000d058160ff16600d546115809190613353565b111561159e5760405162461bcd60e51b81526004016109859061304e565b6115e8828260ff16815181106115c457634e487b7160e01b600052603260045260246000fd5b6020026020010151600d60008154809291906115df9061341c565b91905055612163565b806115f281613437565b915050611542565b606060018054610b07906133e1565b61ffff821660009081526009602052604090208054611627906133e1565b1515905061168a5760405162461bcd60e51b815260206004820152602a60248201527f5468697320636861696e206973206e6f742061207472757374656420736f757260448201526931b29039b7bab931b29760b11b6064820152608401610985565b6116938161217d565b60408051336020820152808201839052815180820383018152606082018352600160f01b60808301526205573060828084018290528451808503909101815260a284019485905260075463040a7bb160e41b90955291936001939192916000916001600160a01b0316906340a7bb1090611719908a9030908a908790899060a601613116565b604080518083038186803b15801561173057600080fd5b505afa158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190612e39565b509050803410156117d15760405162461bcd60e51b815260206004820152602d60248201527f4e6f7420656e6f7567682067617320746f20636f7665722063726f737320636860448201526c30b4b7103a3930b739b332b91760991b6064820152608401610985565b60075461ffff8816600090815260096020526040808220905162c5803160e81b81526001600160a01b039093169263c580310092349261181c928d928c913391908b90600401613219565b6000604051808303818588803b15801561183557600080fd5b505af1158015611849573d6000803e3d6000fd5b505050505050505050505050565b611042338383612218565b6006546001600160a01b0316331461188c5760405162461bcd60e51b815260040161098590613090565b600e805461ff001916610100179055565b6006546001600160a01b031633146118c75760405162461bcd60e51b815260040161098590613090565b805161104290600b906020840190612716565b6118e43383611ed0565b6119005760405162461bcd60e51b8152600401610985906130c5565b610aa0848484846122e7565b6000818152600260205260409020546060906001600160a01b031661198b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610985565b600e54610100900460ff16611a2c57600b80546119a7906133e1565b80601f01602080910402602001604051908101604052809291908181526020018280546119d3906133e1565b8015611a205780601f106119f557610100808354040283529160200191611a20565b820191906000526020600020905b815481529060010190602001808311611a0357829003601f168201915b50505050509050919050565b6000611a3661231a565b90506000815111611a565760405180602001604052806000815250611a81565b80611a6084612329565b604051602001611a71929190612f6d565b6040516020818303038152906040525b9392505050565b6006546001600160a01b03163314611ab25760405162461bcd60e51b815260040161098590613090565b6007546040516332fb62e760e21b81526001600160a01b039091169063cbed8b9c90611aea90889088908890889088906004016132f5565b600060405180830381600087803b158015611b0457600080fd5b505af1158015611b18573d6000803e3d6000fd5b505050505050505050565b61ffff85166000908152600860205260408082209051611b44908790612ee2565b90815260408051602092819003830190206001600160401b0387166000908152925290206001810154909150611bcb5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b6064820152608401610985565b805482148015611bf5575080600101548383604051611beb929190612ed2565b6040518091039020145b611c415760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f61640000000000006044820152606401610985565b60008082556001820155604051630e1bd41160e11b81523090631c37a82290611c769089908990899089908990600401613191565b600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b50505050505050505050565b600a8054610f0c906133e1565b6006546001600160a01b03163314611ce75760405162461bcd60e51b815260040161098590613090565b61ffff831660009081526009602052604090208054611d05906133e1565b159050611d7c576040805162461bcd60e51b81526020600482015260248101919091527f546865207472757374656420736f75726365206164647265737320686173206160448201527f6c7265616479206265656e2073657420666f722074686520636861696e4964216064820152608401610985565b61ffff83166000908152600960205260409020610aa090838361279a565b6006546001600160a01b03163314611dc45760405162461bcd60e51b815260040161098590613090565b6001600160a01b038116611e295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610985565b611e3281612442565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e6a82611133565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611eba9190612939565b91509150611ec88282612163565b505050505050565b6000818152600260205260408120546001600160a01b0316611f495760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610985565b6000611f5483611133565b9050806001600160a01b0316846001600160a01b03161480611f8f5750836001600160a01b0316611f8484610c19565b6001600160a01b0316145b80611fbf57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611fda82611133565b6001600160a01b03161461203e5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610985565b6001600160a01b0382166120a05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610985565b6120ab600082611e35565b6001600160a01b03831660009081526003602052604081208054600192906120d490849061339e565b90915550506001600160a01b0382166000908152600360205260408120805460019290612102908490613353565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611042828260405180602001604052806000815250612494565b600061218882611133565b9050612195600083611e35565b6001600160a01b03811660009081526003602052604081208054600192906121be90849061339e565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b0316141561227a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610985565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6122f2848484611fc7565b6122fe848484846124c7565b610aa05760405162461bcd60e51b815260040161098590612ffc565b6060600a8054610b07906133e1565b60608161234d5750506040805180820190915260018152600360fc1b602082015290565b8160005b811561237757806123618161341c565b91506123709050600a8361336b565b9150612351565b6000816001600160401b0381111561239f57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123c9576020820181803683370190505b5090505b8415611fbf576123de60018361339e565b91506123eb600a86613457565b6123f6906030613353565b60f81b81838151811061241957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061243b600a8661336b565b94506123cd565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61249e83836125d4565b6124ab60008484846124c7565b610dbf5760405162461bcd60e51b815260040161098590612ffc565b60006001600160a01b0384163b156125c957604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061250b903390899088908890600401612fac565b602060405180830381600087803b15801561252557600080fd5b505af1925050508015612555575060408051601f3d908101601f1916820190925261255291810190612b8f565b60015b6125af573d808015612583576040519150601f19603f3d011682016040523d82523d6000602084013e612588565b606091505b5080516125a75760405162461bcd60e51b815260040161098590612ffc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611fbf565b506001949350505050565b6001600160a01b03821661262a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610985565b6000818152600260205260409020546001600160a01b03161561268f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610985565b6001600160a01b03821660009081526003602052604081208054600192906126b8908490613353565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612722906133e1565b90600052602060002090601f016020900481019282612744576000855561278a565b82601f1061275d57805160ff191683800117855561278a565b8280016001018555821561278a579182015b8281111561278a57825182559160200191906001019061276f565b5061279692915061280e565b5090565b8280546127a6906133e1565b90600052602060002090601f0160209004810192826127c8576000855561278a565b82601f106127e15782800160ff1982351617855561278a565b8280016001018555821561278a579182015b8281111561278a5782358255916020019190600101906127f3565b5b80821115612796576000815560010161280f565b60006001600160401b0383111561283c5761283c613497565b61284f601f8401601f1916602001613323565b905082815283838301111561286357600080fd5b828260208301376000602084830101529392505050565b8035801515811461288a57600080fd5b919050565b60008083601f8401126128a0578182fd5b5081356001600160401b038111156128b6578182fd5b6020830191508360208285010111156128ce57600080fd5b9250929050565b600082601f8301126128e5578081fd5b611a8183833560208501612823565b803561ffff8116811461288a57600080fd5b80356001600160401b038116811461288a57600080fd5b60006020828403121561292e578081fd5b8135611a81816134ad565b6000806040838503121561294b578081fd5b8251612956816134ad565b6020939093015192949293505050565b60008060408385031215612978578182fd5b8235612983816134ad565b91506020830135612993816134ad565b809150509250929050565b6000806000606084860312156129b2578081fd5b83356129bd816134ad565b925060208401356129cd816134ad565b929592945050506040919091013590565b600080600080608085870312156129f3578081fd5b84356129fe816134ad565b93506020850135612a0e816134ad565b92506040850135915060608501356001600160401b03811115612a2f578182fd5b612a3b878288016128d5565b91505092959194509250565b60008060408385031215612a59578182fd5b8235612a64816134ad565b9150612a726020840161287a565b90509250929050565b60008060408385031215612a8d578182fd5b8235612a98816134ad565b946020939093013593505050565b60006020808385031215612ab8578182fd5b82356001600160401b0380821115612ace578384fd5b818501915085601f830112612ae1578384fd5b813581811115612af357612af3613497565b8060051b9150612b04848301613323565b8181528481019084860184860187018a1015612b1e578788fd5b8795505b83861015612b4c5780359450612b37856134ad565b84835260019590950194918601918601612b22565b5098975050505050505050565b600060208284031215612b6a578081fd5b611a818261287a565b600060208284031215612b84578081fd5b8135611a81816134c2565b600060208284031215612ba0578081fd5b8151611a81816134c2565b600060208284031215612bbc578081fd5b81356001600160401b03811115612bd1578182fd5b8201601f81018413612be1578182fd5b611fbf84823560208401612823565b600060208284031215612c01578081fd5b611a81826128f4565b600080600060408486031215612c1e578081fd5b612c27846128f4565b925060208401356001600160401b03811115612c41578182fd5b612c4d8682870161288f565b9497909650939450505050565b600080600060608486031215612c6e578081fd5b612c77846128f4565b925060208401356001600160401b03811115612c91578182fd5b612c9d868287016128d5565b925050604084013590509250925092565b600080600080600060808688031215612cc5578283fd5b612cce866128f4565b945060208601356001600160401b0380821115612ce9578485fd5b612cf589838a016128d5565b9550612d0360408901612906565b94506060880135915080821115612d18578283fd5b50612d258882890161288f565b969995985093965092949392505050565b60008060008060808587031215612d4b578182fd5b612d54856128f4565b935060208501356001600160401b0380821115612d6f578384fd5b612d7b888389016128d5565b9450612d8960408801612906565b93506060870135915080821115612d9e578283fd5b50612a3b878288016128d5565b600080600080600060808688031215612dc2578283fd5b612dcb866128f4565b9450612dd9602087016128f4565b93506040860135925060608601356001600160401b03811115612dfa578182fd5b612d258882890161288f565b60008060408385031215612e18578182fd5b612a98836128f4565b600060208284031215612e32578081fd5b5035919050565b60008060408385031215612e4b578182fd5b505080516020909101519092909150565b600060208284031215612e6d578081fd5b813560ff81168114611a81578182fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452612ebe8160208601602086016133b5565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b60008251612ef48184602087016133b5565b9190910192915050565b6000808354612f0c816133e1565b60018281168015612f245760018114612f3557612f61565b60ff19841687528287019450612f61565b8786526020808720875b85811015612f585781548a820152908401908201612f3f565b50505082870194505b50929695505050505050565b60008351612f7f8184602088016133b5565b835190830190612f938183602088016133b5565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612fdf90830184612ea6565b9695505050505050565b602081526000611a816020830184612ea6565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f4f4d4e495f445241474f4e533a204d41585f535550504c595f464f525f43484160408201526124a760f11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061314490830186612ea6565b8415156060840152828103608084015261315e8185612ea6565b98975050505050505050565b61ffff84168152604060208201526000613188604083018486612e7d565b95945050505050565b61ffff861681526080602082015260006131ae6080830187612ea6565b6001600160401b0386166040840152828103606084015261315e818587612e7d565b61ffff851681526080602082015260006131ed6080830186612ea6565b6001600160401b0385166040840152828103606084015261320e8185612ea6565b979650505050505050565b61ffff871681526000602060c081840152818854613236816133e1565b8060c087015260e0600180841660008114613258576001811461326d57613298565b60ff1985168984015261010089019550613298565b8d8852868820885b858110156132905781548b8201860152908301908801613275565b8a0184019650505b505050505083810360408501526132af8189612ea6565b9150506132c760608401876001600160a01b03169052565b6001600160a01b038516608084015282810360a08401526132e88185612ea6565b9998505050505050505050565b600061ffff80881683528087166020840152508460408301526080606083015261320e608083018486612e7d565b604051601f8201601f191681016001600160401b038111828210171561334b5761334b613497565b604052919050565b600082198211156133665761336661346b565b500190565b60008261337a5761337a613481565b500490565b60008160001904831182151516156133995761339961346b565b500290565b6000828210156133b0576133b061346b565b500390565b60005b838110156133d05781810151838201526020016133b8565b83811115610aa05750506000910152565b600181811c908216806133f557607f821691505b6020821081141561341657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156134305761343061346b565b5060010190565b600060ff821660ff81141561344e5761344e61346b565b60010192915050565b60008261346657613466613481565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611e3257600080fd5b6001600160e01b031981168114611e3257600080fdfea2646970667358221220b4fb2c404fb8ac4774752866a0c1784eddd44d28c682acfff721f22fbb74817c64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000d05000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d576373386e453657463357586a325a454e3973526a687a4e396138686735687455486a6945354232415641752f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a7668483674766374327859676f586e5a73394463656e594850336a65564261716a683743775467346a78572f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _baseTokenURI (string): https://gateway.pinata.cloud/ipfs/QmWcs8nE6WF3WXj2ZEN9sRjhzN9a8hg5htUHjiE5B2AVAu/
Arg [1] : _baseNotRevealedURI (string): https://gateway.pinata.cloud/ipfs/QmZvhH6tvct2xYgoXnZs9DcenYHP3jeVBaqjh7CwTg4jxW/
Arg [2] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
Arg [3] : _startToken (uint256): 1
Arg [4] : _maxSupply (uint256): 3333
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000d05
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [6] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [7] : 732f516d576373386e453657463357586a325a454e3973526a687a4e39613868
Arg [8] : 6735687455486a6945354232415641752f000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [10] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [11] : 732f516d5a7668483674766374327859676f586e5a73394463656e594850336a
Arg [12] : 65564261716a683743775467346a78572f000000000000000000000000000000
Deployed Bytecode Sourcemap
48944:7182:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45993:935;;;;;;;;;;-1:-1:-1;45993:935:0;;;;;:::i;:::-;;:::i;:::-;;21840:305;;;;;;;;;;-1:-1:-1;21840:305:0;;;;;:::i;:::-;;:::i;:::-;;;15341:14:1;;15334:22;15316:41;;15304:2;15289:18;21840:305:0;;;;;;;;22785:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;55618:121::-;;;;;;;;;;-1:-1:-1;55618:121:0;;;;;:::i;:::-;;:::i;24344:221::-;;;;;;;;;;-1:-1:-1;24344:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;14360:32:1;;;14342:51;;14330:2;14315:18;24344:221:0;14297:102:1;23867:411:0;;;;;;;;;;-1:-1:-1;23867:411:0;;;;;:::i;:::-;;:::i;55747:127::-;;;;;;;;;;-1:-1:-1;55747:127:0;;;;;:::i;:::-;;:::i;51479:95::-;;;;;;;;;;-1:-1:-1;51479:95:0;;;;;:::i;:::-;;:::i;51382:85::-;;;;;;;;;;-1:-1:-1;51450:9:0;51382:85;;;32081:25:1;;;32069:2;32054:18;51382:85:0;32036:76:1;46936:318:0;;;;;;;;;;-1:-1:-1;46936:318:0;;;;;:::i;:::-;;:::i;25094:339::-;;;;;;;;;;-1:-1:-1;25094:339:0;;;;;:::i;:::-;;:::i;49103:32::-;;;;;;;;;;;;;:::i;54318:209::-;;;;;;;;;;;;;:::i;25504:185::-;;;;;;;;;;-1:-1:-1;25504:185:0;;;;;:::i;:::-;;:::i;55882:176::-;;;;;;;;;;-1:-1:-1;55882:176:0;;;;;:::i;:::-;;:::i;49289:42::-;;;;;;;;;;;;;;;49423:28;;;;;;;;;;-1:-1:-1;49423:28:0;;;;;;;;;;;53373:113;;;;;;;;;;-1:-1:-1;53373:113:0;;;;;:::i;:::-;;:::i;49391:25::-;;;;;;;;;;-1:-1:-1;49391:25:0;;;;;;;;45443:34;;;;;;;;;;-1:-1:-1;45443:34:0;;;;-1:-1:-1;;;;;45443:34:0;;;22479:239;;;;;;;;;;-1:-1:-1;22479:239:0;;;;;:::i;:::-;;:::i;50317:747::-;;;;;;:::i;:::-;;:::i;22209:208::-;;;;;;;;;;-1:-1:-1;22209:208:0;;;;;:::i;:::-;;:::i;56066:57::-;;;;;;;;;;;;;:::i;49167:26::-;;;;;;;;;;;;;;;;45680:51;;;;;;;;;;-1:-1:-1;45680:51:0;;;;;:::i;:::-;;:::i;51072:302::-;;;;;;;;;;-1:-1:-1;51072:302:0;;;;;:::i;:::-;;:::i;36022:87::-;;;;;;;;;;-1:-1:-1;36095:6:0;;-1:-1:-1;;;;;36095:6:0;36022:87;;45583:90;;;;;;;;;;-1:-1:-1;45583:90:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32291:25:1;;;32347:2;32332:18;;32325:34;;;;32264:18;45583:90:0;32246:119:1;22954:104:0;;;;;;;;;;;;;:::i;51823:1467::-;;;;;;:::i;:::-;;:::i;49338:44::-;;;;;;;;;;;;;;;24637:155;;;;;;;;;;-1:-1:-1;24637:155:0;;;;;:::i;:::-;;:::i;54241:69::-;;;;;;;;;;;;;:::i;53498:136::-;;;;;;;;;;-1:-1:-1;53498:136:0;;;;;:::i;:::-;;:::i;25760:328::-;;;;;;;;;;-1:-1:-1;25760:328:0;;;;;:::i;:::-;;:::i;53787:446::-;;;;;;;;;;-1:-1:-1;53787:446:0;;;;;:::i;:::-;;:::i;55362:248::-;;;;;;;;;;-1:-1:-1;55362:248:0;;;;;:::i;:::-;;:::i;47575:758::-;;;;;;:::i;:::-;;:::i;49070:26::-;;;;;;;;;;;;;:::i;49200:34::-;;;;;;;;;;;;;;;48341:287;;;;;;;;;;-1:-1:-1;48341:287:0;;;;;:::i;:::-;;:::i;49241:41::-;;;;;;;;;;;;;;;24863:164;;;;;;;;;;-1:-1:-1;24863:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24984:25:0;;;24960:4;24984:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24863:164;36931:201;;;;;;;;;;-1:-1:-1;36931:201:0;;;;;:::i;:::-;;:::i;45993:935::-;46155:8;;-1:-1:-1;;;;;46155:8:0;46133:10;:31;46125:40;;;;;;46276:32;;;;;;;:19;:32;;;;;:39;;;;;:::i;:::-;;;46254:11;:18;:61;:134;;;;-1:-1:-1;46355:32:0;;;;;;;:19;:32;;;;;;;46345:43;;;;46355:32;46345:43;:::i;:::-;;;;;;;;46329:11;46319:22;;;;;;:69;46254:134;46246:199;;;;-1:-1:-1;;;46246:199:0;;24147:2:1;46246:199:0;;;24129:21:1;24186:2;24166:18;;;24159:30;24225:34;24205:18;;;24198:62;-1:-1:-1;;;24276:18:1;;;24269:50;24336:19;;46246:199:0;;;;;;;;;46573:60;;-1:-1:-1;;;46573:60:0;;:4;;:16;;:60;;46590:11;;46603;;46616:6;;46624:8;;46573:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46569:352;;46780:52;;;;;;;;46795:8;:15;46780:52;;;;46822:8;46812:19;;;;;;46780:52;;;46729:14;:27;46744:11;46729:27;;;;;;;;;;;;;;;46757:11;46729:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46729:48:0;;;;;;;;;;;;;:103;;;;;;;;;;;;;;;46852:57;;;;46866:11;;46879;;46770:6;;46900:8;;46852:57;:::i;:::-;;;;;;;;46569:352;45993:935;;;;:::o;21840:305::-;21942:4;-1:-1:-1;;;;;;21979:40:0;;-1:-1:-1;;;21979:40:0;;:105;;-1:-1:-1;;;;;;;22036:48:0;;-1:-1:-1;;;22036:48:0;21979:105;:158;;;-1:-1:-1;;;;;;;;;;20372:40:0;;;22101:36;21959:178;21840:305;-1:-1:-1;;21840:305:0:o;22785:100::-;22839:13;22872:5;22865:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22785:100;:::o;55618:121::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;55698:8:::1;::::0;:33:::1;::::0;-1:-1:-1;;;55698:33:0;;27775:6:1;27763:19;;55698:33:0::1;::::0;::::1;27745:38:1::0;-1:-1:-1;;;;;55698:8:0;;::::1;::::0;:23:::1;::::0;27718:18:1;;55698:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55618:121:::0;:::o;24344:221::-;24420:7;27687:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27687:16:0;24440:73;;;;-1:-1:-1;;;24440:73:0;;22960:2:1;24440:73:0;;;22942:21:1;22999:2;22979:18;;;22972:30;23038:34;23018:18;;;23011:62;-1:-1:-1;;;23089:18:1;;;23082:42;23141:19;;24440:73:0;22932:234:1;24440:73:0;-1:-1:-1;24533:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24533:24:0;;24344:221::o;23867:411::-;23948:13;23964:23;23979:7;23964:14;:23::i;:::-;23948:39;;24012:5;-1:-1:-1;;;;;24006:11:0;:2;-1:-1:-1;;;;;24006:11:0;;;23998:57;;;;-1:-1:-1;;;23998:57:0;;24984:2:1;23998:57:0;;;24966:21:1;25023:2;25003:18;;;24996:30;25062:34;25042:18;;;25035:62;-1:-1:-1;;;25113:18:1;;;25106:31;25154:19;;23998:57:0;24956:223:1;23998:57:0;17126:10;-1:-1:-1;;;;;24090:21:0;;;;:62;;-1:-1:-1;24115:37:0;24132:5;17126:10;24863:164;:::i;24115:37::-;24068:168;;;;-1:-1:-1;;;24068:168:0;;20941:2:1;24068:168:0;;;20923:21:1;20980:2;20960:18;;;20953:30;21019:34;20999:18;;;20992:62;21090:26;21070:18;;;21063:54;21134:19;;24068:168:0;20913:246:1;24068:168:0;24249:21;24258:2;24262:7;24249:8;:21::i;:::-;23867:411;;;:::o;55747:127::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;55830:8:::1;::::0;:36:::1;::::0;-1:-1:-1;;;55830:36:0;;27775:6:1;27763:19;;55830:36:0::1;::::0;::::1;27745:38:1::0;-1:-1:-1;;;;;55830:8:0;;::::1;::::0;:26:::1;::::0;27718:18:1;;55830:36:0::1;27700:89:1::0;51479:95:0;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;51545:6:::1;:21:::0;;-1:-1:-1;;51545:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;51479:95::o;46936:318::-;47105:10;47127:4;47105:27;47097:83;;;;-1:-1:-1;;;47097:83:0;;22187:2:1;47097:83:0;;;22169:21:1;22226:2;22206:18;;;22199:30;22265:34;22245:18;;;22238:62;-1:-1:-1;;;22316:18:1;;;22309:41;22367:19;;47097:83:0;22159:233:1;47097:83:0;47191:55;47203:11;47216;47229:6;47237:8;47191:10;:55::i;25094:339::-;25289:41;17126:10;25322:7;25289:18;:41::i;:::-;25281:103;;;;-1:-1:-1;;;25281:103:0;;;;;;;:::i;:::-;25397:28;25407:4;25413:2;25417:7;25397:9;:28::i;49103:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;54318:209::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;54437:37:::1;::::0;54386:21:::1;::::0;54368:15:::1;::::0;17126:10;;54386:21;;54368:15;54437:37;54368:15;54437:37;54386:21;17126:10;54437:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54418:56;;;54493:7;54485:34;;;::::0;-1:-1:-1;;;54485:34:0;;27460:2:1;54485:34:0::1;::::0;::::1;27442:21:1::0;27499:2;27479:18;;;27472:30;-1:-1:-1;;;27518:18:1;;;27511:44;27572:18;;54485:34:0::1;27432:164:1::0;54485:34:0::1;36313:1;;54318:209::o:0;25504:185::-;25642:39;25659:4;25665:2;25669:7;25642:39;;;;;;;;;;;;:16;:39::i;55882:176::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;55997:8:::1;::::0;:53:::1;::::0;-1:-1:-1;;;55997:53:0;;-1:-1:-1;;;;;55997:8:0;;::::1;::::0;:27:::1;::::0;:53:::1;::::0;56025:11;;56038;;;;55997:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55882:176:::0;;;:::o;53373:113::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;53450:28;;::::1;::::0;:12:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;22479:239::-:0;22551:7;22587:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22587:16:0;22622:19;22614:73;;;;-1:-1:-1;;;22614:73:0;;21777:2:1;22614:73:0;;;21759:21:1;21816:2;21796:18;;;21789:30;21855:34;21835:18;;;21828:62;-1:-1:-1;;;21906:18:1;;;21899:39;21955:19;;22614:73:0;21749:231:1;50317:747:0;50394:6;;;;50393:7;50385:43;;;;-1:-1:-1;;;50385:43:0;;16251:2:1;50385:43:0;;;16233:21:1;16290:2;16270:18;;;16263:30;16329:25;16309:18;;;16302:53;16372:18;;50385:43:0;16223:173:1;50385:43:0;50468:1;50447:18;:22;;;:60;;;;;50495:12;50473:18;:34;;;;50447:60;50439:109;;;;-1:-1:-1;;;50439:109:0;;25804:2:1;50439:109:0;;;25786:21:1;25843:2;25823:18;;;25816:30;25882:34;25862:18;;;25855:62;-1:-1:-1;;;25933:18:1;;;25926:34;25977:19;;50439:109:0;25776:226:1;50439:109:0;50603:9;50581:18;50567:32;;:11;;:32;;;;:::i;:::-;:45;;50559:92;;;;-1:-1:-1;;;50559:92:0;;;;;;;:::i;:::-;50692:12;50670:18;:34;;;;:74;;;;;50732:12;50708:21;50718:10;50708:9;:21::i;:::-;:36;50670:74;50662:131;;;;-1:-1:-1;;;50662:131:0;;23373:2:1;50662:131:0;;;23355:21:1;23412:2;23392:18;;;23385:30;23451:34;23431:18;;;23424:62;-1:-1:-1;;;23502:18:1;;;23495:42;23554:19;;50662:131:0;23345:234:1;50662:131:0;50842:9;50812:26;50833:5;50812:26;;;;:::i;:::-;:39;50804:88;;;;-1:-1:-1;;;50804:88:0;;20536:2:1;50804:88:0;;;20518:21:1;20575:2;20555:18;;;20548:30;20614:34;20594:18;;;20587:62;-1:-1:-1;;;20665:18:1;;;20658:34;20709:19;;50804:88:0;20508:226:1;50804:88:0;50932:9;50928:118;50951:18;50947:22;;:1;:22;50928:118;;;51016:11;:13;;;;;;;;50994:36;;51004:10;;50994:9;:36::i;:::-;50971:3;;50928:118;;22209:208;22281:7;-1:-1:-1;;;;;22309:19:0;;22301:74;;;;-1:-1:-1;;;22301:74:0;;21366:2:1;22301:74:0;;;21348:21:1;21405:2;21385:18;;;21378:30;21444:34;21424:18;;;21417:62;-1:-1:-1;;;21495:18:1;;;21488:40;21545:19;;22301:74:0;21338:232:1;22301:74:0;-1:-1:-1;;;;;;22393:16:0;;;;;:9;:16;;;;;;;22209:208::o;56066:57::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;56066:57::o;45680:51::-;;;;;;;;;;;;;;;;:::i;51072:302::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;51162:7:::1;51157:210;51179:14;:21;51175:1;:25;;;51157:210;;;51249:9;51244:1;51230:15;;:11;;:15;;;;:::i;:::-;:28;;51222:75;;;;-1:-1:-1::0;;;51222:75:0::1;;;;;;;:::i;:::-;51312:43;51322:14;51337:1;51322:17;;;;;;;;-1:-1:-1::0;;;51322:17:0::1;;;;;;;;;;;;;;;51341:11;;:13;;;;;;;;;:::i;:::-;;;;;51312:9;:43::i;:::-;51202:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51157:210;;22954:104:::0;23010:13;23043:7;23036:14;;;;;:::i;51823:1467::-;51950:29;;;;;;;:19;:29;;;;;:36;;;;;:::i;:::-;:41;;;-1:-1:-1;51942:96:0;;;;-1:-1:-1;;;51942:96:0;;26209:2:1;51942:96:0;;;26191:21:1;26248:2;26228:18;;;26221:30;26287:34;26267:18;;;26260:62;-1:-1:-1;;;26338:18:1;;;26331:40;26388:19;;51942:96:0;26181:232:1;51942:96:0;52090:27;52096:20;52090:5;:27::i;:::-;52216:44;;;52227:10;52216:44;;;15071:51:1;15138:18;;;15131:34;;;52216:44:0;;;;;;;;;15044:18:1;;;52216:44:0;;-1:-1:-1;;;52505:30:0;;;14070:51:1;52459:6:0;14137:11:1;;;;14130:27;;;52505:30:0;;;;;;;;;;14173:12:1;;;52505:30:0;;;;52642:8;;-1:-1:-1;;;52642:77:0;;;52216:44;;52436:1;;52459:6;;52505:30;-1:-1:-1;;;;;;;52642:8:0;;:21;;:77;;52664:8;;52682:4;;52216:44;;-1:-1:-1;;52505:30:0;;52642:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52612:107;;;52753:18;52740:9;:31;;52732:89;;;;-1:-1:-1;;;52732:89:0;;20122:2:1;52732:89:0;;;20104:21:1;20161:2;20141:18;;;20134:30;20200:34;20180:18;;;20173:62;-1:-1:-1;;;20251:18:1;;;20244:43;20304:19;;52732:89:0;20094:235:1;52732:89:0;52834:8;;52946:29;;;52834:8;52946:29;;;:19;:29;;;;;;52834:448;;-1:-1:-1;;;52834:448:0;;-1:-1:-1;;;;;52834:8:0;;;;:13;;52854:9;;52834:448;;52879:8;;53029:7;;53106:10;;52834:8;53224:13;;52834:448;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51823:1467;;;;;;;:::o;24637:155::-;24732:52;17126:10;24765:8;24775;24732:18;:52::i;54241:69::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;54287:8:::1;:15:::0;;-1:-1:-1;;54287:15:0::1;;;::::0;;54241:69::o;53498:136::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;53589:37;;::::1;::::0;:18:::1;::::0;:37:::1;::::0;::::1;::::0;::::1;:::i;25760:328::-:0;25935:41;17126:10;25968:7;25935:18;:41::i;:::-;25927:103;;;;-1:-1:-1;;;25927:103:0;;;;;;;:::i;:::-;26041:39;26055:4;26061:2;26065:7;26074:5;26041:13;:39::i;53787:446::-;27663:4;27687:16;;;:7;:16;;;;;;53859:13;;-1:-1:-1;;;;;27687:16:0;53884:75;;;;-1:-1:-1;;;53884:75:0;;24568:2:1;53884:75:0;;;24550:21:1;24607:2;24587:18;;;24580:30;24646:34;24626:18;;;24619:62;-1:-1:-1;;;24697:18:1;;;24690:45;24752:19;;53884:75:0;24540:237:1;53884:75:0;53975:8;;;;;;;53972:74;;54016:18;54009:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53787:446;;;:::o;53972:74::-;54058:28;54089:10;:8;:10::i;:::-;54058:41;;54148:1;54123:14;54117:28;:32;:108;;;;;;;;;;;;;;;;;54176:14;54192:18;:7;:16;:18::i;:::-;54159:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54117:108;54110:115;53787:446;-1:-1:-1;;;53787:446:0:o;55362:248::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;55542:8:::1;::::0;:60:::1;::::0;-1:-1:-1;;;55542:60:0;;-1:-1:-1;;;;;55542:8:0;;::::1;::::0;:18:::1;::::0;:60:::1;::::0;55561:8;;55571;;55581:11;;55594:7;;;;55542:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55362:248:::0;;;;;:::o;47575:758::-;47791:27;;;47756:32;47791:27;;;:14;:27;;;;;;:40;;;;47819:11;;47791:40;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47791:48:0;;;;;;;;;;47858:21;;;;47791:48;;-1:-1:-1;47850:86:0;;;;-1:-1:-1;;;47850:86:0;;27053:2:1;47850:86:0;;;27035:21:1;27092:2;27072:18;;;27065:30;27131:34;27111:18;;;27104:62;-1:-1:-1;;;27182:18:1;;;27175:36;27228:19;;47850:86:0;27025:228:1;47850:86:0;47974:23;;47955:42;;:90;;;;;48024:9;:21;;;48011:8;;48001:19;;;;;;;:::i;:::-;;;;;;;;:44;47955:90;47947:129;;;;-1:-1:-1;;;47947:129:0;;19354:2:1;47947:129:0;;;19336:21:1;19393:2;19373:18;;;19366:30;19432:28;19412:18;;;19405:56;19478:18;;47947:129:0;19326:176:1;47947:129:0;48150:1;48124:27;;;48162:21;;;:34;48265:60;;-1:-1:-1;;;48265:60:0;;:4;;:16;;:60;;48282:11;;48295;;48308:6;;48316:8;;;;48265:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47575:758;;;;;;:::o;49070:26::-;;;;;;;:::i;48341:287::-;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;48453:29:::1;::::0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:36;;::::1;::::0;::::1;:::i;:::-;:41:::0;;-1:-1:-1;48445:118:0::1;;;::::0;;-1:-1:-1;;;48445:118:0;;26620:2:1;48445:118:0::1;::::0;::::1;26602:21:1::0;26639:18;;;26632:30;;;;26698:34;26678:18;;;26671:62;26769:34;26749:18;;;26742:62;26821:19;;48445:118:0::1;26592:254:1::0;48445:118:0::1;48574:29;::::0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:46:::1;::::0;48606:14;;48574:46:::1;:::i;36931:201::-:0;36095:6;;-1:-1:-1;;;;;36095:6:0;17126:10;36242:23;36234:68;;;;-1:-1:-1;;;36234:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37020:22:0;::::1;37012:73;;;::::0;-1:-1:-1;;;37012:73:0;;17022:2:1;37012:73:0::1;::::0;::::1;17004:21:1::0;17061:2;17041:18;;;17034:30;17100:34;17080:18;;;17073:62;-1:-1:-1;;;17151:18:1;;;17144:36;17197:19;;37012:73:0::1;16994:228:1::0;37012:73:0::1;37096:28;37115:8;37096:18;:28::i;:::-;36931:201:::0;:::o;31744:174::-;31819:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31819:29:0;-1:-1:-1;;;;;31819:29:0;;;;;;;;:24;;31873:23;31819:24;31873:14;:23::i;:::-;-1:-1:-1;;;;;31864:46:0;;;;;;;;;;;31744:174;;:::o;54962:265::-;55097:19;55118:15;55148:8;55137:40;;;;;;;;;;;;:::i;:::-;55096:81;;;;55188:31;55198:11;55211:7;55188:9;:31::i;:::-;54962:265;;;;;;:::o;27892:348::-;27985:4;27687:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27687:16:0;28002:73;;;;-1:-1:-1;;;28002:73:0;;19709:2:1;28002:73:0;;;19691:21:1;19748:2;19728:18;;;19721:30;19787:34;19767:18;;;19760:62;-1:-1:-1;;;19838:18:1;;;19831:42;19890:19;;28002:73:0;19681:234:1;28002:73:0;28086:13;28102:23;28117:7;28102:14;:23::i;:::-;28086:39;;28155:5;-1:-1:-1;;;;;28144:16:0;:7;-1:-1:-1;;;;;28144:16:0;;:51;;;;28188:7;-1:-1:-1;;;;;28164:31:0;:20;28176:7;28164:11;:20::i;:::-;-1:-1:-1;;;;;28164:31:0;;28144:51;:87;;;-1:-1:-1;;;;;;24984:25:0;;;24960:4;24984:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28199:32;28136:96;27892:348;-1:-1:-1;;;;27892:348:0:o;31001:625::-;31160:4;-1:-1:-1;;;;;31133:31:0;:23;31148:7;31133:14;:23::i;:::-;-1:-1:-1;;;;;31133:31:0;;31125:81;;;;-1:-1:-1;;;31125:81:0;;17429:2:1;31125:81:0;;;17411:21:1;17468:2;17448:18;;;17441:30;17507:34;17487:18;;;17480:62;-1:-1:-1;;;17558:18:1;;;17551:35;17603:19;;31125:81:0;17401:227:1;31125:81:0;-1:-1:-1;;;;;31225:16:0;;31217:65;;;;-1:-1:-1;;;31217:65:0;;18595:2:1;31217:65:0;;;18577:21:1;18634:2;18614:18;;;18607:30;18673:34;18653:18;;;18646:62;-1:-1:-1;;;18724:18:1;;;18717:34;18768:19;;31217:65:0;18567:226:1;31217:65:0;31399:29;31416:1;31420:7;31399:8;:29::i;:::-;-1:-1:-1;;;;;31441:15:0;;;;;;:9;:15;;;;;:20;;31460:1;;31441:15;:20;;31460:1;;31441:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31472:13:0;;;;;;:9;:13;;;;;:18;;31489:1;;31472:13;:18;;31489:1;;31472:18;:::i;:::-;;;;-1:-1:-1;;31501:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31501:21:0;-1:-1:-1;;;;;31501:21:0;;;;;;;;;31540:27;;31501:16;;31540:27;;;;;;;23867:411;;;:::o;28582:110::-;28658:26;28668:2;28672:7;28658:26;;;;;;;;;;;;:9;:26::i;30244:420::-;30304:13;30320:23;30335:7;30320:14;:23::i;:::-;30304:39;;30445:29;30462:1;30466:7;30445:8;:29::i;:::-;-1:-1:-1;;;;;30487:16:0;;;;;;:9;:16;;;;;:21;;30507:1;;30487:16;:21;;30507:1;;30487:21;:::i;:::-;;;;-1:-1:-1;;30526:16:0;;;;:7;:16;;;;;;30519:23;;-1:-1:-1;;;;;;30519:23:0;;;30560:36;30534:7;;30526:16;-1:-1:-1;;;;;30560:36:0;;;;;30526:16;;30560:36;36313:1:::1;;54318:209::o:0;32060:315::-;32215:8;-1:-1:-1;;;;;32206:17:0;:5;-1:-1:-1;;;;;32206:17:0;;;32198:55;;;;-1:-1:-1;;;32198:55:0;;19000:2:1;32198:55:0;;;18982:21:1;19039:2;19019:18;;;19012:30;19078:27;19058:18;;;19051:55;19123:18;;32198:55:0;18972:175:1;32198:55:0;-1:-1:-1;;;;;32264:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;32264:46:0;;;;;;;;;;32326:41;;15316::1;;;32326::0;;15289:18:1;32326:41:0;;;;;;;32060:315;;;:::o;26970:::-;27127:28;27137:4;27143:2;27147:7;27127:9;:28::i;:::-;27174:48;27197:4;27203:2;27207:7;27216:5;27174:22;:48::i;:::-;27166:111;;;;-1:-1:-1;;;27166:111:0;;;;;;;:::i;53676:105::-;53728:13;53761:12;53754:19;;;;;:::i;17633:723::-;17689:13;17910:10;17906:53;;-1:-1:-1;;17937:10:0;;;;;;;;;;;;-1:-1:-1;;;17937:10:0;;;;;17633:723::o;17906:53::-;17984:5;17969:12;18025:78;18032:9;;18025:78;;18058:8;;;;:::i;:::-;;-1:-1:-1;18081:10:0;;-1:-1:-1;18089:2:0;18081:10;;:::i;:::-;;;18025:78;;;18113:19;18145:6;-1:-1:-1;;;;;18135:17:0;;;;;-1:-1:-1;;;18135:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18135:17:0;;18113:39;;18163:154;18170:10;;18163:154;;18197:11;18207:1;18197:11;;:::i;:::-;;-1:-1:-1;18266:10:0;18274:2;18266:5;:10;:::i;:::-;18253:24;;:2;:24;:::i;:::-;18240:39;;18223:6;18230;18223:14;;;;;;-1:-1:-1;;;18223:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;18223:56:0;;;;;;;;-1:-1:-1;18294:11:0;18303:2;18294:11;;:::i;:::-;;;18163:154;;37292:191;37385:6;;;-1:-1:-1;;;;;37402:17:0;;;-1:-1:-1;;;;;;37402:17:0;;;;;;;37435:40;;37385:6;;;37402:17;37385:6;;37435:40;;37366:16;;37435:40;37292:191;;:::o;28919:321::-;29049:18;29055:2;29059:7;29049:5;:18::i;:::-;29100:54;29131:1;29135:2;29139:7;29148:5;29100:22;:54::i;:::-;29078:154;;;;-1:-1:-1;;;29078:154:0;;;;;;;:::i;32940:799::-;33095:4;-1:-1:-1;;;;;33116:13:0;;9384:19;:23;33112:620;;33152:72;;-1:-1:-1;;;33152:72:0;;-1:-1:-1;;;;;33152:36:0;;;;;:72;;17126:10;;33203:4;;33209:7;;33218:5;;33152:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33152:72:0;;;;;;;;-1:-1:-1;;33152:72:0;;;;;;;;;;;;:::i;:::-;;;33148:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33394:13:0;;33390:272;;33437:60;;-1:-1:-1;;;33437:60:0;;;;;;;:::i;33390:272::-;33612:6;33606:13;33597:6;33593:2;33589:15;33582:38;33148:529;-1:-1:-1;;;;;;33275:51:0;-1:-1:-1;;;33275:51:0;;-1:-1:-1;33268:58:0;;33112:620;-1:-1:-1;33716:4:0;32940:799;;;;;;:::o;29576:439::-;-1:-1:-1;;;;;29656:16:0;;29648:61;;;;-1:-1:-1;;;29648:61:0;;22599:2:1;29648:61:0;;;22581:21:1;;;22618:18;;;22611:30;22677:34;22657:18;;;22650:62;22729:18;;29648:61:0;22571:182:1;29648:61:0;27663:4;27687:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27687:16:0;:30;29720:58;;;;-1:-1:-1;;;29720:58:0;;17835:2:1;29720:58:0;;;17817:21:1;17874:2;17854:18;;;17847:30;17913;17893:18;;;17886:58;17961:18;;29720:58:0;17807:178:1;29720:58:0;-1:-1:-1;;;;;29849:13:0;;;;;;:9;:13;;;;;:18;;29866:1;;29849:13;:18;;29866:1;;29849:18;:::i;:::-;;;;-1:-1:-1;;29878:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29878:21:0;-1:-1:-1;;;;;29878:21:0;;;;;;;;29917:33;;29878:16;;;29917:33;;29878:16;;29917:33;36313:1:::1;;54318:209::o:0;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:2;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:2;;;309:1;306;299:12;268:2;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;88:332;;;;;:::o;425:160::-;490:20;;546:13;;539:21;529:32;;519:2;;575:1;572;565:12;519:2;471:114;;;:::o;590:375::-;641:8;651:6;705:3;698:4;690:6;686:17;682:27;672:2;;730:8;720;713:26;672:2;-1:-1:-1;760:20:1;;-1:-1:-1;;;;;792:30:1;;789:2;;;842:8;832;825:26;789:2;886:4;878:6;874:17;862:29;;938:3;931:4;922:6;914;910:19;906:30;903:39;900:2;;;955:1;952;945:12;900:2;662:303;;;;;:::o;970:228::-;1012:5;1065:3;1058:4;1050:6;1046:17;1042:27;1032:2;;1087:5;1080;1073:20;1032:2;1113:79;1188:3;1179:6;1166:20;1159:4;1151:6;1147:17;1113:79;:::i;1203:159::-;1270:20;;1330:6;1319:18;;1309:29;;1299:2;;1352:1;1349;1342:12;1367:171;1434:20;;-1:-1:-1;;;;;1483:30:1;;1473:41;;1463:2;;1528:1;1525;1518:12;1543:257;1602:6;1655:2;1643:9;1634:7;1630:23;1626:32;1623:2;;;1676:6;1668;1661:22;1623:2;1720:9;1707:23;1739:31;1764:5;1739:31;:::i;1805:330::-;1892:6;1900;1953:2;1941:9;1932:7;1928:23;1924:32;1921:2;;;1974:6;1966;1959:22;1921:2;2011:9;2005:16;2030:31;2055:5;2030:31;:::i;:::-;2125:2;2110:18;;;;2104:25;2080:5;;2104:25;;-1:-1:-1;;;1911:224:1:o;2140:398::-;2208:6;2216;2269:2;2257:9;2248:7;2244:23;2240:32;2237:2;;;2290:6;2282;2275:22;2237:2;2334:9;2321:23;2353:31;2378:5;2353:31;:::i;:::-;2403:5;-1:-1:-1;2460:2:1;2445:18;;2432:32;2473:33;2432:32;2473:33;:::i;:::-;2525:7;2515:17;;;2227:311;;;;;:::o;2543:466::-;2620:6;2628;2636;2689:2;2677:9;2668:7;2664:23;2660:32;2657:2;;;2710:6;2702;2695:22;2657:2;2754:9;2741:23;2773:31;2798:5;2773:31;:::i;:::-;2823:5;-1:-1:-1;2880:2:1;2865:18;;2852:32;2893:33;2852:32;2893:33;:::i;:::-;2647:362;;2945:7;;-1:-1:-1;;;2999:2:1;2984:18;;;;2971:32;;2647:362::o;3014:685::-;3109:6;3117;3125;3133;3186:3;3174:9;3165:7;3161:23;3157:33;3154:2;;;3208:6;3200;3193:22;3154:2;3252:9;3239:23;3271:31;3296:5;3271:31;:::i;:::-;3321:5;-1:-1:-1;3378:2:1;3363:18;;3350:32;3391:33;3350:32;3391:33;:::i;:::-;3443:7;-1:-1:-1;3497:2:1;3482:18;;3469:32;;-1:-1:-1;3552:2:1;3537:18;;3524:32;-1:-1:-1;;;;;3568:30:1;;3565:2;;;3616:6;3608;3601:22;3565:2;3644:49;3685:7;3676:6;3665:9;3661:22;3644:49;:::i;:::-;3634:59;;;3144:555;;;;;;;:::o;3704:325::-;3769:6;3777;3830:2;3818:9;3809:7;3805:23;3801:32;3798:2;;;3851:6;3843;3836:22;3798:2;3895:9;3882:23;3914:31;3939:5;3914:31;:::i;:::-;3964:5;-1:-1:-1;3988:35:1;4019:2;4004:18;;3988:35;:::i;:::-;3978:45;;3788:241;;;;;:::o;4034:325::-;4102:6;4110;4163:2;4151:9;4142:7;4138:23;4134:32;4131:2;;;4184:6;4176;4169:22;4131:2;4228:9;4215:23;4247:31;4272:5;4247:31;:::i;:::-;4297:5;4349:2;4334:18;;;;4321:32;;-1:-1:-1;;;4121:238:1:o;4364:1077::-;4448:6;4479:2;4522;4510:9;4501:7;4497:23;4493:32;4490:2;;;4543:6;4535;4528:22;4490:2;4588:9;4575:23;-1:-1:-1;;;;;4658:2:1;4650:6;4647:14;4644:2;;;4679:6;4671;4664:22;4644:2;4722:6;4711:9;4707:22;4697:32;;4767:7;4760:4;4756:2;4752:13;4748:27;4738:2;;4794:6;4786;4779:22;4738:2;4835;4822:16;4857:2;4853;4850:10;4847:2;;;4863:18;;:::i;:::-;4909:2;4906:1;4902:10;4892:20;;4932:28;4956:2;4952;4948:11;4932:28;:::i;:::-;4994:15;;;5025:12;;;;5057:11;;;5087;;;5083:20;;5080:33;-1:-1:-1;5077:2:1;;;5131:6;5123;5116:22;5077:2;5158:6;5149:15;;5173:238;5187:2;5184:1;5181:9;5173:238;;;5258:3;5245:17;5232:30;;5275:31;5300:5;5275:31;:::i;:::-;5319:18;;;5205:1;5198:9;;;;;5357:12;;;;5389;;5173:238;;;-1:-1:-1;5430:5:1;4459:982;-1:-1:-1;;;;;;;;4459:982:1:o;5446:190::-;5502:6;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5576:6;5568;5561:22;5523:2;5604:26;5620:9;5604:26;:::i;5641:255::-;5699:6;5752:2;5740:9;5731:7;5727:23;5723:32;5720:2;;;5773:6;5765;5758:22;5720:2;5817:9;5804:23;5836:30;5860:5;5836:30;:::i;5901:259::-;5970:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:2;;;6044:6;6036;6029:22;5991:2;6081:9;6075:16;6100:30;6124:5;6100:30;:::i;6165:480::-;6234:6;6287:2;6275:9;6266:7;6262:23;6258:32;6255:2;;;6308:6;6300;6293:22;6255:2;6353:9;6340:23;-1:-1:-1;;;;;6378:6:1;6375:30;6372:2;;;6423:6;6415;6408:22;6372:2;6451:22;;6504:4;6496:13;;6492:27;-1:-1:-1;6482:2:1;;6538:6;6530;6523:22;6482:2;6566:73;6631:7;6626:2;6613:16;6608:2;6604;6600:11;6566:73;:::i;6650:194::-;6708:6;6761:2;6749:9;6740:7;6736:23;6732:32;6729:2;;;6782:6;6774;6767:22;6729:2;6810:28;6828:9;6810:28;:::i;6849:501::-;6927:6;6935;6943;6996:2;6984:9;6975:7;6971:23;6967:32;6964:2;;;7017:6;7009;7002:22;6964:2;7045:28;7063:9;7045:28;:::i;:::-;7035:38;;7124:2;7113:9;7109:18;7096:32;-1:-1:-1;;;;;7143:6:1;7140:30;7137:2;;;7188:6;7180;7173:22;7137:2;7232:58;7282:7;7273:6;7262:9;7258:22;7232:58;:::i;:::-;6954:396;;7309:8;;-1:-1:-1;7206:84:1;;-1:-1:-1;;;;6954:396:1:o;7355:480::-;7440:6;7448;7456;7509:2;7497:9;7488:7;7484:23;7480:32;7477:2;;;7530:6;7522;7515:22;7477:2;7558:28;7576:9;7558:28;:::i;:::-;7548:38;;7637:2;7626:9;7622:18;7609:32;-1:-1:-1;;;;;7656:6:1;7653:30;7650:2;;;7701:6;7693;7686:22;7650:2;7729:49;7770:7;7761:6;7750:9;7746:22;7729:49;:::i;:::-;7719:59;;;7825:2;7814:9;7810:18;7797:32;7787:42;;7467:368;;;;;:::o;7840:803::-;7944:6;7952;7960;7968;7976;8029:3;8017:9;8008:7;8004:23;8000:33;7997:2;;;8051:6;8043;8036:22;7997:2;8079:28;8097:9;8079:28;:::i;:::-;8069:38;;8158:2;8147:9;8143:18;8130:32;-1:-1:-1;;;;;8222:2:1;8214:6;8211:14;8208:2;;;8243:6;8235;8228:22;8208:2;8271:49;8312:7;8303:6;8292:9;8288:22;8271:49;:::i;:::-;8261:59;;8339:37;8372:2;8361:9;8357:18;8339:37;:::i;:::-;8329:47;;8429:2;8418:9;8414:18;8401:32;8385:48;;8458:2;8448:8;8445:16;8442:2;;;8479:6;8471;8464:22;8442:2;;8523:60;8575:7;8564:8;8553:9;8549:24;8523:60;:::i;:::-;7987:656;;;;-1:-1:-1;7987:656:1;;-1:-1:-1;8602:8:1;;8497:86;7987:656;-1:-1:-1;;;7987:656:1:o;8648:714::-;8750:6;8758;8766;8774;8827:3;8815:9;8806:7;8802:23;8798:33;8795:2;;;8849:6;8841;8834:22;8795:2;8877:28;8895:9;8877:28;:::i;:::-;8867:38;;8956:2;8945:9;8941:18;8928:32;-1:-1:-1;;;;;9020:2:1;9012:6;9009:14;9006:2;;;9041:6;9033;9026:22;9006:2;9069:49;9110:7;9101:6;9090:9;9086:22;9069:49;:::i;:::-;9059:59;;9137:37;9170:2;9159:9;9155:18;9137:37;:::i;:::-;9127:47;;9227:2;9216:9;9212:18;9199:32;9183:48;;9256:2;9246:8;9243:16;9240:2;;;9277:6;9269;9262:22;9240:2;;9305:51;9348:7;9337:8;9326:9;9322:24;9305:51;:::i;9367:642::-;9462:6;9470;9478;9486;9494;9547:3;9535:9;9526:7;9522:23;9518:33;9515:2;;;9569:6;9561;9554:22;9515:2;9597:28;9615:9;9597:28;:::i;:::-;9587:38;;9644:37;9677:2;9666:9;9662:18;9644:37;:::i;:::-;9634:47;;9728:2;9717:9;9713:18;9700:32;9690:42;;9783:2;9772:9;9768:18;9755:32;-1:-1:-1;;;;;9802:6:1;9799:30;9796:2;;;9847:6;9839;9832:22;9796:2;9891:58;9941:7;9932:6;9921:9;9917:22;9891:58;:::i;10014:262::-;10081:6;10089;10142:2;10130:9;10121:7;10117:23;10113:32;10110:2;;;10163:6;10155;10148:22;10110:2;10191:28;10209:9;10191:28;:::i;10281:190::-;10340:6;10393:2;10381:9;10372:7;10368:23;10364:32;10361:2;;;10414:6;10406;10399:22;10361:2;-1:-1:-1;10442:23:1;;10351:120;-1:-1:-1;10351:120:1:o;10476:255::-;10555:6;10563;10616:2;10604:9;10595:7;10591:23;10587:32;10584:2;;;10637:6;10629;10622:22;10584:2;-1:-1:-1;;10665:16:1;;10721:2;10706:18;;;10700:25;10665:16;;10700:25;;-1:-1:-1;10574:157:1:o;10736:289::-;10793:6;10846:2;10834:9;10825:7;10821:23;10817:32;10814:2;;;10867:6;10859;10852:22;10814:2;10911:9;10898:23;10961:4;10954:5;10950:16;10943:5;10940:27;10930:2;;10986:6;10978;10971:22;11147:268;11235:6;11230:3;11223:19;11287:6;11280:5;11273:4;11268:3;11264:14;11251:43;-1:-1:-1;11205:3:1;11314:16;;;11332:4;11310:27;;;11303:40;;;;11397:2;11376:15;;;-1:-1:-1;;11372:29:1;11363:39;;;11359:50;;11213:202::o;11420:257::-;11461:3;11499:5;11493:12;11526:6;11521:3;11514:19;11542:63;11598:6;11591:4;11586:3;11582:14;11575:4;11568:5;11564:16;11542:63;:::i;:::-;11659:2;11638:15;-1:-1:-1;;11634:29:1;11625:39;;;;11666:4;11621:50;;11469:208;-1:-1:-1;;11469:208:1:o;11682:273::-;11865:6;11857;11852:3;11839:33;11821:3;11891:16;;11916:15;;;11891:16;11829:126;-1:-1:-1;11829:126:1:o;11960:274::-;12089:3;12127:6;12121:13;12143:53;12189:6;12184:3;12177:4;12169:6;12165:17;12143:53;:::i;:::-;12212:16;;;;;12097:137;-1:-1:-1;;12097:137:1:o;12239:819::-;12365:3;12394;12429:6;12423:13;12459:36;12485:9;12459:36;:::i;:::-;12514:1;12531:18;;;12558:104;;;;12676:1;12671:362;;;;12524:509;;12558:104;-1:-1:-1;;12591:24:1;;12579:37;;12636:16;;;;-1:-1:-1;12558:104:1;;12671:362;12704:6;12699:3;12692:19;12734:4;12781:2;12776:3;12766:18;12806:3;12822:165;12836:6;12833:1;12830:13;12822:165;;;12914:14;;12901:11;;;12894:35;12957:16;;;;12851:10;;12822:165;;;12826:3;;;13016:6;13011:3;13007:16;13000:23;;12524:509;-1:-1:-1;13049:3:1;;12373:685;-1:-1:-1;;;;;;12373:685:1:o;13063:637::-;13343:3;13381:6;13375:13;13397:53;13443:6;13438:3;13431:4;13423:6;13419:17;13397:53;:::i;:::-;13513:13;;13472:16;;;;13535:57;13513:13;13472:16;13569:4;13557:17;;13535:57;:::i;:::-;-1:-1:-1;;;13614:20:1;;13643:22;;;13692:1;13681:13;;13351:349;-1:-1:-1;;;;13351:349:1:o;14404:488::-;-1:-1:-1;;;;;14673:15:1;;;14655:34;;14725:15;;14720:2;14705:18;;14698:43;14772:2;14757:18;;14750:34;;;14820:3;14815:2;14800:18;;14793:31;;;14598:4;;14841:45;;14866:19;;14858:6;14841:45;:::i;:::-;14833:53;14607:285;-1:-1:-1;;;;;;14607:285:1:o;15368:217::-;15515:2;15504:9;15497:21;15478:4;15535:44;15575:2;15564:9;15560:18;15552:6;15535:44;:::i;16401:414::-;16603:2;16585:21;;;16642:2;16622:18;;;16615:30;16681:34;16676:2;16661:18;;16654:62;-1:-1:-1;;;16747:2:1;16732:18;;16725:48;16805:3;16790:19;;16575:240::o;17990:398::-;18192:2;18174:21;;;18231:2;18211:18;;;18204:30;18270:34;18265:2;18250:18;;18243:62;-1:-1:-1;;;18336:2:1;18321:18;;18314:32;18378:3;18363:19;;18164:224::o;23584:356::-;23786:2;23768:21;;;23805:18;;;23798:30;23864:34;23859:2;23844:18;;23837:62;23931:2;23916:18;;23758:182::o;25184:413::-;25386:2;25368:21;;;25425:2;25405:18;;;25398:30;25464:34;25459:2;25444:18;;25437:62;-1:-1:-1;;;25530:2:1;25515:18;;25508:47;25587:3;25572:19;;25358:239::o;27794:640::-;28075:6;28063:19;;28045:38;;-1:-1:-1;;;;;28119:32:1;;28114:2;28099:18;;28092:60;28139:3;28183:2;28168:18;;28161:31;;;-1:-1:-1;;28215:45:1;;28240:19;;28232:6;28215:45;:::i;:::-;28310:6;28303:14;28296:22;28291:2;28280:9;28276:18;28269:50;28368:9;28360:6;28356:22;28350:3;28339:9;28335:19;28328:51;28396:32;28421:6;28413;28396:32;:::i;:::-;28388:40;28035:399;-1:-1:-1;;;;;;;;28035:399:1:o;28439:326::-;28634:6;28626;28622:19;28611:9;28604:38;28678:2;28673;28662:9;28658:18;28651:30;28585:4;28698:61;28755:2;28744:9;28740:18;28732:6;28724;28698:61;:::i;:::-;28690:69;28594:171;-1:-1:-1;;;;;28594:171:1:o;28770:582::-;29037:6;29029;29025:19;29014:9;29007:38;29081:3;29076:2;29065:9;29061:18;29054:31;28988:4;29108:45;29148:3;29137:9;29133:19;29125:6;29108:45;:::i;:::-;-1:-1:-1;;;;;29193:6:1;29189:31;29184:2;29173:9;29169:18;29162:59;29269:9;29261:6;29257:22;29252:2;29241:9;29237:18;29230:50;29297:49;29339:6;29331;29323;29297:49;:::i;29357:555::-;29614:6;29606;29602:19;29591:9;29584:38;29658:3;29653:2;29642:9;29638:18;29631:31;29565:4;29685:45;29725:3;29714:9;29710:19;29702:6;29685:45;:::i;:::-;-1:-1:-1;;;;;29770:6:1;29766:31;29761:2;29750:9;29746:18;29739:59;29846:9;29838:6;29834:22;29829:2;29818:9;29814:18;29807:50;29874:32;29899:6;29891;29874:32;:::i;:::-;29866:40;29574:338;-1:-1:-1;;;;;;;29574:338:1:o;29917:1510::-;30263:6;30255;30251:19;30240:9;30233:38;30214:4;30290:2;30328:3;30323:2;30312:9;30308:18;30301:31;30352:4;30388:6;30382:13;30418:36;30444:9;30418:36;:::i;:::-;30491:6;30485:3;30474:9;30470:19;30463:35;30517:3;30539:1;30571:2;30560:9;30556:18;30588:1;30583:122;;;;30719:1;30714:363;;;;30549:528;;30583:122;-1:-1:-1;;30631:24:1;;30611:18;;;30604:52;30691:3;30676:19;;;-1:-1:-1;30583:122:1;;30714:363;30748:6;30742:4;30735:20;30799:2;30793:4;30783:19;30824:4;30841:180;30855:6;30852:1;30849:13;30841:180;;;30948:14;;30924:17;;;30920:26;;30913:50;30991:16;;;;30870:10;;30841:180;;;31045:17;;31041:26;;;-1:-1:-1;;30549:528:1;;;;;;31122:9;31117:3;31113:19;31108:2;31097:9;31093:18;31086:47;31156:29;31181:3;31173:6;31156:29;:::i;:::-;31142:43;;;31194:54;31244:2;31233:9;31229:18;31221:6;-1:-1:-1;;;;;11104:31:1;11092:44;;11082:60;31194:54;-1:-1:-1;;;;;11104:31:1;;31307:3;31292:19;;11092:44;31361:9;31353:6;31349:22;31343:3;31332:9;31328:19;31321:51;31389:32;31414:6;31406;31389:32;:::i;:::-;31381:40;30223:1204;-1:-1:-1;;;;;;;;;30223:1204:1:o;31432:498::-;31632:4;31661:6;31706:2;31698:6;31694:15;31683:9;31676:34;31758:2;31750:6;31746:15;31741:2;31730:9;31726:18;31719:43;;31798:6;31793:2;31782:9;31778:18;31771:34;31841:3;31836:2;31825:9;31821:18;31814:31;31862:62;31919:3;31908:9;31904:19;31896:6;31888;31862:62;:::i;32370:275::-;32441:2;32435:9;32506:2;32487:13;;-1:-1:-1;;32483:27:1;32471:40;;-1:-1:-1;;;;;32526:34:1;;32562:22;;;32523:62;32520:2;;;32588:18;;:::i;:::-;32624:2;32617:22;32415:230;;-1:-1:-1;32415:230:1:o;32650:128::-;32690:3;32721:1;32717:6;32714:1;32711:13;32708:2;;;32727:18;;:::i;:::-;-1:-1:-1;32763:9:1;;32698:80::o;32783:120::-;32823:1;32849;32839:2;;32854:18;;:::i;:::-;-1:-1:-1;32888:9:1;;32829:74::o;32908:168::-;32948:7;33014:1;33010;33006:6;33002:14;32999:1;32996:21;32991:1;32984:9;32977:17;32973:45;32970:2;;;33021:18;;:::i;:::-;-1:-1:-1;33061:9:1;;32960:116::o;33081:125::-;33121:4;33149:1;33146;33143:8;33140:2;;;33154:18;;:::i;:::-;-1:-1:-1;33191:9:1;;33130:76::o;33211:258::-;33283:1;33293:113;33307:6;33304:1;33301:13;33293:113;;;33383:11;;;33377:18;33364:11;;;33357:39;33329:2;33322:10;33293:113;;;33424:6;33421:1;33418:13;33415:2;;;-1:-1:-1;;33459:1:1;33441:16;;33434:27;33264:205::o;33474:380::-;33553:1;33549:12;;;;33596;;;33617:2;;33671:4;33663:6;33659:17;33649:27;;33617:2;33724;33716:6;33713:14;33693:18;33690:38;33687:2;;;33770:10;33765:3;33761:20;33758:1;33751:31;33805:4;33802:1;33795:15;33833:4;33830:1;33823:15;33687:2;;33529:325;;;:::o;33859:135::-;33898:3;-1:-1:-1;;33919:17:1;;33916:2;;;33939:18;;:::i;:::-;-1:-1:-1;33986:1:1;33975:13;;33906:88::o;33999:175::-;34036:3;34080:4;34073:5;34069:16;34109:4;34100:7;34097:17;34094:2;;;34117:18;;:::i;:::-;34166:1;34153:15;;34044:130;-1:-1:-1;;34044:130:1:o;34179:112::-;34211:1;34237;34227:2;;34242:18;;:::i;:::-;-1:-1:-1;34276:9:1;;34217:74::o;34296:127::-;34357:10;34352:3;34348:20;34345:1;34338:31;34388:4;34385:1;34378:15;34412:4;34409:1;34402:15;34428:127;34489:10;34484:3;34480:20;34477:1;34470:31;34520:4;34517:1;34510:15;34544:4;34541:1;34534:15;34560:127;34621:10;34616:3;34612:20;34609:1;34602:31;34652:4;34649:1;34642:15;34676:4;34673:1;34666:15;34692:131;-1:-1:-1;;;;;34767:31:1;;34757:42;;34747:2;;34813:1;34810;34803:12;34828:131;-1:-1:-1;;;;;;34902:32:1;;34892:43;;34882:2;;34949:1;34946;34939:12
Swarm Source
ipfs://b4fb2c404fb8ac4774752866a0c1784eddd44d28c682acfff721f22fbb74817c
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.