ERC-721
Overview
Max Total Supply
4,603 MT2D
Holders
1,201
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
20 MT2DLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MetaDoge2D
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-12 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // 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/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // 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/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/MetaDoge2D.sol pragma solidity >=0.7.0 <0.9.0; contract MetaDoge2D is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ""; uint256 public cost = 0 ether; uint256 public maxSupply = 9999; uint256 public maxMintAmount = 20; uint256 public maxWhitelistMintAmount = 1; uint256 public presaleSupply = 0; uint256 public whitelistSupply = 9500; bool public paused = false; mapping(address => bool) public whitelisted; address payable public payments; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, address _payments ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); payments = payable(_payments); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); if (msg.sender != owner()) { if(whitelisted[msg.sender] != true) { require(supply + _mintAmount <= maxSupply - presaleSupply - whitelistSupply); require(_mintAmount <= maxMintAmount); require(msg.value >= cost * _mintAmount); } else { require(supply + _mintAmount <= maxSupply - presaleSupply); require(_mintAmount <= maxWhitelistMintAmount); whitelisted[msg.sender] = false; } } else { require(supply + _mintAmount <= maxSupply); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setPayments(address payable _newPayments) public onlyOwner { payments = _newPayments; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setPresaleSupply(uint256 _newPresaleSupply) public onlyOwner { presaleSupply = _newPresaleSupply; } function setWhitelistSupply(uint256 _newWhitelistSupply) public onlyOwner { whitelistSupply = _newWhitelistSupply; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setmaxWhitelistMintAmount(uint256 _newmaxWhitelistMintAmount) public onlyOwner { maxWhitelistMintAmount = _newmaxWhitelistMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() public payable onlyOwner { (bool success, ) = payable(payments).call{value: address(this).balance}(""); require(success); } }
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":"_initBaseURI","type":"string"},{"internalType":"address","name":"_payments","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWhitelistMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","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":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payments","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newPayments","type":"address"}],"name":"setPayments","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPresaleSupply","type":"uint256"}],"name":"setPresaleSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWhitelistSupply","type":"uint256"}],"name":"setWhitelistSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxWhitelistMintAmount","type":"uint256"}],"name":"setmaxWhitelistMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b91600c91620001c5565b506000600d81905561270f600e556014600f55600160105560115561251c6012556013805460ff191690553480156200005357600080fd5b5060405162002ab738038062002ab7833981016040819052620000769162000322565b8351849084906200008f906000906020850190620001c5565b508051620000a5906001906020840190620001c5565b505050620000c2620000bc620000f760201b60201c565b620000fb565b620000cd826200014d565b601580546001600160a01b0319166001600160a01b03929092169190911790555062000428915050565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001c190600b906020840190620001c5565b5050565b828054620001d390620003d5565b90600052602060002090601f016020900481019282620001f7576000855562000242565b82601f106200021257805160ff191683800117855562000242565b8280016001018555821562000242579182015b828111156200024257825182559160200191906001019062000225565b506200025092915062000254565b5090565b5b8082111562000250576000815560010162000255565b600082601f8301126200027d57600080fd5b81516001600160401b03808211156200029a576200029a62000412565b604051601f8301601f19908116603f01168101908282118183101715620002c557620002c562000412565b81604052838152602092508683858801011115620002e257600080fd5b600091505b83821015620003065785820183015181830184015290820190620002e7565b83821115620003185760008385830101525b9695505050505050565b600080600080608085870312156200033957600080fd5b84516001600160401b03808211156200035157600080fd5b6200035f888389016200026b565b955060208701519150808211156200037657600080fd5b62000384888389016200026b565b945060408701519150808211156200039b57600080fd5b50620003aa878288016200026b565b606087015190935090506001600160a01b0381168114620003ca57600080fd5b939692955090935050565b600181811c90821680620003ea57607f821691505b602082108114156200040c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61267f80620004386000396000f3fe6080604052600436106102675760003560e01c80636352211e11610144578063b3a196e9116100b6578063d5abeb011161007a578063d5abeb01146106ec578063d936547e14610702578063da3ef23f14610732578063e985e9c514610752578063f2fde38b1461079b578063f96407fa146107bb57600080fd5b8063b3a196e914610661578063b88d4fde14610677578063b96502cb14610697578063c6682862146106b7578063c87b56dd146106cc57600080fd5b80638da5cb5b116101085780638da5cb5b146105ae57806395d89b41146105cc578063a22cb465146105e1578063a6d23e1014610601578063af231a5814610621578063afecd29e1461064157600080fd5b80636352211e146105245780636c0360eb1461054457806370a0823114610559578063715018a6146105795780637f00c7a61461058e57600080fd5b806333e61413116101dd57806344a0d68a116101a157806344a0d68a1461046a5780634a4c560d1461048a5780634f6ccce7146104aa57806355a63bf4146104ca57806355f804b3146104ea5780635c975abb1461050a57600080fd5b806333e61413146103ec5780633ccfd60b1461040257806340c10f191461040a57806342842e0e1461041d578063438b63001461043d57600080fd5b806313faede61161022f57806313faede61461033d57806318160ddd14610361578063239c70ae1461037657806323b872dd1461038c5780632f745c59146103ac57806330cc7ae0146103cc57600080fd5b806301ffc9a71461026c57806302329a29146102a157806306fdde03146102c3578063081812fc146102e5578063095ea7b31461031d575b600080fd5b34801561027857600080fd5b5061028c6102873660046121c0565b6107d1565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc3660046121a5565b6107fc565b005b3480156102cf57600080fd5b506102d8610842565b60405161029891906123cd565b3480156102f157600080fd5b50610305610300366004612243565b6108d4565b6040516001600160a01b039091168152602001610298565b34801561032957600080fd5b506102c1610338366004612179565b610969565b34801561034957600080fd5b50610353600d5481565b604051908152602001610298565b34801561036d57600080fd5b50600854610353565b34801561038257600080fd5b50610353600f5481565b34801561039857600080fd5b506102c16103a7366004612083565b610a7f565b3480156103b857600080fd5b506103536103c7366004612179565b610ab0565b3480156103d857600080fd5b506102c16103e736600461202d565b610b46565b3480156103f857600080fd5b5061035360125481565b6102c1610b91565b6102c1610418366004612179565b610c1e565b34801561042957600080fd5b506102c1610438366004612083565b610d74565b34801561044957600080fd5b5061045d61045836600461202d565b610d8f565b6040516102989190612389565b34801561047657600080fd5b506102c1610485366004612243565b610e31565b34801561049657600080fd5b506102c16104a536600461202d565b610e60565b3480156104b657600080fd5b506103536104c5366004612243565b610eae565b3480156104d657600080fd5b506102c16104e5366004612243565b610f41565b3480156104f657600080fd5b506102c16105053660046121fa565b610f70565b34801561051657600080fd5b5060135461028c9060ff1681565b34801561053057600080fd5b5061030561053f366004612243565b610fb1565b34801561055057600080fd5b506102d8611028565b34801561056557600080fd5b5061035361057436600461202d565b6110b6565b34801561058557600080fd5b506102c161113d565b34801561059a57600080fd5b506102c16105a9366004612243565b611173565b3480156105ba57600080fd5b50600a546001600160a01b0316610305565b3480156105d857600080fd5b506102d86111a2565b3480156105ed57600080fd5b506102c16105fc366004612144565b6111b1565b34801561060d57600080fd5b50601554610305906001600160a01b031681565b34801561062d57600080fd5b506102c161063c36600461202d565b6111bc565b34801561064d57600080fd5b506102c161065c366004612243565b611208565b34801561066d57600080fd5b5061035360115481565b34801561068357600080fd5b506102c16106923660046120c4565b611237565b3480156106a357600080fd5b506102c16106b2366004612243565b611269565b3480156106c357600080fd5b506102d8611298565b3480156106d857600080fd5b506102d86106e7366004612243565b6112a5565b3480156106f857600080fd5b50610353600e5481565b34801561070e57600080fd5b5061028c61071d36600461202d565b60146020526000908152604090205460ff1681565b34801561073e57600080fd5b506102c161074d3660046121fa565b611383565b34801561075e57600080fd5b5061028c61076d36600461204a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107a757600080fd5b506102c16107b636600461202d565b6113c0565b3480156107c757600080fd5b5061035360105481565b60006001600160e01b0319821663780e9d6360e01b14806107f657506107f682611458565b92915050565b600a546001600160a01b0316331461082f5760405162461bcd60e51b815260040161082690612432565b60405180910390fd5b6013805460ff1916911515919091179055565b60606000805461085190612546565b80601f016020809104026020016040519081016040528092919081815260200182805461087d90612546565b80156108ca5780601f1061089f576101008083540402835291602001916108ca565b820191906000526020600020905b8154815290600101906020018083116108ad57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661094d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610826565b506000908152600460205260409020546001600160a01b031690565b600061097482610fb1565b9050806001600160a01b0316836001600160a01b031614156109e25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610826565b336001600160a01b03821614806109fe57506109fe813361076d565b610a705760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610826565b610a7a83836114a8565b505050565b610a893382611516565b610aa55760405162461bcd60e51b815260040161082690612467565b610a7a83838361160d565b6000610abb836110b6565b8210610b1d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610826565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610b705760405162461bcd60e51b815260040161082690612432565b6001600160a01b03166000908152601460205260409020805460ff19169055565b600a546001600160a01b03163314610bbb5760405162461bcd60e51b815260040161082690612432565b6015546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050905080610c1b57600080fd5b50565b6000610c2960085490565b60135490915060ff1615610c3c57600080fd5b60008211610c4957600080fd5b600a546001600160a01b03163314610d27573360009081526014602052604090205460ff161515600114610cd757601254601154600e54610c8a9190612503565b610c949190612503565b610c9e83836124b8565b1115610ca957600080fd5b600f54821115610cb857600080fd5b81600d54610cc691906124e4565b341015610cd257600080fd5b610d3f565b601154600e54610ce79190612503565b610cf183836124b8565b1115610cfc57600080fd5b601054821115610d0b57600080fd5b336000908152601460205260409020805460ff19169055610d3f565b600e54610d3483836124b8565b1115610d3f57600080fd5b60015b828111610d6e57610d5c84610d5783856124b8565b6117b8565b80610d6681612581565b915050610d42565b50505050565b610a7a83838360405180602001604052806000815250611237565b60606000610d9c836110b6565b905060008167ffffffffffffffff811115610db957610db9612608565b604051908082528060200260200182016040528015610de2578160200160208202803683370190505b50905060005b82811015610e2957610dfa8582610ab0565b828281518110610e0c57610e0c6125f2565b602090810291909101015280610e2181612581565b915050610de8565b509392505050565b600a546001600160a01b03163314610e5b5760405162461bcd60e51b815260040161082690612432565b600d55565b600a546001600160a01b03163314610e8a5760405162461bcd60e51b815260040161082690612432565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b6000610eb960085490565b8210610f1c5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610826565b60088281548110610f2f57610f2f6125f2565b90600052602060002001549050919050565b600a546001600160a01b03163314610f6b5760405162461bcd60e51b815260040161082690612432565b601255565b600a546001600160a01b03163314610f9a5760405162461bcd60e51b815260040161082690612432565b8051610fad90600b906020840190611f09565b5050565b6000818152600260205260408120546001600160a01b0316806107f65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610826565b600b805461103590612546565b80601f016020809104026020016040519081016040528092919081815260200182805461106190612546565b80156110ae5780601f10611083576101008083540402835291602001916110ae565b820191906000526020600020905b81548152906001019060200180831161109157829003601f168201915b505050505081565b60006001600160a01b0382166111215760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610826565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146111675760405162461bcd60e51b815260040161082690612432565b61117160006117d2565b565b600a546001600160a01b0316331461119d5760405162461bcd60e51b815260040161082690612432565b600f55565b60606001805461085190612546565b610fad338383611824565b600a546001600160a01b031633146111e65760405162461bcd60e51b815260040161082690612432565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031633146112325760405162461bcd60e51b815260040161082690612432565b601055565b6112413383611516565b61125d5760405162461bcd60e51b815260040161082690612467565b610d6e848484846118f3565b600a546001600160a01b031633146112935760405162461bcd60e51b815260040161082690612432565b601155565b600c805461103590612546565b6000818152600260205260409020546060906001600160a01b03166113245760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610826565b600061132e611926565b9050600081511161134e576040518060200160405280600081525061137c565b8061135884611935565b600c60405160200161136c93929190612288565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146113ad5760405162461bcd60e51b815260040161082690612432565b8051610fad90600c906020840190611f09565b600a546001600160a01b031633146113ea5760405162461bcd60e51b815260040161082690612432565b6001600160a01b03811661144f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610826565b610c1b816117d2565b60006001600160e01b031982166380ac58cd60e01b148061148957506001600160e01b03198216635b5e139f60e01b145b806107f657506301ffc9a760e01b6001600160e01b03198316146107f6565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114dd82610fb1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661158f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610826565b600061159a83610fb1565b9050806001600160a01b0316846001600160a01b031614806115d55750836001600160a01b03166115ca846108d4565b6001600160a01b0316145b8061160557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661162082610fb1565b6001600160a01b0316146116885760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610826565b6001600160a01b0382166116ea5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610826565b6116f5838383611a33565b6117006000826114a8565b6001600160a01b0383166000908152600360205260408120805460019290611729908490612503565b90915550506001600160a01b03821660009081526003602052604081208054600192906117579084906124b8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610fad828260405180602001604052806000815250611aeb565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156118865760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610826565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6118fe84848461160d565b61190a84848484611b1e565b610d6e5760405162461bcd60e51b8152600401610826906123e0565b6060600b805461085190612546565b6060816119595750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611983578061196d81612581565b915061197c9050600a836124d0565b915061195d565b60008167ffffffffffffffff81111561199e5761199e612608565b6040519080825280601f01601f1916602001820160405280156119c8576020820181803683370190505b5090505b8415611605576119dd600183612503565b91506119ea600a8661259c565b6119f59060306124b8565b60f81b818381518110611a0a57611a0a6125f2565b60200101906001600160f81b031916908160001a905350611a2c600a866124d0565b94506119cc565b6001600160a01b038316611a8e57611a8981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611ab1565b816001600160a01b0316836001600160a01b031614611ab157611ab18382611c2b565b6001600160a01b038216611ac857610a7a81611cc8565b826001600160a01b0316826001600160a01b031614610a7a57610a7a8282611d77565b611af58383611dbb565b611b026000848484611b1e565b610a7a5760405162461bcd60e51b8152600401610826906123e0565b60006001600160a01b0384163b15611c2057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b6290339089908890889060040161234c565b602060405180830381600087803b158015611b7c57600080fd5b505af1925050508015611bac575060408051601f3d908101601f19168201909252611ba9918101906121dd565b60015b611c06573d808015611bda576040519150601f19603f3d011682016040523d82523d6000602084013e611bdf565b606091505b508051611bfe5760405162461bcd60e51b8152600401610826906123e0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611605565b506001949350505050565b60006001611c38846110b6565b611c429190612503565b600083815260076020526040902054909150808214611c95576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611cda90600190612503565b60008381526009602052604081205460088054939450909284908110611d0257611d026125f2565b906000526020600020015490508060088381548110611d2357611d236125f2565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611d5b57611d5b6125dc565b6001900381819060005260206000200160009055905550505050565b6000611d82836110b6565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611e115760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610826565b6000818152600260205260409020546001600160a01b031615611e765760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610826565b611e8260008383611a33565b6001600160a01b0382166000908152600360205260408120805460019290611eab9084906124b8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f1590612546565b90600052602060002090601f016020900481019282611f375760008555611f7d565b82601f10611f5057805160ff1916838001178555611f7d565b82800160010185558215611f7d579182015b82811115611f7d578251825591602001919060010190611f62565b50611f89929150611f8d565b5090565b5b80821115611f895760008155600101611f8e565b600067ffffffffffffffff80841115611fbd57611fbd612608565b604051601f8501601f19908116603f01168101908282118183101715611fe557611fe5612608565b81604052809350858152868686011115611ffe57600080fd5b858560208301376000602087830101525050509392505050565b8035801515811461202857600080fd5b919050565b60006020828403121561203f57600080fd5b813561137c8161261e565b6000806040838503121561205d57600080fd5b82356120688161261e565b915060208301356120788161261e565b809150509250929050565b60008060006060848603121561209857600080fd5b83356120a38161261e565b925060208401356120b38161261e565b929592945050506040919091013590565b600080600080608085870312156120da57600080fd5b84356120e58161261e565b935060208501356120f58161261e565b925060408501359150606085013567ffffffffffffffff81111561211857600080fd5b8501601f8101871361212957600080fd5b61213887823560208401611fa2565b91505092959194509250565b6000806040838503121561215757600080fd5b82356121628161261e565b915061217060208401612018565b90509250929050565b6000806040838503121561218c57600080fd5b82356121978161261e565b946020939093013593505050565b6000602082840312156121b757600080fd5b61137c82612018565b6000602082840312156121d257600080fd5b813561137c81612633565b6000602082840312156121ef57600080fd5b815161137c81612633565b60006020828403121561220c57600080fd5b813567ffffffffffffffff81111561222357600080fd5b8201601f8101841361223457600080fd5b61160584823560208401611fa2565b60006020828403121561225557600080fd5b5035919050565b6000815180845261227481602086016020860161251a565b601f01601f19169290920160200192915050565b60008451602061229b8285838a0161251a565b8551918401916122ae8184848a0161251a565b8554920191600090600181811c90808316806122cb57607f831692505b8583108114156122e957634e487b7160e01b85526022600452602485fd5b8080156122fd576001811461230e5761233b565b60ff1985168852838801955061233b565b60008b81526020902060005b858110156123335781548a82015290840190880161231a565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061237f9083018461225c565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123c1578351835292840192918401916001016123a5565b50909695505050505050565b60208152600061137c602083018461225c565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156124cb576124cb6125b0565b500190565b6000826124df576124df6125c6565b500490565b60008160001904831182151516156124fe576124fe6125b0565b500290565b600082821015612515576125156125b0565b500390565b60005b8381101561253557818101518382015260200161251d565b83811115610d6e5750506000910152565b600181811c9082168061255a57607f821691505b6020821081141561257b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612595576125956125b0565b5060010190565b6000826125ab576125ab6125c6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c1b57600080fd5b6001600160e01b031981168114610c1b57600080fdfea2646970667358221220132b7d4c72bab3a3b6fc7a608a19b55312aa7eb76b569781da61ca46161008b864736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000712ae88e13b65b2d268b87282f98744fb255cdff000000000000000000000000000000000000000000000000000000000000000a4d657461446f676532440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d54324400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6d657461646f67652e6172742f6170692f32442f6d657461646174612f000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102675760003560e01c80636352211e11610144578063b3a196e9116100b6578063d5abeb011161007a578063d5abeb01146106ec578063d936547e14610702578063da3ef23f14610732578063e985e9c514610752578063f2fde38b1461079b578063f96407fa146107bb57600080fd5b8063b3a196e914610661578063b88d4fde14610677578063b96502cb14610697578063c6682862146106b7578063c87b56dd146106cc57600080fd5b80638da5cb5b116101085780638da5cb5b146105ae57806395d89b41146105cc578063a22cb465146105e1578063a6d23e1014610601578063af231a5814610621578063afecd29e1461064157600080fd5b80636352211e146105245780636c0360eb1461054457806370a0823114610559578063715018a6146105795780637f00c7a61461058e57600080fd5b806333e61413116101dd57806344a0d68a116101a157806344a0d68a1461046a5780634a4c560d1461048a5780634f6ccce7146104aa57806355a63bf4146104ca57806355f804b3146104ea5780635c975abb1461050a57600080fd5b806333e61413146103ec5780633ccfd60b1461040257806340c10f191461040a57806342842e0e1461041d578063438b63001461043d57600080fd5b806313faede61161022f57806313faede61461033d57806318160ddd14610361578063239c70ae1461037657806323b872dd1461038c5780632f745c59146103ac57806330cc7ae0146103cc57600080fd5b806301ffc9a71461026c57806302329a29146102a157806306fdde03146102c3578063081812fc146102e5578063095ea7b31461031d575b600080fd5b34801561027857600080fd5b5061028c6102873660046121c0565b6107d1565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc3660046121a5565b6107fc565b005b3480156102cf57600080fd5b506102d8610842565b60405161029891906123cd565b3480156102f157600080fd5b50610305610300366004612243565b6108d4565b6040516001600160a01b039091168152602001610298565b34801561032957600080fd5b506102c1610338366004612179565b610969565b34801561034957600080fd5b50610353600d5481565b604051908152602001610298565b34801561036d57600080fd5b50600854610353565b34801561038257600080fd5b50610353600f5481565b34801561039857600080fd5b506102c16103a7366004612083565b610a7f565b3480156103b857600080fd5b506103536103c7366004612179565b610ab0565b3480156103d857600080fd5b506102c16103e736600461202d565b610b46565b3480156103f857600080fd5b5061035360125481565b6102c1610b91565b6102c1610418366004612179565b610c1e565b34801561042957600080fd5b506102c1610438366004612083565b610d74565b34801561044957600080fd5b5061045d61045836600461202d565b610d8f565b6040516102989190612389565b34801561047657600080fd5b506102c1610485366004612243565b610e31565b34801561049657600080fd5b506102c16104a536600461202d565b610e60565b3480156104b657600080fd5b506103536104c5366004612243565b610eae565b3480156104d657600080fd5b506102c16104e5366004612243565b610f41565b3480156104f657600080fd5b506102c16105053660046121fa565b610f70565b34801561051657600080fd5b5060135461028c9060ff1681565b34801561053057600080fd5b5061030561053f366004612243565b610fb1565b34801561055057600080fd5b506102d8611028565b34801561056557600080fd5b5061035361057436600461202d565b6110b6565b34801561058557600080fd5b506102c161113d565b34801561059a57600080fd5b506102c16105a9366004612243565b611173565b3480156105ba57600080fd5b50600a546001600160a01b0316610305565b3480156105d857600080fd5b506102d86111a2565b3480156105ed57600080fd5b506102c16105fc366004612144565b6111b1565b34801561060d57600080fd5b50601554610305906001600160a01b031681565b34801561062d57600080fd5b506102c161063c36600461202d565b6111bc565b34801561064d57600080fd5b506102c161065c366004612243565b611208565b34801561066d57600080fd5b5061035360115481565b34801561068357600080fd5b506102c16106923660046120c4565b611237565b3480156106a357600080fd5b506102c16106b2366004612243565b611269565b3480156106c357600080fd5b506102d8611298565b3480156106d857600080fd5b506102d86106e7366004612243565b6112a5565b3480156106f857600080fd5b50610353600e5481565b34801561070e57600080fd5b5061028c61071d36600461202d565b60146020526000908152604090205460ff1681565b34801561073e57600080fd5b506102c161074d3660046121fa565b611383565b34801561075e57600080fd5b5061028c61076d36600461204a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107a757600080fd5b506102c16107b636600461202d565b6113c0565b3480156107c757600080fd5b5061035360105481565b60006001600160e01b0319821663780e9d6360e01b14806107f657506107f682611458565b92915050565b600a546001600160a01b0316331461082f5760405162461bcd60e51b815260040161082690612432565b60405180910390fd5b6013805460ff1916911515919091179055565b60606000805461085190612546565b80601f016020809104026020016040519081016040528092919081815260200182805461087d90612546565b80156108ca5780601f1061089f576101008083540402835291602001916108ca565b820191906000526020600020905b8154815290600101906020018083116108ad57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661094d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610826565b506000908152600460205260409020546001600160a01b031690565b600061097482610fb1565b9050806001600160a01b0316836001600160a01b031614156109e25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610826565b336001600160a01b03821614806109fe57506109fe813361076d565b610a705760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610826565b610a7a83836114a8565b505050565b610a893382611516565b610aa55760405162461bcd60e51b815260040161082690612467565b610a7a83838361160d565b6000610abb836110b6565b8210610b1d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610826565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610b705760405162461bcd60e51b815260040161082690612432565b6001600160a01b03166000908152601460205260409020805460ff19169055565b600a546001600160a01b03163314610bbb5760405162461bcd60e51b815260040161082690612432565b6015546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610c08576040519150601f19603f3d011682016040523d82523d6000602084013e610c0d565b606091505b5050905080610c1b57600080fd5b50565b6000610c2960085490565b60135490915060ff1615610c3c57600080fd5b60008211610c4957600080fd5b600a546001600160a01b03163314610d27573360009081526014602052604090205460ff161515600114610cd757601254601154600e54610c8a9190612503565b610c949190612503565b610c9e83836124b8565b1115610ca957600080fd5b600f54821115610cb857600080fd5b81600d54610cc691906124e4565b341015610cd257600080fd5b610d3f565b601154600e54610ce79190612503565b610cf183836124b8565b1115610cfc57600080fd5b601054821115610d0b57600080fd5b336000908152601460205260409020805460ff19169055610d3f565b600e54610d3483836124b8565b1115610d3f57600080fd5b60015b828111610d6e57610d5c84610d5783856124b8565b6117b8565b80610d6681612581565b915050610d42565b50505050565b610a7a83838360405180602001604052806000815250611237565b60606000610d9c836110b6565b905060008167ffffffffffffffff811115610db957610db9612608565b604051908082528060200260200182016040528015610de2578160200160208202803683370190505b50905060005b82811015610e2957610dfa8582610ab0565b828281518110610e0c57610e0c6125f2565b602090810291909101015280610e2181612581565b915050610de8565b509392505050565b600a546001600160a01b03163314610e5b5760405162461bcd60e51b815260040161082690612432565b600d55565b600a546001600160a01b03163314610e8a5760405162461bcd60e51b815260040161082690612432565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b6000610eb960085490565b8210610f1c5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610826565b60088281548110610f2f57610f2f6125f2565b90600052602060002001549050919050565b600a546001600160a01b03163314610f6b5760405162461bcd60e51b815260040161082690612432565b601255565b600a546001600160a01b03163314610f9a5760405162461bcd60e51b815260040161082690612432565b8051610fad90600b906020840190611f09565b5050565b6000818152600260205260408120546001600160a01b0316806107f65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610826565b600b805461103590612546565b80601f016020809104026020016040519081016040528092919081815260200182805461106190612546565b80156110ae5780601f10611083576101008083540402835291602001916110ae565b820191906000526020600020905b81548152906001019060200180831161109157829003601f168201915b505050505081565b60006001600160a01b0382166111215760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610826565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146111675760405162461bcd60e51b815260040161082690612432565b61117160006117d2565b565b600a546001600160a01b0316331461119d5760405162461bcd60e51b815260040161082690612432565b600f55565b60606001805461085190612546565b610fad338383611824565b600a546001600160a01b031633146111e65760405162461bcd60e51b815260040161082690612432565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031633146112325760405162461bcd60e51b815260040161082690612432565b601055565b6112413383611516565b61125d5760405162461bcd60e51b815260040161082690612467565b610d6e848484846118f3565b600a546001600160a01b031633146112935760405162461bcd60e51b815260040161082690612432565b601155565b600c805461103590612546565b6000818152600260205260409020546060906001600160a01b03166113245760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610826565b600061132e611926565b9050600081511161134e576040518060200160405280600081525061137c565b8061135884611935565b600c60405160200161136c93929190612288565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146113ad5760405162461bcd60e51b815260040161082690612432565b8051610fad90600c906020840190611f09565b600a546001600160a01b031633146113ea5760405162461bcd60e51b815260040161082690612432565b6001600160a01b03811661144f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610826565b610c1b816117d2565b60006001600160e01b031982166380ac58cd60e01b148061148957506001600160e01b03198216635b5e139f60e01b145b806107f657506301ffc9a760e01b6001600160e01b03198316146107f6565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114dd82610fb1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661158f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610826565b600061159a83610fb1565b9050806001600160a01b0316846001600160a01b031614806115d55750836001600160a01b03166115ca846108d4565b6001600160a01b0316145b8061160557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661162082610fb1565b6001600160a01b0316146116885760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610826565b6001600160a01b0382166116ea5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610826565b6116f5838383611a33565b6117006000826114a8565b6001600160a01b0383166000908152600360205260408120805460019290611729908490612503565b90915550506001600160a01b03821660009081526003602052604081208054600192906117579084906124b8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610fad828260405180602001604052806000815250611aeb565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156118865760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610826565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6118fe84848461160d565b61190a84848484611b1e565b610d6e5760405162461bcd60e51b8152600401610826906123e0565b6060600b805461085190612546565b6060816119595750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611983578061196d81612581565b915061197c9050600a836124d0565b915061195d565b60008167ffffffffffffffff81111561199e5761199e612608565b6040519080825280601f01601f1916602001820160405280156119c8576020820181803683370190505b5090505b8415611605576119dd600183612503565b91506119ea600a8661259c565b6119f59060306124b8565b60f81b818381518110611a0a57611a0a6125f2565b60200101906001600160f81b031916908160001a905350611a2c600a866124d0565b94506119cc565b6001600160a01b038316611a8e57611a8981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611ab1565b816001600160a01b0316836001600160a01b031614611ab157611ab18382611c2b565b6001600160a01b038216611ac857610a7a81611cc8565b826001600160a01b0316826001600160a01b031614610a7a57610a7a8282611d77565b611af58383611dbb565b611b026000848484611b1e565b610a7a5760405162461bcd60e51b8152600401610826906123e0565b60006001600160a01b0384163b15611c2057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b6290339089908890889060040161234c565b602060405180830381600087803b158015611b7c57600080fd5b505af1925050508015611bac575060408051601f3d908101601f19168201909252611ba9918101906121dd565b60015b611c06573d808015611bda576040519150601f19603f3d011682016040523d82523d6000602084013e611bdf565b606091505b508051611bfe5760405162461bcd60e51b8152600401610826906123e0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611605565b506001949350505050565b60006001611c38846110b6565b611c429190612503565b600083815260076020526040902054909150808214611c95576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611cda90600190612503565b60008381526009602052604081205460088054939450909284908110611d0257611d026125f2565b906000526020600020015490508060088381548110611d2357611d236125f2565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611d5b57611d5b6125dc565b6001900381819060005260206000200160009055905550505050565b6000611d82836110b6565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611e115760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610826565b6000818152600260205260409020546001600160a01b031615611e765760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610826565b611e8260008383611a33565b6001600160a01b0382166000908152600360205260408120805460019290611eab9084906124b8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f1590612546565b90600052602060002090601f016020900481019282611f375760008555611f7d565b82601f10611f5057805160ff1916838001178555611f7d565b82800160010185558215611f7d579182015b82811115611f7d578251825591602001919060010190611f62565b50611f89929150611f8d565b5090565b5b80821115611f895760008155600101611f8e565b600067ffffffffffffffff80841115611fbd57611fbd612608565b604051601f8501601f19908116603f01168101908282118183101715611fe557611fe5612608565b81604052809350858152868686011115611ffe57600080fd5b858560208301376000602087830101525050509392505050565b8035801515811461202857600080fd5b919050565b60006020828403121561203f57600080fd5b813561137c8161261e565b6000806040838503121561205d57600080fd5b82356120688161261e565b915060208301356120788161261e565b809150509250929050565b60008060006060848603121561209857600080fd5b83356120a38161261e565b925060208401356120b38161261e565b929592945050506040919091013590565b600080600080608085870312156120da57600080fd5b84356120e58161261e565b935060208501356120f58161261e565b925060408501359150606085013567ffffffffffffffff81111561211857600080fd5b8501601f8101871361212957600080fd5b61213887823560208401611fa2565b91505092959194509250565b6000806040838503121561215757600080fd5b82356121628161261e565b915061217060208401612018565b90509250929050565b6000806040838503121561218c57600080fd5b82356121978161261e565b946020939093013593505050565b6000602082840312156121b757600080fd5b61137c82612018565b6000602082840312156121d257600080fd5b813561137c81612633565b6000602082840312156121ef57600080fd5b815161137c81612633565b60006020828403121561220c57600080fd5b813567ffffffffffffffff81111561222357600080fd5b8201601f8101841361223457600080fd5b61160584823560208401611fa2565b60006020828403121561225557600080fd5b5035919050565b6000815180845261227481602086016020860161251a565b601f01601f19169290920160200192915050565b60008451602061229b8285838a0161251a565b8551918401916122ae8184848a0161251a565b8554920191600090600181811c90808316806122cb57607f831692505b8583108114156122e957634e487b7160e01b85526022600452602485fd5b8080156122fd576001811461230e5761233b565b60ff1985168852838801955061233b565b60008b81526020902060005b858110156123335781548a82015290840190880161231a565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061237f9083018461225c565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123c1578351835292840192918401916001016123a5565b50909695505050505050565b60208152600061137c602083018461225c565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156124cb576124cb6125b0565b500190565b6000826124df576124df6125c6565b500490565b60008160001904831182151516156124fe576124fe6125b0565b500290565b600082821015612515576125156125b0565b500390565b60005b8381101561253557818101518382015260200161251d565b83811115610d6e5750506000910152565b600181811c9082168061255a57607f821691505b6020821081141561257b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612595576125956125b0565b5060010190565b6000826125ab576125ab6125c6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c1b57600080fd5b6001600160e01b031981168114610c1b57600080fdfea2646970667358221220132b7d4c72bab3a3b6fc7a608a19b55312aa7eb76b569781da61ca46161008b864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000712ae88e13b65b2d268b87282f98744fb255cdff000000000000000000000000000000000000000000000000000000000000000a4d657461446f676532440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d54324400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6d657461646f67652e6172742f6170692f32442f6d657461646174612f000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): MetaDoge2D
Arg [1] : _symbol (string): MT2D
Arg [2] : _initBaseURI (string): https://metadoge.art/api/2D/metadata/
Arg [3] : _payments (address): 0x712Ae88E13b65B2d268B87282f98744fB255CDFf
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 000000000000000000000000712ae88e13b65b2d268b87282f98744fb255cdff
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [5] : 4d657461446f6765324400000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4d54324400000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [9] : 68747470733a2f2f6d657461646f67652e6172742f6170692f32442f6d657461
Arg [10] : 646174612f000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44527:3871:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38299:224;;;;;;;;;;-1:-1:-1;38299:224:0;;;;;:::i;:::-;;:::i;:::-;;;8680:14:1;;8673:22;8655:41;;8643:2;8628:18;38299:224:0;;;;;;;;47954:73;;;;;;;;;;-1:-1:-1;47954:73:0;;;;;:::i;:::-;;:::i;:::-;;25793:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27352:221::-;;;;;;;;;;-1:-1:-1;27352:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7117:32:1;;;7099:51;;7087:2;7072:18;27352:221:0;6953:203:1;26875:411:0;;;;;;;;;;-1:-1:-1;26875:411:0;;;;;:::i;:::-;;:::i;44678:29::-;;;;;;;;;;;;;;;;;;;16284:25:1;;;16272:2;16257:18;44678:29:0;16138:177:1;38939:113:0;;;;;;;;;;-1:-1:-1;39027:10:0;:17;38939:113;;44748:33;;;;;;;;;;;;;;;;28102:339;;;;;;;;;;-1:-1:-1;28102:339:0;;;;;:::i;:::-;;:::i;38607:256::-;;;;;;;;;;-1:-1:-1;38607:256:0;;;;;:::i;:::-;;:::i;48133:100::-;;;;;;;;;;-1:-1:-1;48133:100:0;;;;;:::i;:::-;;:::i;44869:37::-;;;;;;;;;;;;;;;;48239:156;;;:::i;45394:795::-;;;;;;:::i;:::-;;:::i;28512:185::-;;;;;;;;;;-1:-1:-1;28512:185:0;;;;;:::i;:::-;;:::i;46195:348::-;;;;;;;;;;-1:-1:-1;46195:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47104:80::-;;;;;;;;;;-1:-1:-1;47104:80:0;;;;;:::i;:::-;;:::i;48033:93::-;;;;;;;;;;-1:-1:-1;48033:93:0;;;;;:::i;:::-;;:::i;39129:233::-;;;;;;;;;;-1:-1:-1;39129:233:0;;;;;:::i;:::-;;:::i;47312:124::-;;;;;;;;;;-1:-1:-1;47312:124:0;;;;;:::i;:::-;;:::i;47722:98::-;;;;;;;;;;-1:-1:-1;47722:98:0;;;;;:::i;:::-;;:::i;44911:26::-;;;;;;;;;;-1:-1:-1;44911:26:0;;;;;;;;25487:239;;;;;;;;;;-1:-1:-1;25487:239:0;;;;;:::i;:::-;;:::i;44615:21::-;;;;;;;;;;;;;:::i;25217:208::-;;;;;;;;;;-1:-1:-1;25217:208:0;;;;;:::i;:::-;;:::i;4763:103::-;;;;;;;;;;;;;:::i;47442:116::-;;;;;;;;;;-1:-1:-1;47442:116:0;;;;;:::i;:::-;;:::i;4112:87::-;;;;;;;;;;-1:-1:-1;4185:6:0;;-1:-1:-1;;;;;4185:6:0;4112:87;;25962:104;;;;;;;;;;;;;:::i;27645:155::-;;;;;;;;;;-1:-1:-1;27645:155:0;;;;;:::i;:::-;;:::i;44990:31::-;;;;;;;;;;-1:-1:-1;44990:31:0;;;;-1:-1:-1;;;;;44990:31:0;;;46994:104;;;;;;;;;;-1:-1:-1;46994:104:0;;;;;:::i;:::-;;:::i;47564:152::-;;;;;;;;;;-1:-1:-1;47564:152:0;;;;;:::i;:::-;;:::i;44832:32::-;;;;;;;;;;;;;;;;28768:328;;;;;;;;;;-1:-1:-1;28768:328:0;;;;;:::i;:::-;;:::i;47190:116::-;;;;;;;;;;-1:-1:-1;47190:116:0;;;;;:::i;:::-;;:::i;44641:32::-;;;;;;;;;;;;;:::i;46549:423::-;;;;;;;;;;-1:-1:-1;46549:423:0;;;;;:::i;:::-;;:::i;44712:31::-;;;;;;;;;;;;;;;;44942:43;;;;;;;;;;-1:-1:-1;44942:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;47826:122;;;;;;;;;;-1:-1:-1;47826:122:0;;;;;:::i;:::-;;:::i;27871:164::-;;;;;;;;;;-1:-1:-1;27871:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;27992:25:0;;;27968:4;27992:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27871:164;5021:201;;;;;;;;;;-1:-1:-1;5021:201:0;;;;;:::i;:::-;;:::i;44786:41::-;;;;;;;;;;;;;;;;38299:224;38401:4;-1:-1:-1;;;;;;38425:50:0;;-1:-1:-1;;;38425:50:0;;:90;;;38479:36;38503:11;38479:23;:36::i;:::-;38418:97;38299:224;-1:-1:-1;;38299:224:0:o;47954:73::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;;;;;;;;;48006:6:::1;:15:::0;;-1:-1:-1;;48006:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47954:73::o;25793:100::-;25847:13;25880:5;25873:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25793:100;:::o;27352:221::-;27428:7;30695:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30695:16:0;27448:73;;;;-1:-1:-1;;;27448:73:0;;13507:2:1;27448:73:0;;;13489:21:1;13546:2;13526:18;;;13519:30;13585:34;13565:18;;;13558:62;-1:-1:-1;;;13636:18:1;;;13629:42;13688:19;;27448:73:0;13305:408:1;27448:73:0;-1:-1:-1;27541:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27541:24:0;;27352:221::o;26875:411::-;26956:13;26972:23;26987:7;26972:14;:23::i;:::-;26956:39;;27020:5;-1:-1:-1;;;;;27014:11:0;:2;-1:-1:-1;;;;;27014:11:0;;;27006:57;;;;-1:-1:-1;;;27006:57:0;;15107:2:1;27006:57:0;;;15089:21:1;15146:2;15126:18;;;15119:30;15185:34;15165:18;;;15158:62;-1:-1:-1;;;15236:18:1;;;15229:31;15277:19;;27006:57:0;14905:397:1;27006:57:0;2916:10;-1:-1:-1;;;;;27098:21:0;;;;:62;;-1:-1:-1;27123:37:0;27140:5;2916:10;27871:164;:::i;27123:37::-;27076:168;;;;-1:-1:-1;;;27076:168:0;;11900:2:1;27076:168:0;;;11882:21:1;11939:2;11919:18;;;11912:30;11978:34;11958:18;;;11951:62;12049:26;12029:18;;;12022:54;12093:19;;27076:168:0;11698:420:1;27076:168:0;27257:21;27266:2;27270:7;27257:8;:21::i;:::-;26945:341;26875:411;;:::o;28102:339::-;28297:41;2916:10;28330:7;28297:18;:41::i;:::-;28289:103;;;;-1:-1:-1;;;28289:103:0;;;;;;;:::i;:::-;28405:28;28415:4;28421:2;28425:7;28405:9;:28::i;38607:256::-;38704:7;38740:23;38757:5;38740:16;:23::i;:::-;38732:5;:31;38724:87;;;;-1:-1:-1;;;38724:87:0;;9133:2:1;38724:87:0;;;9115:21:1;9172:2;9152:18;;;9145:30;9211:34;9191:18;;;9184:62;-1:-1:-1;;;9262:18:1;;;9255:41;9313:19;;38724:87:0;8931:407:1;38724:87:0;-1:-1:-1;;;;;;38829:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38607:256::o;48133:100::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48201:18:0::1;48222:5;48201:18:::0;;;:11:::1;:18;::::0;;;;:26;;-1:-1:-1;;48201:26:0::1;::::0;;48133:100::o;48239:156::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;48318:8:::1;::::0;48310:56:::1;::::0;48292:12:::1;::::0;-1:-1:-1;;;;;48318:8:0::1;::::0;48340:21:::1;::::0;48292:12;48310:56;48292:12;48310:56;48340:21;48318:8;48310:56:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48291:75;;;48381:7;48373:16;;;::::0;::::1;;48284:111;48239:156::o:0;45394:795::-;45464:14;45481:13;39027:10;:17;;38939:113;45481:13;45510:6;;45464:30;;-1:-1:-1;45510:6:0;;45509:7;45501:16;;;;;;45546:1;45532:11;:15;45524:24;;;;;;4185:6;;-1:-1:-1;;;;;4185:6:0;45561:10;:21;45557:529;;45608:10;45596:23;;;;:11;:23;;;;;;;;:31;;:23;:31;45593:416;;45700:15;;45684:13;;45672:9;;:25;;;;:::i;:::-;:43;;;;:::i;:::-;45648:20;45657:11;45648:6;:20;:::i;:::-;:67;;45640:76;;;;;;45750:13;;45735:11;:28;;45727:37;;;;;;45803:11;45796:4;;:18;;;;:::i;:::-;45783:9;:31;;45775:40;;;;;;45557:529;;45593:416;45886:13;;45874:9;;:25;;;;:::i;:::-;45850:20;45859:11;45850:6;:20;:::i;:::-;:49;;45842:58;;;;;;45934:22;;45919:11;:37;;45911:46;;;;;;45980:10;45994:5;45968:23;;;:11;:23;;;;;:31;;-1:-1:-1;;45968:31:0;;;45557:529;;;46068:9;;46044:20;46053:11;46044:6;:20;:::i;:::-;:33;;46036:42;;;;;;46115:1;46098:86;46123:11;46118:1;:16;46098:86;;46150:26;46160:3;46165:10;46174:1;46165:6;:10;:::i;:::-;46150:9;:26::i;:::-;46136:3;;;;:::i;:::-;;;;46098:86;;;;45457:732;45394:795;;:::o;28512:185::-;28650:39;28667:4;28673:2;28677:7;28650:39;;;;;;;;;;;;:16;:39::i;46195:348::-;46270:16;46298:23;46324:17;46334:6;46324:9;:17::i;:::-;46298:43;;46348:25;46390:15;46376:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46376:30:0;;46348:58;;46418:9;46413:103;46433:15;46429:1;:19;46413:103;;;46478:30;46498:6;46506:1;46478:19;:30::i;:::-;46464:8;46473:1;46464:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;46450:3;;;;:::i;:::-;;;;46413:103;;;-1:-1:-1;46529:8:0;46195:348;-1:-1:-1;;;46195:348:0:o;47104:80::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;47163:4:::1;:15:::0;47104:80::o;48033:93::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48095:18:0::1;;::::0;;;:11:::1;:18;::::0;;;;:25;;-1:-1:-1;;48095:25:0::1;48116:4;48095:25;::::0;;48033:93::o;39129:233::-;39204:7;39240:30;39027:10;:17;;38939:113;39240:30;39232:5;:38;39224:95;;;;-1:-1:-1;;;39224:95:0;;15927:2:1;39224:95:0;;;15909:21:1;15966:2;15946:18;;;15939:30;16005:34;15985:18;;;15978:62;-1:-1:-1;;;16056:18:1;;;16049:42;16108:19;;39224:95:0;15725:408:1;39224:95:0;39337:10;39348:5;39337:17;;;;;;;;:::i;:::-;;;;;;;;;39330:24;;39129:233;;;:::o;47312:124::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;47393:15:::1;:37:::0;47312:124::o;47722:98::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;47793:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;47722:98:::0;:::o;25487:239::-;25559:7;25595:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25595:16:0;25630:19;25622:73;;;;-1:-1:-1;;;25622:73:0;;12736:2:1;25622:73:0;;;12718:21:1;12775:2;12755:18;;;12748:30;12814:34;12794:18;;;12787:62;-1:-1:-1;;;12865:18:1;;;12858:39;12914:19;;25622:73:0;12534:405:1;44615:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25217:208::-;25289:7;-1:-1:-1;;;;;25317:19:0;;25309:74;;;;-1:-1:-1;;;25309:74:0;;12325:2:1;25309:74:0;;;12307:21:1;12364:2;12344:18;;;12337:30;12403:34;12383:18;;;12376:62;-1:-1:-1;;;12454:18:1;;;12447:40;12504:19;;25309:74:0;12123:406:1;25309:74:0;-1:-1:-1;;;;;;25401:16:0;;;;;:9;:16;;;;;;;25217:208::o;4763:103::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;4828:30:::1;4855:1;4828:18;:30::i;:::-;4763:103::o:0;47442:116::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;47519:13:::1;:33:::0;47442:116::o;25962:104::-;26018:13;26051:7;26044:14;;;;;:::i;27645:155::-;27740:52;2916:10;27773:8;27783;27740:18;:52::i;46994:104::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;47069:8:::1;:23:::0;;-1:-1:-1;;;;;;47069:23:0::1;-1:-1:-1::0;;;;;47069:23:0;;;::::1;::::0;;;::::1;::::0;;46994:104::o;47564:152::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;47659:22:::1;:51:::0;47564:152::o;28768:328::-;28943:41;2916:10;28976:7;28943:18;:41::i;:::-;28935:103;;;;-1:-1:-1;;;28935:103:0;;;;;;;:::i;:::-;29049:39;29063:4;29069:2;29073:7;29082:5;29049:13;:39::i;47190:116::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;47267:13:::1;:33:::0;47190:116::o;44641:32::-;;;;;;;:::i;46549:423::-;30671:4;30695:16;;;:7;:16;;;;;;46647:13;;-1:-1:-1;;;;;30695:16:0;46672:97;;;;-1:-1:-1;;;46672:97:0;;14691:2:1;46672:97:0;;;14673:21:1;14730:2;14710:18;;;14703:30;14769:34;14749:18;;;14742:62;-1:-1:-1;;;14820:18:1;;;14813:45;14875:19;;46672:97:0;14489:411:1;46672:97:0;46778:28;46809:10;:8;:10::i;:::-;46778:41;;46864:1;46839:14;46833:28;:32;:133;;;;;;;;;;;;;;;;;46901:14;46917:18;:7;:16;:18::i;:::-;46937:13;46884:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46833:133;46826:140;46549:423;-1:-1:-1;;;46549:423:0:o;47826:122::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;47909:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;5021:201::-:0;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5110:22:0;::::1;5102:73;;;::::0;-1:-1:-1;;;5102:73:0;;9964:2:1;5102:73:0::1;::::0;::::1;9946:21:1::0;10003:2;9983:18;;;9976:30;10042:34;10022:18;;;10015:62;-1:-1:-1;;;10093:18:1;;;10086:36;10139:19;;5102:73:0::1;9762:402:1::0;5102:73:0::1;5186:28;5205:8;5186:18;:28::i;24848:305::-:0;24950:4;-1:-1:-1;;;;;;24987:40:0;;-1:-1:-1;;;24987:40:0;;:105;;-1:-1:-1;;;;;;;25044:48:0;;-1:-1:-1;;;25044:48:0;24987:105;:158;;;-1:-1:-1;;;;;;;;;;16653:40:0;;;25109:36;16544:157;34588:174;34663:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34663:29:0;-1:-1:-1;;;;;34663:29:0;;;;;;;;:24;;34717:23;34663:24;34717:14;:23::i;:::-;-1:-1:-1;;;;;34708:46:0;;;;;;;;;;;34588:174;;:::o;30900:348::-;30993:4;30695:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30695:16:0;31010:73;;;;-1:-1:-1;;;31010:73:0;;11487:2:1;31010:73:0;;;11469:21:1;11526:2;11506:18;;;11499:30;11565:34;11545:18;;;11538:62;-1:-1:-1;;;11616:18:1;;;11609:42;11668:19;;31010:73:0;11285:408:1;31010:73:0;31094:13;31110:23;31125:7;31110:14;:23::i;:::-;31094:39;;31163:5;-1:-1:-1;;;;;31152:16:0;:7;-1:-1:-1;;;;;31152:16:0;;:51;;;;31196:7;-1:-1:-1;;;;;31172:31:0;:20;31184:7;31172:11;:20::i;:::-;-1:-1:-1;;;;;31172:31:0;;31152:51;:87;;;-1:-1:-1;;;;;;27992:25:0;;;27968:4;27992:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31207:32;31144:96;30900:348;-1:-1:-1;;;;30900:348:0:o;33892:578::-;34051:4;-1:-1:-1;;;;;34024:31:0;:23;34039:7;34024:14;:23::i;:::-;-1:-1:-1;;;;;34024:31:0;;34016:85;;;;-1:-1:-1;;;34016:85:0;;14281:2:1;34016:85:0;;;14263:21:1;14320:2;14300:18;;;14293:30;14359:34;14339:18;;;14332:62;-1:-1:-1;;;14410:18:1;;;14403:39;14459:19;;34016:85:0;14079:405:1;34016:85:0;-1:-1:-1;;;;;34120:16:0;;34112:65;;;;-1:-1:-1;;;34112:65:0;;10728:2:1;34112:65:0;;;10710:21:1;10767:2;10747:18;;;10740:30;10806:34;10786:18;;;10779:62;-1:-1:-1;;;10857:18:1;;;10850:34;10901:19;;34112:65:0;10526:400:1;34112:65:0;34190:39;34211:4;34217:2;34221:7;34190:20;:39::i;:::-;34294:29;34311:1;34315:7;34294:8;:29::i;:::-;-1:-1:-1;;;;;34336:15:0;;;;;;:9;:15;;;;;:20;;34355:1;;34336:15;:20;;34355:1;;34336:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34367:13:0;;;;;;:9;:13;;;;;:18;;34384:1;;34367:13;:18;;34384:1;;34367:18;:::i;:::-;;;;-1:-1:-1;;34396:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34396:21:0;-1:-1:-1;;;;;34396:21:0;;;;;;;;;34435:27;;34396:16;;34435:27;;;;;;;33892:578;;;:::o;31590:110::-;31666:26;31676:2;31680:7;31666:26;;;;;;;;;;;;:9;:26::i;5382:191::-;5475:6;;;-1:-1:-1;;;;;5492:17:0;;;-1:-1:-1;;;;;;5492:17:0;;;;;;;5525:40;;5475:6;;;5492:17;5475:6;;5525:40;;5456:16;;5525:40;5445:128;5382:191;:::o;34904:315::-;35059:8;-1:-1:-1;;;;;35050:17:0;:5;-1:-1:-1;;;;;35050:17:0;;;35042:55;;;;-1:-1:-1;;;35042:55:0;;11133:2:1;35042:55:0;;;11115:21:1;11172:2;11152:18;;;11145:30;11211:27;11191:18;;;11184:55;11256:18;;35042:55:0;10931:349:1;35042:55:0;-1:-1:-1;;;;;35108:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35108:46:0;;;;;;;;;;35170:41;;8655::1;;;35170::0;;8628:18:1;35170:41:0;;;;;;;34904:315;;;:::o;29978:::-;30135:28;30145:4;30151:2;30155:7;30135:9;:28::i;:::-;30182:48;30205:4;30211:2;30215:7;30224:5;30182:22;:48::i;:::-;30174:111;;;;-1:-1:-1;;;30174:111:0;;;;;;;:::i;45273:102::-;45333:13;45362:7;45355:14;;;;;:::i;398:723::-;454:13;675:10;671:53;;-1:-1:-1;;702:10:0;;;;;;;;;;;;-1:-1:-1;;;702:10:0;;;;;398:723::o;671:53::-;749:5;734:12;790:78;797:9;;790:78;;823:8;;;;:::i;:::-;;-1:-1:-1;846:10:0;;-1:-1:-1;854:2:0;846:10;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;900:17:0;;878:39;;928:154;935:10;;928:154;;962:11;972:1;962:11;;:::i;:::-;;-1:-1:-1;1031:10:0;1039:2;1031:5;:10;:::i;:::-;1018:24;;:2;:24;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;988:56:0;;;;;;;;-1:-1:-1;1059:11:0;1068:2;1059:11;;:::i;:::-;;;928:154;;39975:589;-1:-1:-1;;;;;40181:18:0;;40177:187;;40216:40;40248:7;41391:10;:17;;41364:24;;;;:15;:24;;;;;:44;;;41419:24;;;;;;;;;;;;41287:164;40216:40;40177:187;;;40286:2;-1:-1:-1;;;;;40278:10:0;:4;-1:-1:-1;;;;;40278:10:0;;40274:90;;40305:47;40338:4;40344:7;40305:32;:47::i;:::-;-1:-1:-1;;;;;40378:16:0;;40374:183;;40411:45;40448:7;40411:36;:45::i;40374:183::-;40484:4;-1:-1:-1;;;;;40478:10:0;:2;-1:-1:-1;;;;;40478:10:0;;40474:83;;40505:40;40533:2;40537:7;40505:27;:40::i;31927:321::-;32057:18;32063:2;32067:7;32057:5;:18::i;:::-;32108:54;32139:1;32143:2;32147:7;32156:5;32108:22;:54::i;:::-;32086:154;;;;-1:-1:-1;;;32086:154:0;;;;;;;:::i;35784:799::-;35939:4;-1:-1:-1;;;;;35960:13:0;;6723:20;6771:8;35956:620;;35996:72;;-1:-1:-1;;;35996:72:0;;-1:-1:-1;;;;;35996:36:0;;;;;:72;;2916:10;;36047:4;;36053:7;;36062:5;;35996:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35996:72:0;;;;;;;;-1:-1:-1;;35996:72:0;;;;;;;;;;;;:::i;:::-;;;35992:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36238:13:0;;36234:272;;36281:60;;-1:-1:-1;;;36281:60:0;;;;;;;:::i;36234:272::-;36456:6;36450:13;36441:6;36437:2;36433:15;36426:38;35992:529;-1:-1:-1;;;;;;36119:51:0;-1:-1:-1;;;36119:51:0;;-1:-1:-1;36112:58:0;;35956:620;-1:-1:-1;36560:4:0;35784:799;;;;;;:::o;42078:988::-;42344:22;42394:1;42369:22;42386:4;42369:16;:22::i;:::-;:26;;;;:::i;:::-;42406:18;42427:26;;;:17;:26;;;;;;42344:51;;-1:-1:-1;42560:28:0;;;42556:328;;-1:-1:-1;;;;;42627:18:0;;42605:19;42627:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42678:30;;;;;;:44;;;42795:30;;:17;:30;;;;;:43;;;42556:328;-1:-1:-1;42980:26:0;;;;:17;:26;;;;;;;;42973:33;;;-1:-1:-1;;;;;43024:18:0;;;;;:12;:18;;;;;:34;;;;;;;43017:41;42078:988::o;43361:1079::-;43639:10;:17;43614:22;;43639:21;;43659:1;;43639:21;:::i;:::-;43671:18;43692:24;;;:15;:24;;;;;;44065:10;:26;;43614:46;;-1:-1:-1;43692:24:0;;43614:46;;44065:26;;;;;;:::i;:::-;;;;;;;;;44043:48;;44129:11;44104:10;44115;44104:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44209:28;;;:15;:28;;;;;;;:41;;;44381:24;;;;;44374:31;44416:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43432:1008;;;43361:1079;:::o;40865:221::-;40950:14;40967:20;40984:2;40967:16;:20::i;:::-;-1:-1:-1;;;;;40998:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41043:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40865:221:0:o;32584:382::-;-1:-1:-1;;;;;32664:16:0;;32656:61;;;;-1:-1:-1;;;32656:61:0;;13146:2:1;32656:61:0;;;13128:21:1;;;13165:18;;;13158:30;13224:34;13204:18;;;13197:62;13276:18;;32656:61:0;12944:356:1;32656:61:0;30671:4;30695:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30695:16:0;:30;32728:58;;;;-1:-1:-1;;;32728:58:0;;10371:2:1;32728:58:0;;;10353:21:1;10410:2;10390:18;;;10383:30;10449;10429:18;;;10422:58;10497:18;;32728:58:0;10169:352:1;32728:58:0;32799:45;32828:1;32832:2;32836:7;32799:20;:45::i;:::-;-1:-1:-1;;;;;32857:13:0;;;;;;:9;:13;;;;;:18;;32874:1;;32857:13;:18;;32874:1;;32857:18;:::i;:::-;;;;-1:-1:-1;;32886:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32886:21:0;-1:-1:-1;;;;;32886:21:0;;;;;;;;32925:33;;32886:16;;;32925:33;;32886:16;;32925:33;32584:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:160::-;715:20;;771:13;;764:21;754:32;;744:60;;800:1;797;790:12;744:60;650:160;;;:::o;815:247::-;874:6;927:2;915:9;906:7;902:23;898:32;895:52;;;943:1;940;933:12;895:52;982:9;969:23;1001:31;1026:5;1001:31;:::i;1327:388::-;1395:6;1403;1456:2;1444:9;1435:7;1431:23;1427:32;1424:52;;;1472:1;1469;1462:12;1424:52;1511:9;1498:23;1530:31;1555:5;1530:31;:::i;:::-;1580:5;-1:-1:-1;1637:2:1;1622:18;;1609:32;1650:33;1609:32;1650:33;:::i;:::-;1702:7;1692:17;;;1327:388;;;;;:::o;1720:456::-;1797:6;1805;1813;1866:2;1854:9;1845:7;1841:23;1837:32;1834:52;;;1882:1;1879;1872:12;1834:52;1921:9;1908:23;1940:31;1965:5;1940:31;:::i;:::-;1990:5;-1:-1:-1;2047:2:1;2032:18;;2019:32;2060:33;2019:32;2060:33;:::i;:::-;1720:456;;2112:7;;-1:-1:-1;;;2166:2:1;2151:18;;;;2138:32;;1720:456::o;2181:794::-;2276:6;2284;2292;2300;2353:3;2341:9;2332:7;2328:23;2324:33;2321:53;;;2370:1;2367;2360:12;2321:53;2409:9;2396:23;2428:31;2453:5;2428:31;:::i;:::-;2478:5;-1:-1:-1;2535:2:1;2520:18;;2507:32;2548:33;2507:32;2548:33;:::i;:::-;2600:7;-1:-1:-1;2654:2:1;2639:18;;2626:32;;-1:-1:-1;2709:2:1;2694:18;;2681:32;2736:18;2725:30;;2722:50;;;2768:1;2765;2758:12;2722:50;2791:22;;2844:4;2836:13;;2832:27;-1:-1:-1;2822:55:1;;2873:1;2870;2863:12;2822:55;2896:73;2961:7;2956:2;2943:16;2938:2;2934;2930:11;2896:73;:::i;:::-;2886:83;;;2181:794;;;;;;;:::o;2980:315::-;3045:6;3053;3106:2;3094:9;3085:7;3081:23;3077:32;3074:52;;;3122:1;3119;3112:12;3074:52;3161:9;3148:23;3180:31;3205:5;3180:31;:::i;:::-;3230:5;-1:-1:-1;3254:35:1;3285:2;3270:18;;3254:35;:::i;:::-;3244:45;;2980:315;;;;;:::o;3300:::-;3368:6;3376;3429:2;3417:9;3408:7;3404:23;3400:32;3397:52;;;3445:1;3442;3435:12;3397:52;3484:9;3471:23;3503:31;3528:5;3503:31;:::i;:::-;3553:5;3605:2;3590:18;;;;3577:32;;-1:-1:-1;;;3300:315:1:o;3620:180::-;3676:6;3729:2;3717:9;3708:7;3704:23;3700:32;3697:52;;;3745:1;3742;3735:12;3697:52;3768:26;3784:9;3768:26;:::i;3805:245::-;3863:6;3916:2;3904:9;3895:7;3891:23;3887:32;3884:52;;;3932:1;3929;3922:12;3884:52;3971:9;3958:23;3990:30;4014:5;3990:30;:::i;4055:249::-;4124:6;4177:2;4165:9;4156:7;4152:23;4148:32;4145:52;;;4193:1;4190;4183:12;4145:52;4225:9;4219:16;4244:30;4268:5;4244:30;:::i;4309:450::-;4378:6;4431:2;4419:9;4410:7;4406:23;4402:32;4399:52;;;4447:1;4444;4437:12;4399:52;4487:9;4474:23;4520:18;4512:6;4509:30;4506:50;;;4552:1;4549;4542:12;4506:50;4575:22;;4628:4;4620:13;;4616:27;-1:-1:-1;4606:55:1;;4657:1;4654;4647:12;4606:55;4680:73;4745:7;4740:2;4727:16;4722:2;4718;4714:11;4680:73;:::i;4764:180::-;4823:6;4876:2;4864:9;4855:7;4851:23;4847:32;4844:52;;;4892:1;4889;4882:12;4844:52;-1:-1:-1;4915:23:1;;4764:180;-1:-1:-1;4764:180:1:o;4949:257::-;4990:3;5028:5;5022:12;5055:6;5050:3;5043:19;5071:63;5127:6;5120:4;5115:3;5111:14;5104:4;5097:5;5093:16;5071:63;:::i;:::-;5188:2;5167:15;-1:-1:-1;;5163:29:1;5154:39;;;;5195:4;5150:50;;4949:257;-1:-1:-1;;4949:257:1:o;5211:1527::-;5435:3;5473:6;5467:13;5499:4;5512:51;5556:6;5551:3;5546:2;5538:6;5534:15;5512:51;:::i;:::-;5626:13;;5585:16;;;;5648:55;5626:13;5585:16;5670:15;;;5648:55;:::i;:::-;5792:13;;5725:20;;;5765:1;;5852;5874:18;;;;5927;;;;5954:93;;6032:4;6022:8;6018:19;6006:31;;5954:93;6095:2;6085:8;6082:16;6062:18;6059:40;6056:167;;;-1:-1:-1;;;6122:33:1;;6178:4;6175:1;6168:15;6208:4;6129:3;6196:17;6056:167;6239:18;6266:110;;;;6390:1;6385:328;;;;6232:481;;6266:110;-1:-1:-1;;6301:24:1;;6287:39;;6346:20;;;;-1:-1:-1;6266:110:1;;6385:328;16393:1;16386:14;;;16430:4;16417:18;;6480:1;6494:169;6508:8;6505:1;6502:15;6494:169;;;6590:14;;6575:13;;;6568:37;6633:16;;;;6525:10;;6494:169;;;6498:3;;6694:8;6687:5;6683:20;6676:27;;6232:481;-1:-1:-1;6729:3:1;;5211:1527;-1:-1:-1;;;;;;;;;;;5211:1527:1:o;7385:488::-;-1:-1:-1;;;;;7654:15:1;;;7636:34;;7706:15;;7701:2;7686:18;;7679:43;7753:2;7738:18;;7731:34;;;7801:3;7796:2;7781:18;;7774:31;;;7579:4;;7822:45;;7847:19;;7839:6;7822:45;:::i;:::-;7814:53;7385:488;-1:-1:-1;;;;;;7385:488:1:o;7878:632::-;8049:2;8101:21;;;8171:13;;8074:18;;;8193:22;;;8020:4;;8049:2;8272:15;;;;8246:2;8231:18;;;8020:4;8315:169;8329:6;8326:1;8323:13;8315:169;;;8390:13;;8378:26;;8459:15;;;;8424:12;;;;8351:1;8344:9;8315:169;;;-1:-1:-1;8501:3:1;;7878:632;-1:-1:-1;;;;;;7878:632:1:o;8707:219::-;8856:2;8845:9;8838:21;8819:4;8876:44;8916:2;8905:9;8901:18;8893:6;8876:44;:::i;9343:414::-;9545:2;9527:21;;;9584:2;9564:18;;;9557:30;9623:34;9618:2;9603:18;;9596:62;-1:-1:-1;;;9689:2:1;9674:18;;9667:48;9747:3;9732:19;;9343:414::o;13718:356::-;13920:2;13902:21;;;13939:18;;;13932:30;13998:34;13993:2;13978:18;;13971:62;14065:2;14050:18;;13718:356::o;15307:413::-;15509:2;15491:21;;;15548:2;15528:18;;;15521:30;15587:34;15582:2;15567:18;;15560:62;-1:-1:-1;;;15653:2:1;15638:18;;15631:47;15710:3;15695:19;;15307:413::o;16446:128::-;16486:3;16517:1;16513:6;16510:1;16507:13;16504:39;;;16523:18;;:::i;:::-;-1:-1:-1;16559:9:1;;16446:128::o;16579:120::-;16619:1;16645;16635:35;;16650:18;;:::i;:::-;-1:-1:-1;16684:9:1;;16579:120::o;16704:168::-;16744:7;16810:1;16806;16802:6;16798:14;16795:1;16792:21;16787:1;16780:9;16773:17;16769:45;16766:71;;;16817:18;;:::i;:::-;-1:-1:-1;16857:9:1;;16704:168::o;16877:125::-;16917:4;16945:1;16942;16939:8;16936:34;;;16950:18;;:::i;:::-;-1:-1:-1;16987:9:1;;16877:125::o;17007:258::-;17079:1;17089:113;17103:6;17100:1;17097:13;17089:113;;;17179:11;;;17173:18;17160:11;;;17153:39;17125:2;17118:10;17089:113;;;17220:6;17217:1;17214:13;17211:48;;;-1:-1:-1;;17255:1:1;17237:16;;17230:27;17007:258::o;17270:380::-;17349:1;17345:12;;;;17392;;;17413:61;;17467:4;17459:6;17455:17;17445:27;;17413:61;17520:2;17512:6;17509:14;17489:18;17486:38;17483:161;;;17566:10;17561:3;17557:20;17554:1;17547:31;17601:4;17598:1;17591:15;17629:4;17626:1;17619:15;17483:161;;17270:380;;;:::o;17655:135::-;17694:3;-1:-1:-1;;17715:17:1;;17712:43;;;17735:18;;:::i;:::-;-1:-1:-1;17782:1:1;17771:13;;17655:135::o;17795:112::-;17827:1;17853;17843:35;;17858:18;;:::i;:::-;-1:-1:-1;17892:9:1;;17795:112::o;17912:127::-;17973:10;17968:3;17964:20;17961:1;17954:31;18004:4;18001:1;17994:15;18028:4;18025:1;18018:15;18044:127;18105:10;18100:3;18096:20;18093:1;18086:31;18136:4;18133:1;18126:15;18160:4;18157:1;18150:15;18176:127;18237:10;18232:3;18228:20;18225:1;18218:31;18268:4;18265:1;18258:15;18292:4;18289:1;18282:15;18308:127;18369:10;18364:3;18360:20;18357:1;18350:31;18400:4;18397:1;18390:15;18424:4;18421:1;18414:15;18440:127;18501:10;18496:3;18492:20;18489:1;18482:31;18532:4;18529:1;18522:15;18556:4;18553:1;18546:15;18572:131;-1:-1:-1;;;;;18647:31:1;;18637:42;;18627:70;;18693:1;18690;18683:12;18708:131;-1:-1:-1;;;;;;18782:32:1;;18772:43;;18762:71;;18829:1;18826;18819:12
Swarm Source
ipfs://132b7d4c72bab3a3b6fc7a608a19b55312aa7eb76b569781da61ca46161008b8
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.