Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
3,470 DYOR
Holders
66
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DYORNFT
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-20 */ // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT // 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/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 @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/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC1155/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.8.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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // 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/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File @openzeppelin/contracts/utils/cryptography/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The tree and the proofs can be generated using our * https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. * You will find a quickstart guide in the readme. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. * OpenZeppelin's JavaScript library generates merkle trees that are safe * against this attack out of the box. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} * * _Available since v4.7._ */ function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/DYORNFT.sol // /\_/\ // ((@v@)) // ():::() // ----- VV-VV------------------------------------------------ // ______ ___ ___ _______ _______ ______ _______ _______ // | _ \| Y | _ | _ \ | _ \| _ | | // |. | | 1 |. | |. l / |. | |. 1___|.| | | // |. | \_ _/|. | |. _ 1 |. | |. __) `-|. |-' // |: 1 /|: | |: 1 |: | | |: | |: | |: | // |::.. . / |::.| |::.. . |::.|:. | |::.| |::.| |::.| // `------' `---' `-------`--- ---' `--- ---`---' `---' pragma solidity ^0.8.0; /* * @title DYOR ERC1155 token */ contract DYORNFT is ERC1155, Ownable, ReentrancyGuard { string public name; string public symbol; uint256 public collections = 0; constructor( string memory _name, string memory _symbol, string memory _uri ) ERC1155(_uri) { name = _name; symbol = _symbol; } // a struct used to keep track of the collection tier to a merklroot struct Collection { uint256 tokenId; uint256 startTimestamp; uint256 endTimestamp; uint256 saleMintIndex; uint256 maxMintIndex; bytes32 merkleRoot; string uri; } /// mapping of collection mapping (uint256 => Collection) public collection; //tracking how many tokens where clamed by the user for a spacific tokenID mapping(address => mapping(uint256 => uint256)) public purchaseTxs; /** * @notice edit the merkle root for tokenId collection * * @param _startTimestamp start time for redemption * @param _endTimestamp end time for redemption * @param _maxMintIndex max supply for collection * @param _merkleRoot the new merkle root * @param _uri the uri for the collection */ function setMerkleRoot( uint256 _startTimestamp, uint256 _endTimestamp, uint256 _maxMintIndex, bytes32 _merkleRoot, string memory _uri) public onlyOwner { collection[collections] = Collection({ tokenId : uint256(collections), startTimestamp : uint256(_startTimestamp), endTimestamp : uint256(_endTimestamp), saleMintIndex : uint256(0), maxMintIndex : uint256(_maxMintIndex), merkleRoot : bytes32(_merkleRoot), uri : string(_uri) }); collections = collections + 1; } /** * @notice edit the max supply for a tokenID * * @param _tokenId choose which tokenId to edit * @param _maxSupply the new max supply value */ function setSupply(uint256 _tokenId, uint256 _maxSupply) public onlyOwner { require(_tokenId < collections, "Token ID does not exist"); Collection storage collect = collection[_tokenId]; require(collect.saleMintIndex <= _maxSupply, "more has been minted"); collect.maxMintIndex = _maxSupply; } /** * @notice edit the end time of the token mint * * @param _tokenId choose which tokenId to edit * @param _endTimestamp when to end the mint */ function setEndtimestamp(uint256 _tokenId, uint256 _endTimestamp) public onlyOwner { require(_tokenId < collections, "Token ID does not exist"); Collection storage collect = collection[_tokenId]; require(collect.startTimestamp < _endTimestamp, "end date before start date"); collect.endTimestamp = _endTimestamp; } /** * @notice edit the base uri for the collection * * @param baseURI the new URI */ function setURI(string memory baseURI, uint256 _tokenId) external onlyOwner { Collection storage collect = collection[_tokenId]; collect.uri = baseURI; } /** * @notice mint function for whitelist * * @param numberOfTokens the amount of tokens to purchase * @param claimAllowed the amount this sender is able to claim in total * @param _tokenId the tokenID of the 1155 * @param merkleProof the valid merkle proof of sender */ function merkleMint(uint256 numberOfTokens, uint256 claimAllowed, uint256 _tokenId, bytes32[] calldata merkleProof) nonReentrant public payable { (bool canclaim, uint256 leftToClaim) = canClaim(_tokenId, msg.sender, merkleProof, claimAllowed); require(canclaim, "claim req not met"); Collection storage collect = collection[_tokenId]; require(block.timestamp >= collect.startTimestamp, "Start Time not reached"); require(block.timestamp < collect.endTimestamp, "Sale Over"); require(numberOfTokens <= leftToClaim, "Purchase would exceed claim allowed"); require(collect.saleMintIndex + numberOfTokens <= collect.maxMintIndex, "Mint would exceed max supply of NFTs"); collect.saleMintIndex = collect.saleMintIndex + numberOfTokens; _mint(msg.sender, collect.tokenId, numberOfTokens,""); purchaseTxs[msg.sender][collect.tokenId] += numberOfTokens; } /** * @notice allow the owner to mint NFTs * * @param numberOfTokens how many to mint * @param _tokenId the tokenID of the 1155 * @param _address who to mint it too */ function adminMint(uint256 numberOfTokens, uint256 _tokenId, address _address) public onlyOwner { Collection storage collect = collection[_tokenId]; require(collect.saleMintIndex + numberOfTokens <= collect.maxMintIndex, "Mint would exceed max supply of NFTs"); collect.saleMintIndex = collect.saleMintIndex + numberOfTokens; _mint(_address, collect.tokenId, numberOfTokens,""); } /** * @notice checks to see if the address is able to claim, and what is the claim amout allowed to the address * * @param claimer sender * @param merkleProof the valid merkle proof of sender * @param claimAllowed the amount this sender is able to claim in total */ function canClaim(uint256 _tokenId, address claimer, bytes32[] calldata merkleProof, uint256 claimAllowed) public view returns (bool, uint256) { uint256 claimedAmount = purchaseTxs[msg.sender][_tokenId]; uint256 leftToClaim = claimAllowed - claimedAmount; bytes32 leaf = keccak256(abi.encode(claimer, claimAllowed, _tokenId)); Collection storage collect = collection[_tokenId]; return (leftToClaim>0 && MerkleProof.verify( merkleProof, collect.merkleRoot, leaf ), leftToClaim); } /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function uri(uint256 tokenId) public view virtual override(ERC1155) returns (string memory) { Collection storage collect = collection[tokenId]; return collect.uri; } /** * @notice checks to see if the address is able to claim, and what is the claim amout allowed to the address * * @param _tokenId getting data for token id */ function getCollection(uint256 _tokenId) public view returns ( uint256 tokenId, uint256 startTimestamp, uint256 endTimestamp, uint256 saleMintIndex, uint256 maxMintIndex, bytes32 merkleRoot ) { Collection storage collect = collection[_tokenId]; tokenId = collect.tokenId; startTimestamp = collect.startTimestamp; endTimestamp = collect.endTimestamp; saleMintIndex = collect.saleMintIndex; maxMintIndex = collect.maxMintIndex; merkleRoot = collect.merkleRoot; } /** * @notice checks how much of the token a user has claimed * * @param _address the user * @param _tokenId token Id you are checking the amount for */ function checkClaimedamount (address _address, uint256 _tokenId) public view returns ( uint256 claimedAmount ) { return claimedAmount = purchaseTxs[_address][_tokenId]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"claimer","type":"address"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"claimAllowed","type":"uint256"}],"name":"canClaim","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkClaimedamount","outputs":[{"internalType":"uint256","name":"claimedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"collection","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"endTimestamp","type":"uint256"},{"internalType":"uint256","name":"saleMintIndex","type":"uint256"},{"internalType":"uint256","name":"maxMintIndex","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getCollection","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"endTimestamp","type":"uint256"},{"internalType":"uint256","name":"saleMintIndex","type":"uint256"},{"internalType":"uint256","name":"maxMintIndex","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"claimAllowed","type":"uint256"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"merkleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"purchaseTxs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_endTimestamp","type":"uint256"}],"name":"setEndtimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTimestamp","type":"uint256"},{"internalType":"uint256","name":"_endTimestamp","type":"uint256"},{"internalType":"uint256","name":"_maxMintIndex","type":"uint256"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"setURI","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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260006007553480156200001657600080fd5b506040516200282a3803806200282a833981016040819052620000399162000269565b8062000045816200008b565b506200005133620000a4565b600160045582516200006b906005906020860190620000f6565b50815162000081906006906020850190620000f6565b5050505062000336565b8051620000a0906002906020840190620000f6565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002fa565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b620002ca87838801620001b2565b93506040860151915080821115620002e157600080fd5b50620002f086828701620001b2565b9150509250925092565b600181811c908216806200030f57607f821691505b6020821081036200033057634e487b7160e01b600052602260045260246000fd5b50919050565b6124e480620003466000396000f3fe6080604052600436106101655760003560e01c8063715018a6116100d1578063e562dfd61161008a578063f242432a11610064578063f242432a14610503578063f2fde38b14610523578063fb895ba614610543578063fc784d491461056357600080fd5b8063e562dfd614610471578063e985e9c514610487578063f0772377146104d057600080fd5b8063715018a6146103b4578063829ba400146103c95780638da5cb5b146103dc57806395d89b4114610404578063a22cb46514610419578063b5e533ac1461043957600080fd5b80632eb2c2d6116101235780632eb2c2d61461026857806338dd356c146102885780634e1273f4146102a85780635a1f3c28146102d5578063603e1d541461035157806367db3b8f1461039457600080fd5b8062fdd58e1461016a57806301ffc9a71461019d57806306fdde03146101cd5780630b9d6fc4146101ef5780630e89341c146102265780632da6360814610246575b600080fd5b34801561017657600080fd5b5061018a610185366004611a01565b610583565b6040519081526020015b60405180910390f35b3480156101a957600080fd5b506101bd6101b8366004611a41565b610619565b6040519015158152602001610194565b3480156101d957600080fd5b506101e261066b565b6040516101949190611aab565b3480156101fb57600080fd5b5061020f61020a366004611b09565b6106f9565b604080519215158352602083019190915201610194565b34801561023257600080fd5b506101e2610241366004611b6a565b6107cd565b34801561025257600080fd5b50610266610261366004611b83565b610875565b005b34801561027457600080fd5b50610266610283366004611d01565b6108f7565b34801561029457600080fd5b506102666102a3366004611daa565b610943565b3480156102b457600080fd5b506102c86102c3366004611e00565b6109ea565b6040516101949190611f05565b3480156102e157600080fd5b506103246102f0366004611b6a565b6000908152600860205260409020805460018201546002830154600384015460048501546005909501549395929491939092565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610194565b34801561035d57600080fd5b5061018a61036c366004611a01565b6001600160a01b03919091166000908152600960209081526040808320938352929052205490565b3480156103a057600080fd5b506102666103af366004611f18565b610b13565b3480156103c057600080fd5b50610266610b41565b6102666103d7366004611f5c565b610b55565b3480156103e857600080fd5b506003546040516001600160a01b039091168152602001610194565b34801561041057600080fd5b506101e2610d4c565b34801561042557600080fd5b50610266610434366004611fbc565b610d59565b34801561044557600080fd5b5061018a610454366004611a01565b600960209081526000928352604080842090915290825290205481565b34801561047d57600080fd5b5061018a60075481565b34801561049357600080fd5b506101bd6104a2366004611ff8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156104dc57600080fd5b506104f06104eb366004611b6a565b610d68565b604051610194979695949392919061202b565b34801561050f57600080fd5b5061026661051e36600461206f565b610e32565b34801561052f57600080fd5b5061026661053e3660046120c7565b610e77565b34801561054f57600080fd5b5061026661055e3660046120e2565b610ef0565b34801561056f57600080fd5b5061026661057e3660046120e2565b610fab565b60006001600160a01b0383166105f35760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061064a57506001600160e01b031982166303a24d0760e21b145b8061066557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6005805461067890612104565b80601f01602080910402602001604051908101604052809291908181526020018280546106a490612104565b80156106f15780601f106106c6576101008083540402835291602001916106f1565b820191906000526020600020905b8154815290600101906020018083116106d457829003601f168201915b505050505081565b3360009081526009602090815260408083208884529091528120548190816107218286612154565b604080516001600160a01b038b166020820152908101879052606081018b905290915060009060800160408051601f19818403018152918152815160209283012060008d81526008909352912090915082158015906107bc57506107bc89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060058301548461105e565b9b929a509198505050505050505050565b600081815260086020526040902060068101805460609291906107ef90612104565b80601f016020809104026020016040519081016040528092919081815260200182805461081b90612104565b80156108685780601f1061083d57610100808354040283529160200191610868565b820191906000526020600020905b81548152906001019060200180831161084b57829003601f168201915b5050505050915050919050565b61087d611074565b6000828152600860205260409020600481015460038201546108a090869061216b565b11156108be5760405162461bcd60e51b81526004016105ea90612183565b8381600301546108ce919061216b565b600382015580546040805160208101909152600081526108f191849187906110ce565b50505050565b6001600160a01b038516331480610913575061091385336104a2565b61092f5760405162461bcd60e51b81526004016105ea906121c7565b61093c85858585856111e2565b5050505050565b61094b611074565b6040805160e0810182526007548082526020808301898152838501898152600060608601818152608087018b815260a088018b815260c089018b815297845260088752989092208751815593516001850155915160028401559051600383015551600482015593516005850155905180519293926109cf926006850192019061194c565b50506007546109e09150600161216b565b6007555050505050565b60608151835114610a4f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105ea565b600083516001600160401b03811115610a6a57610a6a611bb8565b604051908082528060200260200182016040528015610a93578160200160208202803683370190505b50905060005b8451811015610b0b57610ade858281518110610ab757610ab7612215565b6020026020010151858381518110610ad157610ad1612215565b6020026020010151610583565b828281518110610af057610af0612215565b6020908102919091010152610b048161222b565b9050610a99565b509392505050565b610b1b611074565b6000818152600860209081526040909120835190916108f191600684019186019061194c565b610b49611074565b610b5360006113bf565b565b610b5d611411565b600080610b6d853386868a6106f9565b9150915081610bb25760405162461bcd60e51b815260206004820152601160248201527018db185a5b481c995c481b9bdd081b595d607a1b60448201526064016105ea565b60008581526008602052604090206001810154421015610c0d5760405162461bcd60e51b815260206004820152601660248201527514dd185c9d08151a5b59481b9bdd081c995858da195960521b60448201526064016105ea565b80600201544210610c4c5760405162461bcd60e51b815260206004820152600960248201526829b0b6329027bb32b960b91b60448201526064016105ea565b81881115610ca85760405162461bcd60e51b815260206004820152602360248201527f507572636861736520776f756c642065786365656420636c61696d20616c6c6f6044820152621dd95960ea1b60648201526084016105ea565b8060040154888260030154610cbd919061216b565b1115610cdb5760405162461bcd60e51b81526004016105ea90612183565b878160030154610ceb919061216b565b60038201558054604080516020810190915260008152610d0e9133918b906110ce565b33600090815260096020908152604080832084548452909152812080548a9290610d3990849061216b565b909155505060016004555061093c915050565b6006805461067890612104565b610d6433838361146a565b5050565b6008602052806000526040600020600091509050806000015490806001015490806002015490806003015490806004015490806005015490806006018054610daf90612104565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddb90612104565b8015610e285780601f10610dfd57610100808354040283529160200191610e28565b820191906000526020600020905b815481529060010190602001808311610e0b57829003601f168201915b5050505050905087565b6001600160a01b038516331480610e4e5750610e4e85336104a2565b610e6a5760405162461bcd60e51b81526004016105ea906121c7565b61093c858585858561154a565b610e7f611074565b6001600160a01b038116610ee45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ea565b610eed816113bf565b50565b610ef8611074565b6007548210610f435760405162461bcd60e51b8152602060048201526017602482015276151bdad95b88125108191bd95cc81b9bdd08195e1a5cdd604a1b60448201526064016105ea565b600082815260086020526040902060018101548211610fa45760405162461bcd60e51b815260206004820152601a60248201527f656e642064617465206265666f7265207374617274206461746500000000000060448201526064016105ea565b6002015550565b610fb3611074565b6007548210610ffe5760405162461bcd60e51b8152602060048201526017602482015276151bdad95b88125108191bd95cc81b9bdd08195e1a5cdd604a1b60448201526064016105ea565b600082815260086020526040902060038101548210156110575760405162461bcd60e51b81526020600482015260146024820152731b5bdc99481a185cc81899595b881b5a5b9d195960621b60448201526064016105ea565b6004015550565b60008261106b8584611674565b14949350505050565b6003546001600160a01b03163314610b535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105ea565b6001600160a01b03841661112e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016105ea565b33600061113a856116b9565b90506000611147856116b9565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061117990849061216b565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46111d983600089898989611704565b50505050505050565b81518351146112445760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016105ea565b6001600160a01b03841661126a5760405162461bcd60e51b81526004016105ea90612244565b3360005b845181101561135157600085828151811061128b5761128b612215565b6020026020010151905060008583815181106112a9576112a9612215565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156112f95760405162461bcd60e51b81526004016105ea90612289565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061133690849061216b565b925050819055505050508061134a9061222b565b905061126e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113a19291906122d3565b60405180910390a46113b781878787878761185f565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600454036114635760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105ea565b6002600455565b816001600160a01b0316836001600160a01b0316036114dd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105ea565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166115705760405162461bcd60e51b81526004016105ea90612244565b33600061157c856116b9565b90506000611589856116b9565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156115cc5760405162461bcd60e51b81526004016105ea90612289565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061160990849061216b565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611669848a8a8a8a8a611704565b505050505050505050565b600081815b8451811015610b0b576116a58286838151811061169857611698612215565b602002602001015161191a565b9150806116b18161222b565b915050611679565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106116f3576116f3612215565b602090810291909101015292915050565b6001600160a01b0384163b156113b75760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906117489089908990889088908890600401612301565b6020604051808303816000875af1925050508015611783575060408051601f3d908101601f1916820190925261178091810190612346565b60015b61182f5761178f612363565b806308c379a0036117c857506117a361237f565b806117ae57506117ca565b8060405162461bcd60e51b81526004016105ea9190611aab565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105ea565b6001600160e01b0319811663f23a6e6160e01b146111d95760405162461bcd60e51b81526004016105ea90612408565b6001600160a01b0384163b156113b75760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906118a39089908990889088908890600401612450565b6020604051808303816000875af19250505080156118de575060408051601f3d908101601f191682019092526118db91810190612346565b60015b6118ea5761178f612363565b6001600160e01b0319811663bc197c8160e01b146111d95760405162461bcd60e51b81526004016105ea90612408565b6000818310611936576000828152602084905260409020611945565b60008381526020839052604090205b9392505050565b82805461195890612104565b90600052602060002090601f01602090048101928261197a57600085556119c0565b82601f1061199357805160ff19168380011785556119c0565b828001600101855582156119c0579182015b828111156119c05782518255916020019190600101906119a5565b506119cc9291506119d0565b5090565b5b808211156119cc57600081556001016119d1565b80356001600160a01b03811681146119fc57600080fd5b919050565b60008060408385031215611a1457600080fd5b611a1d836119e5565b946020939093013593505050565b6001600160e01b031981168114610eed57600080fd5b600060208284031215611a5357600080fd5b813561194581611a2b565b6000815180845260005b81811015611a8457602081850181015186830182015201611a68565b81811115611a96576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006119456020830184611a5e565b60008083601f840112611ad057600080fd5b5081356001600160401b03811115611ae757600080fd5b6020830191508360208260051b8501011115611b0257600080fd5b9250929050565b600080600080600060808688031215611b2157600080fd5b85359450611b31602087016119e5565b935060408601356001600160401b03811115611b4c57600080fd5b611b5888828901611abe565b96999598509660600135949350505050565b600060208284031215611b7c57600080fd5b5035919050565b600080600060608486031215611b9857600080fd5b8335925060208401359150611baf604085016119e5565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715611bf357611bf3611bb8565b6040525050565b60006001600160401b03821115611c1357611c13611bb8565b5060051b60200190565b600082601f830112611c2e57600080fd5b81356020611c3b82611bfa565b604051611c488282611bce565b83815260059390931b8501820192828101915086841115611c6857600080fd5b8286015b84811015611c835780358352918301918301611c6c565b509695505050505050565b600082601f830112611c9f57600080fd5b81356001600160401b03811115611cb857611cb8611bb8565b604051611ccf601f8301601f191660200182611bce565b818152846020838601011115611ce457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611d1957600080fd5b611d22866119e5565b9450611d30602087016119e5565b935060408601356001600160401b0380821115611d4c57600080fd5b611d5889838a01611c1d565b94506060880135915080821115611d6e57600080fd5b611d7a89838a01611c1d565b93506080880135915080821115611d9057600080fd5b50611d9d88828901611c8e565b9150509295509295909350565b600080600080600060a08688031215611dc257600080fd5b8535945060208601359350604086013592506060860135915060808601356001600160401b03811115611df457600080fd5b611d9d88828901611c8e565b60008060408385031215611e1357600080fd5b82356001600160401b0380821115611e2a57600080fd5b818501915085601f830112611e3e57600080fd5b81356020611e4b82611bfa565b604051611e588282611bce565b83815260059390931b8501820192828101915089841115611e7857600080fd5b948201945b83861015611e9d57611e8e866119e5565b82529482019490820190611e7d565b96505086013592505080821115611eb357600080fd5b50611ec085828601611c1d565b9150509250929050565b600081518084526020808501945080840160005b83811015611efa57815187529582019590820190600101611ede565b509495945050505050565b6020815260006119456020830184611eca565b60008060408385031215611f2b57600080fd5b82356001600160401b03811115611f4157600080fd5b611f4d85828601611c8e565b95602094909401359450505050565b600080600080600060808688031215611f7457600080fd5b85359450602086013593506040860135925060608601356001600160401b03811115611f9f57600080fd5b611fab88828901611abe565b969995985093965092949392505050565b60008060408385031215611fcf57600080fd5b611fd8836119e5565b915060208301358015158114611fed57600080fd5b809150509250929050565b6000806040838503121561200b57600080fd5b612014836119e5565b9150612022602084016119e5565b90509250929050565b8781528660208201528560408201528460608201528360808201528260a082015260e060c0820152600061206260e0830184611a5e565b9998505050505050505050565b600080600080600060a0868803121561208757600080fd5b612090866119e5565b945061209e602087016119e5565b9350604086013592506060860135915060808601356001600160401b03811115611df457600080fd5b6000602082840312156120d957600080fd5b611945826119e5565b600080604083850312156120f557600080fd5b50508035926020909101359150565b600181811c9082168061211857607f821691505b60208210810361213857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156121665761216661213e565b500390565b6000821982111561217e5761217e61213e565b500190565b60208082526024908201527f4d696e7420776f756c6420657863656564206d617820737570706c79206f66206040820152634e46547360e01b606082015260800190565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820161223d5761223d61213e565b5060010190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006122e66040830185611eca565b82810360208401526122f88185611eca565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061233b90830184611a5e565b979650505050505050565b60006020828403121561235857600080fd5b815161194581611a2b565b600060033d111561237c5760046000803e5060005160e01c5b90565b600060443d101561238d5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156123bc57505050505090565b82850191508151818111156123d45750505050505090565b843d87010160208285010111156123ee5750505050505090565b6123fd60208286010187611bce565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061247c90830186611eca565b828103606084015261248e8186611eca565b905082810360808401526124a28185611a5e565b9897505050505050505056fea26469706673582212202bf3eac62c5a2edb2d479626a31e5cf7920c14bb5c53fa4038c2cdeffc69d08c64736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000444594f5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444594f5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f7777772e64796f722e676c6f62616c2f0000000000000000
Deployed Bytecode
0x6080604052600436106101655760003560e01c8063715018a6116100d1578063e562dfd61161008a578063f242432a11610064578063f242432a14610503578063f2fde38b14610523578063fb895ba614610543578063fc784d491461056357600080fd5b8063e562dfd614610471578063e985e9c514610487578063f0772377146104d057600080fd5b8063715018a6146103b4578063829ba400146103c95780638da5cb5b146103dc57806395d89b4114610404578063a22cb46514610419578063b5e533ac1461043957600080fd5b80632eb2c2d6116101235780632eb2c2d61461026857806338dd356c146102885780634e1273f4146102a85780635a1f3c28146102d5578063603e1d541461035157806367db3b8f1461039457600080fd5b8062fdd58e1461016a57806301ffc9a71461019d57806306fdde03146101cd5780630b9d6fc4146101ef5780630e89341c146102265780632da6360814610246575b600080fd5b34801561017657600080fd5b5061018a610185366004611a01565b610583565b6040519081526020015b60405180910390f35b3480156101a957600080fd5b506101bd6101b8366004611a41565b610619565b6040519015158152602001610194565b3480156101d957600080fd5b506101e261066b565b6040516101949190611aab565b3480156101fb57600080fd5b5061020f61020a366004611b09565b6106f9565b604080519215158352602083019190915201610194565b34801561023257600080fd5b506101e2610241366004611b6a565b6107cd565b34801561025257600080fd5b50610266610261366004611b83565b610875565b005b34801561027457600080fd5b50610266610283366004611d01565b6108f7565b34801561029457600080fd5b506102666102a3366004611daa565b610943565b3480156102b457600080fd5b506102c86102c3366004611e00565b6109ea565b6040516101949190611f05565b3480156102e157600080fd5b506103246102f0366004611b6a565b6000908152600860205260409020805460018201546002830154600384015460048501546005909501549395929491939092565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610194565b34801561035d57600080fd5b5061018a61036c366004611a01565b6001600160a01b03919091166000908152600960209081526040808320938352929052205490565b3480156103a057600080fd5b506102666103af366004611f18565b610b13565b3480156103c057600080fd5b50610266610b41565b6102666103d7366004611f5c565b610b55565b3480156103e857600080fd5b506003546040516001600160a01b039091168152602001610194565b34801561041057600080fd5b506101e2610d4c565b34801561042557600080fd5b50610266610434366004611fbc565b610d59565b34801561044557600080fd5b5061018a610454366004611a01565b600960209081526000928352604080842090915290825290205481565b34801561047d57600080fd5b5061018a60075481565b34801561049357600080fd5b506101bd6104a2366004611ff8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156104dc57600080fd5b506104f06104eb366004611b6a565b610d68565b604051610194979695949392919061202b565b34801561050f57600080fd5b5061026661051e36600461206f565b610e32565b34801561052f57600080fd5b5061026661053e3660046120c7565b610e77565b34801561054f57600080fd5b5061026661055e3660046120e2565b610ef0565b34801561056f57600080fd5b5061026661057e3660046120e2565b610fab565b60006001600160a01b0383166105f35760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061064a57506001600160e01b031982166303a24d0760e21b145b8061066557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6005805461067890612104565b80601f01602080910402602001604051908101604052809291908181526020018280546106a490612104565b80156106f15780601f106106c6576101008083540402835291602001916106f1565b820191906000526020600020905b8154815290600101906020018083116106d457829003601f168201915b505050505081565b3360009081526009602090815260408083208884529091528120548190816107218286612154565b604080516001600160a01b038b166020820152908101879052606081018b905290915060009060800160408051601f19818403018152918152815160209283012060008d81526008909352912090915082158015906107bc57506107bc89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060058301548461105e565b9b929a509198505050505050505050565b600081815260086020526040902060068101805460609291906107ef90612104565b80601f016020809104026020016040519081016040528092919081815260200182805461081b90612104565b80156108685780601f1061083d57610100808354040283529160200191610868565b820191906000526020600020905b81548152906001019060200180831161084b57829003601f168201915b5050505050915050919050565b61087d611074565b6000828152600860205260409020600481015460038201546108a090869061216b565b11156108be5760405162461bcd60e51b81526004016105ea90612183565b8381600301546108ce919061216b565b600382015580546040805160208101909152600081526108f191849187906110ce565b50505050565b6001600160a01b038516331480610913575061091385336104a2565b61092f5760405162461bcd60e51b81526004016105ea906121c7565b61093c85858585856111e2565b5050505050565b61094b611074565b6040805160e0810182526007548082526020808301898152838501898152600060608601818152608087018b815260a088018b815260c089018b815297845260088752989092208751815593516001850155915160028401559051600383015551600482015593516005850155905180519293926109cf926006850192019061194c565b50506007546109e09150600161216b565b6007555050505050565b60608151835114610a4f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105ea565b600083516001600160401b03811115610a6a57610a6a611bb8565b604051908082528060200260200182016040528015610a93578160200160208202803683370190505b50905060005b8451811015610b0b57610ade858281518110610ab757610ab7612215565b6020026020010151858381518110610ad157610ad1612215565b6020026020010151610583565b828281518110610af057610af0612215565b6020908102919091010152610b048161222b565b9050610a99565b509392505050565b610b1b611074565b6000818152600860209081526040909120835190916108f191600684019186019061194c565b610b49611074565b610b5360006113bf565b565b610b5d611411565b600080610b6d853386868a6106f9565b9150915081610bb25760405162461bcd60e51b815260206004820152601160248201527018db185a5b481c995c481b9bdd081b595d607a1b60448201526064016105ea565b60008581526008602052604090206001810154421015610c0d5760405162461bcd60e51b815260206004820152601660248201527514dd185c9d08151a5b59481b9bdd081c995858da195960521b60448201526064016105ea565b80600201544210610c4c5760405162461bcd60e51b815260206004820152600960248201526829b0b6329027bb32b960b91b60448201526064016105ea565b81881115610ca85760405162461bcd60e51b815260206004820152602360248201527f507572636861736520776f756c642065786365656420636c61696d20616c6c6f6044820152621dd95960ea1b60648201526084016105ea565b8060040154888260030154610cbd919061216b565b1115610cdb5760405162461bcd60e51b81526004016105ea90612183565b878160030154610ceb919061216b565b60038201558054604080516020810190915260008152610d0e9133918b906110ce565b33600090815260096020908152604080832084548452909152812080548a9290610d3990849061216b565b909155505060016004555061093c915050565b6006805461067890612104565b610d6433838361146a565b5050565b6008602052806000526040600020600091509050806000015490806001015490806002015490806003015490806004015490806005015490806006018054610daf90612104565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddb90612104565b8015610e285780601f10610dfd57610100808354040283529160200191610e28565b820191906000526020600020905b815481529060010190602001808311610e0b57829003601f168201915b5050505050905087565b6001600160a01b038516331480610e4e5750610e4e85336104a2565b610e6a5760405162461bcd60e51b81526004016105ea906121c7565b61093c858585858561154a565b610e7f611074565b6001600160a01b038116610ee45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ea565b610eed816113bf565b50565b610ef8611074565b6007548210610f435760405162461bcd60e51b8152602060048201526017602482015276151bdad95b88125108191bd95cc81b9bdd08195e1a5cdd604a1b60448201526064016105ea565b600082815260086020526040902060018101548211610fa45760405162461bcd60e51b815260206004820152601a60248201527f656e642064617465206265666f7265207374617274206461746500000000000060448201526064016105ea565b6002015550565b610fb3611074565b6007548210610ffe5760405162461bcd60e51b8152602060048201526017602482015276151bdad95b88125108191bd95cc81b9bdd08195e1a5cdd604a1b60448201526064016105ea565b600082815260086020526040902060038101548210156110575760405162461bcd60e51b81526020600482015260146024820152731b5bdc99481a185cc81899595b881b5a5b9d195960621b60448201526064016105ea565b6004015550565b60008261106b8584611674565b14949350505050565b6003546001600160a01b03163314610b535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105ea565b6001600160a01b03841661112e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016105ea565b33600061113a856116b9565b90506000611147856116b9565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061117990849061216b565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46111d983600089898989611704565b50505050505050565b81518351146112445760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016105ea565b6001600160a01b03841661126a5760405162461bcd60e51b81526004016105ea90612244565b3360005b845181101561135157600085828151811061128b5761128b612215565b6020026020010151905060008583815181106112a9576112a9612215565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156112f95760405162461bcd60e51b81526004016105ea90612289565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061133690849061216b565b925050819055505050508061134a9061222b565b905061126e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113a19291906122d3565b60405180910390a46113b781878787878761185f565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002600454036114635760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105ea565b6002600455565b816001600160a01b0316836001600160a01b0316036114dd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105ea565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166115705760405162461bcd60e51b81526004016105ea90612244565b33600061157c856116b9565b90506000611589856116b9565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156115cc5760405162461bcd60e51b81526004016105ea90612289565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061160990849061216b565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611669848a8a8a8a8a611704565b505050505050505050565b600081815b8451811015610b0b576116a58286838151811061169857611698612215565b602002602001015161191a565b9150806116b18161222b565b915050611679565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106116f3576116f3612215565b602090810291909101015292915050565b6001600160a01b0384163b156113b75760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906117489089908990889088908890600401612301565b6020604051808303816000875af1925050508015611783575060408051601f3d908101601f1916820190925261178091810190612346565b60015b61182f5761178f612363565b806308c379a0036117c857506117a361237f565b806117ae57506117ca565b8060405162461bcd60e51b81526004016105ea9190611aab565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105ea565b6001600160e01b0319811663f23a6e6160e01b146111d95760405162461bcd60e51b81526004016105ea90612408565b6001600160a01b0384163b156113b75760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906118a39089908990889088908890600401612450565b6020604051808303816000875af19250505080156118de575060408051601f3d908101601f191682019092526118db91810190612346565b60015b6118ea5761178f612363565b6001600160e01b0319811663bc197c8160e01b146111d95760405162461bcd60e51b81526004016105ea90612408565b6000818310611936576000828152602084905260409020611945565b60008381526020839052604090205b9392505050565b82805461195890612104565b90600052602060002090601f01602090048101928261197a57600085556119c0565b82601f1061199357805160ff19168380011785556119c0565b828001600101855582156119c0579182015b828111156119c05782518255916020019190600101906119a5565b506119cc9291506119d0565b5090565b5b808211156119cc57600081556001016119d1565b80356001600160a01b03811681146119fc57600080fd5b919050565b60008060408385031215611a1457600080fd5b611a1d836119e5565b946020939093013593505050565b6001600160e01b031981168114610eed57600080fd5b600060208284031215611a5357600080fd5b813561194581611a2b565b6000815180845260005b81811015611a8457602081850181015186830182015201611a68565b81811115611a96576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006119456020830184611a5e565b60008083601f840112611ad057600080fd5b5081356001600160401b03811115611ae757600080fd5b6020830191508360208260051b8501011115611b0257600080fd5b9250929050565b600080600080600060808688031215611b2157600080fd5b85359450611b31602087016119e5565b935060408601356001600160401b03811115611b4c57600080fd5b611b5888828901611abe565b96999598509660600135949350505050565b600060208284031215611b7c57600080fd5b5035919050565b600080600060608486031215611b9857600080fd5b8335925060208401359150611baf604085016119e5565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715611bf357611bf3611bb8565b6040525050565b60006001600160401b03821115611c1357611c13611bb8565b5060051b60200190565b600082601f830112611c2e57600080fd5b81356020611c3b82611bfa565b604051611c488282611bce565b83815260059390931b8501820192828101915086841115611c6857600080fd5b8286015b84811015611c835780358352918301918301611c6c565b509695505050505050565b600082601f830112611c9f57600080fd5b81356001600160401b03811115611cb857611cb8611bb8565b604051611ccf601f8301601f191660200182611bce565b818152846020838601011115611ce457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611d1957600080fd5b611d22866119e5565b9450611d30602087016119e5565b935060408601356001600160401b0380821115611d4c57600080fd5b611d5889838a01611c1d565b94506060880135915080821115611d6e57600080fd5b611d7a89838a01611c1d565b93506080880135915080821115611d9057600080fd5b50611d9d88828901611c8e565b9150509295509295909350565b600080600080600060a08688031215611dc257600080fd5b8535945060208601359350604086013592506060860135915060808601356001600160401b03811115611df457600080fd5b611d9d88828901611c8e565b60008060408385031215611e1357600080fd5b82356001600160401b0380821115611e2a57600080fd5b818501915085601f830112611e3e57600080fd5b81356020611e4b82611bfa565b604051611e588282611bce565b83815260059390931b8501820192828101915089841115611e7857600080fd5b948201945b83861015611e9d57611e8e866119e5565b82529482019490820190611e7d565b96505086013592505080821115611eb357600080fd5b50611ec085828601611c1d565b9150509250929050565b600081518084526020808501945080840160005b83811015611efa57815187529582019590820190600101611ede565b509495945050505050565b6020815260006119456020830184611eca565b60008060408385031215611f2b57600080fd5b82356001600160401b03811115611f4157600080fd5b611f4d85828601611c8e565b95602094909401359450505050565b600080600080600060808688031215611f7457600080fd5b85359450602086013593506040860135925060608601356001600160401b03811115611f9f57600080fd5b611fab88828901611abe565b969995985093965092949392505050565b60008060408385031215611fcf57600080fd5b611fd8836119e5565b915060208301358015158114611fed57600080fd5b809150509250929050565b6000806040838503121561200b57600080fd5b612014836119e5565b9150612022602084016119e5565b90509250929050565b8781528660208201528560408201528460608201528360808201528260a082015260e060c0820152600061206260e0830184611a5e565b9998505050505050505050565b600080600080600060a0868803121561208757600080fd5b612090866119e5565b945061209e602087016119e5565b9350604086013592506060860135915060808601356001600160401b03811115611df457600080fd5b6000602082840312156120d957600080fd5b611945826119e5565b600080604083850312156120f557600080fd5b50508035926020909101359150565b600181811c9082168061211857607f821691505b60208210810361213857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156121665761216661213e565b500390565b6000821982111561217e5761217e61213e565b500190565b60208082526024908201527f4d696e7420776f756c6420657863656564206d617820737570706c79206f66206040820152634e46547360e01b606082015260800190565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820161223d5761223d61213e565b5060010190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006122e66040830185611eca565b82810360208401526122f88185611eca565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061233b90830184611a5e565b979650505050505050565b60006020828403121561235857600080fd5b815161194581611a2b565b600060033d111561237c5760046000803e5060005160e01c5b90565b600060443d101561238d5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156123bc57505050505090565b82850191508151818111156123d45750505050505090565b843d87010160208285010111156123ee5750505050505090565b6123fd60208286010187611bce565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061247c90830186611eca565b828103606084015261248e8186611eca565b905082810360808401526124a28185611a5e565b9897505050505050505056fea26469706673582212202bf3eac62c5a2edb2d479626a31e5cf7920c14bb5c53fa4038c2cdeffc69d08c64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000444594f5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444594f5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001868747470733a2f2f7777772e64796f722e676c6f62616c2f0000000000000000
-----Decoded View---------------
Arg [0] : _name (string): DYOR
Arg [1] : _symbol (string): DYOR
Arg [2] : _uri (string): https://www.dyor.global/
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [4] : 44594f5200000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 44594f5200000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [8] : 68747470733a2f2f7777772e64796f722e676c6f62616c2f0000000000000000
Deployed Bytecode Sourcemap
53333:7624:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24572:230;;;;;;;;;;-1:-1:-1;24572:230:0;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;24572:230:0;;;;;;;;23595:310;;;;;;;;;;-1:-1:-1;23595:310:0;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;23595:310:0;1019:187:1;53396:18:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;58840:633::-;;;;;;;;;;-1:-1:-1;58840:633:0;;;;;:::i;:::-;;:::i;:::-;;;;3131:14:1;;3124:22;3106:41;;3178:2;3163:18;;3156:34;;;;3079:18;58840:633:0;2938:258:1;59579:190:0;;;;;;;;;;-1:-1:-1;59579:190:0;;;;;:::i;:::-;;:::i;58102:425::-;;;;;;;;;;-1:-1:-1;58102:425:0;;;;;:::i;:::-;;:::i;:::-;;26515:438;;;;;;;;;;-1:-1:-1;26515:438:0;;;;;:::i;:::-;;:::i;54569:648::-;;;;;;;;;;-1:-1:-1;54569:648:0;;;;;:::i;:::-;;:::i;24968:524::-;;;;;;;;;;-1:-1:-1;24968:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;59965:599::-;;;;;;;;;;-1:-1:-1;59965:599:0;;;;;:::i;:::-;60037:15;60262:20;;;:10;:20;;;;;60305:15;;60352:22;;;;60400:20;;;;60447:21;;;;60494:20;;;;60538:18;;;;;60305:15;;60352:22;;60400:20;;60447:21;;59965:599;;;;;9330:25:1;;;9386:2;9371:18;;9364:34;;;;9414:18;;;9407:34;;;;9472:2;9457:18;;9450:34;9515:3;9500:19;;9493:35;9559:3;9544:19;;9537:35;9317:3;9302:19;59965:599:0;9043:535:1;60756:198:0;;;;;;;;;;-1:-1:-1;60756:198:0;;;;;:::i;:::-;-1:-1:-1;;;;;60915:21:0;;;;60852;60915;;;:11;:21;;;;;;;;:31;;;;;;;;;60756:198;56397:176;;;;;;;;;;-1:-1:-1;56397:176:0;;;;;:::i;:::-;;:::i;2817:103::-;;;;;;;;;;;;;:::i;56897:990::-;;;;;;:::i;:::-;;:::i;2169:87::-;;;;;;;;;;-1:-1:-1;2242:6:0;;2169:87;;-1:-1:-1;;;;;2242:6:0;;;10770:51:1;;10758:2;10743:18;2169:87:0;10624:203:1;53421:20:0;;;;;;;;;;;;;:::i;25565:155::-;;;;;;;;;;-1:-1:-1;25565:155:0;;;;;:::i;:::-;;:::i;54157:66::-;;;;;;;;;;-1:-1:-1;54157:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;53448:30;;;;;;;;;;;;;;;;25792:168;;;;;;;;;;-1:-1:-1;25792:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;25915:27:0;;;25891:4;25915:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;25792:168;54019:49;;;;;;;;;;-1:-1:-1;54019:49:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;26032:406::-;;;;;;;;;;-1:-1:-1;26032:406:0;;;;;:::i;:::-;;:::i;3075:201::-;;;;;;;;;;-1:-1:-1;3075:201:0;;;;;:::i;:::-;;:::i;55921:357::-;;;;;;;;;;-1:-1:-1;55921:357:0;;;;;:::i;:::-;;:::i;55400:336::-;;;;;;;;;;-1:-1:-1;55400:336:0;;;;;:::i;:::-;;:::i;24572:230::-;24658:7;-1:-1:-1;;;;;24686:21:0;;24678:76;;;;-1:-1:-1;;;24678:76:0;;13362:2:1;24678:76:0;;;13344:21:1;13401:2;13381:18;;;13374:30;13440:34;13420:18;;;13413:62;-1:-1:-1;;;13491:18:1;;;13484:40;13541:19;;24678:76:0;;;;;;;;;-1:-1:-1;24772:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;24772:22:0;;;;;;;;;;;;24572:230::o;23595:310::-;23697:4;-1:-1:-1;;;;;;23734:41:0;;-1:-1:-1;;;23734:41:0;;:110;;-1:-1:-1;;;;;;;23792:52:0;;-1:-1:-1;;;23792:52:0;23734:110;:163;;;-1:-1:-1;;;;;;;;;;22444:40:0;;;23861:36;23714:183;23595:310;-1:-1:-1;;23595:310:0:o;53396:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;58840:633::-;59094:10;59025:4;59082:23;;;:11;:23;;;;;;;;:33;;;;;;;;;59025:4;;;59144:28;59082:33;59144:12;:28;:::i;:::-;59204:43;;;-1:-1:-1;;;;;14438:32:1;;59204:43:0;;;14420:51:1;14487:18;;;14480:34;;;14530:18;;;14523:34;;;59122:50:0;;-1:-1:-1;59179:12:0;;14393:18:1;;59204:43:0;;;-1:-1:-1;;59204:43:0;;;;;;;;;59194:54;;59204:43;59194:54;;;;59257:26;59286:20;;;:10;:20;;;;;59194:54;;-1:-1:-1;59323:13:0;;;;;:128;;;59340:111;59373:11;;59340:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;59399:18:0;;;;59432:4;59340:18;:111::i;:::-;59315:150;59453:11;;-1:-1:-1;58840:633:0;;-1:-1:-1;;;;;;;;;58840:633:0:o;59579:190::-;59682:26;59711:19;;;:10;:19;;;;;59750:11;;;59743:18;;59656:13;;59711:19;59750:11;59743:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59579:190;;;:::o;58102:425::-;2055:13;:11;:13::i;:::-;58211:26:::1;58240:20:::0;;;:10:::1;:20;::::0;;;;58321::::1;::::0;::::1;::::0;58279:21:::1;::::0;::::1;::::0;:38:::1;::::0;58303:14;;58279:38:::1;:::i;:::-;:62;;58271:111;;;;-1:-1:-1::0;;;58271:111:0::1;;;;;;;:::i;:::-;58441:14;58417:7;:21;;;:38;;;;:::i;:::-;58393:21;::::0;::::1;:62:::0;58484:15;;58468:51:::1;::::0;;::::1;::::0;::::1;::::0;;;58484:15:::1;58468:51:::0;;::::1;::::0;58474:8;;58501:14;;58468:5:::1;:51::i;:::-;58198:329;58102:425:::0;;;:::o;26515:438::-;-1:-1:-1;;;;;26748:20:0;;796:10;26748:20;;:60;;-1:-1:-1;26772:36:0;26789:4;796:10;25792:168;:::i;26772:36::-;26726:156;;;;-1:-1:-1;;;26726:156:0;;;;;;;:::i;:::-;26893:52;26916:4;26922:2;26926:3;26931:7;26940:4;26893:22;:52::i;:::-;26515:438;;;;;:::o;54569:648::-;2055:13;:11;:13::i;:::-;54813:354:::1;::::0;;::::1;::::0;::::1;::::0;;54857:11:::1;::::0;54813:354;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;54813:354:0;;;;;;;;;;;;;;;;;;;;;;;;54787:23;;;:10:::1;:23:::0;;;;;;:380;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;54813:354;;54787:23;:380:::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;55194:11:0::1;::::0;:15:::1;::::0;-1:-1:-1;55208:1:0::1;55194:15;:::i;:::-;55180:11;:29:::0;-1:-1:-1;;;;;54569:648:0:o;24968:524::-;25124:16;25185:3;:10;25166:8;:15;:29;25158:83;;;;-1:-1:-1;;;25158:83:0;;15723:2:1;25158:83:0;;;15705:21:1;15762:2;15742:18;;;15735:30;15801:34;15781:18;;;15774:62;-1:-1:-1;;;15852:18:1;;;15845:39;15901:19;;25158:83:0;15521:405:1;25158:83:0;25254:30;25301:8;:15;-1:-1:-1;;;;;25287:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25287:30:0;;25254:63;;25335:9;25330:122;25354:8;:15;25350:1;:19;25330:122;;;25410:30;25420:8;25429:1;25420:11;;;;;;;;:::i;:::-;;;;;;;25433:3;25437:1;25433:6;;;;;;;;:::i;:::-;;;;;;;25410:9;:30::i;:::-;25391:13;25405:1;25391:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;25371:3;;;:::i;:::-;;;25330:122;;;-1:-1:-1;25471:13:0;24968:524;-1:-1:-1;;;24968:524:0:o;56397:176::-;2055:13;:11;:13::i;:::-;56484:26:::1;56513:20:::0;;;:10:::1;:20;::::0;;;;;;;56544:21;;56513:20;;56544:21:::1;::::0;:11:::1;::::0;::::1;::::0;:21;::::1;::::0;::::1;:::i;2817:103::-:0;2055:13;:11;:13::i;:::-;2882:30:::1;2909:1;2882:18;:30::i;:::-;2817:103::o:0;56897:990::-;52015:21;:19;:21::i;:::-;57099:13:::1;57114:19:::0;57137:57:::1;57146:8;57156:10;57168:11;;57181:12;57137:8;:57::i;:::-;57098:96;;;;57213:8;57205:38;;;::::0;-1:-1:-1;;;57205:38:0;;16405:2:1;57205:38:0::1;::::0;::::1;16387:21:1::0;16444:2;16424:18;;;16417:30;-1:-1:-1;;;16463:18:1;;;16456:47;16520:18;;57205:38:0::1;16203:341:1::0;57205:38:0::1;57254:26;57283:20:::0;;;:10:::1;:20;::::0;;;;57341:22:::1;::::0;::::1;::::0;57322:15:::1;:41;;57314:76;;;::::0;-1:-1:-1;;;57314:76:0;;16751:2:1;57314:76:0::1;::::0;::::1;16733:21:1::0;16790:2;16770:18;;;16763:30;-1:-1:-1;;;16809:18:1;;;16802:52;16871:18;;57314:76:0::1;16549:346:1::0;57314:76:0::1;57427:7;:20;;;57409:15;:38;57401:60;;;::::0;-1:-1:-1;;;57401:60:0;;17102:2:1;57401:60:0::1;::::0;::::1;17084:21:1::0;17141:1;17121:18;;;17114:29;-1:-1:-1;;;17159:18:1;;;17152:39;17208:18;;57401:60:0::1;16900:332:1::0;57401:60:0::1;57498:11;57480:14;:29;;57472:77;;;::::0;-1:-1:-1;;;57472:77:0;;17439:2:1;57472:77:0::1;::::0;::::1;17421:21:1::0;17478:2;17458:18;;;17451:30;17517:34;17497:18;;;17490:62;-1:-1:-1;;;17568:18:1;;;17561:33;17611:19;;57472:77:0::1;17237:399:1::0;57472:77:0::1;57610:7;:20;;;57592:14;57568:7;:21;;;:38;;;;:::i;:::-;:62;;57560:111;;;;-1:-1:-1::0;;;57560:111:0::1;;;;;;;:::i;:::-;57730:14;57706:7;:21;;;:38;;;;:::i;:::-;57682:21;::::0;::::1;:62:::0;57775:15;;57757:53:::1;::::0;;::::1;::::0;::::1;::::0;;;57775:15:::1;57757:53:::0;;::::1;::::0;57763:10:::1;::::0;57792:14;;57757:5:::1;:53::i;:::-;57833:10;57821:23;::::0;;;:11:::1;:23;::::0;;;;;;;57845:15;;57821:40;;;;;;;:58;;57865:14;;57821:23;:58:::1;::::0;57865:14;;57821:58:::1;:::i;:::-;::::0;;;-1:-1:-1;;51453:1:0;52579:7;:22;-1:-1:-1;52059:20:0;;-1:-1:-1;;52396:213:0;53421:20;;;;;;;:::i;25565:155::-;25660:52;796:10;25693:8;25703;25660:18;:52::i;:::-;25565:155;;:::o;54019:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26032:406::-;-1:-1:-1;;;;;26240:20:0;;796:10;26240:20;;:60;;-1:-1:-1;26264:36:0;26281:4;796:10;25792:168;:::i;26264:36::-;26218:156;;;;-1:-1:-1;;;26218:156:0;;;;;;;:::i;:::-;26385:45;26403:4;26409:2;26413;26417:6;26425:4;26385:17;:45::i;3075:201::-;2055:13;:11;:13::i;:::-;-1:-1:-1;;;;;3164:22:0;::::1;3156:73;;;::::0;-1:-1:-1;;;3156:73:0;;17843:2:1;3156:73:0::1;::::0;::::1;17825:21:1::0;17882:2;17862:18;;;17855:30;17921:34;17901:18;;;17894:62;-1:-1:-1;;;17972:18:1;;;17965:36;18018:19;;3156:73:0::1;17641:402:1::0;3156:73:0::1;3240:28;3259:8;3240:18;:28::i;:::-;3075:201:::0;:::o;55921:357::-;2055:13;:11;:13::i;:::-;56034:11:::1;;56023:8;:22;56015:58;;;::::0;-1:-1:-1;;;56015:58:0;;18250:2:1;56015:58:0::1;::::0;::::1;18232:21:1::0;18289:2;18269:18;;;18262:30;-1:-1:-1;;;18308:18:1;;;18301:53;18371:18;;56015:58:0::1;18048:347:1::0;56015:58:0::1;56084:26;56113:20:::0;;;:10:::1;:20;::::0;;;;56152:22:::1;::::0;::::1;::::0;:38;-1:-1:-1;56144:77:0::1;;;::::0;-1:-1:-1;;;56144:77:0;;18602:2:1;56144:77:0::1;::::0;::::1;18584:21:1::0;18641:2;18621:18;;;18614:30;18680:28;18660:18;;;18653:56;18726:18;;56144:77:0::1;18400:350:1::0;56144:77:0::1;56234:20;;:36:::0;-1:-1:-1;55921:357:0:o;55400:336::-;2055:13;:11;:13::i;:::-;55504:11:::1;;55493:8;:22;55485:58;;;::::0;-1:-1:-1;;;55485:58:0;;18250:2:1;55485:58:0::1;::::0;::::1;18232:21:1::0;18289:2;18269:18;;;18262:30;-1:-1:-1;;;18308:18:1;;;18301:53;18371:18;;55485:58:0::1;18048:347:1::0;55485:58:0::1;55554:26;55583:20:::0;;;:10:::1;:20;::::0;;;;55622:21:::1;::::0;::::1;::::0;:35;-1:-1:-1;55622:35:0::1;55614:68;;;::::0;-1:-1:-1;;;55614:68:0;;18957:2:1;55614:68:0::1;::::0;::::1;18939:21:1::0;18996:2;18976:18;;;18969:30;-1:-1:-1;;;19015:18:1;;;19008:50;19075:18;;55614:68:0::1;18755:344:1::0;55614:68:0::1;55695:20;;:33:::0;-1:-1:-1;55400:336:0:o;41325:190::-;41450:4;41503;41474:25;41487:5;41494:4;41474:12;:25::i;:::-;:33;;41325:190;-1:-1:-1;;;;41325:190:0:o;2334:132::-;2242:6;;-1:-1:-1;;;;;2242:6:0;796:10;2398:23;2390:68;;;;-1:-1:-1;;;2390:68:0;;19306:2:1;2390:68:0;;;19288:21:1;;;19325:18;;;19318:30;19384:34;19364:18;;;19357:62;19436:18;;2390:68:0;19104:356:1;31213:729:0;-1:-1:-1;;;;;31366:16:0;;31358:62;;;;-1:-1:-1;;;31358:62:0;;19667:2:1;31358:62:0;;;19649:21:1;19706:2;19686:18;;;19679:30;19745:34;19725:18;;;19718:62;-1:-1:-1;;;19796:18:1;;;19789:31;19837:19;;31358:62:0;19465:397:1;31358:62:0;796:10;31433:16;31498:21;31516:2;31498:17;:21::i;:::-;31475:44;;31530:24;31557:25;31575:6;31557:17;:25::i;:::-;31530:52;;31674:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31674:17:0;;;;;;;;;:27;;31695:6;;31674:9;:27;;31695:6;;31674:27;:::i;:::-;;;;-1:-1:-1;;31717:52:0;;;20041:25:1;;;20097:2;20082:18;;20075:34;;;-1:-1:-1;;;;;31717:52:0;;;;31750:1;;31717:52;;;;;;20014:18:1;31717:52:0;;;;;;;31860:74;31891:8;31909:1;31913:2;31917;31921:6;31929:4;31860:30;:74::i;:::-;31347:595;;;31213:729;;;;:::o;28749:1146::-;28976:7;:14;28962:3;:10;:28;28954:81;;;;-1:-1:-1;;;28954:81:0;;20322:2:1;28954:81:0;;;20304:21:1;20361:2;20341:18;;;20334:30;20400:34;20380:18;;;20373:62;-1:-1:-1;;;20451:18:1;;;20444:38;20499:19;;28954:81:0;20120:404:1;28954:81:0;-1:-1:-1;;;;;29054:16:0;;29046:66;;;;-1:-1:-1;;;29046:66:0;;;;;;;:::i;:::-;796:10;29125:16;29242:421;29266:3;:10;29262:1;:14;29242:421;;;29298:10;29311:3;29315:1;29311:6;;;;;;;;:::i;:::-;;;;;;;29298:19;;29332:14;29349:7;29357:1;29349:10;;;;;;;;:::i;:::-;;;;;;;;;;;;29376:19;29398:13;;;;;;;;;;-1:-1:-1;;;;;29398:19:0;;;;;;;;;;;;29349:10;;-1:-1:-1;29440:21:0;;;;29432:76;;;;-1:-1:-1;;;29432:76:0;;;;;;;:::i;:::-;29552:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29552:19:0;;;;;;;;;;29574:20;;;29552:42;;29624:17;;;;;;;:27;;29574:20;;29552:9;29624:27;;29574:20;;29624:27;:::i;:::-;;;;;;;;29283:380;;;29278:3;;;;:::i;:::-;;;29242:421;;;;29710:2;-1:-1:-1;;;;;29680:47:0;29704:4;-1:-1:-1;;;;;29680:47:0;29694:8;-1:-1:-1;;;;;29680:47:0;;29714:3;29719:7;29680:47;;;;;;;:::i;:::-;;;;;;;;29812:75;29848:8;29858:4;29864:2;29868:3;29873:7;29882:4;29812:35;:75::i;:::-;28943:952;28749:1146;;;;;:::o;3436:191::-;3529:6;;;-1:-1:-1;;;;;3546:17:0;;;-1:-1:-1;;;;;;3546:17:0;;;;;;;3579:40;;3529:6;;;3546:17;3529:6;;3579:40;;3510:16;;3579:40;3499:128;3436:191;:::o;52095:293::-;51497:1;52229:7;;:19;52221:63;;;;-1:-1:-1;;;52221:63:0;;22018:2:1;52221:63:0;;;22000:21:1;22057:2;22037:18;;;22030:30;22096:33;22076:18;;;22069:61;22147:18;;52221:63:0;21816:355:1;52221:63:0;51497:1;52362:7;:18;52095:293::o;35626:331::-;35781:8;-1:-1:-1;;;;;35772:17:0;:5;-1:-1:-1;;;;;35772:17:0;;35764:71;;;;-1:-1:-1;;;35764:71:0;;22378:2:1;35764:71:0;;;22360:21:1;22417:2;22397:18;;;22390:30;22456:34;22436:18;;;22429:62;-1:-1:-1;;;22507:18:1;;;22500:39;22556:19;;35764:71:0;22176:405:1;35764:71:0;-1:-1:-1;;;;;35846:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35846:46:0;;;;;;;;;;35908:41;;1159::1;;;35908::0;;1132:18:1;35908:41:0;;;;;;;35626:331;;;:::o;27417:974::-;-1:-1:-1;;;;;27605:16:0;;27597:66;;;;-1:-1:-1;;;27597:66:0;;;;;;;:::i;:::-;796:10;27676:16;27741:21;27759:2;27741:17;:21::i;:::-;27718:44;;27773:24;27800:25;27818:6;27800:17;:25::i;:::-;27773:52;;27911:19;27933:13;;;;;;;;;;;-1:-1:-1;;;;;27933:19:0;;;;;;;;;;27971:21;;;;27963:76;;;;-1:-1:-1;;;27963:76:0;;;;;;;:::i;:::-;28075:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28075:19:0;;;;;;;;;;28097:20;;;28075:42;;28139:17;;;;;;;:27;;28097:20;;28075:9;28139:27;;28097:20;;28139:27;:::i;:::-;;;;-1:-1:-1;;28184:46:0;;;20041:25:1;;;20097:2;20082:18;;20075:34;;;-1:-1:-1;;;;;28184:46:0;;;;;;;;;;;;;;20014:18:1;28184:46:0;;;;;;;28315:68;28346:8;28356:4;28362:2;28366;28370:6;28378:4;28315:30;:68::i;:::-;27586:805;;;;27417:974;;;;;:::o;42192:296::-;42275:7;42318:4;42275:7;42333:118;42357:5;:12;42353:1;:16;42333:118;;;42406:33;42416:12;42430:5;42436:1;42430:8;;;;;;;;:::i;:::-;;;;;;;42406:9;:33::i;:::-;42391:48;-1:-1:-1;42371:3:0;;;;:::i;:::-;;;;42333:118;;39892:198;40012:16;;;40026:1;40012:16;;;;;;;;;39958;;39987:22;;40012:16;;;;;;;;;;;;-1:-1:-1;40012:16:0;39987:41;;40050:7;40039:5;40045:1;40039:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;40077:5;39892:198;-1:-1:-1;;39892:198:0:o;38319:744::-;-1:-1:-1;;;;;38534:13:0;;13566:19;:23;38530:526;;38570:72;;-1:-1:-1;;;38570:72:0;;-1:-1:-1;;;;;38570:38:0;;;;;:72;;38609:8;;38619:4;;38625:2;;38629:6;;38637:4;;38570:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38570:72:0;;;;;;;;-1:-1:-1;;38570:72:0;;;;;;;;;;;;:::i;:::-;;;38566:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38918:6;38911:14;;-1:-1:-1;;;38911:14:0;;;;;;;;:::i;38566:479::-;;;38967:62;;-1:-1:-1;;;38967:62:0;;24468:2:1;38967:62:0;;;24450:21:1;24507:2;24487:18;;;24480:30;24546:34;24526:18;;;24519:62;-1:-1:-1;;;24597:18:1;;;24590:50;24657:19;;38967:62:0;24266:416:1;38566:479:0;-1:-1:-1;;;;;;38692:55:0;;-1:-1:-1;;;38692:55:0;38688:154;;38772:50;;-1:-1:-1;;;38772:50:0;;;;;;;:::i;39071:813::-;-1:-1:-1;;;;;39311:13:0;;13566:19;:23;39307:570;;39347:79;;-1:-1:-1;;;39347:79:0;;-1:-1:-1;;;;;39347:43:0;;;;;:79;;39391:8;;39401:4;;39407:3;;39412:7;;39421:4;;39347:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39347:79:0;;;;;;;;-1:-1:-1;;39347:79:0;;;;;;;;;;;;:::i;:::-;;;39343:523;;;;:::i;:::-;-1:-1:-1;;;;;;39508:60:0;;-1:-1:-1;;;39508:60:0;39504:159;;39593:50;;-1:-1:-1;;;39593:50:0;;;;;;;:::i;49232:149::-;49295:7;49326:1;49322;:5;:51;;49457:13;49551:15;;;49587:4;49580:15;;;49634:4;49618:21;;49322:51;;;49457:13;49551:15;;;49587:4;49580:15;;;49634:4;49618:21;;49330:20;49315:58;49232:149;-1:-1:-1;;;49232:149:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;1211:472::-;1253:3;1291:5;1285:12;1318:6;1313:3;1306:19;1343:1;1353:162;1367:6;1364:1;1361:13;1353:162;;;1429:4;1485:13;;;1481:22;;1475:29;1457:11;;;1453:20;;1446:59;1382:12;1353:162;;;1533:6;1530:1;1527:13;1524:87;;;1599:1;1592:4;1583:6;1578:3;1574:16;1570:27;1563:38;1524:87;-1:-1:-1;1665:2:1;1644:15;-1:-1:-1;;1640:29:1;1631:39;;;;1672:4;1627:50;;1211:472;-1:-1:-1;;1211:472:1:o;1688:220::-;1837:2;1826:9;1819:21;1800:4;1857:45;1898:2;1887:9;1883:18;1875:6;1857:45;:::i;1913:367::-;1976:8;1986:6;2040:3;2033:4;2025:6;2021:17;2017:27;2007:55;;2058:1;2055;2048:12;2007:55;-1:-1:-1;2081:20:1;;-1:-1:-1;;;;;2113:30:1;;2110:50;;;2156:1;2153;2146:12;2110:50;2193:4;2185:6;2181:17;2169:29;;2253:3;2246:4;2236:6;2233:1;2229:14;2221:6;2217:27;2213:38;2210:47;2207:67;;;2270:1;2267;2260:12;2207:67;1913:367;;;;;:::o;2285:648::-;2398:6;2406;2414;2422;2430;2483:3;2471:9;2462:7;2458:23;2454:33;2451:53;;;2500:1;2497;2490:12;2451:53;2536:9;2523:23;2513:33;;2565:38;2599:2;2588:9;2584:18;2565:38;:::i;:::-;2555:48;;2654:2;2643:9;2639:18;2626:32;-1:-1:-1;;;;;2673:6:1;2670:30;2667:50;;;2713:1;2710;2703:12;2667:50;2752:70;2814:7;2805:6;2794:9;2790:22;2752:70;:::i;:::-;2285:648;;;;-1:-1:-1;2841:8:1;2923:2;2908:18;2895:32;;2285:648;-1:-1:-1;;;;2285:648:1:o;3201:180::-;3260:6;3313:2;3301:9;3292:7;3288:23;3284:32;3281:52;;;3329:1;3326;3319:12;3281:52;-1:-1:-1;3352:23:1;;3201:180;-1:-1:-1;3201:180:1:o;3386:322::-;3463:6;3471;3479;3532:2;3520:9;3511:7;3507:23;3503:32;3500:52;;;3548:1;3545;3538:12;3500:52;3584:9;3571:23;3561:33;;3641:2;3630:9;3626:18;3613:32;3603:42;;3664:38;3698:2;3687:9;3683:18;3664:38;:::i;:::-;3654:48;;3386:322;;;;;:::o;3713:127::-;3774:10;3769:3;3765:20;3762:1;3755:31;3805:4;3802:1;3795:15;3829:4;3826:1;3819:15;3845:249;3955:2;3936:13;;-1:-1:-1;;3932:27:1;3920:40;;-1:-1:-1;;;;;3975:34:1;;4011:22;;;3972:62;3969:88;;;4037:18;;:::i;:::-;4073:2;4066:22;-1:-1:-1;;3845:249:1:o;4099:183::-;4159:4;-1:-1:-1;;;;;4184:6:1;4181:30;4178:56;;;4214:18;;:::i;:::-;-1:-1:-1;4259:1:1;4255:14;4271:4;4251:25;;4099:183::o;4287:724::-;4341:5;4394:3;4387:4;4379:6;4375:17;4371:27;4361:55;;4412:1;4409;4402:12;4361:55;4448:6;4435:20;4474:4;4497:43;4537:2;4497:43;:::i;:::-;4569:2;4563:9;4581:31;4609:2;4601:6;4581:31;:::i;:::-;4647:18;;;4739:1;4735:10;;;;4723:23;;4719:32;;;4681:15;;;;-1:-1:-1;4763:15:1;;;4760:35;;;4791:1;4788;4781:12;4760:35;4827:2;4819:6;4815:15;4839:142;4855:6;4850:3;4847:15;4839:142;;;4921:17;;4909:30;;4959:12;;;;4872;;4839:142;;;-1:-1:-1;4999:6:1;4287:724;-1:-1:-1;;;;;;4287:724:1:o;5016:555::-;5058:5;5111:3;5104:4;5096:6;5092:17;5088:27;5078:55;;5129:1;5126;5119:12;5078:55;5165:6;5152:20;-1:-1:-1;;;;;5187:2:1;5184:26;5181:52;;;5213:18;;:::i;:::-;5262:2;5256:9;5274:67;5329:2;5310:13;;-1:-1:-1;;5306:27:1;5335:4;5302:38;5256:9;5274:67;:::i;:::-;5365:2;5357:6;5350:18;5411:3;5404:4;5399:2;5391:6;5387:15;5383:26;5380:35;5377:55;;;5428:1;5425;5418:12;5377:55;5492:2;5485:4;5477:6;5473:17;5466:4;5458:6;5454:17;5441:54;5539:1;5515:15;;;5532:4;5511:26;5504:37;;;;5519:6;5016:555;-1:-1:-1;;;5016:555:1:o;5576:943::-;5730:6;5738;5746;5754;5762;5815:3;5803:9;5794:7;5790:23;5786:33;5783:53;;;5832:1;5829;5822:12;5783:53;5855:29;5874:9;5855:29;:::i;:::-;5845:39;;5903:38;5937:2;5926:9;5922:18;5903:38;:::i;:::-;5893:48;;5992:2;5981:9;5977:18;5964:32;-1:-1:-1;;;;;6056:2:1;6048:6;6045:14;6042:34;;;6072:1;6069;6062:12;6042:34;6095:61;6148:7;6139:6;6128:9;6124:22;6095:61;:::i;:::-;6085:71;;6209:2;6198:9;6194:18;6181:32;6165:48;;6238:2;6228:8;6225:16;6222:36;;;6254:1;6251;6244:12;6222:36;6277:63;6332:7;6321:8;6310:9;6306:24;6277:63;:::i;:::-;6267:73;;6393:3;6382:9;6378:19;6365:33;6349:49;;6423:2;6413:8;6410:16;6407:36;;;6439:1;6436;6429:12;6407:36;;6462:51;6505:7;6494:8;6483:9;6479:24;6462:51;:::i;:::-;6452:61;;;5576:943;;;;;;;;:::o;6524:595::-;6629:6;6637;6645;6653;6661;6714:3;6702:9;6693:7;6689:23;6685:33;6682:53;;;6731:1;6728;6721:12;6682:53;6767:9;6754:23;6744:33;;6824:2;6813:9;6809:18;6796:32;6786:42;;6875:2;6864:9;6860:18;6847:32;6837:42;;6926:2;6915:9;6911:18;6898:32;6888:42;;6981:3;6970:9;6966:19;6953:33;-1:-1:-1;;;;;7001:6:1;6998:30;6995:50;;;7041:1;7038;7031:12;6995:50;7064:49;7105:7;7096:6;7085:9;7081:22;7064:49;:::i;7124:1208::-;7242:6;7250;7303:2;7291:9;7282:7;7278:23;7274:32;7271:52;;;7319:1;7316;7309:12;7271:52;7359:9;7346:23;-1:-1:-1;;;;;7429:2:1;7421:6;7418:14;7415:34;;;7445:1;7442;7435:12;7415:34;7483:6;7472:9;7468:22;7458:32;;7528:7;7521:4;7517:2;7513:13;7509:27;7499:55;;7550:1;7547;7540:12;7499:55;7586:2;7573:16;7608:4;7631:43;7671:2;7631:43;:::i;:::-;7703:2;7697:9;7715:31;7743:2;7735:6;7715:31;:::i;:::-;7781:18;;;7869:1;7865:10;;;;7857:19;;7853:28;;;7815:15;;;;-1:-1:-1;7893:19:1;;;7890:39;;;7925:1;7922;7915:12;7890:39;7949:11;;;;7969:148;7985:6;7980:3;7977:15;7969:148;;;8051:23;8070:3;8051:23;:::i;:::-;8039:36;;8002:12;;;;8095;;;;7969:148;;;8136:6;-1:-1:-1;;8180:18:1;;8167:32;;-1:-1:-1;;8211:16:1;;;8208:36;;;8240:1;8237;8230:12;8208:36;;8263:63;8318:7;8307:8;8296:9;8292:24;8263:63;:::i;:::-;8253:73;;;7124:1208;;;;;:::o;8337:435::-;8390:3;8428:5;8422:12;8455:6;8450:3;8443:19;8481:4;8510:2;8505:3;8501:12;8494:19;;8547:2;8540:5;8536:14;8568:1;8578:169;8592:6;8589:1;8586:13;8578:169;;;8653:13;;8641:26;;8687:12;;;;8722:15;;;;8614:1;8607:9;8578:169;;;-1:-1:-1;8763:3:1;;8337:435;-1:-1:-1;;;;;8337:435:1:o;8777:261::-;8956:2;8945:9;8938:21;8919:4;8976:56;9028:2;9017:9;9013:18;9005:6;8976:56;:::i;9583:389::-;9661:6;9669;9722:2;9710:9;9701:7;9697:23;9693:32;9690:52;;;9738:1;9735;9728:12;9690:52;9778:9;9765:23;-1:-1:-1;;;;;9803:6:1;9800:30;9797:50;;;9843:1;9840;9833:12;9797:50;9866:49;9907:7;9898:6;9887:9;9883:22;9866:49;:::i;:::-;9856:59;9962:2;9947:18;;;;9934:32;;-1:-1:-1;;;;9583:389:1:o;9977:642::-;10090:6;10098;10106;10114;10122;10175:3;10163:9;10154:7;10150:23;10146:33;10143:53;;;10192:1;10189;10182:12;10143:53;10228:9;10215:23;10205:33;;10285:2;10274:9;10270:18;10257:32;10247:42;;10336:2;10325:9;10321:18;10308:32;10298:42;;10391:2;10380:9;10376:18;10363:32;-1:-1:-1;;;;;10410:6:1;10407:30;10404:50;;;10450:1;10447;10440:12;10404:50;10489:70;10551:7;10542:6;10531:9;10527:22;10489:70;:::i;:::-;9977:642;;;;-1:-1:-1;9977:642:1;;-1:-1:-1;10578:8:1;;10463:96;9977:642;-1:-1:-1;;;9977:642:1:o;10832:347::-;10897:6;10905;10958:2;10946:9;10937:7;10933:23;10929:32;10926:52;;;10974:1;10971;10964:12;10926:52;10997:29;11016:9;10997:29;:::i;:::-;10987:39;;11076:2;11065:9;11061:18;11048:32;11123:5;11116:13;11109:21;11102:5;11099:32;11089:60;;11145:1;11142;11135:12;11089:60;11168:5;11158:15;;;10832:347;;;;;:::o;11184:260::-;11252:6;11260;11313:2;11301:9;11292:7;11288:23;11284:32;11281:52;;;11329:1;11326;11319:12;11281:52;11352:29;11371:9;11352:29;:::i;:::-;11342:39;;11400:38;11434:2;11423:9;11419:18;11400:38;:::i;:::-;11390:48;;11184:260;;;;;:::o;11449:651::-;11766:6;11755:9;11748:25;11809:6;11804:2;11793:9;11789:18;11782:34;11852:6;11847:2;11836:9;11832:18;11825:34;11895:6;11890:2;11879:9;11875:18;11868:34;11939:6;11933:3;11922:9;11918:19;11911:35;11983:6;11977:3;11966:9;11962:19;11955:35;12027:3;12021;12010:9;12006:19;11999:32;11729:4;12048:46;12089:3;12078:9;12074:19;12066:6;12048:46;:::i;:::-;12040:54;11449:651;-1:-1:-1;;;;;;;;;11449:651:1:o;12105:606::-;12209:6;12217;12225;12233;12241;12294:3;12282:9;12273:7;12269:23;12265:33;12262:53;;;12311:1;12308;12301:12;12262:53;12334:29;12353:9;12334:29;:::i;:::-;12324:39;;12382:38;12416:2;12405:9;12401:18;12382:38;:::i;:::-;12372:48;;12467:2;12456:9;12452:18;12439:32;12429:42;;12518:2;12507:9;12503:18;12490:32;12480:42;;12573:3;12562:9;12558:19;12545:33;-1:-1:-1;;;;;12593:6:1;12590:30;12587:50;;;12633:1;12630;12623:12;12716:186;12775:6;12828:2;12816:9;12807:7;12803:23;12799:32;12796:52;;;12844:1;12841;12834:12;12796:52;12867:29;12886:9;12867:29;:::i;12907:248::-;12975:6;12983;13036:2;13024:9;13015:7;13011:23;13007:32;13004:52;;;13052:1;13049;13042:12;13004:52;-1:-1:-1;;13075:23:1;;;13145:2;13130:18;;;13117:32;;-1:-1:-1;12907:248:1:o;13571:380::-;13650:1;13646:12;;;;13693;;;13714:61;;13768:4;13760:6;13756:17;13746:27;;13714:61;13821:2;13813:6;13810:14;13790:18;13787:38;13784:161;;13867:10;13862:3;13858:20;13855:1;13848:31;13902:4;13899:1;13892:15;13930:4;13927:1;13920:15;13784:161;;13571:380;;;:::o;13956:127::-;14017:10;14012:3;14008:20;14005:1;13998:31;14048:4;14045:1;14038:15;14072:4;14069:1;14062:15;14088:125;14128:4;14156:1;14153;14150:8;14147:34;;;14161:18;;:::i;:::-;-1:-1:-1;14198:9:1;;14088:125::o;14568:128::-;14608:3;14639:1;14635:6;14632:1;14629:13;14626:39;;;14645:18;;:::i;:::-;-1:-1:-1;14681:9:1;;14568:128::o;14701:400::-;14903:2;14885:21;;;14942:2;14922:18;;;14915:30;14981:34;14976:2;14961:18;;14954:62;-1:-1:-1;;;15047:2:1;15032:18;;15025:34;15091:3;15076:19;;14701:400::o;15106:410::-;15308:2;15290:21;;;15347:2;15327:18;;;15320:30;15386:34;15381:2;15366:18;;15359:62;-1:-1:-1;;;15452:2:1;15437:18;;15430:44;15506:3;15491:19;;15106:410::o;15931:127::-;15992:10;15987:3;15983:20;15980:1;15973:31;16023:4;16020:1;16013:15;16047:4;16044:1;16037:15;16063:135;16102:3;16123:17;;;16120:43;;16143:18;;:::i;:::-;-1:-1:-1;16190:1:1;16179:13;;16063:135::o;20529:401::-;20731:2;20713:21;;;20770:2;20750:18;;;20743:30;20809:34;20804:2;20789:18;;20782:62;-1:-1:-1;;;20875:2:1;20860:18;;20853:35;20920:3;20905:19;;20529:401::o;20935:406::-;21137:2;21119:21;;;21176:2;21156:18;;;21149:30;21215:34;21210:2;21195:18;;21188:62;-1:-1:-1;;;21281:2:1;21266:18;;21259:40;21331:3;21316:19;;20935:406::o;21346:465::-;21603:2;21592:9;21585:21;21566:4;21629:56;21681:2;21670:9;21666:18;21658:6;21629:56;:::i;:::-;21733:9;21725:6;21721:22;21716:2;21705:9;21701:18;21694:50;21761:44;21798:6;21790;21761:44;:::i;:::-;21753:52;21346:465;-1:-1:-1;;;;;21346:465:1:o;22586:561::-;-1:-1:-1;;;;;22883:15:1;;;22865:34;;22935:15;;22930:2;22915:18;;22908:43;22982:2;22967:18;;22960:34;;;23025:2;23010:18;;23003:34;;;22845:3;23068;23053:19;;23046:32;;;22808:4;;23095:46;;23121:19;;23113:6;23095:46;:::i;:::-;23087:54;22586:561;-1:-1:-1;;;;;;;22586:561:1:o;23152:249::-;23221:6;23274:2;23262:9;23253:7;23249:23;23245:32;23242:52;;;23290:1;23287;23280:12;23242:52;23322:9;23316:16;23341:30;23365:5;23341:30;:::i;23406:179::-;23441:3;23483:1;23465:16;23462:23;23459:120;;;23529:1;23526;23523;23508:23;-1:-1:-1;23566:1:1;23560:8;23555:3;23551:18;23459:120;23406:179;:::o;23590:671::-;23629:3;23671:4;23653:16;23650:26;23647:39;;;23590:671;:::o;23647:39::-;23713:2;23707:9;-1:-1:-1;;23778:16:1;23774:25;;23771:1;23707:9;23750:50;23829:4;23823:11;23853:16;-1:-1:-1;;;;;23959:2:1;23952:4;23944:6;23940:17;23937:25;23932:2;23924:6;23921:14;23918:45;23915:58;;;23966:5;;;;;23590:671;:::o;23915:58::-;24003:6;23997:4;23993:17;23982:28;;24039:3;24033:10;24066:2;24058:6;24055:14;24052:27;;;24072:5;;;;;;23590:671;:::o;24052:27::-;24156:2;24137:16;24131:4;24127:27;24123:36;24116:4;24107:6;24102:3;24098:16;24094:27;24091:69;24088:82;;;24163:5;;;;;;23590:671;:::o;24088:82::-;24179:57;24230:4;24221:6;24213;24209:19;24205:30;24199:4;24179:57;:::i;:::-;-1:-1:-1;24252:3:1;;23590:671;-1:-1:-1;;;;;23590:671:1:o;24687:404::-;24889:2;24871:21;;;24928:2;24908:18;;;24901:30;24967:34;24962:2;24947:18;;24940:62;-1:-1:-1;;;25033:2:1;25018:18;;25011:38;25081:3;25066:19;;24687:404::o;25096:827::-;-1:-1:-1;;;;;25493:15:1;;;25475:34;;25545:15;;25540:2;25525:18;;25518:43;25455:3;25592:2;25577:18;;25570:31;;;25418:4;;25624:57;;25661:19;;25653:6;25624:57;:::i;:::-;25729:9;25721:6;25717:22;25712:2;25701:9;25697:18;25690:50;25763:44;25800:6;25792;25763:44;:::i;:::-;25749:58;;25856:9;25848:6;25844:22;25838:3;25827:9;25823:19;25816:51;25884:33;25910:6;25902;25884:33;:::i;:::-;25876:41;25096:827;-1:-1:-1;;;;;;;;25096:827:1:o
Swarm Source
ipfs://2bf3eac62c5a2edb2d479626a31e5cf7920c14bb5c53fa4038c2cdeffc69d08c
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.