More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 182 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 56304218 | 220 days ago | IN | 0 POL | 0.0032141 | ||||
Set Approval For... | 40757479 | 618 days ago | IN | 0 POL | 0.00376172 | ||||
Set Approval For... | 36097122 | 737 days ago | IN | 0 POL | 0.00072702 | ||||
Safe Transfer Fr... | 36039529 | 739 days ago | IN | 0 POL | 0.0029871 | ||||
Safe Transfer Fr... | 36038937 | 739 days ago | IN | 0 POL | 0.00267636 | ||||
Set Approval For... | 34466403 | 777 days ago | IN | 0 POL | 0.00497313 | ||||
Set Approval For... | 34313145 | 781 days ago | IN | 0 POL | 0.00175696 | ||||
Mint | 34290780 | 781 days ago | IN | 10 POL | 0.35909344 | ||||
Set Approval For... | 34149040 | 785 days ago | IN | 0 POL | 0.00078735 | ||||
Set Approval For... | 34149038 | 785 days ago | IN | 0 POL | 0.00138435 | ||||
Set Approval For... | 33570047 | 799 days ago | IN | 0 POL | 0.00138435 | ||||
Safe Transfer Fr... | 33507519 | 800 days ago | IN | 0 POL | 0.00261618 | ||||
Safe Transfer Fr... | 33507458 | 800 days ago | IN | 0 POL | 0.00267636 | ||||
Mint | 33415776 | 803 days ago | IN | 1 POL | 0.00531297 | ||||
Mint | 33367993 | 804 days ago | IN | 3 POL | 0.01353861 | ||||
Mint By Coin | 33367945 | 804 days ago | IN | 0 POL | 0.00587952 | ||||
Mint By Coin | 33326617 | 805 days ago | IN | 0 POL | 0.01422226 | ||||
Mint By Coin | 33304911 | 805 days ago | IN | 0 POL | 0.00596352 | ||||
Mint | 33304643 | 805 days ago | IN | 1 POL | 0.00522897 | ||||
Mint | 33302270 | 805 days ago | IN | 2 POL | 0.00934179 | ||||
Mint By Coin | 33297097 | 805 days ago | IN | 0 POL | 0.00587952 | ||||
Setbase UR Is | 33234510 | 807 days ago | IN | 0 POL | 0.00823467 | ||||
Mint By Coin | 32970843 | 813 days ago | IN | 0 POL | 0.01821798 | ||||
Mint By Coin | 32901209 | 815 days ago | IN | 0 POL | 0.01548346 | ||||
Safe Transfer Fr... | 32829206 | 817 days ago | IN | 0 POL | 0.00312203 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
56304218 | 220 days ago | 17 POL |
Loading...
Loading
Contract Name:
PassionableEggDragons
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-08-30 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/common/ERC2981.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/common/ERC2981.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. * * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. * * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the * fee is specified in basis points by default. * * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. * * _Available since v4.5._ */ abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @inheritdoc IERC2981 */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } /** * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an * override. */ function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } /** * @dev Sets the royalty information that all ids in this contract will default to. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Removes default royalty information. */ function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } /** * @dev Sets the royalty information for a specific token id, overriding the global default. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Resets royalty information for the token id back to the global default. */ function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 overridden 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/PassionableEggDragons.sol pragma solidity ^0.8.15; contract PassionableEggDragons is ERC721, ERC721Enumerable, ERC2981, ReentrancyGuard, Ownable { using Strings for uint256; IERC20 public coinAddress; uint256 private constant NUMBER_FALSE = 1; uint256 private constant NUMBER_TRUE = 2; uint256 private constant MAX_SUPPLY = 1000; string[] private baseURIs; string private baseExtension = ".json"; uint256 public saleIsActive = 1; uint256 public coinSaleIsActive = 1; uint256 public publicCost = 1 ether; uint256 public costByCoin = 1; uint256 private constant PUBLIC_MAX_PER_TX = 10; uint256 private evolutionTime = 5 days; mapping(uint256 => uint256) private birthTimes; uint256 private timeMagicIsActive = 1; mapping(uint256 => uint256) public timeMagic; address public royaltyAddress; uint96 public royaltyFee = 500; constructor( address _coinAddress, string[] memory _baseURIs ) ERC721 ("PassionableEggDragons","PED") { coinAddress = IERC20(_coinAddress); baseURIs = _baseURIs; royaltyAddress = msg.sender; } modifier callerIsUser() { require(tx.origin == msg.sender, "I love non-contract bot!!!(Not another contract)"); _; } event _birth(address to_, uint256 numberOfToken_, uint256 totalSupply_); //sale function function setSaleState(uint256 newState) external onlyOwner { saleIsActive = newState; } function setCoinSaleState(uint256 newState) external onlyOwner { coinSaleIsActive = newState; } function setPublicCost(uint256 newPublicCost) external onlyOwner { publicCost = newPublicCost; } //coin function function setCoinAddress(address newCoinAddress) external onlyOwner { coinAddress = IERC20(newCoinAddress); } function setCostByCoin(uint256 newCostByCoin) external onlyOwner { costByCoin = newCostByCoin; } //mint function function checkmint(uint256 _numberOfToken, uint256 _ts) private pure { require(_numberOfToken < PUBLIC_MAX_PER_TX + 1, "Too greedy!!!(10token/tx)"); require(_numberOfToken > 0, "Stingy!!!(Not 0token)"); require(_ts + _numberOfToken < MAX_SUPPLY + 1,"Goddamn!!!(Sold out)"); } function birth(uint256 _numberOfToken, uint256 _ts) private { for (uint256 i = 1; i < _numberOfToken + 1; i++) { birthTimes[_ts + i] = block.timestamp; _safeMint(msg.sender, _ts + i); } emit _birth(msg.sender, _numberOfToken, _ts); } function mint(uint256 numberOfToken) public nonReentrant payable callerIsUser { uint256 cost = publicCost * numberOfToken; uint256 ts = totalSupply(); require(saleIsActive == NUMBER_TRUE, "GARAGARA closed!!!(Not sale)"); checkmint(numberOfToken, ts); require(msg.value >= cost, "The day before yesterday!!!(Not enough)"); birth(numberOfToken,ts); } function mintByCoin(uint256 numberOfToken) public nonReentrant payable callerIsUser { uint256 cost = costByCoin * numberOfToken; uint256 ts = totalSupply(); require(coinSaleIsActive == NUMBER_TRUE, "GARAGARA closed!!!(Not sale by coin)"); checkmint(numberOfToken, ts); require(coinAddress.balanceOf(msg.sender) >= cost, "The day before yesterday!!!(Not enough)"); require(coinAddress.transferFrom(msg.sender, address(this), cost)); birth(numberOfToken,ts); } //tokenURI function function setbaseURIs(string[] memory newBaseURIs) external onlyOwner { baseURIs = newBaseURIs; } function setEvolutionTime(uint256 newEvolutionTime) external onlyOwner { evolutionTime = newEvolutionTime; } function setTimeMagicState(uint256 newState) external onlyOwner { timeMagicIsActive = newState; } function setTimeMagic(uint256 tokenId, uint256 newTimeMagic) public { require(timeMagicIsActive == NUMBER_TRUE, "Despel!!!(Not yet usable)"); require(ownerOf(tokenId) == msg.sender, "You are badass!!!(Not have token)"); timeMagic[tokenId] = newTimeMagic; } function _baseURI(uint256 tokenId) internal view returns (string memory) { uint256 n = (block.timestamp - birthTimes[tokenId]) / evolutionTime; uint256 m = baseURIs.length; uint256 l = timeMagic[tokenId]; if (l > n) l = n; if (l != 0) n = l; if (n > m) n = m - 1; return baseURIs[n]; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId),"Bad joke!!!(Not exist token)"); string memory currentBaseURI = _baseURI(tokenId); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //other function function setDefaultRoyalty(address receiver, uint96 feeNumerator) external onlyOwner { _setDefaultRoyalty(receiver, feeNumerator); } function withdraw() external onlyOwner { require(payable(msg.sender).send(address(this).balance)); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721,ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable, ERC2981) returns(bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_coinAddress","type":"address"},{"internalType":"string[]","name":"_baseURIs","type":"string[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to_","type":"address"},{"indexed":false,"internalType":"uint256","name":"numberOfToken_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply_","type":"uint256"}],"name":"_birth","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinAddress","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinSaleIsActive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costByCoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfToken","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfToken","type":"uint256"}],"name":"mintByCoin","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyFee","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":[],"name":"saleIsActive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCoinAddress","type":"address"}],"name":"setCoinAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newState","type":"uint256"}],"name":"setCoinSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCostByCoin","type":"uint256"}],"name":"setCostByCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newEvolutionTime","type":"uint256"}],"name":"setEvolutionTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPublicCost","type":"uint256"}],"name":"setPublicCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newState","type":"uint256"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"newTimeMagic","type":"uint256"}],"name":"setTimeMagic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newState","type":"uint256"}],"name":"setTimeMagicState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"newBaseURIs","type":"string[]"}],"name":"setbaseURIs","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":"","type":"uint256"}],"name":"timeMagic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526005608090815264173539b7b760d91b60a05260109062000026908262000331565b50600160118190556012819055670de0b6b3a7640000601355601481905562069780601555601755601980546001600160a01b0316607d60a21b1790553480156200007057600080fd5b506040516200313e3803806200313e833981016040819052620000939162000430565b6040518060400160405280601581526020017f50617373696f6e61626c65456767447261676f6e7300000000000000000000008152506040518060400160405280600381526020016214115160ea1b8152508160009081620000f6919062000331565b50600162000105828262000331565b50506001600c5550620001183362000163565b600e80546001600160a01b0319166001600160a01b03841617905580516200014890600f906020840190620001b5565b5050601980546001600160a01b03191633179055506200059f565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562000200579160200282015b82811115620002005782518290620001ef908262000331565b5091602001919060010190620001d6565b506200020e92915062000212565b5090565b808211156200020e57600062000229828262000233565b5060010162000212565b5080546200024190620002a2565b6000825580601f1062000252575050565b601f01602090049060005260206000209081019062000272919062000275565b50565b5b808211156200020e576000815560010162000276565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002b757607f821691505b602082108103620002d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200032c57600081815260208120601f850160051c81016020861015620003075750805b601f850160051c820191505b81811015620003285782815560010162000313565b5050505b505050565b81516001600160401b038111156200034d576200034d6200028c565b62000365816200035e8454620002a2565b84620002de565b602080601f8311600181146200039d5760008415620003845750858301515b600019600386901b1c1916600185901b17855562000328565b600085815260208120601f198616915b82811015620003ce57888601518255948401946001909101908401620003ad565b5085821015620003ed5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604051601f8201601f191681016001600160401b03811182821017156200042857620004286200028c565b604052919050565b60008060408084860312156200044557600080fd5b83516001600160a01b03811681146200045d57600080fd5b602085810151919450906001600160401b03808211156200047d57600080fd5b8187019150601f88818401126200049357600080fd5b825182811115620004a857620004a86200028c565b8060051b620004b9868201620003fd565b918252848101860191868101908c841115620004d457600080fd5b87870192505b838310156200058c57825186811115620004f45760008081fd5b8701603f81018e13620005075760008081fd5b88810151878111156200051e576200051e6200028c565b62000531818801601f19168b01620003fd565b8181528f8c838501011115620005475760008081fd5b60005b8281101562000567578381018d01518282018d01528b016200054a565b82811115620005795760008c84840101525b50845250509187019190870190620004da565b8099505050505050505050509250929050565b612b8f80620005af6000396000f3fe6080604052600436106102465760003560e01c80638693da2011610139578063b8997a97116100b6578063e0bc096d1161007a578063e0bc096d146106df578063e985e9c5146106f5578063eb8d24441461073e578063ebff502414610754578063f2fde38b1461076a578063fdc61dd11461078a57600080fd5b8063b8997a971461062d578063c87b56dd1461066c578063d139408b1461068c578063dd9862b21461069f578063dda50957146106bf57600080fd5b8063a22cb465116100fd578063a22cb46514610580578063ad2f852a146105a0578063b0bdacc6146105c0578063b4221c02146105e0578063b88d4fde1461060d57600080fd5b80638693da20146105045780638da5cb5b1461051a57806395d89b4114610538578063a0712d681461054d578063a0fddea61461056057600080fd5b80632f745c59116101c75780636352211e1161018b5780636352211e1461046f57806370a082311461048f578063715018a6146104af578063811d2437146104c4578063819ee2db146104e457600080fd5b80632f745c59146103da57806331d96d81146103fa5780633ccfd60b1461041a57806342842e0e1461042f5780634f6ccce71461044f57600080fd5b8063095ea7b31161020e578063095ea7b31461031c57806318160ddd1461033c57806323b872dd1461035b57806323ba6b8b1461037b5780632a55205a1461039b57600080fd5b806301ffc9a71461024b57806304634d8d1461028057806306fdde03146102a2578063081812fc146102c4578063084c4088146102fc575b600080fd5b34801561025757600080fd5b5061026b6102663660046122c0565b6107aa565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b3660046122f9565b6107bb565b005b3480156102ae57600080fd5b506102b76107d1565b6040516102779190612394565b3480156102d057600080fd5b506102e46102df3660046123a7565b610863565b6040516001600160a01b039091168152602001610277565b34801561030857600080fd5b506102a06103173660046123a7565b61088a565b34801561032857600080fd5b506102a06103373660046123c0565b610897565b34801561034857600080fd5b506008545b604051908152602001610277565b34801561036757600080fd5b506102a06103763660046123ea565b6109b1565b34801561038757600080fd5b506102a06103963660046123a7565b6109e2565b3480156103a757600080fd5b506103bb6103b6366004612426565b6109ef565b604080516001600160a01b039093168352602083019190915201610277565b3480156103e657600080fd5b5061034d6103f53660046123c0565b610a9b565b34801561040657600080fd5b506102a06104153660046124e7565b610b31565b34801561042657600080fd5b506102a0610b4c565b34801561043b57600080fd5b506102a061044a3660046123ea565b610b7a565b34801561045b57600080fd5b5061034d61046a3660046123a7565b610b95565b34801561047b57600080fd5b506102e461048a3660046123a7565b610c28565b34801561049b57600080fd5b5061034d6104aa3660046125bf565b610c88565b3480156104bb57600080fd5b506102a0610d0e565b3480156104d057600080fd5b506102a06104df3660046123a7565b610d20565b3480156104f057600080fd5b506102a06104ff366004612426565b610d2d565b34801561051057600080fd5b5061034d60135481565b34801561052657600080fd5b50600d546001600160a01b03166102e4565b34801561054457600080fd5b506102b7610dfb565b6102a061055b3660046123a7565b610e0a565b34801561056c57600080fd5b506102a061057b3660046123a7565b610f2f565b34801561058c57600080fd5b506102a061059b3660046125e8565b610f3c565b3480156105ac57600080fd5b506019546102e4906001600160a01b031681565b3480156105cc57600080fd5b506102a06105db3660046125bf565b610f47565b3480156105ec57600080fd5b5061034d6105fb3660046123a7565b60186020526000908152604090205481565b34801561061957600080fd5b506102a0610628366004612614565b610f71565b34801561063957600080fd5b5060195461065490600160a01b90046001600160601b031681565b6040516001600160601b039091168152602001610277565b34801561067857600080fd5b506102b76106873660046123a7565b610fa9565b6102a061069a3660046123a7565b611070565b3480156106ab57600080fd5b506102a06106ba3660046123a7565b61127b565b3480156106cb57600080fd5b506102a06106da3660046123a7565b611288565b3480156106eb57600080fd5b5061034d60145481565b34801561070157600080fd5b5061026b610710366004612690565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074a57600080fd5b5061034d60115481565b34801561076057600080fd5b5061034d60125481565b34801561077657600080fd5b506102a06107853660046125bf565b611295565b34801561079657600080fd5b50600e546102e4906001600160a01b031681565b60006107b58261130e565b92915050565b6107c3611333565b6107cd828261138d565b5050565b6060600080546107e0906126c3565b80601f016020809104026020016040519081016040528092919081815260200182805461080c906126c3565b80156108595780601f1061082e57610100808354040283529160200191610859565b820191906000526020600020905b81548152906001019060200180831161083c57829003601f168201915b5050505050905090565b600061086e8261148a565b506000908152600460205260409020546001600160a01b031690565b610892611333565b601155565b60006108a282610c28565b9050806001600160a01b0316836001600160a01b0316036109145760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061093057506109308133610710565b6109a25760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161090b565b6109ac83836114e9565b505050565b6109bb3382611557565b6109d75760405162461bcd60e51b815260040161090b906126fd565b6109ac8383836115d6565b6109ea611333565b601755565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a64575060408051808201909152600a546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a83906001600160601b031687612761565b610a8d9190612796565b915196919550909350505050565b6000610aa683610c88565b8210610b085760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161090b565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610b39611333565b80516107cd90600f9060208401906121ed565b610b54611333565b60405133904780156108fc02916000818181858888f19350505050610b7857600080fd5b565b6109ac83838360405180602001604052806000815250610f71565b6000610ba060085490565b8210610c035760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161090b565b60088281548110610c1657610c166127aa565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806107b55760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161090b565b60006001600160a01b038216610cf25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161090b565b506001600160a01b031660009081526003602052604090205490565b610d16611333565b610b78600061177d565b610d28611333565b601355565b600260175414610d7f5760405162461bcd60e51b815260206004820152601960248201527f44657370656c212121284e6f742079657420757361626c652900000000000000604482015260640161090b565b33610d8983610c28565b6001600160a01b031614610de95760405162461bcd60e51b815260206004820152602160248201527f596f752061726520626164617373212121284e6f74206861766520746f6b656e6044820152602960f81b606482015260840161090b565b60009182526018602052604090912055565b6060600180546107e0906126c3565b6002600c5403610e5c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161090b565b6002600c55323314610e805760405162461bcd60e51b815260040161090b906127c0565b600081601354610e909190612761565b90506000610e9d60085490565b9050600260115414610ef15760405162461bcd60e51b815260206004820152601c60248201527f474152414741524120636c6f736564212121284e6f742073616c652900000000604482015260640161090b565b610efb83826117cf565b81341015610f1b5760405162461bcd60e51b815260040161090b90612810565b610f2583826118cc565b50506001600c5550565b610f37611333565b601455565b6107cd33838361196c565b610f4f611333565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b610f7b3383611557565b610f975760405162461bcd60e51b815260040161090b906126fd565b610fa384848484611a3a565b50505050565b6000818152600260205260409020546060906001600160a01b03166110105760405162461bcd60e51b815260206004820152601c60248201527f426164206a6f6b65212121284e6f7420657869737420746f6b656e2900000000604482015260640161090b565b600061101b83611a6d565b9050600081511161103b5760405180602001604052806000815250611069565b8061104584611b88565b601060405160200161105993929190612857565b6040516020818303038152906040525b9392505050565b6002600c54036110c25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161090b565b6002600c553233146110e65760405162461bcd60e51b815260040161090b906127c0565b6000816014546110f69190612761565b9050600061110360085490565b90506002601254146111635760405162461bcd60e51b8152602060048201526024808201527f474152414741524120636c6f736564212121284e6f742073616c6520627920636044820152636f696e2960e01b606482015260840161090b565b61116d83826117cf565b600e546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d991906128f7565b10156111f75760405162461bcd60e51b815260040161090b90612810565b600e546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561124e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112729190612910565b610f1b57600080fd5b611283611333565b601255565b611290611333565b601555565b61129d611333565b6001600160a01b0381166113025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090b565b61130b8161177d565b50565b60006001600160e01b0319821663152a902d60e11b14806107b557506107b582611c89565b600d546001600160a01b03163314610b785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090b565b6127106001600160601b03821611156113fb5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b606482015260840161090b565b6001600160a01b0382166114515760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640161090b565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600a55565b6000818152600260205260409020546001600160a01b031661130b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161090b565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061151e82610c28565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061156383610c28565b9050806001600160a01b0316846001600160a01b031614806115aa57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806115ce5750836001600160a01b03166115c384610863565b6001600160a01b0316145b949350505050565b826001600160a01b03166115e982610c28565b6001600160a01b03161461164d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161090b565b6001600160a01b0382166116af5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161090b565b6116ba838383611cae565b6116c56000826114e9565b6001600160a01b03831660009081526003602052604081208054600192906116ee90849061292d565b90915550506001600160a01b038216600090815260036020526040812080546001929061171c908490612944565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6117db600a6001612944565b82106118295760405162461bcd60e51b815260206004820152601960248201527f546f6f20677265656479212121283130746f6b656e2f74782900000000000000604482015260640161090b565b600082116118715760405162461bcd60e51b81526020600482015260156024820152745374696e6779212121284e6f742030746f6b656e2960581b604482015260640161090b565b61187e6103e86001612944565b6118888383612944565b106107cd5760405162461bcd60e51b8152602060048201526014602482015273476f6464616d6e21212128536f6c64206f75742960601b604482015260640161090b565b60015b6118da836001612944565b8110156119265742601660006118f08486612944565b81526020810191909152604001600020556119143361190f8385612944565b611cb9565b8061191e8161295c565b9150506118cf565b5060408051338152602081018490529081018290527fd67ba1b99aa56575979dd5947a9c0c6be6c29449f1f395060412537965387e3c9060600160405180910390a15050565b816001600160a01b0316836001600160a01b0316036119cd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161090b565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a458484846115d6565b611a5184848484611cd3565b610fa35760405162461bcd60e51b815260040161090b90612975565b60155460008281526016602052604081205460609290611a8d904261292d565b611a979190612796565b600f546000858152601860205260409020549192509082811115611ab85750815b8015611ac2578092505b81831115611ad857611ad560018361292d565b92505b600f8381548110611aeb57611aeb6127aa565b906000526020600020018054611b00906126c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2c906126c3565b8015611b795780601f10611b4e57610100808354040283529160200191611b79565b820191906000526020600020905b815481529060010190602001808311611b5c57829003601f168201915b50505050509350505050919050565b606081600003611baf5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bd95780611bc38161295c565b9150611bd29050600a83612796565b9150611bb3565b60008167ffffffffffffffff811115611bf457611bf4612448565b6040519080825280601f01601f191660200182016040528015611c1e576020820181803683370190505b5090505b84156115ce57611c3360018361292d565b9150611c40600a866129c7565b611c4b906030612944565b60f81b818381518110611c6057611c606127aa565b60200101906001600160f81b031916908160001a905350611c82600a86612796565b9450611c22565b60006001600160e01b0319821663780e9d6360e01b14806107b557506107b582611dd4565b6109ac838383611e24565b6107cd828260405180602001604052806000815250611edc565b60006001600160a01b0384163b15611dc957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d179033908990889088906004016129db565b6020604051808303816000875af1925050508015611d52575060408051601f3d908101601f19168201909252611d4f91810190612a18565b60015b611daf573d808015611d80576040519150601f19603f3d011682016040523d82523d6000602084013e611d85565b606091505b508051600003611da75760405162461bcd60e51b815260040161090b90612975565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115ce565b506001949350505050565b60006001600160e01b031982166380ac58cd60e01b1480611e0557506001600160e01b03198216635b5e139f60e01b145b806107b557506301ffc9a760e01b6001600160e01b03198316146107b5565b6001600160a01b038316611e7f57611e7a81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611ea2565b816001600160a01b0316836001600160a01b031614611ea257611ea28382611f0f565b6001600160a01b038216611eb9576109ac81611fac565b826001600160a01b0316826001600160a01b0316146109ac576109ac828261205b565b611ee6838361209f565b611ef36000848484611cd3565b6109ac5760405162461bcd60e51b815260040161090b90612975565b60006001611f1c84610c88565b611f26919061292d565b600083815260076020526040902054909150808214611f79576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611fbe9060019061292d565b60008381526009602052604081205460088054939450909284908110611fe657611fe66127aa565b906000526020600020015490508060088381548110612007576120076127aa565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061203f5761203f612a35565b6001900381819060005260206000200160009055905550505050565b600061206683610c88565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166120f55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161090b565b6000818152600260205260409020546001600160a01b03161561215a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161090b565b61216660008383611cae565b6001600160a01b038216600090815260036020526040812080546001929061218f908490612944565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054828255906000526020600020908101928215612233579160200282015b8281111561223357825182906122239082612a99565b509160200191906001019061220d565b5061223f929150612243565b5090565b8082111561223f5760006122578282612260565b50600101612243565b50805461226c906126c3565b6000825580601f1061227c575050565b601f01602090049060005260206000209081019061130b91905b8082111561223f5760008155600101612296565b6001600160e01b03198116811461130b57600080fd5b6000602082840312156122d257600080fd5b8135611069816122aa565b80356001600160a01b03811681146122f457600080fd5b919050565b6000806040838503121561230c57600080fd5b612315836122dd565b915060208301356001600160601b038116811461233157600080fd5b809150509250929050565b60005b8381101561235757818101518382015260200161233f565b83811115610fa35750506000910152565b6000815180845261238081602086016020860161233c565b601f01601f19169290920160200192915050565b6020815260006110696020830184612368565b6000602082840312156123b957600080fd5b5035919050565b600080604083850312156123d357600080fd5b6123dc836122dd565b946020939093013593505050565b6000806000606084860312156123ff57600080fd5b612408846122dd565b9250612416602085016122dd565b9150604084013590509250925092565b6000806040838503121561243957600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561248757612487612448565b604052919050565b600067ffffffffffffffff8311156124a9576124a9612448565b6124bc601f8401601f191660200161245e565b90508281528383830111156124d057600080fd5b828260208301376000602084830101529392505050565b600060208083850312156124fa57600080fd5b823567ffffffffffffffff8082111561251257600080fd5b818501915085601f83011261252657600080fd5b81358181111561253857612538612448565b8060051b61254785820161245e565b918252838101850191858101908984111561256157600080fd5b86860192505b838310156125b25782358581111561257f5760008081fd5b8601603f81018b136125915760008081fd5b6125a28b898301356040840161248f565b8352509186019190860190612567565b9998505050505050505050565b6000602082840312156125d157600080fd5b611069826122dd565b801515811461130b57600080fd5b600080604083850312156125fb57600080fd5b612604836122dd565b91506020830135612331816125da565b6000806000806080858703121561262a57600080fd5b612633856122dd565b9350612641602086016122dd565b925060408501359150606085013567ffffffffffffffff81111561266457600080fd5b8501601f8101871361267557600080fd5b6126848782356020840161248f565b91505092959194509250565b600080604083850312156126a357600080fd5b6126ac836122dd565b91506126ba602084016122dd565b90509250929050565b600181811c908216806126d757607f821691505b6020821081036126f757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561277b5761277b61274b565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826127a5576127a5612780565b500490565b634e487b7160e01b600052603260045260246000fd5b60208082526030908201527f49206c6f7665206e6f6e2d636f6e747261637420626f74212121284e6f74206160408201526f6e6f7468657220636f6e74726163742960801b606082015260800190565b60208082526027908201527f54686520646179206265666f726520796573746572646179212121284e6f7420604082015266656e6f7567682960c81b606082015260800190565b60008451602061286a8285838a0161233c565b85519184019161287d8184848a0161233c565b855492019160009061288e816126c3565b600182811680156128a657600181146128bb576128e7565b60ff19841687528215158302870194506128e7565b896000528560002060005b848110156128df578154898201529083019087016128c6565b505082870194505b50929a9950505050505050505050565b60006020828403121561290957600080fd5b5051919050565b60006020828403121561292257600080fd5b8151611069816125da565b60008282101561293f5761293f61274b565b500390565b600082198211156129575761295761274b565b500190565b60006001820161296e5761296e61274b565b5060010190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826129d6576129d6612780565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a0e90830184612368565b9695505050505050565b600060208284031215612a2a57600080fd5b8151611069816122aa565b634e487b7160e01b600052603160045260246000fd5b601f8211156109ac57600081815260208120601f850160051c81016020861015612a725750805b601f850160051c820191505b81811015612a9157828155600101612a7e565b505050505050565b815167ffffffffffffffff811115612ab357612ab3612448565b612ac781612ac184546126c3565b84612a4b565b602080601f831160018114612afc5760008415612ae45750858301515b600019600386901b1c1916600185901b178555612a91565b600085815260208120601f198616915b82811015612b2b57888601518255948401946001909101908401612b0c565b5085821015612b495787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212208430edc132011419de1cf73e8ad5a44aac339e3bea1d239fdb77dd08d49c64c664736f6c634300080f0033000000000000000000000000419ac8c44e345d6e2ea9956176a7ac3f663c155700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000003161723a2f2f6e485034306867664a4267777477534136476e6849375247684a544c476e6e7838725f69536e6c58366f492f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003161723a2f2f5256774838474f66744d423154616a714f695232456e72665f497a364a434f6665416e68786f673872616b2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003161723a2f2f465a6d4a726b306742706c6b735f51327a6d687a43434d366b36724c70596f6562613964636565666f5a732f000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c80638693da2011610139578063b8997a97116100b6578063e0bc096d1161007a578063e0bc096d146106df578063e985e9c5146106f5578063eb8d24441461073e578063ebff502414610754578063f2fde38b1461076a578063fdc61dd11461078a57600080fd5b8063b8997a971461062d578063c87b56dd1461066c578063d139408b1461068c578063dd9862b21461069f578063dda50957146106bf57600080fd5b8063a22cb465116100fd578063a22cb46514610580578063ad2f852a146105a0578063b0bdacc6146105c0578063b4221c02146105e0578063b88d4fde1461060d57600080fd5b80638693da20146105045780638da5cb5b1461051a57806395d89b4114610538578063a0712d681461054d578063a0fddea61461056057600080fd5b80632f745c59116101c75780636352211e1161018b5780636352211e1461046f57806370a082311461048f578063715018a6146104af578063811d2437146104c4578063819ee2db146104e457600080fd5b80632f745c59146103da57806331d96d81146103fa5780633ccfd60b1461041a57806342842e0e1461042f5780634f6ccce71461044f57600080fd5b8063095ea7b31161020e578063095ea7b31461031c57806318160ddd1461033c57806323b872dd1461035b57806323ba6b8b1461037b5780632a55205a1461039b57600080fd5b806301ffc9a71461024b57806304634d8d1461028057806306fdde03146102a2578063081812fc146102c4578063084c4088146102fc575b600080fd5b34801561025757600080fd5b5061026b6102663660046122c0565b6107aa565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b3660046122f9565b6107bb565b005b3480156102ae57600080fd5b506102b76107d1565b6040516102779190612394565b3480156102d057600080fd5b506102e46102df3660046123a7565b610863565b6040516001600160a01b039091168152602001610277565b34801561030857600080fd5b506102a06103173660046123a7565b61088a565b34801561032857600080fd5b506102a06103373660046123c0565b610897565b34801561034857600080fd5b506008545b604051908152602001610277565b34801561036757600080fd5b506102a06103763660046123ea565b6109b1565b34801561038757600080fd5b506102a06103963660046123a7565b6109e2565b3480156103a757600080fd5b506103bb6103b6366004612426565b6109ef565b604080516001600160a01b039093168352602083019190915201610277565b3480156103e657600080fd5b5061034d6103f53660046123c0565b610a9b565b34801561040657600080fd5b506102a06104153660046124e7565b610b31565b34801561042657600080fd5b506102a0610b4c565b34801561043b57600080fd5b506102a061044a3660046123ea565b610b7a565b34801561045b57600080fd5b5061034d61046a3660046123a7565b610b95565b34801561047b57600080fd5b506102e461048a3660046123a7565b610c28565b34801561049b57600080fd5b5061034d6104aa3660046125bf565b610c88565b3480156104bb57600080fd5b506102a0610d0e565b3480156104d057600080fd5b506102a06104df3660046123a7565b610d20565b3480156104f057600080fd5b506102a06104ff366004612426565b610d2d565b34801561051057600080fd5b5061034d60135481565b34801561052657600080fd5b50600d546001600160a01b03166102e4565b34801561054457600080fd5b506102b7610dfb565b6102a061055b3660046123a7565b610e0a565b34801561056c57600080fd5b506102a061057b3660046123a7565b610f2f565b34801561058c57600080fd5b506102a061059b3660046125e8565b610f3c565b3480156105ac57600080fd5b506019546102e4906001600160a01b031681565b3480156105cc57600080fd5b506102a06105db3660046125bf565b610f47565b3480156105ec57600080fd5b5061034d6105fb3660046123a7565b60186020526000908152604090205481565b34801561061957600080fd5b506102a0610628366004612614565b610f71565b34801561063957600080fd5b5060195461065490600160a01b90046001600160601b031681565b6040516001600160601b039091168152602001610277565b34801561067857600080fd5b506102b76106873660046123a7565b610fa9565b6102a061069a3660046123a7565b611070565b3480156106ab57600080fd5b506102a06106ba3660046123a7565b61127b565b3480156106cb57600080fd5b506102a06106da3660046123a7565b611288565b3480156106eb57600080fd5b5061034d60145481565b34801561070157600080fd5b5061026b610710366004612690565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074a57600080fd5b5061034d60115481565b34801561076057600080fd5b5061034d60125481565b34801561077657600080fd5b506102a06107853660046125bf565b611295565b34801561079657600080fd5b50600e546102e4906001600160a01b031681565b60006107b58261130e565b92915050565b6107c3611333565b6107cd828261138d565b5050565b6060600080546107e0906126c3565b80601f016020809104026020016040519081016040528092919081815260200182805461080c906126c3565b80156108595780601f1061082e57610100808354040283529160200191610859565b820191906000526020600020905b81548152906001019060200180831161083c57829003601f168201915b5050505050905090565b600061086e8261148a565b506000908152600460205260409020546001600160a01b031690565b610892611333565b601155565b60006108a282610c28565b9050806001600160a01b0316836001600160a01b0316036109145760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061093057506109308133610710565b6109a25760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161090b565b6109ac83836114e9565b505050565b6109bb3382611557565b6109d75760405162461bcd60e51b815260040161090b906126fd565b6109ac8383836115d6565b6109ea611333565b601755565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a64575060408051808201909152600a546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a83906001600160601b031687612761565b610a8d9190612796565b915196919550909350505050565b6000610aa683610c88565b8210610b085760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161090b565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610b39611333565b80516107cd90600f9060208401906121ed565b610b54611333565b60405133904780156108fc02916000818181858888f19350505050610b7857600080fd5b565b6109ac83838360405180602001604052806000815250610f71565b6000610ba060085490565b8210610c035760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161090b565b60088281548110610c1657610c166127aa565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806107b55760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161090b565b60006001600160a01b038216610cf25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161090b565b506001600160a01b031660009081526003602052604090205490565b610d16611333565b610b78600061177d565b610d28611333565b601355565b600260175414610d7f5760405162461bcd60e51b815260206004820152601960248201527f44657370656c212121284e6f742079657420757361626c652900000000000000604482015260640161090b565b33610d8983610c28565b6001600160a01b031614610de95760405162461bcd60e51b815260206004820152602160248201527f596f752061726520626164617373212121284e6f74206861766520746f6b656e6044820152602960f81b606482015260840161090b565b60009182526018602052604090912055565b6060600180546107e0906126c3565b6002600c5403610e5c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161090b565b6002600c55323314610e805760405162461bcd60e51b815260040161090b906127c0565b600081601354610e909190612761565b90506000610e9d60085490565b9050600260115414610ef15760405162461bcd60e51b815260206004820152601c60248201527f474152414741524120636c6f736564212121284e6f742073616c652900000000604482015260640161090b565b610efb83826117cf565b81341015610f1b5760405162461bcd60e51b815260040161090b90612810565b610f2583826118cc565b50506001600c5550565b610f37611333565b601455565b6107cd33838361196c565b610f4f611333565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b610f7b3383611557565b610f975760405162461bcd60e51b815260040161090b906126fd565b610fa384848484611a3a565b50505050565b6000818152600260205260409020546060906001600160a01b03166110105760405162461bcd60e51b815260206004820152601c60248201527f426164206a6f6b65212121284e6f7420657869737420746f6b656e2900000000604482015260640161090b565b600061101b83611a6d565b9050600081511161103b5760405180602001604052806000815250611069565b8061104584611b88565b601060405160200161105993929190612857565b6040516020818303038152906040525b9392505050565b6002600c54036110c25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161090b565b6002600c553233146110e65760405162461bcd60e51b815260040161090b906127c0565b6000816014546110f69190612761565b9050600061110360085490565b90506002601254146111635760405162461bcd60e51b8152602060048201526024808201527f474152414741524120636c6f736564212121284e6f742073616c6520627920636044820152636f696e2960e01b606482015260840161090b565b61116d83826117cf565b600e546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d991906128f7565b10156111f75760405162461bcd60e51b815260040161090b90612810565b600e546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561124e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112729190612910565b610f1b57600080fd5b611283611333565b601255565b611290611333565b601555565b61129d611333565b6001600160a01b0381166113025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090b565b61130b8161177d565b50565b60006001600160e01b0319821663152a902d60e11b14806107b557506107b582611c89565b600d546001600160a01b03163314610b785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090b565b6127106001600160601b03821611156113fb5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b606482015260840161090b565b6001600160a01b0382166114515760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640161090b565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600a55565b6000818152600260205260409020546001600160a01b031661130b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161090b565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061151e82610c28565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061156383610c28565b9050806001600160a01b0316846001600160a01b031614806115aa57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806115ce5750836001600160a01b03166115c384610863565b6001600160a01b0316145b949350505050565b826001600160a01b03166115e982610c28565b6001600160a01b03161461164d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161090b565b6001600160a01b0382166116af5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161090b565b6116ba838383611cae565b6116c56000826114e9565b6001600160a01b03831660009081526003602052604081208054600192906116ee90849061292d565b90915550506001600160a01b038216600090815260036020526040812080546001929061171c908490612944565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6117db600a6001612944565b82106118295760405162461bcd60e51b815260206004820152601960248201527f546f6f20677265656479212121283130746f6b656e2f74782900000000000000604482015260640161090b565b600082116118715760405162461bcd60e51b81526020600482015260156024820152745374696e6779212121284e6f742030746f6b656e2960581b604482015260640161090b565b61187e6103e86001612944565b6118888383612944565b106107cd5760405162461bcd60e51b8152602060048201526014602482015273476f6464616d6e21212128536f6c64206f75742960601b604482015260640161090b565b60015b6118da836001612944565b8110156119265742601660006118f08486612944565b81526020810191909152604001600020556119143361190f8385612944565b611cb9565b8061191e8161295c565b9150506118cf565b5060408051338152602081018490529081018290527fd67ba1b99aa56575979dd5947a9c0c6be6c29449f1f395060412537965387e3c9060600160405180910390a15050565b816001600160a01b0316836001600160a01b0316036119cd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161090b565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a458484846115d6565b611a5184848484611cd3565b610fa35760405162461bcd60e51b815260040161090b90612975565b60155460008281526016602052604081205460609290611a8d904261292d565b611a979190612796565b600f546000858152601860205260409020549192509082811115611ab85750815b8015611ac2578092505b81831115611ad857611ad560018361292d565b92505b600f8381548110611aeb57611aeb6127aa565b906000526020600020018054611b00906126c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2c906126c3565b8015611b795780601f10611b4e57610100808354040283529160200191611b79565b820191906000526020600020905b815481529060010190602001808311611b5c57829003601f168201915b50505050509350505050919050565b606081600003611baf5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bd95780611bc38161295c565b9150611bd29050600a83612796565b9150611bb3565b60008167ffffffffffffffff811115611bf457611bf4612448565b6040519080825280601f01601f191660200182016040528015611c1e576020820181803683370190505b5090505b84156115ce57611c3360018361292d565b9150611c40600a866129c7565b611c4b906030612944565b60f81b818381518110611c6057611c606127aa565b60200101906001600160f81b031916908160001a905350611c82600a86612796565b9450611c22565b60006001600160e01b0319821663780e9d6360e01b14806107b557506107b582611dd4565b6109ac838383611e24565b6107cd828260405180602001604052806000815250611edc565b60006001600160a01b0384163b15611dc957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d179033908990889088906004016129db565b6020604051808303816000875af1925050508015611d52575060408051601f3d908101601f19168201909252611d4f91810190612a18565b60015b611daf573d808015611d80576040519150601f19603f3d011682016040523d82523d6000602084013e611d85565b606091505b508051600003611da75760405162461bcd60e51b815260040161090b90612975565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115ce565b506001949350505050565b60006001600160e01b031982166380ac58cd60e01b1480611e0557506001600160e01b03198216635b5e139f60e01b145b806107b557506301ffc9a760e01b6001600160e01b03198316146107b5565b6001600160a01b038316611e7f57611e7a81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611ea2565b816001600160a01b0316836001600160a01b031614611ea257611ea28382611f0f565b6001600160a01b038216611eb9576109ac81611fac565b826001600160a01b0316826001600160a01b0316146109ac576109ac828261205b565b611ee6838361209f565b611ef36000848484611cd3565b6109ac5760405162461bcd60e51b815260040161090b90612975565b60006001611f1c84610c88565b611f26919061292d565b600083815260076020526040902054909150808214611f79576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611fbe9060019061292d565b60008381526009602052604081205460088054939450909284908110611fe657611fe66127aa565b906000526020600020015490508060088381548110612007576120076127aa565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061203f5761203f612a35565b6001900381819060005260206000200160009055905550505050565b600061206683610c88565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166120f55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161090b565b6000818152600260205260409020546001600160a01b03161561215a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161090b565b61216660008383611cae565b6001600160a01b038216600090815260036020526040812080546001929061218f908490612944565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054828255906000526020600020908101928215612233579160200282015b8281111561223357825182906122239082612a99565b509160200191906001019061220d565b5061223f929150612243565b5090565b8082111561223f5760006122578282612260565b50600101612243565b50805461226c906126c3565b6000825580601f1061227c575050565b601f01602090049060005260206000209081019061130b91905b8082111561223f5760008155600101612296565b6001600160e01b03198116811461130b57600080fd5b6000602082840312156122d257600080fd5b8135611069816122aa565b80356001600160a01b03811681146122f457600080fd5b919050565b6000806040838503121561230c57600080fd5b612315836122dd565b915060208301356001600160601b038116811461233157600080fd5b809150509250929050565b60005b8381101561235757818101518382015260200161233f565b83811115610fa35750506000910152565b6000815180845261238081602086016020860161233c565b601f01601f19169290920160200192915050565b6020815260006110696020830184612368565b6000602082840312156123b957600080fd5b5035919050565b600080604083850312156123d357600080fd5b6123dc836122dd565b946020939093013593505050565b6000806000606084860312156123ff57600080fd5b612408846122dd565b9250612416602085016122dd565b9150604084013590509250925092565b6000806040838503121561243957600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561248757612487612448565b604052919050565b600067ffffffffffffffff8311156124a9576124a9612448565b6124bc601f8401601f191660200161245e565b90508281528383830111156124d057600080fd5b828260208301376000602084830101529392505050565b600060208083850312156124fa57600080fd5b823567ffffffffffffffff8082111561251257600080fd5b818501915085601f83011261252657600080fd5b81358181111561253857612538612448565b8060051b61254785820161245e565b918252838101850191858101908984111561256157600080fd5b86860192505b838310156125b25782358581111561257f5760008081fd5b8601603f81018b136125915760008081fd5b6125a28b898301356040840161248f565b8352509186019190860190612567565b9998505050505050505050565b6000602082840312156125d157600080fd5b611069826122dd565b801515811461130b57600080fd5b600080604083850312156125fb57600080fd5b612604836122dd565b91506020830135612331816125da565b6000806000806080858703121561262a57600080fd5b612633856122dd565b9350612641602086016122dd565b925060408501359150606085013567ffffffffffffffff81111561266457600080fd5b8501601f8101871361267557600080fd5b6126848782356020840161248f565b91505092959194509250565b600080604083850312156126a357600080fd5b6126ac836122dd565b91506126ba602084016122dd565b90509250929050565b600181811c908216806126d757607f821691505b6020821081036126f757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561277b5761277b61274b565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826127a5576127a5612780565b500490565b634e487b7160e01b600052603260045260246000fd5b60208082526030908201527f49206c6f7665206e6f6e2d636f6e747261637420626f74212121284e6f74206160408201526f6e6f7468657220636f6e74726163742960801b606082015260800190565b60208082526027908201527f54686520646179206265666f726520796573746572646179212121284e6f7420604082015266656e6f7567682960c81b606082015260800190565b60008451602061286a8285838a0161233c565b85519184019161287d8184848a0161233c565b855492019160009061288e816126c3565b600182811680156128a657600181146128bb576128e7565b60ff19841687528215158302870194506128e7565b896000528560002060005b848110156128df578154898201529083019087016128c6565b505082870194505b50929a9950505050505050505050565b60006020828403121561290957600080fd5b5051919050565b60006020828403121561292257600080fd5b8151611069816125da565b60008282101561293f5761293f61274b565b500390565b600082198211156129575761295761274b565b500190565b60006001820161296e5761296e61274b565b5060010190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826129d6576129d6612780565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a0e90830184612368565b9695505050505050565b600060208284031215612a2a57600080fd5b8151611069816122aa565b634e487b7160e01b600052603160045260246000fd5b601f8211156109ac57600081815260208120601f850160051c81016020861015612a725750805b601f850160051c820191505b81811015612a9157828155600101612a7e565b505050505050565b815167ffffffffffffffff811115612ab357612ab3612448565b612ac781612ac184546126c3565b84612a4b565b602080601f831160018114612afc5760008415612ae45750858301515b600019600386901b1c1916600185901b178555612a91565b600085815260208120601f198616915b82811015612b2b57888601518255948401946001909101908401612b0c565b5085821015612b495787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212208430edc132011419de1cf73e8ad5a44aac339e3bea1d239fdb77dd08d49c64c664736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000419ac8c44e345d6e2ea9956176a7ac3f663c155700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000003161723a2f2f6e485034306867664a4267777477534136476e6849375247684a544c476e6e7838725f69536e6c58366f492f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003161723a2f2f5256774838474f66744d423154616a714f695232456e72665f497a364a434f6665416e68786f673872616b2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003161723a2f2f465a6d4a726b306742706c6b735f51327a6d687a43434d366b36724c70596f6562613964636565666f5a732f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _coinAddress (address): 0x419ac8C44E345D6E2eA9956176A7Ac3F663c1557
Arg [1] : _baseURIs (string[]): ar://nHP40hgfJBgwtwSA6GnhI7RGhJTLGnnx8r_iSnlX6oI/,ar://RVwH8GOftMB1TajqOiR2Enrf_Iz6JCOfeAnhxog8rak/,ar://FZmJrk0gBplks_Q2zmhzCCM6k6rLpYoeba9dceefoZs/
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 000000000000000000000000419ac8c44e345d6e2ea9956176a7ac3f663c1557
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [7] : 61723a2f2f6e485034306867664a4267777477534136476e6849375247684a54
Arg [8] : 4c476e6e7838725f69536e6c58366f492f000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [10] : 61723a2f2f5256774838474f66744d423154616a714f695232456e72665f497a
Arg [11] : 364a434f6665416e68786f673872616b2f000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [13] : 61723a2f2f465a6d4a726b306742706c6b735f51327a6d687a43434d366b3672
Arg [14] : 4c70596f6562613964636565666f5a732f000000000000000000000000000000
Deployed Bytecode Sourcemap
56941:5725:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62476:187;;;;;;;;;;-1:-1:-1;62476:187:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;62476:187:0;;;;;;;;62008:146;;;;;;;;;;-1:-1:-1;62008:146:0;;;;;:::i;:::-;;:::i;:::-;;37433:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;38946:171::-;;;;;;;;;;-1:-1:-1;38946:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2241:32:1;;;2223:51;;2211:2;2196:18;38946:171:0;2077:203:1;58321:101:0;;;;;;;;;;-1:-1:-1;58321:101:0;;;;;:::i;:::-;;:::i;38463:417::-;;;;;;;;;;-1:-1:-1;38463:417:0;;;;;:::i;:::-;;:::i;51339:113::-;;;;;;;;;;-1:-1:-1;51427:10:0;:17;51339:113;;;2690:25:1;;;2678:2;2663:18;51339:113:0;2544:177:1;39646:336:0;;;;;;;;;;-1:-1:-1;39646:336:0;;;;;:::i;:::-;;:::i;60817:111::-;;;;;;;;;;-1:-1:-1;60817:111:0;;;;;:::i;:::-;;:::i;25835:442::-;;;;;;;;;;-1:-1:-1;25835:442:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3504:32:1;;;3486:51;;3568:2;3553:18;;3546:34;;;;3459:18;25835:442:0;3312:274:1;51007:256:0;;;;;;;;;;-1:-1:-1;51007:256:0;;;;;:::i;:::-;;:::i;60569:110::-;;;;;;;;;;-1:-1:-1;60569:110:0;;;;;:::i;:::-;;:::i;62166:114::-;;;;;;;;;;;;;:::i;40053:185::-;;;;;;;;;;-1:-1:-1;40053:185:0;;;;;:::i;:::-;;:::i;51529:233::-;;;;;;;;;;-1:-1:-1;51529:233:0;;;;;:::i;:::-;;:::i;37144:222::-;;;;;;;;;;-1:-1:-1;37144:222:0;;;;;:::i;:::-;;:::i;36875:207::-;;;;;;;;;;-1:-1:-1;36875:207:0;;;;;:::i;:::-;;:::i;10911:103::-;;;;;;;;;;;;;:::i;58547:110::-;;;;;;;;;;-1:-1:-1;58547:110:0;;;;;:::i;:::-;;:::i;60936:290::-;;;;;;;;;;-1:-1:-1;60936:290:0;;;;;:::i;:::-;;:::i;57413:35::-;;;;;;;;;;;;;;;;10263:87;;;;;;;;;;-1:-1:-1;10336:6:0;;-1:-1:-1;;;;;10336:6:0;10263:87;;37602:104;;;;;;;;;;;;;:::i;59565:419::-;;;;;;:::i;:::-;;:::i;58814:110::-;;;;;;;;;;-1:-1:-1;58814:110:0;;;;;:::i;:::-;;:::i;39189:155::-;;;;;;;;;;-1:-1:-1;39189:155:0;;;;;:::i;:::-;;:::i;57744:29::-;;;;;;;;;;-1:-1:-1;57744:29:0;;;;-1:-1:-1;;;;;57744:29:0;;;58684:122;;;;;;;;;;-1:-1:-1;58684:122:0;;;;;:::i;:::-;;:::i;57691:44::-;;;;;;;;;;-1:-1:-1;57691:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;40309:323;;;;;;;;;;-1:-1:-1;40309:323:0;;;;;:::i;:::-;;:::i;57780:30::-;;;;;;;;;;-1:-1:-1;57780:30:0;;;;-1:-1:-1;;;57780:30:0;;-1:-1:-1;;;;;57780:30:0;;;;;;-1:-1:-1;;;;;7260:39:1;;;7242:58;;7230:2;7215:18;57780:30:0;7098:208:1;61597:383:0;;;;;;;;;;-1:-1:-1;61597:383:0;;;;;:::i;:::-;;:::i;59992:546::-;;;;;;:::i;:::-;;:::i;58430:109::-;;;;;;;;;;-1:-1:-1;58430:109:0;;;;;:::i;:::-;;:::i;60687:122::-;;;;;;;;;;-1:-1:-1;60687:122:0;;;;;:::i;:::-;;:::i;57455:29::-;;;;;;;;;;;;;;;;39415:164;;;;;;;;;;-1:-1:-1;39415:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;39536:25:0;;;39512:4;39536:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;39415:164;57333:31;;;;;;;;;;;;;;;;57371:35;;;;;;;;;;;;;;;;11169:201;;;;;;;;;;-1:-1:-1;11169:201:0;;;;;:::i;:::-;;:::i;57076:25::-;;;;;;;;;;-1:-1:-1;57076:25:0;;;;-1:-1:-1;;;;;57076:25:0;;;62476:187;62595:4;62619:36;62643:11;62619:23;:36::i;:::-;62612:43;62476:187;-1:-1:-1;;62476:187:0:o;62008:146::-;10149:13;:11;:13::i;:::-;62104:42:::1;62123:8;62133:12;62104:18;:42::i;:::-;62008:146:::0;;:::o;37433:100::-;37487:13;37520:5;37513:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37433:100;:::o;38946:171::-;39022:7;39042:23;39057:7;39042:14;:23::i;:::-;-1:-1:-1;39085:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;39085:24:0;;38946:171::o;58321:101::-;10149:13;:11;:13::i;:::-;58391:12:::1;:23:::0;58321:101::o;38463:417::-;38544:13;38560:23;38575:7;38560:14;:23::i;:::-;38544:39;;38608:5;-1:-1:-1;;;;;38602:11:0;:2;-1:-1:-1;;;;;38602:11:0;;38594:57;;;;-1:-1:-1;;;38594:57:0;;8385:2:1;38594:57:0;;;8367:21:1;8424:2;8404:18;;;8397:30;8463:34;8443:18;;;8436:62;-1:-1:-1;;;8514:18:1;;;8507:31;8555:19;;38594:57:0;;;;;;;;;8894:10;-1:-1:-1;;;;;38686:21:0;;;;:62;;-1:-1:-1;38711:37:0;38728:5;8894:10;39415:164;:::i;38711:37::-;38664:174;;;;-1:-1:-1;;;38664:174:0;;8787:2:1;38664:174:0;;;8769:21:1;8826:2;8806:18;;;8799:30;8865:34;8845:18;;;8838:62;8936:32;8916:18;;;8909:60;8986:19;;38664:174:0;8585:426:1;38664:174:0;38851:21;38860:2;38864:7;38851:8;:21::i;:::-;38533:347;38463:417;;:::o;39646:336::-;39841:41;8894:10;39874:7;39841:18;:41::i;:::-;39833:100;;;;-1:-1:-1;;;39833:100:0;;;;;;;:::i;:::-;39946:28;39956:4;39962:2;39966:7;39946:9;:28::i;60817:111::-;10149:13;:11;:13::i;:::-;60892:17:::1;:28:::0;60817:111::o;25835:442::-;25932:7;25990:27;;;:17;:27;;;;;;;;25961:56;;;;;;;;;-1:-1:-1;;;;;25961:56:0;;;;;-1:-1:-1;;;25961:56:0;;;-1:-1:-1;;;;;25961:56:0;;;;;;;;25932:7;;26030:92;;-1:-1:-1;26081:29:0;;;;;;;;;26091:19;26081:29;-1:-1:-1;;;;;26081:29:0;;;;-1:-1:-1;;;26081:29:0;;-1:-1:-1;;;;;26081:29:0;;;;;26030:92;26172:23;;;;26134:21;;26643:5;;26159:36;;-1:-1:-1;;;;;26159:36:0;:10;:36;:::i;:::-;26158:58;;;;:::i;:::-;26237:16;;;;;-1:-1:-1;25835:442:0;;-1:-1:-1;;;;25835:442:0:o;51007:256::-;51104:7;51140:23;51157:5;51140:16;:23::i;:::-;51132:5;:31;51124:87;;;;-1:-1:-1;;;51124:87:0;;10195:2:1;51124:87:0;;;10177:21:1;10234:2;10214:18;;;10207:30;10273:34;10253:18;;;10246:62;-1:-1:-1;;;10324:18:1;;;10317:41;10375:19;;51124:87:0;9993:407:1;51124:87:0;-1:-1:-1;;;;;;51229:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;51007:256::o;60569:110::-;10149:13;:11;:13::i;:::-;60649:22;;::::1;::::0;:8:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;62166:114::-:0;10149:13;:11;:13::i;:::-;62224:47:::1;::::0;62232:10:::1;::::0;62249:21:::1;62224:47:::0;::::1;;;::::0;::::1;::::0;;;62249:21;62232:10;62224:47;::::1;;;;;;62216:56;;;::::0;::::1;;62166:114::o:0;40053:185::-;40191:39;40208:4;40214:2;40218:7;40191:39;;;;;;;;;;;;:16;:39::i;51529:233::-;51604:7;51640:30;51427:10;:17;;51339:113;51640:30;51632:5;:38;51624:95;;;;-1:-1:-1;;;51624:95:0;;10607:2:1;51624:95:0;;;10589:21:1;10646:2;10626:18;;;10619:30;10685:34;10665:18;;;10658:62;-1:-1:-1;;;10736:18:1;;;10729:42;10788:19;;51624:95:0;10405:408:1;51624:95:0;51737:10;51748:5;51737:17;;;;;;;;:::i;:::-;;;;;;;;;51730:24;;51529:233;;;:::o;37144:222::-;37216:7;37252:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37252:16:0;;37279:56;;;;-1:-1:-1;;;37279:56:0;;11152:2:1;37279:56:0;;;11134:21:1;11191:2;11171:18;;;11164:30;-1:-1:-1;;;11210:18:1;;;11203:54;11274:18;;37279:56:0;10950:348:1;36875:207:0;36947:7;-1:-1:-1;;;;;36975:19:0;;36967:73;;;;-1:-1:-1;;;36967:73:0;;11505:2:1;36967:73:0;;;11487:21:1;11544:2;11524:18;;;11517:30;11583:34;11563:18;;;11556:62;-1:-1:-1;;;11634:18:1;;;11627:39;11683:19;;36967:73:0;11303:405:1;36967:73:0;-1:-1:-1;;;;;;37058:16:0;;;;;:9;:16;;;;;;;36875:207::o;10911:103::-;10149:13;:11;:13::i;:::-;10976:30:::1;11003:1;10976:18;:30::i;58547:110::-:0;10149:13;:11;:13::i;:::-;58623:10:::1;:26:::0;58547:110::o;60936:290::-;57195:1;61023:17;;:32;61015:70;;;;-1:-1:-1;;;61015:70:0;;11915:2:1;61015:70:0;;;11897:21:1;11954:2;11934:18;;;11927:30;11993:27;11973:18;;;11966:55;12038:18;;61015:70:0;11713:349:1;61015:70:0;61124:10;61104:16;61112:7;61104;:16::i;:::-;-1:-1:-1;;;;;61104:30:0;;61096:76;;;;-1:-1:-1;;;61096:76:0;;12269:2:1;61096:76:0;;;12251:21:1;12308:2;12288:18;;;12281:30;12347:34;12327:18;;;12320:62;-1:-1:-1;;;12398:18:1;;;12391:31;12439:19;;61096:76:0;12067:397:1;61096:76:0;61185:18;;;;:9;:18;;;;;;:33;60936:290::o;37602:104::-;37658:13;37691:7;37684:14;;;;;:::i;59565:419::-;1812:1;2410:7;;:19;2402:63;;;;-1:-1:-1;;;2402:63:0;;12671:2:1;2402:63:0;;;12653:21:1;12710:2;12690:18;;;12683:30;12749:33;12729:18;;;12722:61;12800:18;;2402:63:0;12469:355:1;2402:63:0;1812:1;2543:7;:18;58117:9:::1;58130:10;58117:23;58109:84;;;;-1:-1:-1::0;;;58109:84:0::1;;;;;;;:::i;:::-;59654:12:::2;59682:13;59669:10;;:26;;;;:::i;:::-;59654:41;;59706:10;59719:13;51427:10:::0;:17;;51339:113;59719:13:::2;59706:26;;57195:1;59761:12;;:27;59753:68;;;::::0;-1:-1:-1;;;59753:68:0;;13448:2:1;59753:68:0::2;::::0;::::2;13430:21:1::0;13487:2;13467:18;;;13460:30;13526;13506:18;;;13499:58;13574:18;;59753:68:0::2;13246:352:1::0;59753:68:0::2;59834:28;59844:13;59859:2;59834:9;:28::i;:::-;59894:4;59881:9;:17;;59873:69;;;;-1:-1:-1::0;;;59873:69:0::2;;;;;;;:::i;:::-;59953:23;59959:13;59973:2;59953:5;:23::i;:::-;-1:-1:-1::0;;1768:1:0;2722:7;:22;-1:-1:-1;59565:419:0:o;58814:110::-;10149:13;:11;:13::i;:::-;58890:10:::1;:26:::0;58814:110::o;39189:155::-;39284:52;8894:10;39317:8;39327;39284:18;:52::i;58684:122::-;10149:13;:11;:13::i;:::-;58762:11:::1;:36:::0;;-1:-1:-1;;;;;;58762:36:0::1;-1:-1:-1::0;;;;;58762:36:0;;;::::1;::::0;;;::::1;::::0;;58684:122::o;40309:323::-;40483:41;8894:10;40516:7;40483:18;:41::i;:::-;40475:100;;;;-1:-1:-1;;;40475:100:0;;;;;;;:::i;:::-;40586:38;40600:4;40606:2;40610:7;40619:4;40586:13;:38::i;:::-;40309:323;;;;:::o;61597:383::-;42204:4;42228:16;;;:7;:16;;;;;;61670:13;;-1:-1:-1;;;;;42228:16:0;61696:56;;;;-1:-1:-1;;;61696:56:0;;14213:2:1;61696:56:0;;;14195:21:1;14252:2;14232:18;;;14225:30;14291;14271:18;;;14264:58;14339:18;;61696:56:0;14011:352:1;61696:56:0;61765:28;61796:17;61805:7;61796:8;:17::i;:::-;61765:48;;61862:1;61837:14;61831:28;:32;:141;;;;;;;;;;;;;;;;;61903:14;61919:18;:7;:16;:18::i;:::-;61939:13;61886:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;61831:141;61824:148;61597:383;-1:-1:-1;;;61597:383:0:o;59992:546::-;1812:1;2410:7;;:19;2402:63;;;;-1:-1:-1;;;2402:63:0;;12671:2:1;2402:63:0;;;12653:21:1;12710:2;12690:18;;;12683:30;12749:33;12729:18;;;12722:61;12800:18;;2402:63:0;12469:355:1;2402:63:0;1812:1;2543:7;:18;58117:9:::1;58130:10;58117:23;58109:84;;;;-1:-1:-1::0;;;58109:84:0::1;;;;;;;:::i;:::-;60087:12:::2;60115:13;60102:10;;:26;;;;:::i;:::-;60087:41;;60139:10;60152:13;51427:10:::0;:17;;51339:113;60152:13:::2;60139:26;;57195:1;60194:16;;:31;60186:80;;;::::0;-1:-1:-1;;;60186:80:0;;15931:2:1;60186:80:0::2;::::0;::::2;15913:21:1::0;15970:2;15950:18;;;15943:30;16009:34;15989:18;;;15982:62;-1:-1:-1;;;16060:18:1;;;16053:34;16104:19;;60186:80:0::2;15729:400:1::0;60186:80:0::2;60287:28;60297:13;60312:2;60287:9;:28::i;:::-;60334:11;::::0;:33:::2;::::0;-1:-1:-1;;;60334:33:0;;60356:10:::2;60334:33;::::0;::::2;2223:51:1::0;60371:4:0;;-1:-1:-1;;;;;60334:11:0::2;::::0;:21:::2;::::0;2196:18:1;;60334:33:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;60326:93;;;;-1:-1:-1::0;;;60326:93:0::2;;;;;;;:::i;:::-;60438:11;::::0;:57:::2;::::0;-1:-1:-1;;;60438:57:0;;60463:10:::2;60438:57;::::0;::::2;16563:34:1::0;60483:4:0::2;16613:18:1::0;;;16606:43;16665:18;;;16658:34;;;-1:-1:-1;;;;;60438:11:0;;::::2;::::0;:24:::2;::::0;16498:18:1;;60438:57:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60430:66;;;::::0;::::2;58430:109:::0;10149:13;:11;:13::i;:::-;58504:16:::1;:27:::0;58430:109::o;60687:122::-;10149:13;:11;:13::i;:::-;60769::::1;:32:::0;60687:122::o;11169:201::-;10149:13;:11;:13::i;:::-;-1:-1:-1;;;;;11258:22:0;::::1;11250:73;;;::::0;-1:-1:-1;;;11250:73:0;;17155:2:1;11250:73:0::1;::::0;::::1;17137:21:1::0;17194:2;17174:18;;;17167:30;17233:34;17213:18;;;17206:62;-1:-1:-1;;;17284:18:1;;;17277:36;17330:19;;11250:73:0::1;16953:402:1::0;11250:73:0::1;11334:28;11353:8;11334:18;:28::i;:::-;11169:201:::0;:::o;25565:215::-;25667:4;-1:-1:-1;;;;;;25691:41:0;;-1:-1:-1;;;25691:41:0;;:81;;;25736:36;25760:11;25736:23;:36::i;10428:132::-;10336:6;;-1:-1:-1;;;;;10336:6:0;8894:10;10492:23;10484:68;;;;-1:-1:-1;;;10484:68:0;;17562:2:1;10484:68:0;;;17544:21:1;;;17581:18;;;17574:30;17640:34;17620:18;;;17613:62;17692:18;;10484:68:0;17360:356:1;26927:332:0;26643:5;-1:-1:-1;;;;;27030:33:0;;;;27022:88;;;;-1:-1:-1;;;27022:88:0;;17923:2:1;27022:88:0;;;17905:21:1;17962:2;17942:18;;;17935:30;18001:34;17981:18;;;17974:62;-1:-1:-1;;;18052:18:1;;;18045:40;18102:19;;27022:88:0;17721:406:1;27022:88:0;-1:-1:-1;;;;;27129:22:0;;27121:60;;;;-1:-1:-1;;;27121:60:0;;18334:2:1;27121:60:0;;;18316:21:1;18373:2;18353:18;;;18346:30;18412:27;18392:18;;;18385:55;18457:18;;27121:60:0;18132:349:1;27121:60:0;27216:35;;;;;;;;;-1:-1:-1;;;;;27216:35:0;;;;;;-1:-1:-1;;;;;27216:35:0;;;;;;;;;;-1:-1:-1;;;27194:57:0;;;;:19;:57;26927:332::o;46921:135::-;42204:4;42228:16;;;:7;:16;;;;;;-1:-1:-1;;;;;42228:16:0;46995:53;;;;-1:-1:-1;;;46995:53:0;;11152:2:1;46995:53:0;;;11134:21:1;11191:2;11171:18;;;11164:30;-1:-1:-1;;;11210:18:1;;;11203:54;11274:18;;46995:53:0;10950:348:1;46200:174:0;46275:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;46275:29:0;-1:-1:-1;;;;;46275:29:0;;;;;;;;:24;;46329:23;46275:24;46329:14;:23::i;:::-;-1:-1:-1;;;;;46320:46:0;;;;;;;;;;;46200:174;;:::o;42433:264::-;42526:4;42543:13;42559:23;42574:7;42559:14;:23::i;:::-;42543:39;;42612:5;-1:-1:-1;;;;;42601:16:0;:7;-1:-1:-1;;;;;42601:16:0;;:52;;;-1:-1:-1;;;;;;39536:25:0;;;39512:4;39536:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;42621:32;42601:87;;;;42681:7;-1:-1:-1;;;;;42657:31:0;:20;42669:7;42657:11;:20::i;:::-;-1:-1:-1;;;;;42657:31:0;;42601:87;42593:96;42433:264;-1:-1:-1;;;;42433:264:0:o;45456:625::-;45615:4;-1:-1:-1;;;;;45588:31:0;:23;45603:7;45588:14;:23::i;:::-;-1:-1:-1;;;;;45588:31:0;;45580:81;;;;-1:-1:-1;;;45580:81:0;;18688:2:1;45580:81:0;;;18670:21:1;18727:2;18707:18;;;18700:30;18766:34;18746:18;;;18739:62;-1:-1:-1;;;18817:18:1;;;18810:35;18862:19;;45580:81:0;18486:401:1;45580:81:0;-1:-1:-1;;;;;45680:16:0;;45672:65;;;;-1:-1:-1;;;45672:65:0;;19094:2:1;45672:65:0;;;19076:21:1;19133:2;19113:18;;;19106:30;19172:34;19152:18;;;19145:62;-1:-1:-1;;;19223:18:1;;;19216:34;19267:19;;45672:65:0;18892:400:1;45672:65:0;45750:39;45771:4;45777:2;45781:7;45750:20;:39::i;:::-;45854:29;45871:1;45875:7;45854:8;:29::i;:::-;-1:-1:-1;;;;;45896:15:0;;;;;;:9;:15;;;;;:20;;45915:1;;45896:15;:20;;45915:1;;45896:20;:::i;:::-;;;;-1:-1:-1;;;;;;;45927:13:0;;;;;;:9;:13;;;;;:18;;45944:1;;45927:13;:18;;45944:1;;45927:18;:::i;:::-;;;;-1:-1:-1;;45956:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;45956:21:0;-1:-1:-1;;;;;45956:21:0;;;;;;;;;45995:27;;45956:16;;45995:27;;;;;;;38533:347;38463:417;;:::o;11530:191::-;11623:6;;;-1:-1:-1;;;;;11640:17:0;;;-1:-1:-1;;;;;;11640:17:0;;;;;;;11673:40;;11623:6;;;11640:17;11623:6;;11673:40;;11604:16;;11673:40;11593:128;11530:191;:::o;58951:307::-;59056:21;57536:2;59076:1;59056:21;:::i;:::-;59039:14;:38;59031:76;;;;-1:-1:-1;;;59031:76:0;;19762:2:1;59031:76:0;;;19744:21:1;19801:2;19781:18;;;19774:30;19840:27;19820:18;;;19813:55;19885:18;;59031:76:0;19560:349:1;59031:76:0;59143:1;59126:14;:18;59118:52;;;;-1:-1:-1;;;59118:52:0;;20116:2:1;59118:52:0;;;20098:21:1;20155:2;20135:18;;;20128:30;-1:-1:-1;;;20174:18:1;;;20167:51;20235:18;;59118:52:0;19914:345:1;59118:52:0;59212:14;57243:4;59225:1;59212:14;:::i;:::-;59189:20;59195:14;59189:3;:20;:::i;:::-;:37;59181:69;;;;-1:-1:-1;;;59181:69:0;;20466:2:1;59181:69:0;;;20448:21:1;20505:2;20485:18;;;20478:30;-1:-1:-1;;;20524:18:1;;;20517:50;20584:18;;59181:69:0;20264:344:1;59266:291:0;59354:1;59337:158;59361:18;:14;59378:1;59361:18;:::i;:::-;59357:1;:22;59337:158;;;59423:15;59401:10;:19;59412:7;59418:1;59412:3;:7;:::i;:::-;59401:19;;;;;;;;;;;-1:-1:-1;59401:19:0;:37;59453:30;59463:10;59475:7;59481:1;59475:3;:7;:::i;:::-;59453:9;:30::i;:::-;59381:3;;;;:::i;:::-;;;;59337:158;;;-1:-1:-1;59510:39:0;;;59517:10;20955:51:1;;21037:2;21022:18;;21015:34;;;21065:18;;;21058:34;;;59510:39:0;;20943:2:1;20928:18;59510:39:0;;;;;;;59266:291;;:::o;46517:315::-;46672:8;-1:-1:-1;;;;;46663:17:0;:5;-1:-1:-1;;;;;46663:17:0;;46655:55;;;;-1:-1:-1;;;46655:55:0;;21305:2:1;46655:55:0;;;21287:21:1;21344:2;21324:18;;;21317:30;21383:27;21363:18;;;21356:55;21428:18;;46655:55:0;21103:349:1;46655:55:0;-1:-1:-1;;;;;46721:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;46721:46:0;;;;;;;;;;46783:41;;540::1;;;46783::0;;513:18:1;46783:41:0;;;;;;;46517:315;;;:::o;41513:313::-;41669:28;41679:4;41685:2;41689:7;41669:9;:28::i;:::-;41716:47;41739:4;41745:2;41749:7;41758:4;41716:22;:47::i;:::-;41708:110;;;;-1:-1:-1;;;41708:110:0;;;;;;;:::i;61236:353::-;61374:13;;61320:9;61351:19;;;:10;:19;;;;;;61294:13;;61374;61333:37;;:15;:37;:::i;:::-;61332:55;;;;:::i;:::-;61410:8;:15;61398:9;61448:18;;;:9;:18;;;;;;61320:67;;-1:-1:-1;61410:15:0;61481:5;;;61477:16;;;-1:-1:-1;61492:1:0;61477:16;61508:6;;61504:17;;61520:1;61516:5;;61504:17;61540:1;61536;:5;61532:20;;;61547:5;61551:1;61547;:5;:::i;:::-;61543:9;;61532:20;61570:8;61579:1;61570:11;;;;;;;;:::i;:::-;;;;;;;;61563:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61236:353;;;:::o;6068:723::-;6124:13;6345:5;6354:1;6345:10;6341:53;;-1:-1:-1;;6372:10:0;;;;;;;;;;;;-1:-1:-1;;;6372:10:0;;;;;6068:723::o;6341:53::-;6419:5;6404:12;6460:78;6467:9;;6460:78;;6493:8;;;;:::i;:::-;;-1:-1:-1;6516:10:0;;-1:-1:-1;6524:2:0;6516:10;;:::i;:::-;;;6460:78;;;6548:19;6580:6;6570:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6570:17:0;;6548:39;;6598:154;6605:10;;6598:154;;6632:11;6642:1;6632:11;;:::i;:::-;;-1:-1:-1;6701:10:0;6709:2;6701:5;:10;:::i;:::-;6688:24;;:2;:24;:::i;:::-;6675:39;;6658:6;6665;6658:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;6658:56:0;;;;;;;;-1:-1:-1;6729:11:0;6738:2;6729:11;;:::i;:::-;;;6598:154;;50699:224;50801:4;-1:-1:-1;;;;;;50825:50:0;;-1:-1:-1;;;50825:50:0;;:90;;;50879:36;50903:11;50879:23;:36::i;62288:180::-;62415:45;62442:4;62448:2;62452:7;62415:26;:45::i;43039:110::-;43115:26;43125:2;43129:7;43115:26;;;;;;;;;;;;:9;:26::i;47620:853::-;47774:4;-1:-1:-1;;;;;47795:13:0;;13256:19;:23;47791:675;;47831:71;;-1:-1:-1;;;47831:71:0;;-1:-1:-1;;;;;47831:36:0;;;;;:71;;8894:10;;47882:4;;47888:7;;47897:4;;47831:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47831:71:0;;;;;;;;-1:-1:-1;;47831:71:0;;;;;;;;;;;;:::i;:::-;;;47827:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48072:6;:13;48089:1;48072:18;48068:328;;48115:60;;-1:-1:-1;;;48115:60:0;;;;;;;:::i;48068:328::-;48346:6;48340:13;48331:6;48327:2;48323:15;48316:38;47827:584;-1:-1:-1;;;;;;47953:51:0;-1:-1:-1;;;47953:51:0;;-1:-1:-1;47946:58:0;;47791:675;-1:-1:-1;48450:4:0;47620:853;;;;;;:::o;36506:305::-;36608:4;-1:-1:-1;;;;;;36645:40:0;;-1:-1:-1;;;36645:40:0;;:105;;-1:-1:-1;;;;;;;36702:48:0;;-1:-1:-1;;;36702:48:0;36645:105;:158;;;-1:-1:-1;;;;;;;;;;24124:40:0;;;36767:36;24015:157;52375:589;-1:-1:-1;;;;;52581:18:0;;52577:187;;52616:40;52648:7;53791:10;:17;;53764:24;;;;:15;:24;;;;;:44;;;53819:24;;;;;;;;;;;;53687:164;52616:40;52577:187;;;52686:2;-1:-1:-1;;;;;52678:10:0;:4;-1:-1:-1;;;;;52678:10:0;;52674:90;;52705:47;52738:4;52744:7;52705:32;:47::i;:::-;-1:-1:-1;;;;;52778:16:0;;52774:183;;52811:45;52848:7;52811:36;:45::i;52774:183::-;52884:4;-1:-1:-1;;;;;52878:10:0;:2;-1:-1:-1;;;;;52878:10:0;;52874:83;;52905:40;52933:2;52937:7;52905:27;:40::i;43376:319::-;43505:18;43511:2;43515:7;43505:5;:18::i;:::-;43556:53;43587:1;43591:2;43595:7;43604:4;43556:22;:53::i;:::-;43534:153;;;;-1:-1:-1;;;43534:153:0;;;;;;;:::i;54478:988::-;54744:22;54794:1;54769:22;54786:4;54769:16;:22::i;:::-;:26;;;;:::i;:::-;54806:18;54827:26;;;:17;:26;;;;;;54744:51;;-1:-1:-1;54960:28:0;;;54956:328;;-1:-1:-1;;;;;55027:18:0;;55005:19;55027:18;;;:12;:18;;;;;;;;:34;;;;;;;;;55078:30;;;;;;:44;;;55195:30;;:17;:30;;;;;:43;;;54956:328;-1:-1:-1;55380:26:0;;;;:17;:26;;;;;;;;55373:33;;;-1:-1:-1;;;;;55424:18:0;;;;;:12;:18;;;;;:34;;;;;;;55417:41;54478:988::o;55761:1079::-;56039:10;:17;56014:22;;56039:21;;56059:1;;56039:21;:::i;:::-;56071:18;56092:24;;;:15;:24;;;;;;56465:10;:26;;56014:46;;-1:-1:-1;56092:24:0;;56014:46;;56465:26;;;;;;:::i;:::-;;;;;;;;;56443:48;;56529:11;56504:10;56515;56504:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;56609:28;;;:15;:28;;;;;;;:41;;;56781:24;;;;;56774:31;56816:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;55832:1008;;;55761:1079;:::o;53265:221::-;53350:14;53367:20;53384:2;53367:16;:20::i;:::-;-1:-1:-1;;;;;53398:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;53443:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;53265:221:0:o;44031:439::-;-1:-1:-1;;;;;44111:16:0;;44103:61;;;;-1:-1:-1;;;44103:61:0;;23075:2:1;44103:61:0;;;23057:21:1;;;23094:18;;;23087:30;23153:34;23133:18;;;23126:62;23205:18;;44103:61:0;22873:356:1;44103:61:0;42204:4;42228:16;;;:7;:16;;;;;;-1:-1:-1;;;;;42228:16:0;:30;44175:58;;;;-1:-1:-1;;;44175:58:0;;23436:2:1;44175:58:0;;;23418:21:1;23475:2;23455:18;;;23448:30;23514;23494:18;;;23487:58;23562:18;;44175:58:0;23234:352:1;44175:58:0;44246:45;44275:1;44279:2;44283:7;44246:20;:45::i;:::-;-1:-1:-1;;;;;44304:13:0;;;;;;:9;:13;;;;;:18;;44321:1;;44304:13;:18;;44321:1;;44304:18;:::i;:::-;;;;-1:-1:-1;;44333:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;44333:21:0;-1:-1:-1;;;;;44333:21:0;;;;;;;;44372:33;;44333:16;;;44372:33;;44333:16;;44372:33;62008:146;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:173::-;660:20;;-1:-1:-1;;;;;709:31:1;;699:42;;689:70;;755:1;752;745:12;689:70;592:173;;;:::o;770:366::-;837:6;845;898:2;886:9;877:7;873:23;869:32;866:52;;;914:1;911;904:12;866:52;937:29;956:9;937:29;:::i;:::-;927:39;;1016:2;1005:9;1001:18;988:32;-1:-1:-1;;;;;1053:5:1;1049:38;1042:5;1039:49;1029:77;;1102:1;1099;1092:12;1029:77;1125:5;1115:15;;;770:366;;;;;:::o;1141:258::-;1213:1;1223:113;1237:6;1234:1;1231:13;1223:113;;;1313:11;;;1307:18;1294:11;;;1287:39;1259:2;1252:10;1223:113;;;1354:6;1351:1;1348:13;1345:48;;;-1:-1:-1;;1389:1:1;1371:16;;1364:27;1141:258::o;1404:::-;1446:3;1484:5;1478:12;1511:6;1506:3;1499:19;1527:63;1583:6;1576:4;1571:3;1567:14;1560:4;1553:5;1549:16;1527:63;:::i;:::-;1644:2;1623:15;-1:-1:-1;;1619:29:1;1610:39;;;;1651:4;1606:50;;1404:258;-1:-1:-1;;1404:258:1:o;1667:220::-;1816:2;1805:9;1798:21;1779:4;1836:45;1877:2;1866:9;1862:18;1854:6;1836:45;:::i;1892:180::-;1951:6;2004:2;1992:9;1983:7;1979:23;1975:32;1972:52;;;2020:1;2017;2010:12;1972:52;-1:-1:-1;2043:23:1;;1892:180;-1:-1:-1;1892:180:1:o;2285:254::-;2353:6;2361;2414:2;2402:9;2393:7;2389:23;2385:32;2382:52;;;2430:1;2427;2420:12;2382:52;2453:29;2472:9;2453:29;:::i;:::-;2443:39;2529:2;2514:18;;;;2501:32;;-1:-1:-1;;;2285:254:1:o;2726:328::-;2803:6;2811;2819;2872:2;2860:9;2851:7;2847:23;2843:32;2840:52;;;2888:1;2885;2878:12;2840:52;2911:29;2930:9;2911:29;:::i;:::-;2901:39;;2959:38;2993:2;2982:9;2978:18;2959:38;:::i;:::-;2949:48;;3044:2;3033:9;3029:18;3016:32;3006:42;;2726:328;;;;;:::o;3059:248::-;3127:6;3135;3188:2;3176:9;3167:7;3163:23;3159:32;3156:52;;;3204:1;3201;3194:12;3156:52;-1:-1:-1;;3227:23:1;;;3297:2;3282:18;;;3269:32;;-1:-1:-1;3059:248:1:o;3591:127::-;3652:10;3647:3;3643:20;3640:1;3633:31;3683:4;3680:1;3673:15;3707:4;3704:1;3697:15;3723:275;3794:2;3788:9;3859:2;3840:13;;-1:-1:-1;;3836:27:1;3824:40;;3894:18;3879:34;;3915:22;;;3876:62;3873:88;;;3941:18;;:::i;:::-;3977:2;3970:22;3723:275;;-1:-1:-1;3723:275:1:o;4003:407::-;4068:5;4102:18;4094:6;4091:30;4088:56;;;4124:18;;:::i;:::-;4162:57;4207:2;4186:15;;-1:-1:-1;;4182:29:1;4213:4;4178:40;4162:57;:::i;:::-;4153:66;;4242:6;4235:5;4228:21;4282:3;4273:6;4268:3;4264:16;4261:25;4258:45;;;4299:1;4296;4289:12;4258:45;4348:6;4343:3;4336:4;4329:5;4325:16;4312:43;4402:1;4395:4;4386:6;4379:5;4375:18;4371:29;4364:40;4003:407;;;;;:::o;4415:1372::-;4509:6;4540:2;4583;4571:9;4562:7;4558:23;4554:32;4551:52;;;4599:1;4596;4589:12;4551:52;4639:9;4626:23;4668:18;4709:2;4701:6;4698:14;4695:34;;;4725:1;4722;4715:12;4695:34;4763:6;4752:9;4748:22;4738:32;;4808:7;4801:4;4797:2;4793:13;4789:27;4779:55;;4830:1;4827;4820:12;4779:55;4866:2;4853:16;4888:2;4884;4881:10;4878:36;;;4894:18;;:::i;:::-;4940:2;4937:1;4933:10;4963:28;4987:2;4983;4979:11;4963:28;:::i;:::-;5025:15;;;5095:11;;;5091:20;;;5056:12;;;;5123:19;;;5120:39;;;5155:1;5152;5145:12;5120:39;5187:2;5183;5179:11;5168:22;;5199:558;5215:6;5210:3;5207:15;5199:558;;;5301:3;5288:17;5337:2;5324:11;5321:19;5318:109;;;5381:1;5410:2;5406;5399:14;5318:109;5450:20;;5505:2;5497:11;;5493:25;-1:-1:-1;5483:123:1;;5560:1;5589:2;5585;5578:14;5483:123;5631:83;5706:7;5700:2;5696;5692:11;5679:25;5674:2;5670;5666:11;5631:83;:::i;:::-;5619:96;;-1:-1:-1;5232:12:1;;;;5735;;;;5199:558;;;5776:5;4415:1372;-1:-1:-1;;;;;;;;;4415:1372:1:o;5792:186::-;5851:6;5904:2;5892:9;5883:7;5879:23;5875:32;5872:52;;;5920:1;5917;5910:12;5872:52;5943:29;5962:9;5943:29;:::i;5983:118::-;6069:5;6062:13;6055:21;6048:5;6045:32;6035:60;;6091:1;6088;6081:12;6106:315;6171:6;6179;6232:2;6220:9;6211:7;6207:23;6203:32;6200:52;;;6248:1;6245;6238:12;6200:52;6271:29;6290:9;6271:29;:::i;:::-;6261:39;;6350:2;6339:9;6335:18;6322:32;6363:28;6385:5;6363:28;:::i;6426:667::-;6521:6;6529;6537;6545;6598:3;6586:9;6577:7;6573:23;6569:33;6566:53;;;6615:1;6612;6605:12;6566:53;6638:29;6657:9;6638:29;:::i;:::-;6628:39;;6686:38;6720:2;6709:9;6705:18;6686:38;:::i;:::-;6676:48;;6771:2;6760:9;6756:18;6743:32;6733:42;;6826:2;6815:9;6811:18;6798:32;6853:18;6845:6;6842:30;6839:50;;;6885:1;6882;6875:12;6839:50;6908:22;;6961:4;6953:13;;6949:27;-1:-1:-1;6939:55:1;;6990:1;6987;6980:12;6939:55;7013:74;7079:7;7074:2;7061:16;7056:2;7052;7048:11;7013:74;:::i;:::-;7003:84;;;6426:667;;;;;;;:::o;7311:260::-;7379:6;7387;7440:2;7428:9;7419:7;7415:23;7411:32;7408:52;;;7456:1;7453;7446:12;7408:52;7479:29;7498:9;7479:29;:::i;:::-;7469:39;;7527:38;7561:2;7550:9;7546:18;7527:38;:::i;:::-;7517:48;;7311:260;;;;;:::o;7798:380::-;7877:1;7873:12;;;;7920;;;7941:61;;7995:4;7987:6;7983:17;7973:27;;7941:61;8048:2;8040:6;8037:14;8017:18;8014:38;8011:161;;8094:10;8089:3;8085:20;8082:1;8075:31;8129:4;8126:1;8119:15;8157:4;8154:1;8147:15;8011:161;;7798:380;;;:::o;9016:410::-;9218:2;9200:21;;;9257:2;9237:18;;;9230:30;9296:34;9291:2;9276:18;;9269:62;-1:-1:-1;;;9362:2:1;9347:18;;9340:44;9416:3;9401:19;;9016:410::o;9431:127::-;9492:10;9487:3;9483:20;9480:1;9473:31;9523:4;9520:1;9513:15;9547:4;9544:1;9537:15;9563:168;9603:7;9669:1;9665;9661:6;9657:14;9654:1;9651:21;9646:1;9639:9;9632:17;9628:45;9625:71;;;9676:18;;:::i;:::-;-1:-1:-1;9716:9:1;;9563:168::o;9736:127::-;9797:10;9792:3;9788:20;9785:1;9778:31;9828:4;9825:1;9818:15;9852:4;9849:1;9842:15;9868:120;9908:1;9934;9924:35;;9939:18;;:::i;:::-;-1:-1:-1;9973:9:1;;9868:120::o;10818:127::-;10879:10;10874:3;10870:20;10867:1;10860:31;10910:4;10907:1;10900:15;10934:4;10931:1;10924:15;12829:412;13031:2;13013:21;;;13070:2;13050:18;;;13043:30;13109:34;13104:2;13089:18;;13082:62;-1:-1:-1;;;13175:2:1;13160:18;;13153:46;13231:3;13216:19;;12829:412::o;13603:403::-;13805:2;13787:21;;;13844:2;13824:18;;;13817:30;13883:34;13878:2;13863:18;;13856:62;-1:-1:-1;;;13949:2:1;13934:18;;13927:37;13996:3;13981:19;;13603:403::o;14494:1230::-;14718:3;14756:6;14750:13;14782:4;14795:51;14839:6;14834:3;14829:2;14821:6;14817:15;14795:51;:::i;:::-;14909:13;;14868:16;;;;14931:55;14909:13;14868:16;14953:15;;;14931:55;:::i;:::-;15075:13;;15008:20;;;15048:1;;15113:36;15075:13;15113:36;:::i;:::-;15168:1;15185:18;;;15212:141;;;;15367:1;15362:337;;;;15178:521;;15212:141;-1:-1:-1;;15247:24:1;;15233:39;;15324:16;;15317:24;15303:39;;15292:51;;;-1:-1:-1;15212:141:1;;15362:337;15393:6;15390:1;15383:17;15441:2;15438:1;15428:16;15466:1;15480:169;15494:8;15491:1;15488:15;15480:169;;;15576:14;;15561:13;;;15554:37;15619:16;;;;15511:10;;15480:169;;;15484:3;;15680:8;15673:5;15669:20;15662:27;;15178:521;-1:-1:-1;15715:3:1;;14494:1230;-1:-1:-1;;;;;;;;;;14494:1230:1:o;16134:184::-;16204:6;16257:2;16245:9;16236:7;16232:23;16228:32;16225:52;;;16273:1;16270;16263:12;16225:52;-1:-1:-1;16296:16:1;;16134:184;-1:-1:-1;16134:184:1:o;16703:245::-;16770:6;16823:2;16811:9;16802:7;16798:23;16794:32;16791:52;;;16839:1;16836;16829:12;16791:52;16871:9;16865:16;16890:28;16912:5;16890:28;:::i;19297:125::-;19337:4;19365:1;19362;19359:8;19356:34;;;19370:18;;:::i;:::-;-1:-1:-1;19407:9:1;;19297:125::o;19427:128::-;19467:3;19498:1;19494:6;19491:1;19488:13;19485:39;;;19504:18;;:::i;:::-;-1:-1:-1;19540:9:1;;19427:128::o;20613:135::-;20652:3;20673:17;;;20670:43;;20693:18;;:::i;:::-;-1:-1:-1;20740:1:1;20729:13;;20613:135::o;21457:414::-;21659:2;21641:21;;;21698:2;21678:18;;;21671:30;21737:34;21732:2;21717:18;;21710:62;-1:-1:-1;;;21803:2:1;21788:18;;21781:48;21861:3;21846:19;;21457:414::o;21876:112::-;21908:1;21934;21924:35;;21939:18;;:::i;:::-;-1:-1:-1;21973:9:1;;21876:112::o;21993:489::-;-1:-1:-1;;;;;22262:15:1;;;22244:34;;22314:15;;22309:2;22294:18;;22287:43;22361:2;22346:18;;22339:34;;;22409:3;22404:2;22389:18;;22382:31;;;22187:4;;22430:46;;22456:19;;22448:6;22430:46;:::i;:::-;22422:54;21993:489;-1:-1:-1;;;;;;21993:489:1:o;22487:249::-;22556:6;22609:2;22597:9;22588:7;22584:23;22580:32;22577:52;;;22625:1;22622;22615:12;22577:52;22657:9;22651:16;22676:30;22700:5;22676:30;:::i;22741:127::-;22802:10;22797:3;22793:20;22790:1;22783:31;22833:4;22830:1;22823:15;22857:4;22854:1;22847:15;23591:545;23693:2;23688:3;23685:11;23682:448;;;23729:1;23754:5;23750:2;23743:17;23799:4;23795:2;23785:19;23869:2;23857:10;23853:19;23850:1;23846:27;23840:4;23836:38;23905:4;23893:10;23890:20;23887:47;;;-1:-1:-1;23928:4:1;23887:47;23983:2;23978:3;23974:12;23971:1;23967:20;23961:4;23957:31;23947:41;;24038:82;24056:2;24049:5;24046:13;24038:82;;;24101:17;;;24082:1;24071:13;24038:82;;;24042:3;;;23591:545;;;:::o;24312:1352::-;24438:3;24432:10;24465:18;24457:6;24454:30;24451:56;;;24487:18;;:::i;:::-;24516:97;24606:6;24566:38;24598:4;24592:11;24566:38;:::i;:::-;24560:4;24516:97;:::i;:::-;24668:4;;24732:2;24721:14;;24749:1;24744:663;;;;25451:1;25468:6;25465:89;;;-1:-1:-1;25520:19:1;;;25514:26;25465:89;-1:-1:-1;;24269:1:1;24265:11;;;24261:24;24257:29;24247:40;24293:1;24289:11;;;24244:57;25567:81;;24714:944;;24744:663;14441:1;14434:14;;;14478:4;14465:18;;-1:-1:-1;;24780:20:1;;;24898:236;24912:7;24909:1;24906:14;24898:236;;;25001:19;;;24995:26;24980:42;;25093:27;;;;25061:1;25049:14;;;;24928:19;;24898:236;;;24902:3;25162:6;25153:7;25150:19;25147:201;;;25223:19;;;25217:26;-1:-1:-1;;25306:1:1;25302:14;;;25318:3;25298:24;25294:37;25290:42;25275:58;25260:74;;25147:201;-1:-1:-1;;;;;25394:1:1;25378:14;;;25374:22;25361:36;;-1:-1:-1;24312:1352:1:o
Swarm Source
ipfs://8430edc132011419de1cf73e8ad5a44aac339e3bea1d239fdb77dd08d49c64c6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 29 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.