Overview
APE Balance
0.360000000000000002 APE
APE Value
$0.55 (@ $1.53/APE)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Royalty Info | 6436591 | 2 days ago | IN | 0 APE | 0.0008702 | ||||
Payout | 6435692 | 2 days ago | IN | 0 APE | 0.0008445 | ||||
Claim Mint Rewar... | 6435637 | 2 days ago | IN | 0 APE | 0.00164761 | ||||
Mint | 6435632 | 2 days ago | IN | 1 APE | 0.00625605 | ||||
Set Mint Price | 6435614 | 2 days ago | IN | 0 APE | 0.00099511 | ||||
Payout | 6435389 | 2 days ago | IN | 0 APE | 0.0008445 | ||||
Claim Mint Rewar... | 6435372 | 2 days ago | IN | 0 APE | 0.0014323 | ||||
Mint | 6435356 | 2 days ago | IN | 1 APE | 0.00625605 | ||||
Set Approval For... | 6435051 | 2 days ago | IN | 0 APE | 0.00117397 | ||||
Payout | 6434845 | 2 days ago | IN | 0 APE | 0.00148001 | ||||
Claim Mint Rewar... | 6434831 | 2 days ago | IN | 0 APE | 0.00165168 | ||||
Mint | 6434669 | 2 days ago | IN | 1 APE | 0.00691191 | ||||
Start Minting | 6434378 | 2 days ago | IN | 0 APE | 0.00115959 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Test
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2024-12-09 */ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.4; interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @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); } /** * @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; } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @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); } } } } 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); } } 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; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } 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); } 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(); } } pragma solidity ^0.8.0; library Counters { struct Counter { uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } interface IERC2981 is IERC165 { function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } contract Test is Ownable, ERC721, ERC721Enumerable, IERC2981 { using Strings for uint256; using Counters for Counters.Counter; // basic bool private _mintingStarted = false; string private _assetsBaseURI; uint256 private _decimalBase = 3; uint256 private _maxMintPerTx; uint256 private _maxSupply; uint256 private _mintPrice; uint256 private _reflection; // status Counters.Counter private _tokenIds; mapping(uint256 => address) private _originalMinters; uint256 private _totalDividend; mapping(uint256 => uint256) private _claimedDividends; // mint shares uint256 public _mintSharesTeam = 800; uint256 public _mintSharesReflect = 200; // balances uint256 private _balanceTeam; uint256 private _balanceReflections; // events event FundsDirectlyDeposited(address sender, uint256 amount); event FundsReceived(address sender, uint256 amount); event TokensMinted( uint256 currentSupply, uint256 maxSupply, uint256 reflectBalance ); event TokensBurned(uint256 currentSupply, uint256 maxSupply); event MintRewardsClaimed(uint256 claimedAmount, uint256 reflectBalance); uint256 private _royaltyFee = 500; address private _royaltyReceiver; constructor( string memory name, string memory symbol, uint256 maxSupply, uint256 maxMintPerTx, uint256 mintPrice, string memory assetsBaseURI, address royaltyReceiver ) ERC721(name, symbol) { _maxSupply = maxSupply; _mintPrice = mintPrice; _maxMintPerTx = maxMintPerTx; _assetsBaseURI = assetsBaseURI; _reflection = (_actualMintPrice() * _mintSharesReflect) / (10**_decimalBase); _royaltyReceiver = royaltyReceiver; } // --- fallback/received --- // receive() external payable { emit FundsReceived(_msgSender(), msg.value); } fallback() external payable { emit FundsDirectlyDeposited(_msgSender(), msg.value); } // Get the current tokens of owner function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } // --- overrides --- // function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable, IERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function _baseURI() internal view override(ERC721) returns (string memory) { return _assetsBaseURI; } // --- modifiers --- // modifier whenMintingAllowed() { require( _mintingStarted && _tokenIds.current() < _maxSupply, "Minting not started or sold-out" ); _; } // -- utils -- // function _actualMintPrice() internal view returns (uint256) { return _mintPrice * (10**(18 - _decimalBase)); } /** * @dev allocate funds based on mint shares percentage * _mintSharesTeam: to allocate toward different department spending * _mintSharesReflect: to allocate toward minting rewards */ function _splitMintFees(uint256 payment) internal { if (payment > 0) { uint256 reflect = (payment * _mintSharesReflect) / (10**_decimalBase); _balanceReflections += reflect; _balanceTeam += payment - reflect; } } /** * @dev all tokens belonging to a wallet address */ function _tokensByOwner(address tOwner) internal view returns (uint256[] memory) { uint256 balOf = balanceOf(tOwner); uint256[] memory tokens = new uint256[](balOf); for (uint256 i = 0; i < balOf; i++) { tokens[i] = tokenOfOwnerByIndex(tOwner, i); } return tokens; } /** * @dev calculate earned reflection minus claimed reflections */ function _allEarnedReflection(address tokenOwner) internal view returns (uint256) { uint256[] memory _tokens = _tokensByOwner(tokenOwner); if (_tokens.length == 0) { return 0; } uint256 _allEarned; uint256 _tEarned; for (uint256 i = 0; i < _tokens.length; i++) { _tEarned = _totalDividend - _claimedDividends[_tokens[i]]; if (_tEarned > 0) { _allEarned += _tEarned; } } return _allEarned; } /** * @dev claim & deduct mint rewards for an address */ function _claimAllMintRewards(address tokenOwner) internal { uint256[] memory _tokens = _tokensByOwner(tokenOwner); require(_tokens.length > 0, "Tokens not found in wallet"); uint256 _allEarned; uint256 _tEarned; for (uint256 i = 0; i < _tokens.length; i++) { _tEarned = _totalDividend - _claimedDividends[_tokens[i]]; if (_tEarned > 0) { _allEarned += _tEarned; _claimedDividends[_tokens[i]] += _tEarned; } } require(_allEarned > 0, "Insufficient balance"); _balanceReflections -= _allEarned; payable(_msgSender()).transfer(_allEarned); emit MintRewardsClaimed(_allEarned, _balanceReflections); } // --- owners call --- // /** * @dev paying only the portion allocated for team */ function payout() public onlyOwner { uint256 p = _balanceTeam; payable(0x4C40667198cA7d011941EcCBd2b42381bD69B141).transfer( (p * 100) / 100 ); _balanceTeam = 0; } function airdropMint(address recipient, uint256 amount) public onlyOwner { require( (_tokenIds.current()) + amount < _maxSupply, "Exceeds max supply" ); mintToken(recipient, amount, 0); } function airdrop(address[] calldata addresses, uint256[] calldata amounts) public onlyOwner { require(addresses.length > 0 && amounts.length == addresses.length); for (uint256 i = 0; i < addresses.length; i++) { mintToken(addresses[i], amounts[i], 0); } } function setAssetsBaseURI(string memory baseURI) public onlyOwner { require(bytes(baseURI).length > 0, "Empty value"); _assetsBaseURI = baseURI; } function setMintSharesTeam(uint256 _newMintSharesTeam) public onlyOwner { _mintSharesTeam = _newMintSharesTeam; } function setMintSharesReflect(uint256 _newMintSharesReflect) public onlyOwner { _mintSharesReflect = _newMintSharesReflect; } function setMaxMintPerTx(uint256 amount) public onlyOwner { _maxMintPerTx = amount; } function startMinting() public onlyOwner { _mintingStarted = true; } function setMaxSupply(uint256 max) public onlyOwner { require(max >= _tokenIds.current(), "Must be >= current supply"); _maxSupply = max; } function setMintPrice(uint256 price) public onlyOwner { _mintPrice = price; _reflection = (_actualMintPrice() * _mintSharesReflect) / (10**_decimalBase); } // --- token --- // /** * @dev actual mint function and starting dividend tracking for new token */ function mintToken( address recipient, uint256 amount, uint256 payment ) internal { _splitMintFees(payment); uint256 tokenId; for (uint256 i = 0; i < amount; i++) { _tokenIds.increment(); tokenId = _tokenIds.current(); _mint(recipient, tokenId); _originalMinters[tokenId] = recipient; _claimedDividends[tokenId] = _totalDividend; if (payment > 0) { _totalDividend += (_reflection / tokenId); } } emit TokensMinted(totalSupply(), _maxSupply, _balanceReflections); } // --- public --- // /** * @dev public mint function - just some safeguards for fair launch */ function mint(uint256 amount) public payable whenMintingAllowed { require( ((_tokenIds.current() + amount) <= _maxSupply) && (amount <= _maxMintPerTx) && (msg.value >= _actualMintPrice() * amount), "Mint failed" ); mintToken(_msgSender(), amount, msg.value); } /** * @dev only owner should be able to burn token */ function burn(uint256 tokenId) public { require( _isApprovedOrOwner(_msgSender(), tokenId), "Not owner nor approved" ); _burn(tokenId); emit TokensBurned(totalSupply(), _maxSupply); } function tokenURI(uint256 tokenId) public view virtual override(ERC721) returns (string memory) { require(_exists(tokenId), "Nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string( abi.encodePacked( abi.encodePacked(baseURI, tokenId.toString()), "" ) ) : ""; //.json } /** * @dev aggregated contract data */ function cData() public view returns ( bool, uint256, uint256, uint256, uint256, uint256, uint256, string memory ) { return ( _mintingStarted, _decimalBase, totalSupply(), _maxSupply, _mintPrice, _reflection, _maxMintPerTx, _assetsBaseURI ); } /** * @dev mint shares and distribution */ function cShares() public view returns (uint256, uint256) { return (_mintSharesReflect, _mintSharesTeam); } /** * @dev contract balances */ function cBalances() public view returns ( uint256, uint256, uint256 ) { return (address(this).balance, _balanceReflections, _balanceTeam); } /** * @dev account data */ function aData() public view returns ( uint256, uint256, uint256[] memory ) { return ( balanceOf(_msgSender()), _allEarnedReflection(_msgSender()), _tokensByOwner(_msgSender()) ); } function originalMinter(uint256 tokenId) public view returns (address) { require(_exists(tokenId), "Nonexistent token"); return _originalMinters[tokenId]; } /** * @dev claiming mint reflection rewards for an account */ function claimMintRewards() public { _claimAllMintRewards(_msgSender()); } function royaltyInfo(uint256 tokenId, uint256 salePrice) external view override returns (address receiver, uint256 royaltyAmount) { require(_exists(tokenId), "Nonexistent token"); uint256 royalty = (salePrice * _royaltyFee) / 10000; return (_royaltyReceiver, royalty); } function setRoyaltyInfo(address receiver, uint256 fee) public onlyOwner { require(fee <= 1000, "Fee too high"); // Max 10% _royaltyReceiver = receiver; _royaltyFee = fee; } }
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":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"string","name":"assetsBaseURI","type":"string"},{"internalType":"address","name":"royaltyReceiver","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":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsDirectlyDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectBalance","type":"uint256"}],"name":"MintRewardsClaimed","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":false,"internalType":"uint256","name":"currentSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"currentSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectBalance","type":"uint256"}],"name":"TokensMinted","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_mintSharesReflect","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintSharesTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdropMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cData","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimMintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"originalMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"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":"baseURI","type":"string"}],"name":"setAssetsBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMintSharesReflect","type":"uint256"}],"name":"setMintSharesReflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMintSharesTeam","type":"uint256"}],"name":"setMintSharesTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMinting","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600b805460ff191690556003600d5561032060165560c86017556101f4601a5534801562000030575f80fd5b506040516200355538038062003555833981016040819052620000539162000246565b8686620000603362000103565b60016200006e838262000399565b5060026200007d828262000399565b505050600f8590556010839055600e849055600c6200009d838262000399565b50600d54620000ae90600a62000574565b601754620000bb62000152565b620000c7919062000588565b620000d39190620005a2565b601155601b80546001600160a01b0319166001600160a01b039290921691909117905550620005d8945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f600d546012620001649190620005c2565b6200017190600a62000574565b60105462000180919062000588565b905090565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620001a9575f80fd5b81516001600160401b0380821115620001c657620001c662000185565b604051601f8301601f19908116603f01168101908282118183101715620001f157620001f162000185565b81604052838152602092508660208588010111156200020e575f80fd5b5f91505b8382101562000231578582018301518183018401529082019062000212565b5f602085830101528094505050505092915050565b5f805f805f805f60e0888a0312156200025d575f80fd5b87516001600160401b038082111562000274575f80fd5b620002828b838c0162000199565b985060208a015191508082111562000298575f80fd5b620002a68b838c0162000199565b975060408a0151965060608a0151955060808a0151945060a08a0151915080821115620002d1575f80fd5b50620002e08a828b0162000199565b60c08a015190935090506001600160a01b0381168114620002ff575f80fd5b8091505092959891949750929550565b600181811c908216806200032457607f821691505b6020821081036200034357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200039457805f5260205f20601f840160051c81016020851015620003705750805b601f840160051c820191505b8181101562000391575f81556001016200037c565b50505b505050565b81516001600160401b03811115620003b557620003b562000185565b620003cd81620003c684546200030f565b8462000349565b602080601f83116001811462000403575f8415620003eb5750858301515b5f19600386901b1c1916600185901b1785556200045d565b5f85815260208120601f198616915b82811015620004335788860151825594840194600190910190840162000412565b50858210156200045157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004b957815f19048211156200049d576200049d62000465565b80851615620004ab57918102915b93841c93908002906200047e565b509250929050565b5f82620004d1575060016200056e565b81620004df57505f6200056e565b8160018114620004f85760028114620005035762000523565b60019150506200056e565b60ff84111562000517576200051762000465565b50506001821b6200056e565b5060208310610133831016604e8410600b841016171562000548575081810a6200056e565b62000554838362000479565b805f19048211156200056a576200056a62000465565b0290505b92915050565b5f620005818383620004c1565b9392505050565b80820281158282048414176200056e576200056e62000465565b5f82620005bd57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156200056e576200056e62000465565b612f6f80620005e65f395ff3fe608060405260043610610254575f3560e01c806370a0823111610138578063a0712d68116100b5578063ca7d16e711610079578063ca7d16e71461074d578063e2e784d51461076c578063e985e9c51461078b578063f2fde38b146107d2578063f4a0a528146107f1578063f64e7294146108105761029e565b8063a0712d68146106c8578063a22cb465146106db578063a7a2e752146106fa578063b88d4fde1461070f578063c87b56dd1461072e5761029e565b80638da5cb5b116100fc5780638da5cb5b1461062d57806390b5324a1461064957806393912db21461066c57806395d89b41146106a05780639a65ea26146106b45761029e565b806370a0823114610592578063715018a6146105b157806375a03ae2146105c55780638462151c146105ed57806389ac1fa8146106195761029e565b80632f745c59116101d15780634f6ccce7116101955780634f6ccce7146104e3578063616cdb1e146105025780636352211e1461052157806363bd1d4a1461054057806367243482146105545780636f8b44b0146105735761029e565b80632f745c591461044057806342842e0e1461045f57806342966c681461047e5780634608b6791461049d5780634cf7a65e146104c45761029e565b806322ad06701161021857806322ad06701461039057806323b872dd146103af57806324ab6edc146103ce5780632a55205a146103e35780632d414ae5146104215761029e565b806301ffc9a7146102c557806306fdde03146102f9578063081812fc1461031a578063095ea7b31461035157806318160ddd146103725761029e565b3661029e577f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f335b604080516001600160a01b0390921682523460208301520160405180910390a1005b7f75756668f8561d6983cba1a336c6b5321e30f585d6a8cb31742a082b299409893361027c565b3480156102d0575f80fd5b506102e46102df36600461264e565b61082f565b60405190151581526020015b60405180910390f35b348015610304575f80fd5b5061030d610859565b6040516102f091906126b6565b348015610325575f80fd5b506103396103343660046126c8565b6108e9565b6040516001600160a01b0390911681526020016102f0565b34801561035c575f80fd5b5061037061036b3660046126fa565b610974565b005b34801561037d575f80fd5b506009545b6040519081526020016102f0565b34801561039b575f80fd5b506103706103aa3660046126fa565b610a88565b3480156103ba575f80fd5b506103706103c9366004612722565b610b19565b3480156103d9575f80fd5b5061038260175481565b3480156103ee575f80fd5b506104026103fd36600461275b565b610b4b565b604080516001600160a01b0390931683526020830191909152016102f0565b34801561042c575f80fd5b5061033961043b3660046126c8565b610ba7565b34801561044b575f80fd5b5061038261045a3660046126fa565b610be8565b34801561046a575f80fd5b50610370610479366004612722565b610c7c565b348015610489575f80fd5b506103706104983660046126c8565b610c96565b3480156104a8575f80fd5b50601754601654604080519283526020830191909152016102f0565b3480156104cf575f80fd5b506103706104de3660046126c8565b610d35565b3480156104ee575f80fd5b506103826104fd3660046126c8565b610d63565b34801561050d575f80fd5b5061037061051c3660046126c8565b610df3565b34801561052c575f80fd5b5061033961053b3660046126c8565b610e21565b34801561054b575f80fd5b50610370610e97565b34801561055f575f80fd5b5061037061056e3660046127bc565b610f1e565b34801561057e575f80fd5b5061037061058d3660046126c8565b610fbf565b34801561059d575f80fd5b506103826105ac366004612823565b61103f565b3480156105bc575f80fd5b506103706110c4565b3480156105d0575f80fd5b506105d96110f8565b6040516102f098979695949392919061283c565b3480156105f8575f80fd5b5061060c610607366004612823565b6111ce565b6040516102f091906128c4565b348015610624575f80fd5b50610370611281565b348015610638575f80fd5b505f546001600160a01b0316610339565b348015610654575f80fd5b5061065d61128a565b6040516102f0939291906128d6565b348015610677575f80fd5b506106856019546018544792565b604080519384526020840192909252908201526060016102f0565b3480156106ab575f80fd5b5061030d6112b4565b3480156106bf575f80fd5b506103706112c3565b6103706106d63660046126c8565b6112fb565b3480156106e6575f80fd5b506103706106f53660046128fd565b6113e9565b348015610705575f80fd5b5061038260165481565b34801561071a575f80fd5b506103706107293660046129bd565b6114ac565b348015610739575f80fd5b5061030d6107483660046126c8565b6114e4565b348015610758575f80fd5b506103706107673660046126c8565b611581565b348015610777575f80fd5b506103706107863660046126fa565b6115af565b348015610796575f80fd5b506102e46107a5366004612a34565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205460ff1690565b3480156107dd575f80fd5b506103706107ec366004612823565b61163f565b3480156107fc575f80fd5b5061037061080b3660046126c8565b6116d6565b34801561081b575f80fd5b5061037061082a366004612a65565b611737565b5f6001600160e01b0319821663152a902d60e11b14806108535750610853826117aa565b92915050565b60606001805461086890612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461089490612aaa565b80156108df5780601f106108b6576101008083540402835291602001916108df565b820191905f5260205f20905b8154815290600101906020018083116108c257829003601f168201915b5050505050905090565b5f6108f3826117ce565b6109595760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b505f908152600560205260409020546001600160a01b031690565b5f61097e82610e21565b9050806001600160a01b0316836001600160a01b0316036109eb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610950565b336001600160a01b0382161480610a075750610a0781336107a5565b610a795760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610950565b610a8383836117ea565b505050565b5f546001600160a01b03163314610ab15760405162461bcd60e51b815260040161095090612adc565b600f5481610abe60125490565b610ac89190612b25565b10610b0a5760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610950565b610b1582825f611857565b5050565b610b24335b82611945565b610b405760405162461bcd60e51b815260040161095090612b38565b610a83838383611a2c565b5f80610b56846117ce565b610b725760405162461bcd60e51b815260040161095090612b89565b5f612710601a5485610b849190612bb4565b610b8e9190612bdf565b601b546001600160a01b031693509150505b9250929050565b5f610bb1826117ce565b610bcd5760405162461bcd60e51b815260040161095090612b89565b505f908152601360205260409020546001600160a01b031690565b5f610bf28361103f565b8210610c545760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610950565b506001600160a01b03919091165f908152600760209081526040808320938352929052205490565b610a8383838360405180602001604052805f8152506114ac565b610c9f33610b1e565b610ce45760405162461bcd60e51b8152602060048201526016602482015275139bdd081bdddb995c881b9bdc88185c1c1c9bdd995960521b6044820152606401610950565b610ced81611bd3565b7f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d610d1760095490565b600f546040805192835260208301919091520160405180910390a150565b5f546001600160a01b03163314610d5e5760405162461bcd60e51b815260040161095090612adc565b601755565b5f610d6d60095490565b8210610dd05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610950565b60098281548110610de357610de3612bf2565b905f5260205f2001549050919050565b5f546001600160a01b03163314610e1c5760405162461bcd60e51b815260040161095090612adc565b600e55565b5f818152600360205260408120546001600160a01b0316806108535760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610950565b5f546001600160a01b03163314610ec05760405162461bcd60e51b815260040161095090612adc565b601854734c40667198ca7d011941eccbd2b42381bd69b1416108fc6064610ee78482612bb4565b610ef19190612bdf565b6040518115909202915f818181858888f19350505050158015610f16573d5f803e3d5ffd5b50505f601855565b5f546001600160a01b03163314610f475760405162461bcd60e51b815260040161095090612adc565b8215801590610f5557508083145b610f5d575f80fd5b5f5b83811015610fb857610fb0858583818110610f7c57610f7c612bf2565b9050602002016020810190610f919190612823565b848484818110610fa357610fa3612bf2565b905060200201355f611857565b600101610f5f565b5050505050565b5f546001600160a01b03163314610fe85760405162461bcd60e51b815260040161095090612adc565b60125481101561103a5760405162461bcd60e51b815260206004820152601960248201527f4d757374206265203e3d2063757272656e7420737570706c79000000000000006044820152606401610950565b600f55565b5f6001600160a01b0382166110a95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610950565b506001600160a01b03165f9081526004602052604090205490565b5f546001600160a01b031633146110ed5760405162461bcd60e51b815260040161095090612adc565b6110f65f611c75565b565b5f805f805f805f6060600b5f9054906101000a900460ff16600d5461111c60095490565b600f54601054601154600e54600c80805461113690612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461116290612aaa565b80156111ad5780601f10611184576101008083540402835291602001916111ad565b820191905f5260205f20905b81548152906001019060200180831161119057829003601f168201915b50505050509050975097509750975097509750975097509091929394959697565b60605f6111da8361103f565b9050805f036111fc57604080515f80825260208201909252905b509392505050565b5f8167ffffffffffffffff81111561121657611216612936565b60405190808252806020026020018201604052801561123f578160200160208202803683370190505b5090505f5b828110156111f4576112568582610be8565b82828151811061126857611268612bf2565b6020908102919091010152600101611244565b50919050565b6110f633611cc4565b5f8060606112973361103f565b6112a033611e82565b6112a933611f0b565b925092509250909192565b60606002805461086890612aaa565b5f546001600160a01b031633146112ec5760405162461bcd60e51b815260040161095090612adc565b600b805460ff19166001179055565b600b5460ff1680156113105750600f54601254105b61135c5760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e67206e6f742073746172746564206f7220736f6c642d6f7574006044820152606401610950565b600f548161136960125490565b6113739190612b25565b111580156113835750600e548111155b80156113a1575080611393611f98565b61139d9190612bb4565b3410155b6113db5760405162461bcd60e51b815260206004820152600b60248201526a135a5b9d0819985a5b195960aa1b6044820152606401610950565b6113e6338234611857565b50565b336001600160a01b038316036114415760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610950565b335f8181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114b63383611945565b6114d25760405162461bcd60e51b815260040161095090612b38565b6114de84848484611fc5565b50505050565b60606114ef826117ce565b61150b5760405162461bcd60e51b815260040161095090612b89565b5f611514611ff8565b90505f8151116115325760405180602001604052805f81525061157a565b8061153c84612007565b60405160200161154d929190612c06565b60408051601f198184030181529082905261156a91602001612c34565b6040516020818303038152906040525b9392505050565b5f546001600160a01b031633146115aa5760405162461bcd60e51b815260040161095090612adc565b601655565b5f546001600160a01b031633146115d85760405162461bcd60e51b815260040161095090612adc565b6103e88111156116195760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b6044820152606401610950565b601b80546001600160a01b0319166001600160a01b039390931692909217909155601a55565b5f546001600160a01b031633146116685760405162461bcd60e51b815260040161095090612adc565b6001600160a01b0381166116cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610950565b6113e681611c75565b5f546001600160a01b031633146116ff5760405162461bcd60e51b815260040161095090612adc565b6010819055600d5461171290600a612d2f565b60175461171d611f98565b6117279190612bb4565b6117319190612bdf565b60115550565b5f546001600160a01b031633146117605760405162461bcd60e51b815260040161095090612adc565b5f81511161179e5760405162461bcd60e51b815260206004820152600b60248201526a456d7074792076616c756560a81b6044820152606401610950565b600c610b158282612d7e565b5f6001600160e01b0319821663780e9d6360e01b1480610853575061085382612104565b5f908152600360205260409020546001600160a01b0316151590565b5f81815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061181e82610e21565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61186081612153565b5f805b838110156118ef57611879601280546001019055565b601254915061188885836121bc565b5f82815260136020908152604080832080546001600160a01b0319166001600160a01b038a1617905560145460159092529091205582156118e757816011546118d19190612bdf565b60145f8282546118e19190612b25565b90915550505b600101611863565b507f5f7a46b551ace06b6360654e8a6ab7ee12a9a178d1bcf1c3496ceeb4a2e7344d61191a60095490565b600f54601954604080519384526020840192909252908201526060015b60405180910390a150505050565b5f61194f826117ce565b6119b05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610950565b5f6119ba83610e21565b9050806001600160a01b0316846001600160a01b031614806119f55750836001600160a01b03166119ea846108e9565b6001600160a01b0316145b80611a2457506001600160a01b038082165f9081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a3f82610e21565b6001600160a01b031614611aa75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610950565b6001600160a01b038216611b095760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610950565b611b148383836122f8565b611b1e5f826117ea565b6001600160a01b0383165f908152600460205260408120805460019290611b46908490612e3e565b90915550506001600160a01b0382165f908152600460205260408120805460019290611b73908490612b25565b90915550505f8181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f611bdd82610e21565b9050611bea815f846122f8565b611bf45f836117ea565b6001600160a01b0381165f908152600460205260408120805460019290611c1c908490612e3e565b90915550505f8281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f611cce82611f0b565b90505f815111611d205760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e73206e6f7420666f756e6420696e2077616c6c65740000000000006044820152606401610950565b5f805f5b8351811015611dc05760155f858381518110611d4257611d42612bf2565b602002602001015181526020019081526020015f2054601454611d659190612e3e565b91508115611db857611d778284612b25565b92508160155f868481518110611d8f57611d8f612bf2565b602002602001015181526020019081526020015f205f828254611db29190612b25565b90915550505b600101611d24565b505f8211611e075760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610950565b8160195f828254611e189190612e3e565b9091555050604051339083156108fc029084905f818181858888f19350505050158015611e47573d5f803e3d5ffd5b506019546040805184815260208101929092527f4cee3a57766dc1a768f8146cb04eb9b73d8236e9441ca7b16495377d409b4b909101611937565b5f80611e8d83611f0b565b905080515f03611e9f57505f92915050565b5f805f5b8351811015611f015760155f858381518110611ec157611ec1612bf2565b602002602001015181526020019081526020015f2054601454611ee49190612e3e565b91508115611ef957611ef68284612b25565b92505b600101611ea3565b5090949350505050565b60605f611f178361103f565b90505f8167ffffffffffffffff811115611f3357611f33612936565b604051908082528060200260200182016040528015611f5c578160200160208202803683370190505b5090505f5b828110156111f457611f738582610be8565b828281518110611f8557611f85612bf2565b6020908102919091010152600101611f61565b5f600d546012611fa89190612e3e565b611fb390600a612d2f565b601054611fc09190612bb4565b905090565b611fd0848484611a2c565b611fdc84848484612303565b6114de5760405162461bcd60e51b815260040161095090612e51565b6060600c805461086890612aaa565b6060815f0361202d5750506040805180820190915260018152600360fc1b602082015290565b815f5b8115612056578061204081612ea3565b915061204f9050600a83612bdf565b9150612030565b5f8167ffffffffffffffff81111561207057612070612936565b6040519080825280601f01601f19166020018201604052801561209a576020820181803683370190505b5090505b8415611a24576120af600183612e3e565b91506120bc600a86612ebb565b6120c7906030612b25565b60f81b8183815181106120dc576120dc612bf2565b60200101906001600160f81b03191690815f1a9053506120fd600a86612bdf565b945061209e565b5f6001600160e01b031982166380ac58cd60e01b148061213457506001600160e01b03198216635b5e139f60e01b145b8061085357506301ffc9a760e01b6001600160e01b0319831614610853565b80156113e6575f600d54600a6121699190612d2f565b6017546121769084612bb4565b6121809190612bdf565b90508060195f8282546121939190612b25565b909155506121a390508183612e3e565b60185f8282546121b39190612b25565b90915550505050565b6001600160a01b0382166122125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610950565b61221b816117ce565b156122685760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610950565b6122735f83836122f8565b6001600160a01b0382165f90815260046020526040812080546001929061229b908490612b25565b90915550505f8181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b610a83838383612400565b5f6001600160a01b0384163b156123f557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612346903390899088908890600401612ece565b6020604051808303815f875af1925050508015612380575060408051601f3d908101601f1916820190925261237d91810190612f0a565b60015b6123db573d8080156123ad576040519150601f19603f3d011682016040523d82523d5f602084013e6123b2565b606091505b5080515f036123d35760405162461bcd60e51b815260040161095090612e51565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a24565b506001949350505050565b6001600160a01b03831661245a5761245581600980545f838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b61247d565b816001600160a01b0316836001600160a01b03161461247d5761247d83826124b7565b6001600160a01b03821661249457610a8381612550565b826001600160a01b0316826001600160a01b031614610a8357610a8382826125f7565b5f60016124c38461103f565b6124cd9190612e3e565b5f8381526008602052604090205490915080821461251e576001600160a01b0384165f9081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b505f9182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009545f9061256190600190612e3e565b5f838152600a60205260408120546009805493945090928490811061258857612588612bf2565b905f5260205f200154905080600983815481106125a7576125a7612bf2565b5f918252602080832090910192909255828152600a909152604080822084905585825281205560098054806125de576125de612f25565b600190038181905f5260205f20015f9055905550505050565b5f6126018361103f565b6001600160a01b039093165f908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160e01b0319811681146113e6575f80fd5b5f6020828403121561265e575f80fd5b813561157a81612639565b5f5b8381101561268357818101518382015260200161266b565b50505f910152565b5f81518084526126a2816020860160208601612669565b601f01601f19169290920160200192915050565b602081525f61157a602083018461268b565b5f602082840312156126d8575f80fd5b5035919050565b80356001600160a01b03811681146126f5575f80fd5b919050565b5f806040838503121561270b575f80fd5b612714836126df565b946020939093013593505050565b5f805f60608486031215612734575f80fd5b61273d846126df565b925061274b602085016126df565b9150604084013590509250925092565b5f806040838503121561276c575f80fd5b50508035926020909101359150565b5f8083601f84011261278b575f80fd5b50813567ffffffffffffffff8111156127a2575f80fd5b6020830191508360208260051b8501011115610ba0575f80fd5b5f805f80604085870312156127cf575f80fd5b843567ffffffffffffffff808211156127e6575f80fd5b6127f28883890161277b565b9096509450602087013591508082111561280a575f80fd5b506128178782880161277b565b95989497509550505050565b5f60208284031215612833575f80fd5b61157a826126df565b5f6101008a151583528960208401528860408401528760608401528660808401528560a08401528460c08401528060e084015261287b8184018561268b565b9b9a5050505050505050505050565b5f815180845260208085019450602084015f5b838110156128b95781518752958201959082019060010161289d565b509495945050505050565b602081525f61157a602083018461288a565b838152826020820152606060408201525f6128f4606083018461288a565b95945050505050565b5f806040838503121561290e575f80fd5b612917836126df565b91506020830135801515811461292b575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff8084111561296457612964612936565b604051601f8501601f19908116603f0116810190828211818310171561298c5761298c612936565b816040528093508581528686860111156129a4575f80fd5b858560208301375f602087830101525050509392505050565b5f805f80608085870312156129d0575f80fd5b6129d9856126df565b93506129e7602086016126df565b925060408501359150606085013567ffffffffffffffff811115612a09575f80fd5b8501601f81018713612a19575f80fd5b612a288782356020840161294a565b91505092959194509250565b5f8060408385031215612a45575f80fd5b612a4e836126df565b9150612a5c602084016126df565b90509250929050565b5f60208284031215612a75575f80fd5b813567ffffffffffffffff811115612a8b575f80fd5b8201601f81018413612a9b575f80fd5b611a248482356020840161294a565b600181811c90821680612abe57607f821691505b60208210810361127b57634e487b7160e01b5f52602260045260245ffd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561085357610853612b11565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b808202811582820484141761085357610853612b11565b634e487b7160e01b5f52601260045260245ffd5b5f82612bed57612bed612bcb565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8351612c17818460208801612669565b835190830190612c2b818360208801612669565b01949350505050565b5f8251612c45818460208701612669565b9190910192915050565b600181815b80851115612c8957815f1904821115612c6f57612c6f612b11565b80851615612c7c57918102915b93841c9390800290612c54565b509250929050565b5f82612c9f57506001610853565b81612cab57505f610853565b8160018114612cc15760028114612ccb57612ce7565b6001915050610853565b60ff841115612cdc57612cdc612b11565b50506001821b610853565b5060208310610133831016604e8410600b8410161715612d0a575081810a610853565b612d148383612c4f565b805f1904821115612d2757612d27612b11565b029392505050565b5f61157a8383612c91565b601f821115610a8357805f5260205f20601f840160051c81016020851015612d5f5750805b601f840160051c820191505b81811015610fb8575f8155600101612d6b565b815167ffffffffffffffff811115612d9857612d98612936565b612dac81612da68454612aaa565b84612d3a565b602080601f831160018114612ddf575f8415612dc85750858301515b5f19600386901b1c1916600185901b178555612e36565b5f85815260208120601f198616915b82811015612e0d57888601518255948401946001909101908401612dee565b5085821015612e2a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8181038181111561085357610853612b11565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f60018201612eb457612eb4612b11565b5060010190565b5f82612ec957612ec9612bcb565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90612f009083018461268b565b9695505050505050565b5f60208284031215612f1a575f80fd5b815161157a81612639565b634e487b7160e01b5f52603160045260245ffdfea264697066735822122093fd623d06cd874f376278188e7a7c96ef0ec6037dde20384b43641456ac3a0d64736f6c6343000818003300000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000160000000000000000000000000051761efde31b42e63570114ec3f461c9b8c2133000000000000000000000000000000000000000000000000000000000000000354524500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003545245000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047465737400000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405260043610610254575f3560e01c806370a0823111610138578063a0712d68116100b5578063ca7d16e711610079578063ca7d16e71461074d578063e2e784d51461076c578063e985e9c51461078b578063f2fde38b146107d2578063f4a0a528146107f1578063f64e7294146108105761029e565b8063a0712d68146106c8578063a22cb465146106db578063a7a2e752146106fa578063b88d4fde1461070f578063c87b56dd1461072e5761029e565b80638da5cb5b116100fc5780638da5cb5b1461062d57806390b5324a1461064957806393912db21461066c57806395d89b41146106a05780639a65ea26146106b45761029e565b806370a0823114610592578063715018a6146105b157806375a03ae2146105c55780638462151c146105ed57806389ac1fa8146106195761029e565b80632f745c59116101d15780634f6ccce7116101955780634f6ccce7146104e3578063616cdb1e146105025780636352211e1461052157806363bd1d4a1461054057806367243482146105545780636f8b44b0146105735761029e565b80632f745c591461044057806342842e0e1461045f57806342966c681461047e5780634608b6791461049d5780634cf7a65e146104c45761029e565b806322ad06701161021857806322ad06701461039057806323b872dd146103af57806324ab6edc146103ce5780632a55205a146103e35780632d414ae5146104215761029e565b806301ffc9a7146102c557806306fdde03146102f9578063081812fc1461031a578063095ea7b31461035157806318160ddd146103725761029e565b3661029e577f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f335b604080516001600160a01b0390921682523460208301520160405180910390a1005b7f75756668f8561d6983cba1a336c6b5321e30f585d6a8cb31742a082b299409893361027c565b3480156102d0575f80fd5b506102e46102df36600461264e565b61082f565b60405190151581526020015b60405180910390f35b348015610304575f80fd5b5061030d610859565b6040516102f091906126b6565b348015610325575f80fd5b506103396103343660046126c8565b6108e9565b6040516001600160a01b0390911681526020016102f0565b34801561035c575f80fd5b5061037061036b3660046126fa565b610974565b005b34801561037d575f80fd5b506009545b6040519081526020016102f0565b34801561039b575f80fd5b506103706103aa3660046126fa565b610a88565b3480156103ba575f80fd5b506103706103c9366004612722565b610b19565b3480156103d9575f80fd5b5061038260175481565b3480156103ee575f80fd5b506104026103fd36600461275b565b610b4b565b604080516001600160a01b0390931683526020830191909152016102f0565b34801561042c575f80fd5b5061033961043b3660046126c8565b610ba7565b34801561044b575f80fd5b5061038261045a3660046126fa565b610be8565b34801561046a575f80fd5b50610370610479366004612722565b610c7c565b348015610489575f80fd5b506103706104983660046126c8565b610c96565b3480156104a8575f80fd5b50601754601654604080519283526020830191909152016102f0565b3480156104cf575f80fd5b506103706104de3660046126c8565b610d35565b3480156104ee575f80fd5b506103826104fd3660046126c8565b610d63565b34801561050d575f80fd5b5061037061051c3660046126c8565b610df3565b34801561052c575f80fd5b5061033961053b3660046126c8565b610e21565b34801561054b575f80fd5b50610370610e97565b34801561055f575f80fd5b5061037061056e3660046127bc565b610f1e565b34801561057e575f80fd5b5061037061058d3660046126c8565b610fbf565b34801561059d575f80fd5b506103826105ac366004612823565b61103f565b3480156105bc575f80fd5b506103706110c4565b3480156105d0575f80fd5b506105d96110f8565b6040516102f098979695949392919061283c565b3480156105f8575f80fd5b5061060c610607366004612823565b6111ce565b6040516102f091906128c4565b348015610624575f80fd5b50610370611281565b348015610638575f80fd5b505f546001600160a01b0316610339565b348015610654575f80fd5b5061065d61128a565b6040516102f0939291906128d6565b348015610677575f80fd5b506106856019546018544792565b604080519384526020840192909252908201526060016102f0565b3480156106ab575f80fd5b5061030d6112b4565b3480156106bf575f80fd5b506103706112c3565b6103706106d63660046126c8565b6112fb565b3480156106e6575f80fd5b506103706106f53660046128fd565b6113e9565b348015610705575f80fd5b5061038260165481565b34801561071a575f80fd5b506103706107293660046129bd565b6114ac565b348015610739575f80fd5b5061030d6107483660046126c8565b6114e4565b348015610758575f80fd5b506103706107673660046126c8565b611581565b348015610777575f80fd5b506103706107863660046126fa565b6115af565b348015610796575f80fd5b506102e46107a5366004612a34565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205460ff1690565b3480156107dd575f80fd5b506103706107ec366004612823565b61163f565b3480156107fc575f80fd5b5061037061080b3660046126c8565b6116d6565b34801561081b575f80fd5b5061037061082a366004612a65565b611737565b5f6001600160e01b0319821663152a902d60e11b14806108535750610853826117aa565b92915050565b60606001805461086890612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461089490612aaa565b80156108df5780601f106108b6576101008083540402835291602001916108df565b820191905f5260205f20905b8154815290600101906020018083116108c257829003601f168201915b5050505050905090565b5f6108f3826117ce565b6109595760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b505f908152600560205260409020546001600160a01b031690565b5f61097e82610e21565b9050806001600160a01b0316836001600160a01b0316036109eb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610950565b336001600160a01b0382161480610a075750610a0781336107a5565b610a795760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610950565b610a8383836117ea565b505050565b5f546001600160a01b03163314610ab15760405162461bcd60e51b815260040161095090612adc565b600f5481610abe60125490565b610ac89190612b25565b10610b0a5760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610950565b610b1582825f611857565b5050565b610b24335b82611945565b610b405760405162461bcd60e51b815260040161095090612b38565b610a83838383611a2c565b5f80610b56846117ce565b610b725760405162461bcd60e51b815260040161095090612b89565b5f612710601a5485610b849190612bb4565b610b8e9190612bdf565b601b546001600160a01b031693509150505b9250929050565b5f610bb1826117ce565b610bcd5760405162461bcd60e51b815260040161095090612b89565b505f908152601360205260409020546001600160a01b031690565b5f610bf28361103f565b8210610c545760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610950565b506001600160a01b03919091165f908152600760209081526040808320938352929052205490565b610a8383838360405180602001604052805f8152506114ac565b610c9f33610b1e565b610ce45760405162461bcd60e51b8152602060048201526016602482015275139bdd081bdddb995c881b9bdc88185c1c1c9bdd995960521b6044820152606401610950565b610ced81611bd3565b7f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d610d1760095490565b600f546040805192835260208301919091520160405180910390a150565b5f546001600160a01b03163314610d5e5760405162461bcd60e51b815260040161095090612adc565b601755565b5f610d6d60095490565b8210610dd05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610950565b60098281548110610de357610de3612bf2565b905f5260205f2001549050919050565b5f546001600160a01b03163314610e1c5760405162461bcd60e51b815260040161095090612adc565b600e55565b5f818152600360205260408120546001600160a01b0316806108535760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610950565b5f546001600160a01b03163314610ec05760405162461bcd60e51b815260040161095090612adc565b601854734c40667198ca7d011941eccbd2b42381bd69b1416108fc6064610ee78482612bb4565b610ef19190612bdf565b6040518115909202915f818181858888f19350505050158015610f16573d5f803e3d5ffd5b50505f601855565b5f546001600160a01b03163314610f475760405162461bcd60e51b815260040161095090612adc565b8215801590610f5557508083145b610f5d575f80fd5b5f5b83811015610fb857610fb0858583818110610f7c57610f7c612bf2565b9050602002016020810190610f919190612823565b848484818110610fa357610fa3612bf2565b905060200201355f611857565b600101610f5f565b5050505050565b5f546001600160a01b03163314610fe85760405162461bcd60e51b815260040161095090612adc565b60125481101561103a5760405162461bcd60e51b815260206004820152601960248201527f4d757374206265203e3d2063757272656e7420737570706c79000000000000006044820152606401610950565b600f55565b5f6001600160a01b0382166110a95760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610950565b506001600160a01b03165f9081526004602052604090205490565b5f546001600160a01b031633146110ed5760405162461bcd60e51b815260040161095090612adc565b6110f65f611c75565b565b5f805f805f805f6060600b5f9054906101000a900460ff16600d5461111c60095490565b600f54601054601154600e54600c80805461113690612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461116290612aaa565b80156111ad5780601f10611184576101008083540402835291602001916111ad565b820191905f5260205f20905b81548152906001019060200180831161119057829003601f168201915b50505050509050975097509750975097509750975097509091929394959697565b60605f6111da8361103f565b9050805f036111fc57604080515f80825260208201909252905b509392505050565b5f8167ffffffffffffffff81111561121657611216612936565b60405190808252806020026020018201604052801561123f578160200160208202803683370190505b5090505f5b828110156111f4576112568582610be8565b82828151811061126857611268612bf2565b6020908102919091010152600101611244565b50919050565b6110f633611cc4565b5f8060606112973361103f565b6112a033611e82565b6112a933611f0b565b925092509250909192565b60606002805461086890612aaa565b5f546001600160a01b031633146112ec5760405162461bcd60e51b815260040161095090612adc565b600b805460ff19166001179055565b600b5460ff1680156113105750600f54601254105b61135c5760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e67206e6f742073746172746564206f7220736f6c642d6f7574006044820152606401610950565b600f548161136960125490565b6113739190612b25565b111580156113835750600e548111155b80156113a1575080611393611f98565b61139d9190612bb4565b3410155b6113db5760405162461bcd60e51b815260206004820152600b60248201526a135a5b9d0819985a5b195960aa1b6044820152606401610950565b6113e6338234611857565b50565b336001600160a01b038316036114415760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610950565b335f8181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114b63383611945565b6114d25760405162461bcd60e51b815260040161095090612b38565b6114de84848484611fc5565b50505050565b60606114ef826117ce565b61150b5760405162461bcd60e51b815260040161095090612b89565b5f611514611ff8565b90505f8151116115325760405180602001604052805f81525061157a565b8061153c84612007565b60405160200161154d929190612c06565b60408051601f198184030181529082905261156a91602001612c34565b6040516020818303038152906040525b9392505050565b5f546001600160a01b031633146115aa5760405162461bcd60e51b815260040161095090612adc565b601655565b5f546001600160a01b031633146115d85760405162461bcd60e51b815260040161095090612adc565b6103e88111156116195760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b6044820152606401610950565b601b80546001600160a01b0319166001600160a01b039390931692909217909155601a55565b5f546001600160a01b031633146116685760405162461bcd60e51b815260040161095090612adc565b6001600160a01b0381166116cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610950565b6113e681611c75565b5f546001600160a01b031633146116ff5760405162461bcd60e51b815260040161095090612adc565b6010819055600d5461171290600a612d2f565b60175461171d611f98565b6117279190612bb4565b6117319190612bdf565b60115550565b5f546001600160a01b031633146117605760405162461bcd60e51b815260040161095090612adc565b5f81511161179e5760405162461bcd60e51b815260206004820152600b60248201526a456d7074792076616c756560a81b6044820152606401610950565b600c610b158282612d7e565b5f6001600160e01b0319821663780e9d6360e01b1480610853575061085382612104565b5f908152600360205260409020546001600160a01b0316151590565b5f81815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061181e82610e21565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61186081612153565b5f805b838110156118ef57611879601280546001019055565b601254915061188885836121bc565b5f82815260136020908152604080832080546001600160a01b0319166001600160a01b038a1617905560145460159092529091205582156118e757816011546118d19190612bdf565b60145f8282546118e19190612b25565b90915550505b600101611863565b507f5f7a46b551ace06b6360654e8a6ab7ee12a9a178d1bcf1c3496ceeb4a2e7344d61191a60095490565b600f54601954604080519384526020840192909252908201526060015b60405180910390a150505050565b5f61194f826117ce565b6119b05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610950565b5f6119ba83610e21565b9050806001600160a01b0316846001600160a01b031614806119f55750836001600160a01b03166119ea846108e9565b6001600160a01b0316145b80611a2457506001600160a01b038082165f9081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a3f82610e21565b6001600160a01b031614611aa75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610950565b6001600160a01b038216611b095760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610950565b611b148383836122f8565b611b1e5f826117ea565b6001600160a01b0383165f908152600460205260408120805460019290611b46908490612e3e565b90915550506001600160a01b0382165f908152600460205260408120805460019290611b73908490612b25565b90915550505f8181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f611bdd82610e21565b9050611bea815f846122f8565b611bf45f836117ea565b6001600160a01b0381165f908152600460205260408120805460019290611c1c908490612e3e565b90915550505f8281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f611cce82611f0b565b90505f815111611d205760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e73206e6f7420666f756e6420696e2077616c6c65740000000000006044820152606401610950565b5f805f5b8351811015611dc05760155f858381518110611d4257611d42612bf2565b602002602001015181526020019081526020015f2054601454611d659190612e3e565b91508115611db857611d778284612b25565b92508160155f868481518110611d8f57611d8f612bf2565b602002602001015181526020019081526020015f205f828254611db29190612b25565b90915550505b600101611d24565b505f8211611e075760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610950565b8160195f828254611e189190612e3e565b9091555050604051339083156108fc029084905f818181858888f19350505050158015611e47573d5f803e3d5ffd5b506019546040805184815260208101929092527f4cee3a57766dc1a768f8146cb04eb9b73d8236e9441ca7b16495377d409b4b909101611937565b5f80611e8d83611f0b565b905080515f03611e9f57505f92915050565b5f805f5b8351811015611f015760155f858381518110611ec157611ec1612bf2565b602002602001015181526020019081526020015f2054601454611ee49190612e3e565b91508115611ef957611ef68284612b25565b92505b600101611ea3565b5090949350505050565b60605f611f178361103f565b90505f8167ffffffffffffffff811115611f3357611f33612936565b604051908082528060200260200182016040528015611f5c578160200160208202803683370190505b5090505f5b828110156111f457611f738582610be8565b828281518110611f8557611f85612bf2565b6020908102919091010152600101611f61565b5f600d546012611fa89190612e3e565b611fb390600a612d2f565b601054611fc09190612bb4565b905090565b611fd0848484611a2c565b611fdc84848484612303565b6114de5760405162461bcd60e51b815260040161095090612e51565b6060600c805461086890612aaa565b6060815f0361202d5750506040805180820190915260018152600360fc1b602082015290565b815f5b8115612056578061204081612ea3565b915061204f9050600a83612bdf565b9150612030565b5f8167ffffffffffffffff81111561207057612070612936565b6040519080825280601f01601f19166020018201604052801561209a576020820181803683370190505b5090505b8415611a24576120af600183612e3e565b91506120bc600a86612ebb565b6120c7906030612b25565b60f81b8183815181106120dc576120dc612bf2565b60200101906001600160f81b03191690815f1a9053506120fd600a86612bdf565b945061209e565b5f6001600160e01b031982166380ac58cd60e01b148061213457506001600160e01b03198216635b5e139f60e01b145b8061085357506301ffc9a760e01b6001600160e01b0319831614610853565b80156113e6575f600d54600a6121699190612d2f565b6017546121769084612bb4565b6121809190612bdf565b90508060195f8282546121939190612b25565b909155506121a390508183612e3e565b60185f8282546121b39190612b25565b90915550505050565b6001600160a01b0382166122125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610950565b61221b816117ce565b156122685760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610950565b6122735f83836122f8565b6001600160a01b0382165f90815260046020526040812080546001929061229b908490612b25565b90915550505f8181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b610a83838383612400565b5f6001600160a01b0384163b156123f557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612346903390899088908890600401612ece565b6020604051808303815f875af1925050508015612380575060408051601f3d908101601f1916820190925261237d91810190612f0a565b60015b6123db573d8080156123ad576040519150601f19603f3d011682016040523d82523d5f602084013e6123b2565b606091505b5080515f036123d35760405162461bcd60e51b815260040161095090612e51565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a24565b506001949350505050565b6001600160a01b03831661245a5761245581600980545f838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b61247d565b816001600160a01b0316836001600160a01b03161461247d5761247d83826124b7565b6001600160a01b03821661249457610a8381612550565b826001600160a01b0316826001600160a01b031614610a8357610a8382826125f7565b5f60016124c38461103f565b6124cd9190612e3e565b5f8381526008602052604090205490915080821461251e576001600160a01b0384165f9081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b505f9182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009545f9061256190600190612e3e565b5f838152600a60205260408120546009805493945090928490811061258857612588612bf2565b905f5260205f200154905080600983815481106125a7576125a7612bf2565b5f918252602080832090910192909255828152600a909152604080822084905585825281205560098054806125de576125de612f25565b600190038181905f5260205f20015f9055905550505050565b5f6126018361103f565b6001600160a01b039093165f908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160e01b0319811681146113e6575f80fd5b5f6020828403121561265e575f80fd5b813561157a81612639565b5f5b8381101561268357818101518382015260200161266b565b50505f910152565b5f81518084526126a2816020860160208601612669565b601f01601f19169290920160200192915050565b602081525f61157a602083018461268b565b5f602082840312156126d8575f80fd5b5035919050565b80356001600160a01b03811681146126f5575f80fd5b919050565b5f806040838503121561270b575f80fd5b612714836126df565b946020939093013593505050565b5f805f60608486031215612734575f80fd5b61273d846126df565b925061274b602085016126df565b9150604084013590509250925092565b5f806040838503121561276c575f80fd5b50508035926020909101359150565b5f8083601f84011261278b575f80fd5b50813567ffffffffffffffff8111156127a2575f80fd5b6020830191508360208260051b8501011115610ba0575f80fd5b5f805f80604085870312156127cf575f80fd5b843567ffffffffffffffff808211156127e6575f80fd5b6127f28883890161277b565b9096509450602087013591508082111561280a575f80fd5b506128178782880161277b565b95989497509550505050565b5f60208284031215612833575f80fd5b61157a826126df565b5f6101008a151583528960208401528860408401528760608401528660808401528560a08401528460c08401528060e084015261287b8184018561268b565b9b9a5050505050505050505050565b5f815180845260208085019450602084015f5b838110156128b95781518752958201959082019060010161289d565b509495945050505050565b602081525f61157a602083018461288a565b838152826020820152606060408201525f6128f4606083018461288a565b95945050505050565b5f806040838503121561290e575f80fd5b612917836126df565b91506020830135801515811461292b575f80fd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff8084111561296457612964612936565b604051601f8501601f19908116603f0116810190828211818310171561298c5761298c612936565b816040528093508581528686860111156129a4575f80fd5b858560208301375f602087830101525050509392505050565b5f805f80608085870312156129d0575f80fd5b6129d9856126df565b93506129e7602086016126df565b925060408501359150606085013567ffffffffffffffff811115612a09575f80fd5b8501601f81018713612a19575f80fd5b612a288782356020840161294a565b91505092959194509250565b5f8060408385031215612a45575f80fd5b612a4e836126df565b9150612a5c602084016126df565b90509250929050565b5f60208284031215612a75575f80fd5b813567ffffffffffffffff811115612a8b575f80fd5b8201601f81018413612a9b575f80fd5b611a248482356020840161294a565b600181811c90821680612abe57607f821691505b60208210810361127b57634e487b7160e01b5f52602260045260245ffd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561085357610853612b11565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b808202811582820484141761085357610853612b11565b634e487b7160e01b5f52601260045260245ffd5b5f82612bed57612bed612bcb565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8351612c17818460208801612669565b835190830190612c2b818360208801612669565b01949350505050565b5f8251612c45818460208701612669565b9190910192915050565b600181815b80851115612c8957815f1904821115612c6f57612c6f612b11565b80851615612c7c57918102915b93841c9390800290612c54565b509250929050565b5f82612c9f57506001610853565b81612cab57505f610853565b8160018114612cc15760028114612ccb57612ce7565b6001915050610853565b60ff841115612cdc57612cdc612b11565b50506001821b610853565b5060208310610133831016604e8410600b8410161715612d0a575081810a610853565b612d148383612c4f565b805f1904821115612d2757612d27612b11565b029392505050565b5f61157a8383612c91565b601f821115610a8357805f5260205f20601f840160051c81016020851015612d5f5750805b601f840160051c820191505b81811015610fb8575f8155600101612d6b565b815167ffffffffffffffff811115612d9857612d98612936565b612dac81612da68454612aaa565b84612d3a565b602080601f831160018114612ddf575f8415612dc85750858301515b5f19600386901b1c1916600185901b178555612e36565b5f85815260208120601f198616915b82811015612e0d57888601518255948401946001909101908401612dee565b5085821015612e2a57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8181038181111561085357610853612b11565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f60018201612eb457612eb4612b11565b5060010190565b5f82612ec957612ec9612bcb565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90612f009083018461268b565b9695505050505050565b5f60208284031215612f1a575f80fd5b815161157a81612639565b634e487b7160e01b5f52603160045260245ffdfea264697066735822122093fd623d06cd874f376278188e7a7c96ef0ec6037dde20384b43641456ac3a0d64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000160000000000000000000000000051761efde31b42e63570114ec3f461c9b8c2133000000000000000000000000000000000000000000000000000000000000000354524500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003545245000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047465737400000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): TRE
Arg [1] : symbol (string): TRE
Arg [2] : maxSupply (uint256): 5000
Arg [3] : maxMintPerTx (uint256): 100
Arg [4] : mintPrice (uint256): 100
Arg [5] : assetsBaseURI (string): test
Arg [6] : royaltyReceiver (address): 0x051761EfdE31B42E63570114eC3F461C9b8C2133
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [6] : 000000000000000000000000051761efde31b42e63570114ec3f461c9b8c2133
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 5452450000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 5452450000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [12] : 7465737400000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44455:12808:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46442:38;892:10;46456:12;46442:38;;;-1:-1:-1;;;;;206:32:1;;;188:51;;46470:9:0;270:2:1;255:18;;248:34;161:18;46442:38:0;;;;;;;44455:12808;;46540:47;892:10;46563:12;812:98;47483:309;;;;;;;;;;-1:-1:-1;47483:309:0;;;;;:::i;:::-;;:::i;:::-;;;844:14:1;;837:22;819:41;;807:2;792:18;47483:309:0;;;;;;;;23452:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25145:308::-;;;;;;;;;;-1:-1:-1;25145:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1976:32:1;;;1958:51;;1946:2;1931:18;25145:308:0;1812:203:1;24668:411:0;;;;;;;;;;-1:-1:-1;24668:411:0;;;;;:::i;:::-;;:::i;:::-;;37940:113;;;;;;;;;;-1:-1:-1;38028:10:0;:17;37940:113;;;2603:25:1;;;2591:2;2576:18;37940:113:0;2457:177:1;51113:245:0;;;;;;;;;;-1:-1:-1;51113:245:0;;;;;:::i;:::-;;:::i;26204:376::-;;;;;;;;;;-1:-1:-1;26204:376:0;;;;;:::i;:::-;;:::i;45146:39::-;;;;;;;;;;;;;;;;56705:343;;;;;;;;;;-1:-1:-1;56705:343:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;206:32:1;;;188:51;;270:2;255:18;;248:34;;;;161:18;56705:343:0;14:274:1;56343:179:0;;;;;;;;;;-1:-1:-1;56343:179:0;;;;;:::i;:::-;;:::i;37521:343::-;;;;;;;;;;-1:-1:-1;37521:343:0;;;;;:::i;:::-;;:::i;26651:185::-;;;;;;;;;;-1:-1:-1;26651:185:0;;;;;:::i;:::-;;:::i;54090:252::-;;;;;;;;;;-1:-1:-1;54090:252:0;;;;;:::i;:::-;;:::i;55547:121::-;;;;;;;;;;-1:-1:-1;55624:18:0;;55644:15;;55547:121;;;3399:25:1;;;3455:2;3440:18;;3433:34;;;;3372:18;55547:121:0;3225:248:1;52009:162:0;;;;;;;;;;-1:-1:-1;52009:162:0;;;;;:::i;:::-;;:::i;38130:320::-;;;;;;;;;;-1:-1:-1;38130:320:0;;;;;:::i;:::-;;:::i;52179:99::-;;;;;;;;;;-1:-1:-1;52179:99:0;;;;;:::i;:::-;;:::i;23059:326::-;;;;;;;;;;-1:-1:-1;23059:326:0;;;;;:::i;:::-;;:::i;50888:217::-;;;;;;;;;;;;;:::i;51366:323::-;;;;;;;;;;-1:-1:-1;51366:323:0;;;;;:::i;:::-;;:::i;52376:162::-;;;;;;;;;;-1:-1:-1;52376:162:0;;;;;:::i;:::-;;:::i;22702:295::-;;;;;;;;;;-1:-1:-1;22702:295:0;;;;;:::i;:::-;;:::i;2614:94::-;;;;;;;;;;;;;:::i;54964:515::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;46643:572::-;;;;;;;;;;-1:-1:-1;46643:572:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;56609:88::-;;;;;;;;;;;;;:::i;1963:87::-;;;;;;;;;;-1:-1:-1;2009:7:0;2036:6;-1:-1:-1;;;;;2036:6:0;1963:87;;56012:323;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;55725:235::-;;;;;;;;;;;;55918:19;;55939:12;;55895:21;;55725:235;;;;;6897:25:1;;;6953:2;6938:18;;6931:34;;;;6981:18;;;6974:34;6885:2;6870:18;55725:235:0;6695:319:1;23621:104:0;;;;;;;;;;;;;:::i;52286:82::-;;;;;;;;;;;;;:::i;53659:352::-;;;;;;:::i;:::-;;:::i;25525:327::-;;;;;;;;;;-1:-1:-1;25525:327:0;;;;;:::i;:::-;;:::i;45103:36::-;;;;;;;;;;;;;;;;26907:365;;;;;;;;;;-1:-1:-1;26907:365:0;;;;;:::i;:::-;;:::i;54350:550::-;;;;;;;;;;-1:-1:-1;54350:550:0;;;;;:::i;:::-;;:::i;51874:127::-;;;;;;;;;;-1:-1:-1;51874:127:0;;;;;:::i;:::-;;:::i;57056:204::-;;;;;;;;;;-1:-1:-1;57056:204:0;;;;;:::i;:::-;;:::i;25923:214::-;;;;;;;;;;-1:-1:-1;25923:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;26094:25:0;;;26065:4;26094:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25923:214;2863:229;;;;;;;;;;-1:-1:-1;2863:229:0;;;;;:::i;:::-;;:::i;52546:204::-;;;;;;;;;;-1:-1:-1;52546:204:0;;;;;:::i;:::-;;:::i;51697:169::-;;;;;;;;;;-1:-1:-1;51697:169:0;;;;;:::i;:::-;;:::i;47483:309::-;47648:4;-1:-1:-1;;;;;;47690:41:0;;-1:-1:-1;;;47690:41:0;;:94;;;47748:36;47772:11;47748:23;:36::i;:::-;47670:114;47483:309;-1:-1:-1;;47483:309:0:o;23452:100::-;23506:13;23539:5;23532:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23452:100;:::o;25145:308::-;25266:7;25313:16;25321:7;25313;:16::i;:::-;25291:110;;;;-1:-1:-1;;;25291:110:0;;10117:2:1;25291:110:0;;;10099:21:1;10156:2;10136:18;;;10129:30;10195:34;10175:18;;;10168:62;-1:-1:-1;;;10246:18:1;;;10239:42;10298:19;;25291:110:0;;;;;;;;;-1:-1:-1;25421:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25421:24:0;;25145:308::o;24668:411::-;24749:13;24765:23;24780:7;24765:14;:23::i;:::-;24749:39;;24813:5;-1:-1:-1;;;;;24807:11:0;:2;-1:-1:-1;;;;;24807:11:0;;24799:57;;;;-1:-1:-1;;;24799:57:0;;10530:2:1;24799:57:0;;;10512:21:1;10569:2;10549:18;;;10542:30;10608:34;10588:18;;;10581:62;-1:-1:-1;;;10659:18:1;;;10652:31;10700:19;;24799:57:0;10328:397:1;24799:57:0;892:10;-1:-1:-1;;;;;24891:21:0;;;;:62;;-1:-1:-1;24916:37:0;24933:5;892:10;25923:214;:::i;24916:37::-;24869:168;;;;-1:-1:-1;;;24869:168:0;;10932:2:1;24869:168:0;;;10914:21:1;10971:2;10951:18;;;10944:30;11010:34;10990:18;;;10983:62;11081:26;11061:18;;;11054:54;11125:19;;24869:168:0;10730:420:1;24869:168:0;25050:21;25059:2;25063:7;25050:8;:21::i;:::-;24738:341;24668:411;;:::o;51113:245::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;51252:10:::1;;51243:6;51220:19;:9;43762:14:::0;;43670:114;51220:19:::1;51219:30;;;;:::i;:::-;:43;51197:111;;;::::0;-1:-1:-1;;;51197:111:0;;11980:2:1;51197:111:0::1;::::0;::::1;11962:21:1::0;12019:2;11999:18;;;11992:30;-1:-1:-1;;;12038:18:1;;;12031:48;12096:18;;51197:111:0::1;11778:342:1::0;51197:111:0::1;51319:31;51329:9;51340:6;51348:1;51319:9;:31::i;:::-;51113:245:::0;;:::o;26204:376::-;26413:41;892:10;26432:12;26446:7;26413:18;:41::i;:::-;26391:140;;;;-1:-1:-1;;;26391:140:0;;;;;;;:::i;:::-;26544:28;26554:4;26560:2;26564:7;26544:9;:28::i;56705:343::-;56830:16;56848:21;56895:16;56903:7;56895;:16::i;:::-;56887:46;;;;-1:-1:-1;;;56887:46:0;;;;;;;:::i;:::-;56944:15;56990:5;56975:11;;56963:9;:23;;;;:::i;:::-;56962:33;;;;:::i;:::-;57014:16;;-1:-1:-1;;;;;57014:16:0;;-1:-1:-1;56944:51:0;-1:-1:-1;;56705:343:0;;;;;;:::o;56343:179::-;56405:7;56433:16;56441:7;56433;:16::i;:::-;56425:46;;;;-1:-1:-1;;;56425:46:0;;;;;;;:::i;:::-;-1:-1:-1;56489:25:0;;;;:16;:25;;;;;;-1:-1:-1;;;;;56489:25:0;;56343:179::o;37521:343::-;37663:7;37718:23;37735:5;37718:16;:23::i;:::-;37710:5;:31;37688:124;;;;-1:-1:-1;;;37688:124:0;;13521:2:1;37688:124:0;;;13503:21:1;13560:2;13540:18;;;13533:30;13599:34;13579:18;;;13572:62;-1:-1:-1;;;13650:18:1;;;13643:41;13701:19;;37688:124:0;13319:407:1;37688:124:0;-1:-1:-1;;;;;;37830:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;37521:343::o;26651:185::-;26789:39;26806:4;26812:2;26816:7;26789:39;;;;;;;;;;;;:16;:39::i;54090:252::-;54161:41;892:10;54180:12;812:98;54161:41;54139:113;;;;-1:-1:-1;;;54139:113:0;;13933:2:1;54139:113:0;;;13915:21:1;13972:2;13952:18;;;13945:30;-1:-1:-1;;;13991:18:1;;;13984:52;14053:18;;54139:113:0;13731:346:1;54139:113:0;54263:14;54269:7;54263:5;:14::i;:::-;54295:39;54308:13;38028:10;:17;;37940:113;54308:13;54323:10;;54295:39;;;3399:25:1;;;3455:2;3440:18;;3433:34;;;;3372:18;54295:39:0;;;;;;;54090:252;:::o;52009:162::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;52121:18:::1;:42:::0;52009:162::o;38130:320::-;38250:7;38305:30;38028:10;:17;;37940:113;38305:30;38297:5;:38;38275:132;;;;-1:-1:-1;;;38275:132:0;;14284:2:1;38275:132:0;;;14266:21:1;14323:2;14303:18;;;14296:30;14362:34;14342:18;;;14335:62;-1:-1:-1;;;14413:18:1;;;14406:42;14465:19;;38275:132:0;14082:408:1;38275:132:0;38425:10;38436:5;38425:17;;;;;;;;:::i;:::-;;;;;;;;;38418:24;;38130:320;;;:::o;52179:99::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;52248:13:::1;:22:::0;52179:99::o;23059:326::-;23176:7;23217:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23217:16:0;;23244:110;;;;-1:-1:-1;;;23244:110:0;;14829:2:1;23244:110:0;;;14811:21:1;14868:2;14848:18;;;14841:30;14907:34;14887:18;;;14880:62;-1:-1:-1;;;14958:18:1;;;14951:39;15007:19;;23244:110:0;14627:405:1;50888:217:0;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;50946:12:::1;::::0;50977:42:::1;50969:101;51056:3;51045:7;50946:12:::0;51056:3;51045:7:::1;:::i;:::-;51044:15;;;;:::i;:::-;50969:101;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;51096:1:0::1;51081:12;:16:::0;50888:217::o;51366:323::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;51500:20;;;;;:58:::1;;-1:-1:-1::0;51524:34:0;;::::1;51500:58;51492:67;;;::::0;::::1;;51575:9;51570:112;51590:20:::0;;::::1;51570:112;;;51632:38;51642:9;;51652:1;51642:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;51656:7;;51664:1;51656:10;;;;;;;:::i;:::-;;;;;;;51668:1;51632:9;:38::i;:::-;51612:3;;51570:112;;;;51366:323:::0;;;;:::o;52376:162::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;52454:9:::1;43762:14:::0;52447:3:::1;:26;;52439:64;;;::::0;-1:-1:-1;;;52439:64:0;;15239:2:1;52439:64:0::1;::::0;::::1;15221:21:1::0;15278:2;15258:18;;;15251:30;15317:27;15297:18;;;15290:55;15362:18;;52439:64:0::1;15037:349:1::0;52439:64:0::1;52514:10;:16:::0;52376:162::o;22702:295::-;22819:7;-1:-1:-1;;;;;22866:19:0;;22844:111;;;;-1:-1:-1;;;22844:111:0;;15593:2:1;22844:111:0;;;15575:21:1;15632:2;15612:18;;;15605:30;15671:34;15651:18;;;15644:62;-1:-1:-1;;;15722:18:1;;;15715:40;15772:19;;22844:111:0;15391:406:1;22844:111:0;-1:-1:-1;;;;;;22973:16:0;;;;;:9;:16;;;;;;;22702:295::o;2614:94::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;2679:21:::1;2697:1;2679:9;:21::i;:::-;2614:94::o:0;54964:515::-;55043:4;55062:7;55084;55106;55128;55150;55172;55194:13;55257:15;;;;;;;;;;;55287:12;;55314:13;38028:10;:17;;37940:113;55314:13;55342:10;;55367;;55392:11;;55418:13;;55446:14;55235:236;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54964:515;;;;;;;;:::o;46643:572::-;46732:16;46766:18;46787:17;46797:6;46787:9;:17::i;:::-;46766:38;;46819:10;46833:1;46819:15;46815:393;;46896:16;;;46910:1;46896:16;;;;;;;;;;;-1:-1:-1;46889:23:0;46643:572;-1:-1:-1;;;46643:572:0:o;46815:393::-;46945:23;46985:10;46971:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46971:25:0;;46945:51;;47011:13;47039:130;47063:10;47055:5;:18;47039:130;;;47119:34;47139:6;47147:5;47119:19;:34::i;:::-;47103:6;47110:5;47103:13;;;;;;;;:::i;:::-;;;;;;;;;;:50;47075:7;;47039:130;;46815:393;46755:460;46643:572;;;:::o;56609:88::-;56655:34;892:10;56655:20;:34::i;56012:323::-;56091:7;;56135:16;56201:23;892:10;22702:295;:::i;56201:23::-;56239:34;892:10;56239:20;:34::i;:::-;56288:28;892:10;56288:14;:28::i;:::-;56179:148;;;;;;56012:323;;;:::o;23621:104::-;23677:13;23710:7;23703:14;;;;;:::i;52286:82::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;52338:15:::1;:22:::0;;-1:-1:-1;;52338:22:0::1;52356:4;52338:22;::::0;;52286:82::o;53659:352::-;48015:15;;;;:51;;;;-1:-1:-1;48056:10:0;;48034:9;43762:14;48034:32;48015:51;47993:132;;;;-1:-1:-1;;;47993:132:0;;16004:2:1;47993:132:0;;;15986:21:1;16043:2;16023:18;;;16016:30;16082:33;16062:18;;;16055:61;16133:18;;47993:132:0;15802:355:1;47993:132:0;53791:10:::1;;53780:6;53758:19;:9;43762:14:::0;;43670:114;53758:19:::1;:28;;;;:::i;:::-;53757:44;;53756:92;;;;;53834:13;;53824:6;:23;;53756:92;:155;;;;;53904:6;53883:18;:16;:18::i;:::-;:27;;;;:::i;:::-;53870:9;:40;;53756:155;53734:216;;;::::0;-1:-1:-1;;;53734:216:0;;16364:2:1;53734:216:0::1;::::0;::::1;16346:21:1::0;16403:2;16383:18;;;16376:30;-1:-1:-1;;;16422:18:1;;;16415:41;16473:18;;53734:216:0::1;16162:335:1::0;53734:216:0::1;53961:42;892:10:::0;53985:6:::1;53993:9;53961;:42::i;:::-;53659:352:::0;:::o;25525:327::-;892:10;-1:-1:-1;;;;;25660:24:0;;;25652:62;;;;-1:-1:-1;;;25652:62:0;;16704:2:1;25652:62:0;;;16686:21:1;16743:2;16723:18;;;16716:30;16782:27;16762:18;;;16755:55;16827:18;;25652:62:0;16502:349:1;25652:62:0;892:10;25727:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25727:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25727:53:0;;;;;;;;;;25796:48;;819:41:1;;;25727:42:0;;892:10;25796:48;;792:18:1;25796:48:0;;;;;;;25525:327;;:::o;26907:365::-;27096:41;892:10;27129:7;27096:18;:41::i;:::-;27074:140;;;;-1:-1:-1;;;27074:140:0;;;;;;;:::i;:::-;27225:39;27239:4;27245:2;27249:7;27258:5;27225:13;:39::i;:::-;26907:365;;;;:::o;54350:550::-;54476:13;54515:16;54523:7;54515;:16::i;:::-;54507:46;;;;-1:-1:-1;;;54507:46:0;;;;;;;:::i;:::-;54564:21;54588:10;:8;:10::i;:::-;54564:34;;54653:1;54635:7;54629:21;:25;:255;;;;;;;;;;;;;;;;;54763:7;54772:18;:7;:16;:18::i;:::-;54746:45;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;54746:45:0;;;;;;;;;;54703:140;;54746:45;54703:140;;:::i;:::-;;;;;;;;;;;;;54629:255;54609:275;54350:550;-1:-1:-1;;;54350:550:0:o;51874:127::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;51957:15:::1;:36:::0;51874:127::o;57056:204::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;57154:4:::1;57147:3;:11;;57139:36;;;::::0;-1:-1:-1;;;57139:36:0;;17952:2:1;57139:36:0::1;::::0;::::1;17934:21:1::0;17991:2;17971:18;;;17964:30;-1:-1:-1;;;18010:18:1;;;18003:42;18062:18;;57139:36:0::1;17750:336:1::0;57139:36:0::1;57197:16;:27:::0;;-1:-1:-1;;;;;;57197:27:0::1;-1:-1:-1::0;;;;;57197:27:0;;;::::1;::::0;;;::::1;::::0;;;57235:11:::1;:17:::0;57056:204::o;2863:229::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2966:22:0;::::1;2944:110;;;::::0;-1:-1:-1;;;2944:110:0;;18293:2:1;2944:110:0::1;::::0;::::1;18275:21:1::0;18332:2;18312:18;;;18305:30;18371:34;18351:18;;;18344:62;-1:-1:-1;;;18422:18:1;;;18415:36;18468:19;;2944:110:0::1;18091:402:1::0;2944:110:0::1;3065:19;3075:8;3065:9;:19::i;52546:204::-:0;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;52611:10:::1;:18:::0;;;52729:12:::1;::::0;52725:16:::1;::::0;:2:::1;:16;:::i;:::-;52689:18;;52668;:16;:18::i;:::-;:39;;;;:::i;:::-;52667:75;;;;:::i;:::-;52640:11;:102:::0;-1:-1:-1;52546:204:0:o;51697:169::-;2009:7;2036:6;-1:-1:-1;;;;;2036:6:0;892:10;2183:23;2175:68;;;;-1:-1:-1;;;2175:68:0;;;;;;;:::i;:::-;51806:1:::1;51788:7;51782:21;:25;51774:49;;;::::0;-1:-1:-1;;;51774:49:0;;20068:2:1;51774:49:0::1;::::0;::::1;20050:21:1::0;20107:2;20087:18;;;20080:30;-1:-1:-1;;;20126:18:1;;;20119:41;20177:18;;51774:49:0::1;19866:335:1::0;51774:49:0::1;51834:14;:24;51851:7:::0;51834:14;:24:::1;:::i;37137:300::-:0;37284:4;-1:-1:-1;;;;;;37326:50:0;;-1:-1:-1;;;37326:50:0;;:103;;;37393:36;37417:11;37393:23;:36::i;28819:127::-;28884:4;28908:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28908:16:0;:30;;;28819:127::o;32942:174::-;33017:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33017:29:0;-1:-1:-1;;;;;33017:29:0;;;;;;;;:24;;33071:23;33017:24;33071:14;:23::i;:::-;-1:-1:-1;;;;;33062:46:0;;;;;;;;;;;32942:174;;:::o;52880:654::-;53005:23;53020:7;53005:14;:23::i;:::-;53039:15;;53065:386;53089:6;53085:1;:10;53065:386;;;53117:21;:9;43881:19;;43899:1;43881:19;;;43792:127;53117:21;53163:9;43762:14;53153:29;;53197:25;53203:9;53214:7;53197:5;:25::i;:::-;53237;;;;:16;:25;;;;;;;;:37;;-1:-1:-1;;;;;;53237:37:0;-1:-1:-1;;;;;53237:37:0;;;;;53318:14;;53289:17;:26;;;;;;:43;53351:11;;53347:93;;53416:7;53402:11;;:21;;;;:::i;:::-;53383:14;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;53347:93:0;53097:3;;53065:386;;;;53466:60;53479:13;38028:10;:17;;37940:113;53479:13;53494:10;;53506:19;;53466:60;;;6897:25:1;;;6953:2;6938:18;;6931:34;;;;6981:18;;;6974:34;6885:2;6870:18;53466:60:0;;;;;;;;52994:540;52880:654;;;:::o;29113:452::-;29242:4;29286:16;29294:7;29286;:16::i;:::-;29264:110;;;;-1:-1:-1;;;29264:110:0;;22578:2:1;29264:110:0;;;22560:21:1;22617:2;22597:18;;;22590:30;22656:34;22636:18;;;22629:62;-1:-1:-1;;;22707:18:1;;;22700:42;22759:19;;29264:110:0;22376:408:1;29264:110:0;29385:13;29401:23;29416:7;29401:14;:23::i;:::-;29385:39;;29454:5;-1:-1:-1;;;;;29443:16:0;:7;-1:-1:-1;;;;;29443:16:0;;:64;;;;29500:7;-1:-1:-1;;;;;29476:31:0;:20;29488:7;29476:11;:20::i;:::-;-1:-1:-1;;;;;29476:31:0;;29443:64;:113;;;-1:-1:-1;;;;;;26094:25:0;;;26065:4;26094:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29524:32;29435:122;29113:452;-1:-1:-1;;;;29113:452:0:o;32209:615::-;32382:4;-1:-1:-1;;;;;32355:31:0;:23;32370:7;32355:14;:23::i;:::-;-1:-1:-1;;;;;32355:31:0;;32333:122;;;;-1:-1:-1;;;32333:122:0;;22991:2:1;32333:122:0;;;22973:21:1;23030:2;23010:18;;;23003:30;23069:34;23049:18;;;23042:62;-1:-1:-1;;;23120:18:1;;;23113:39;23169:19;;32333:122:0;22789:405:1;32333:122:0;-1:-1:-1;;;;;32474:16:0;;32466:65;;;;-1:-1:-1;;;32466:65:0;;23401:2:1;32466:65:0;;;23383:21:1;23440:2;23420:18;;;23413:30;23479:34;23459:18;;;23452:62;-1:-1:-1;;;23530:18:1;;;23523:34;23574:19;;32466:65:0;23199:400:1;32466:65:0;32544:39;32565:4;32571:2;32575:7;32544:20;:39::i;:::-;32648:29;32665:1;32669:7;32648:8;:29::i;:::-;-1:-1:-1;;;;;32690:15:0;;;;;;:9;:15;;;;;:20;;32709:1;;32690:15;:20;;32709:1;;32690:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32721:13:0;;;;;;:9;:13;;;;;:18;;32738:1;;32721:13;:18;;32738:1;;32721:18;:::i;:::-;;;;-1:-1:-1;;32750:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32750:21:0;-1:-1:-1;;;;;32750:21:0;;;;;;;;;32789:27;;32750:16;;32789:27;;;;;;;32209:615;;;:::o;31512:360::-;31572:13;31588:23;31603:7;31588:14;:23::i;:::-;31572:39;;31624:48;31645:5;31660:1;31664:7;31624:20;:48::i;:::-;31713:29;31730:1;31734:7;31713:8;:29::i;:::-;-1:-1:-1;;;;;31755:16:0;;;;;;:9;:16;;;;;:21;;31775:1;;31755:16;:21;;31775:1;;31755:21;:::i;:::-;;;;-1:-1:-1;;31794:16:0;;;;:7;:16;;;;;;31787:23;;-1:-1:-1;;;;;;31787:23:0;;;31828:36;31802:7;;31794:16;-1:-1:-1;;;;;31828:36:0;;;;;31794:16;;31828:36;31561:311;31512:360;:::o;3100:173::-;3156:16;3175:6;;-1:-1:-1;;;;;3192:17:0;;;-1:-1:-1;;;;;;3192:17:0;;;;;;3225:40;;3175:6;;;;;;;3225:40;;3156:16;3225:40;3145:128;3100:173;:::o;50000:771::-;50070:24;50097:26;50112:10;50097:14;:26::i;:::-;50070:53;;50159:1;50142:7;:14;:18;50134:57;;;;-1:-1:-1;;;50134:57:0;;23939:2:1;50134:57:0;;;23921:21:1;23978:2;23958:18;;;23951:30;24017:28;23997:18;;;23990:56;24063:18;;50134:57:0;23737:350:1;50134:57:0;50204:18;50233:16;50265:9;50260:278;50284:7;:14;50280:1;:18;50260:278;;;50348:17;:29;50366:7;50374:1;50366:10;;;;;;;;:::i;:::-;;;;;;;50348:29;;;;;;;;;;;;50331:14;;:46;;;;:::i;:::-;50320:57;-1:-1:-1;50396:12:0;;50392:135;;50429:22;50443:8;50429:22;;:::i;:::-;;;50503:8;50470:17;:29;50488:7;50496:1;50488:10;;;;;;;;:::i;:::-;;;;;;;50470:29;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;50392:135:0;50300:3;;50260:278;;;;50571:1;50558:10;:14;50550:47;;;;-1:-1:-1;;;50550:47:0;;24294:2:1;50550:47:0;;;24276:21:1;24333:2;24313:18;;;24306:30;-1:-1:-1;;;24352:18:1;;;24345:50;24412:18;;50550:47:0;24092:344:1;50550:47:0;50631:10;50608:19;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;50652:42:0;;892:10;;50652:42;;;;;50683:10;;50652:42;;;;50683:10;892;50652:42;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50743:19:0;;50712:51;;;3399:25:1;;;3455:2;3440:18;;3433:34;;;;50712:51:0;;3372:18:1;50712:51:0;3225:248:1;49350:568:0;49450:7;49475:24;49502:26;49517:10;49502:14;:26::i;:::-;49475:53;;49543:7;:14;49561:1;49543:19;49539:60;;-1:-1:-1;49586:1:0;;49350:568;-1:-1:-1;;49350:568:0:o;49539:60::-;49609:18;49638:16;49670:9;49665:218;49689:7;:14;49685:1;:18;49665:218;;;49753:17;:29;49771:7;49779:1;49771:10;;;;;;;;:::i;:::-;;;;;;;49753:29;;;;;;;;;;;;49736:14;;:46;;;;:::i;:::-;49725:57;-1:-1:-1;49801:12:0;;49797:75;;49834:22;49848:8;49834:22;;:::i;:::-;;;49797:75;49705:3;;49665:218;;;-1:-1:-1;49900:10:0;;49350:568;-1:-1:-1;;;;49350:568:0:o;48896:361::-;48986:16;49020:13;49036:17;49046:6;49036:9;:17::i;:::-;49020:33;;49064:23;49104:5;49090:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49090:20:0;;49064:46;;49126:9;49121:105;49145:5;49141:1;:9;49121:105;;;49184:30;49204:6;49212:1;49184:19;:30::i;:::-;49172:6;49179:1;49172:9;;;;;;;;:::i;:::-;;;;;;;;;;:42;49152:3;;49121:105;;48176:124;48227:7;48278:12;;48273:2;:17;;;;:::i;:::-;48268:23;;:2;:23;:::i;:::-;48254:10;;:38;;;;:::i;:::-;48247:45;;48176:124;:::o;28154:352::-;28311:28;28321:4;28327:2;28331:7;28311:9;:28::i;:::-;28372:48;28395:4;28401:2;28405:7;28414:5;28372:22;:48::i;:::-;28350:148;;;;-1:-1:-1;;;28350:148:0;;;;;;;:::i;47800:115::-;47860:13;47893:14;47886:21;;;;;:::i;18326:723::-;18382:13;18603:5;18612:1;18603:10;18599:53;;-1:-1:-1;;18630:10:0;;;;;;;;;;;;-1:-1:-1;;;18630:10:0;;;;;18326:723::o;18599:53::-;18677:5;18662:12;18718:78;18725:9;;18718:78;;18751:8;;;;:::i;:::-;;-1:-1:-1;18774:10:0;;-1:-1:-1;18782:2:0;18774:10;;:::i;:::-;;;18718:78;;;18806:19;18838:6;18828:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18828:17:0;;18806:39;;18856:154;18863:10;;18856:154;;18890:11;18900:1;18890:11;;:::i;:::-;;-1:-1:-1;18959:10:0;18967:2;18959:5;:10;:::i;:::-;18946:24;;:2;:24;:::i;:::-;18933:39;;18916:6;18923;18916:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;18916:56:0;;;;;;;;-1:-1:-1;18987:11:0;18996:2;18987:11;;:::i;:::-;;;18856:154;;22283:355;22430:4;-1:-1:-1;;;;;;22472:40:0;;-1:-1:-1;;;22472:40:0;;:105;;-1:-1:-1;;;;;;;22529:48:0;;-1:-1:-1;;;22529:48:0;22472:105;:158;;;-1:-1:-1;;;;;;;;;;21001:40:0;;;22594:36;20842:207;48523:293;48588:11;;48584:225;;48616:15;48689:12;;48685:2;:16;;;;:::i;:::-;48645:18;;48635:28;;:7;:28;:::i;:::-;48634:68;;;;:::i;:::-;48616:86;;48742:7;48719:19;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;48780:17:0;;-1:-1:-1;48790:7:0;48780;:17;:::i;:::-;48764:12;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;;48523:293:0;:::o;30901:382::-;-1:-1:-1;;;;;30981:16:0;;30973:61;;;;-1:-1:-1;;;30973:61:0;;25319:2:1;30973:61:0;;;25301:21:1;;;25338:18;;;25331:30;25397:34;25377:18;;;25370:62;25449:18;;30973:61:0;25117:356:1;30973:61:0;31054:16;31062:7;31054;:16::i;:::-;31053:17;31045:58;;;;-1:-1:-1;;;31045:58:0;;25680:2:1;31045:58:0;;;25662:21:1;25719:2;25699:18;;;25692:30;25758;25738:18;;;25731:58;25806:18;;31045:58:0;25478:352:1;31045:58:0;31116:45;31145:1;31149:2;31153:7;31116:20;:45::i;:::-;-1:-1:-1;;;;;31174:13:0;;;;;;:9;:13;;;;;:18;;31191:1;;31174:13;:18;;31191:1;;31174:18;:::i;:::-;;;;-1:-1:-1;;31203:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31203:21:0;-1:-1:-1;;;;;31203:21:0;;;;;;;;31242:33;;31203:16;;;31242:33;;31203:16;;31242:33;30901:382;;:::o;47252:223::-;47422:45;47449:4;47455:2;47459:7;47422:26;:45::i;33681:980::-;33836:4;-1:-1:-1;;;;;33857:13:0;;10598:20;10646:8;33853:801;;33910:175;;-1:-1:-1;;;33910:175:0;;-1:-1:-1;;;;;33910:36:0;;;;;:175;;892:10;;34004:4;;34031:7;;34061:5;;33910:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33910:175:0;;;;;;;;-1:-1:-1;;33910:175:0;;;;;;;;;;;;:::i;:::-;;;33889:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34268:6;:13;34285:1;34268:18;34264:320;;34311:108;;-1:-1:-1;;;34311:108:0;;;;;;;:::i;34264:320::-;34534:6;34528:13;34519:6;34515:2;34511:15;34504:38;33889:710;-1:-1:-1;;;;;;34149:51:0;-1:-1:-1;;;34149:51:0;;-1:-1:-1;34142:58:0;;33853:801;-1:-1:-1;34638:4:0;33681:980;;;;;;:::o;39063:589::-;-1:-1:-1;;;;;39269:18:0;;39265:187;;39304:40;39336:7;40479:10;:17;;40452:24;;;;:15;:24;;;;;:44;;;40507:24;;;;;;;;;;;;40375:164;39304:40;39265:187;;;39374:2;-1:-1:-1;;;;;39366:10:0;:4;-1:-1:-1;;;;;39366:10:0;;39362:90;;39393:47;39426:4;39432:7;39393:32;:47::i;:::-;-1:-1:-1;;;;;39466:16:0;;39462:183;;39499:45;39536:7;39499:36;:45::i;39462:183::-;39572:4;-1:-1:-1;;;;;39566:10:0;:2;-1:-1:-1;;;;;39566:10:0;;39562:83;;39593:40;39621:2;39625:7;39593:27;:40::i;41166:1002::-;41446:22;41496:1;41471:22;41488:4;41471:16;:22::i;:::-;:26;;;;:::i;:::-;41508:18;41529:26;;;:17;:26;;;;;;41446:51;;-1:-1:-1;41662:28:0;;;41658:328;;-1:-1:-1;;;;;41729:18:0;;41707:19;41729:18;;;:12;:18;;;;;;;;:34;;;;;;;;;41780:30;;;;;;:44;;;41897:30;;:17;:30;;;;;:43;;;41658:328;-1:-1:-1;42082:26:0;;;;:17;:26;;;;;;;;42075:33;;;-1:-1:-1;;;;;42126:18:0;;;;;:12;:18;;;;;:34;;;;;;;42119:41;41166:1002::o;42463:1079::-;42741:10;:17;42716:22;;42741:21;;42761:1;;42741:21;:::i;:::-;42773:18;42794:24;;;:15;:24;;;;;;43167:10;:26;;42716:46;;-1:-1:-1;42794:24:0;;42716:46;;43167:26;;;;;;:::i;:::-;;;;;;;;;43145:48;;43231:11;43206:10;43217;43206:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;43311:28;;;:15;:28;;;;;;;:41;;;43483:24;;;;;43476:31;43518:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;42534:1008;;;42463:1079;:::o;39953:221::-;40038:14;40055:20;40072:2;40055:16;:20::i;:::-;-1:-1:-1;;;;;40086:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;40131:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;39953:221:0:o;293:131:1:-;-1:-1:-1;;;;;;367:32:1;;357:43;;347:71;;414:1;411;404:12;429:245;487:6;540:2;528:9;519:7;515:23;511:32;508:52;;;556:1;553;546:12;508:52;595:9;582:23;614:30;638:5;614:30;:::i;871:250::-;956:1;966:113;980:6;977:1;974:13;966:113;;;1056:11;;;1050:18;1037:11;;;1030:39;1002:2;995:10;966:113;;;-1:-1:-1;;1113:1:1;1095:16;;1088:27;871:250::o;1126:271::-;1168:3;1206:5;1200:12;1233:6;1228:3;1221:19;1249:76;1318:6;1311:4;1306:3;1302:14;1295:4;1288:5;1284:16;1249:76;:::i;:::-;1379:2;1358:15;-1:-1:-1;;1354:29:1;1345:39;;;;1386:4;1341:50;;1126:271;-1:-1:-1;;1126:271:1:o;1402:220::-;1551:2;1540:9;1533:21;1514:4;1571:45;1612:2;1601:9;1597:18;1589:6;1571:45;:::i;1627:180::-;1686:6;1739:2;1727:9;1718:7;1714:23;1710:32;1707:52;;;1755:1;1752;1745:12;1707:52;-1:-1:-1;1778:23:1;;1627:180;-1:-1:-1;1627:180:1:o;2020:173::-;2088:20;;-1:-1:-1;;;;;2137:31:1;;2127:42;;2117:70;;2183:1;2180;2173:12;2117:70;2020:173;;;:::o;2198:254::-;2266:6;2274;2327:2;2315:9;2306:7;2302:23;2298:32;2295:52;;;2343:1;2340;2333:12;2295:52;2366:29;2385:9;2366:29;:::i;:::-;2356:39;2442:2;2427:18;;;;2414:32;;-1:-1:-1;;;2198:254:1:o;2639:328::-;2716:6;2724;2732;2785:2;2773:9;2764:7;2760:23;2756:32;2753:52;;;2801:1;2798;2791:12;2753:52;2824:29;2843:9;2824:29;:::i;:::-;2814:39;;2872:38;2906:2;2895:9;2891:18;2872:38;:::i;:::-;2862:48;;2957:2;2946:9;2942:18;2929:32;2919:42;;2639:328;;;;;:::o;2972:248::-;3040:6;3048;3101:2;3089:9;3080:7;3076:23;3072:32;3069:52;;;3117:1;3114;3107:12;3069:52;-1:-1:-1;;3140:23:1;;;3210:2;3195:18;;;3182:32;;-1:-1:-1;2972:248:1:o;3478:367::-;3541:8;3551:6;3605:3;3598:4;3590:6;3586:17;3582:27;3572:55;;3623:1;3620;3613:12;3572:55;-1:-1:-1;3646:20:1;;3689:18;3678:30;;3675:50;;;3721:1;3718;3711:12;3675:50;3758:4;3750:6;3746:17;3734:29;;3818:3;3811:4;3801:6;3798:1;3794:14;3786:6;3782:27;3778:38;3775:47;3772:67;;;3835:1;3832;3825:12;3850:773;3972:6;3980;3988;3996;4049:2;4037:9;4028:7;4024:23;4020:32;4017:52;;;4065:1;4062;4055:12;4017:52;4105:9;4092:23;4134:18;4175:2;4167:6;4164:14;4161:34;;;4191:1;4188;4181:12;4161:34;4230:70;4292:7;4283:6;4272:9;4268:22;4230:70;:::i;:::-;4319:8;;-1:-1:-1;4204:96:1;-1:-1:-1;4407:2:1;4392:18;;4379:32;;-1:-1:-1;4423:16:1;;;4420:36;;;4452:1;4449;4442:12;4420:36;;4491:72;4555:7;4544:8;4533:9;4529:24;4491:72;:::i;:::-;3850:773;;;;-1:-1:-1;4582:8:1;-1:-1:-1;;;;3850:773:1:o;4628:186::-;4687:6;4740:2;4728:9;4719:7;4715:23;4711:32;4708:52;;;4756:1;4753;4746:12;4708:52;4779:29;4798:9;4779:29;:::i;4819:753::-;5121:4;5150:3;5194:6;5187:14;5180:22;5169:9;5162:41;5239:6;5234:2;5223:9;5219:18;5212:34;5282:6;5277:2;5266:9;5262:18;5255:34;5325:6;5320:2;5309:9;5305:18;5298:34;5369:6;5363:3;5352:9;5348:19;5341:35;5413:6;5407:3;5396:9;5392:19;5385:35;5457:6;5451:3;5440:9;5436:19;5429:35;5501:2;5495:3;5484:9;5480:19;5473:31;5521:45;5562:2;5551:9;5547:18;5539:6;5521:45;:::i;:::-;5513:53;4819:753;-1:-1:-1;;;;;;;;;;;4819:753:1:o;5577:439::-;5630:3;5668:5;5662:12;5695:6;5690:3;5683:19;5721:4;5750;5745:3;5741:14;5734:21;;5789:4;5782:5;5778:16;5812:1;5822:169;5836:6;5833:1;5830:13;5822:169;;;5897:13;;5885:26;;5931:12;;;;5966:15;;;;5858:1;5851:9;5822:169;;;-1:-1:-1;6007:3:1;;5577:439;-1:-1:-1;;;;;5577:439:1:o;6021:261::-;6200:2;6189:9;6182:21;6163:4;6220:56;6272:2;6261:9;6257:18;6249:6;6220:56;:::i;6287:403::-;6522:6;6511:9;6504:25;6565:6;6560:2;6549:9;6545:18;6538:34;6608:2;6603;6592:9;6588:18;6581:30;6485:4;6628:56;6680:2;6669:9;6665:18;6657:6;6628:56;:::i;:::-;6620:64;6287:403;-1:-1:-1;;;;;6287:403:1:o;7019:347::-;7084:6;7092;7145:2;7133:9;7124:7;7120:23;7116:32;7113:52;;;7161:1;7158;7151:12;7113:52;7184:29;7203:9;7184:29;:::i;:::-;7174:39;;7263:2;7252:9;7248:18;7235:32;7310:5;7303:13;7296:21;7289:5;7286:32;7276:60;;7332:1;7329;7322:12;7276:60;7355:5;7345:15;;;7019:347;;;;;:::o;7371:127::-;7432:10;7427:3;7423:20;7420:1;7413:31;7463:4;7460:1;7453:15;7487:4;7484:1;7477:15;7503:631;7567:5;7597:18;7638:2;7630:6;7627:14;7624:40;;;7644:18;;:::i;:::-;7719:2;7713:9;7687:2;7773:15;;-1:-1:-1;;7769:24:1;;;7795:2;7765:33;7761:42;7749:55;;;7819:18;;;7839:22;;;7816:46;7813:72;;;7865:18;;:::i;:::-;7905:10;7901:2;7894:22;7934:6;7925:15;;7964:6;7956;7949:22;8004:3;7995:6;7990:3;7986:16;7983:25;7980:45;;;8021:1;8018;8011:12;7980:45;8071:6;8066:3;8059:4;8051:6;8047:17;8034:44;8126:1;8119:4;8110:6;8102;8098:19;8094:30;8087:41;;;;7503:631;;;;;:::o;8139:666::-;8234:6;8242;8250;8258;8311:3;8299:9;8290:7;8286:23;8282:33;8279:53;;;8328:1;8325;8318:12;8279:53;8351:29;8370:9;8351:29;:::i;:::-;8341:39;;8399:38;8433:2;8422:9;8418:18;8399:38;:::i;:::-;8389:48;;8484:2;8473:9;8469:18;8456:32;8446:42;;8539:2;8528:9;8524:18;8511:32;8566:18;8558:6;8555:30;8552:50;;;8598:1;8595;8588:12;8552:50;8621:22;;8674:4;8666:13;;8662:27;-1:-1:-1;8652:55:1;;8703:1;8700;8693:12;8652:55;8726:73;8791:7;8786:2;8773:16;8768:2;8764;8760:11;8726:73;:::i;:::-;8716:83;;;8139:666;;;;;;;:::o;8810:260::-;8878:6;8886;8939:2;8927:9;8918:7;8914:23;8910:32;8907:52;;;8955:1;8952;8945:12;8907:52;8978:29;8997:9;8978:29;:::i;:::-;8968:39;;9026:38;9060:2;9049:9;9045:18;9026:38;:::i;:::-;9016:48;;8810:260;;;;;:::o;9075:450::-;9144:6;9197:2;9185:9;9176:7;9172:23;9168:32;9165:52;;;9213:1;9210;9203:12;9165:52;9253:9;9240:23;9286:18;9278:6;9275:30;9272:50;;;9318:1;9315;9308:12;9272:50;9341:22;;9394:4;9386:13;;9382:27;-1:-1:-1;9372:55:1;;9423:1;9420;9413:12;9372:55;9446:73;9511:7;9506:2;9493:16;9488:2;9484;9480:11;9446:73;:::i;9530:380::-;9609:1;9605:12;;;;9652;;;9673:61;;9727:4;9719:6;9715:17;9705:27;;9673:61;9780:2;9772:6;9769:14;9749:18;9746:38;9743:161;;9826:10;9821:3;9817:20;9814:1;9807:31;9861:4;9858:1;9851:15;9889:4;9886:1;9879:15;11155:356;11357:2;11339:21;;;11376:18;;;11369:30;11435:34;11430:2;11415:18;;11408:62;11502:2;11487:18;;11155:356::o;11516:127::-;11577:10;11572:3;11568:20;11565:1;11558:31;11608:4;11605:1;11598:15;11632:4;11629:1;11622:15;11648:125;11713:9;;;11734:10;;;11731:36;;;11747:18;;:::i;12125:413::-;12327:2;12309:21;;;12366:2;12346:18;;;12339:30;12405:34;12400:2;12385:18;;12378:62;-1:-1:-1;;;12471:2:1;12456:18;;12449:47;12528:3;12513:19;;12125:413::o;12543:341::-;12745:2;12727:21;;;12784:2;12764:18;;;12757:30;-1:-1:-1;;;12818:2:1;12803:18;;12796:47;12875:2;12860:18;;12543:341::o;12889:168::-;12962:9;;;12993;;13010:15;;;13004:22;;12990:37;12980:71;;13031:18;;:::i;13062:127::-;13123:10;13118:3;13114:20;13111:1;13104:31;13154:4;13151:1;13144:15;13178:4;13175:1;13168:15;13194:120;13234:1;13260;13250:35;;13265:18;;:::i;:::-;-1:-1:-1;13299:9:1;;13194:120::o;14495:127::-;14556:10;14551:3;14547:20;14544:1;14537:31;14587:4;14584:1;14577:15;14611:4;14608:1;14601:15;16856:496;17035:3;17073:6;17067:13;17089:66;17148:6;17143:3;17136:4;17128:6;17124:17;17089:66;:::i;:::-;17218:13;;17177:16;;;;17240:70;17218:13;17177:16;17287:4;17275:17;;17240:70;:::i;:::-;17326:20;;16856:496;-1:-1:-1;;;;16856:496:1:o;17357:388::-;17587:3;17625:6;17619:13;17641:66;17700:6;17695:3;17688:4;17680:6;17676:17;17641:66;:::i;:::-;17723:16;;;;;17357:388;-1:-1:-1;;17357:388:1:o;18498:416::-;18587:1;18624:5;18587:1;18638:270;18659:7;18649:8;18646:21;18638:270;;;18718:4;18714:1;18710:6;18706:17;18700:4;18697:27;18694:53;;;18727:18;;:::i;:::-;18777:7;18767:8;18763:22;18760:55;;;18797:16;;;;18760:55;18876:22;;;;18836:15;;;;18638:270;;;18642:3;18498:416;;;;;:::o;18919:806::-;18968:5;18998:8;18988:80;;-1:-1:-1;19039:1:1;19053:5;;18988:80;19087:4;19077:76;;-1:-1:-1;19124:1:1;19138:5;;19077:76;19169:4;19187:1;19182:59;;;;19255:1;19250:130;;;;19162:218;;19182:59;19212:1;19203:10;;19226:5;;;19250:130;19287:3;19277:8;19274:17;19271:43;;;19294:18;;:::i;:::-;-1:-1:-1;;19350:1:1;19336:16;;19365:5;;19162:218;;19464:2;19454:8;19451:16;19445:3;19439:4;19436:13;19432:36;19426:2;19416:8;19413:16;19408:2;19402:4;19399:12;19395:35;19392:77;19389:159;;;-1:-1:-1;19501:19:1;;;19533:5;;19389:159;19580:34;19605:8;19599:4;19580:34;:::i;:::-;19650:6;19646:1;19642:6;19638:19;19629:7;19626:32;19623:58;;;19661:18;;:::i;:::-;19699:20;;18919:806;-1:-1:-1;;;18919:806:1:o;19730:131::-;19790:5;19819:36;19846:8;19840:4;19819:36;:::i;20332:518::-;20434:2;20429:3;20426:11;20423:421;;;20470:5;20467:1;20460:16;20514:4;20511:1;20501:18;20584:2;20572:10;20568:19;20565:1;20561:27;20555:4;20551:38;20620:4;20608:10;20605:20;20602:47;;;-1:-1:-1;20643:4:1;20602:47;20698:2;20693:3;20689:12;20686:1;20682:20;20676:4;20672:31;20662:41;;20753:81;20771:2;20764:5;20761:13;20753:81;;;20830:1;20816:16;;20797:1;20786:13;20753:81;;21026:1345;21152:3;21146:10;21179:18;21171:6;21168:30;21165:56;;;21201:18;;:::i;:::-;21230:97;21320:6;21280:38;21312:4;21306:11;21280:38;:::i;:::-;21274:4;21230:97;:::i;:::-;21382:4;;21439:2;21428:14;;21456:1;21451:663;;;;22158:1;22175:6;22172:89;;;-1:-1:-1;22227:19:1;;;22221:26;22172:89;-1:-1:-1;;20983:1:1;20979:11;;;20975:24;20971:29;20961:40;21007:1;21003:11;;;20958:57;22274:81;;21421:944;;21451:663;20279:1;20272:14;;;20316:4;20303:18;;-1:-1:-1;;21487:20:1;;;21605:236;21619:7;21616:1;21613:14;21605:236;;;21708:19;;;21702:26;21687:42;;21800:27;;;;21768:1;21756:14;;;;21635:19;;21605:236;;;21609:3;21869:6;21860:7;21857:19;21854:201;;;21930:19;;;21924:26;-1:-1:-1;;22013:1:1;22009:14;;;22025:3;22005:24;22001:37;21997:42;21982:58;21967:74;;21854:201;;;22101:1;22092:6;22089:1;22085:14;22081:22;22075:4;22068:36;21421:944;;;;;21026:1345;;:::o;23604:128::-;23671:9;;;23692:11;;;23689:37;;;23706:18;;:::i;24441:414::-;24643:2;24625:21;;;24682:2;24662:18;;;24655:30;24721:34;24716:2;24701:18;;24694:62;-1:-1:-1;;;24787:2:1;24772:18;;24765:48;24845:3;24830:19;;24441:414::o;24860:135::-;24899:3;24920:17;;;24917:43;;24940:18;;:::i;:::-;-1:-1:-1;24987:1:1;24976:13;;24860:135::o;25000:112::-;25032:1;25058;25048:35;;25063:18;;:::i;:::-;-1:-1:-1;25097:9:1;;25000:112::o;25835:489::-;-1:-1:-1;;;;;26104:15:1;;;26086:34;;26156:15;;26151:2;26136:18;;26129:43;26203:2;26188:18;;26181:34;;;26251:3;26246:2;26231:18;;26224:31;;;26029:4;;26272:46;;26298:19;;26290:6;26272:46;:::i;:::-;26264:54;25835:489;-1:-1:-1;;;;;;25835:489:1:o;26329:249::-;26398:6;26451:2;26439:9;26430:7;26426:23;26422:32;26419:52;;;26467:1;26464;26457:12;26419:52;26499:9;26493:16;26518:30;26542:5;26518:30;:::i;26583:127::-;26644:10;26639:3;26635:20;26632:1;26625:31;26675:4;26672:1;26665:15;26699:4;26696:1;26689:15
Swarm Source
ipfs://93fd623d06cd874f376278188e7a7c96ef0ec6037dde20384b43641456ac3a0d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
APE | Ape (APE) | 100.00% | $1.53 | 0.36 | $0.550769 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.