Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 332 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 21303850 | 22 days ago | IN | 0 ETH | 0.0005497 | ||||
Transfer From | 21197060 | 37 days ago | IN | 0 ETH | 0.00065665 | ||||
Set Approval For... | 21138202 | 45 days ago | IN | 0 ETH | 0.00098244 | ||||
Safe Transfer Fr... | 21118211 | 48 days ago | IN | 0 ETH | 0.00028896 | ||||
Safe Transfer Fr... | 21118203 | 48 days ago | IN | 0 ETH | 0.00023117 | ||||
Safe Transfer Fr... | 21118203 | 48 days ago | IN | 0 ETH | 0.00031325 | ||||
Safe Transfer Fr... | 21096325 | 51 days ago | IN | 0 ETH | 0.00023152 | ||||
Safe Transfer Fr... | 21096153 | 51 days ago | IN | 0 ETH | 0.00030999 | ||||
Set Approval For... | 21082560 | 53 days ago | IN | 0 ETH | 0.00022729 | ||||
Safe Transfer Fr... | 21044798 | 58 days ago | IN | 0 ETH | 0.00046987 | ||||
Safe Transfer Fr... | 21033448 | 60 days ago | IN | 0 ETH | 0.00020302 | ||||
Safe Transfer Fr... | 21033404 | 60 days ago | IN | 0 ETH | 0.00035635 | ||||
Safe Transfer Fr... | 20856602 | 84 days ago | IN | 0 ETH | 0.00101807 | ||||
Transfer From | 20704989 | 106 days ago | IN | 0 ETH | 0.0000623 | ||||
Set Approval For... | 20699724 | 106 days ago | IN | 0 ETH | 0.00008646 | ||||
Set Approval For... | 20699673 | 106 days ago | IN | 0 ETH | 0.00008166 | ||||
Set Approval For... | 19734648 | 241 days ago | IN | 0 ETH | 0.00023146 | ||||
Set Approval For... | 19734628 | 241 days ago | IN | 0 ETH | 0.00035986 | ||||
Set Approval For... | 19383849 | 290 days ago | IN | 0 ETH | 0.00401231 | ||||
Set Approval For... | 19162957 | 321 days ago | IN | 0 ETH | 0.00112969 | ||||
Safe Transfer Fr... | 19025981 | 341 days ago | IN | 0 ETH | 0.00174078 | ||||
Set Approval For... | 19013917 | 342 days ago | IN | 0 ETH | 0.00141139 | ||||
Set Approval For... | 18801021 | 372 days ago | IN | 0 ETH | 0.00107658 | ||||
Safe Transfer Fr... | 18565920 | 405 days ago | IN | 0 ETH | 0.00166409 | ||||
Set Approval For... | 18500672 | 414 days ago | IN | 0 ETH | 0.00068834 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
NiftyBuilderInstance
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-31 */ /** * :::::::::::::::::::::::::::::::::::::::::::: * :::::::::::::::::::::::::::::::::::::::::::::::: * :::::::::::::::::::::::::::::::::::::::::::::::: * ::::::::::::NNNNNNNNN:::::::NNNNNNNN:::::::::::: * ::::::::::::NNNNNNNNNN::::::NNNNNNNN:::::::::::: * ::::::::::::NNNNNNNNNNN:::::NNNNNNNN:::::::::::: * ::::::::::::NNNNNNNNNNNN::::NNNNNNNN:::::::::::: * ::::::::::::NNNNNNNNNNNNN:::NNNNNNNN:::::::::::: * ::::::::::::NNNNNNNNNNNNNN::NNNNNNNN:::::::::::: * ::::::::::::NNNNNNNN:NNNNNN:NNNNNNNN:::::::::::: * ::::::::::::NNNNNNNN::NNNNNNNNNNNNNN:::::::::::: * ::::::::::::NNNNNNNN:::NNNNNNNNNNNNN:::::::::::: * ::::::::::::NNNNNNNN::::NNNNNNNNNNNN:::::::::::: * ::::::::::::NNNNNNNN:::::NNNNNNNNNNN:::::::::::: * ::::::::::::NNNNNNNN::::::NNNNNNNNNN:::::::::::: * ::::::::::::NNNNNNNN:::::::NNNNNNNNN:::::::::::: * :::::::::::::::::::::::::::::::::::::::::::::::: * :::::::::::::::::::::::::::::::::::::::::::::::: * :::::::::::::::::::::::::::::::::::::::::::: * * @title IERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface IERC165 { /** * @notice Query if a contract implements an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: contracts/interface/IERC721.sol /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File: contracts/interface/IERC721Receiver.sol /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } // File: contracts/interface/IERC721Metadata.sol /** * @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: contracts/util/Context.sol /* * @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; } } // File: contracts/util/Strings.sol /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } } // File: contracts/standard/ERC165.sol /** * @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: contracts/core/NiftyEntity.sol /** * @dev Authenticator of state mutating operations for Nifty Gateway contracts. * * addresses for stateful operations. * * Rinkeby: 0xCefBf44ff649B6E0Bc63785699c6F1690b8cF73b * Mainnet: 0x6e53130dDfF21E3BC963Ee902005223b9A202106 */ contract NiftyEntity { // Address of {NiftyRegistry} contract. address internal immutable niftyRegistryContract = 0x6e53130dDfF21E3BC963Ee902005223b9A202106; //Mainnet /** * @dev Determines whether accounts are allowed to invoke state mutating operations on child contracts. */ modifier onlyValidSender() { NiftyRegistry niftyRegistry = NiftyRegistry(niftyRegistryContract); bool isValid = niftyRegistry.isValidNiftySender(msg.sender); require(isValid, "NiftyEntity: Invalid msg.sender"); _; } /** * @dev Points to the repository of authenticated addresses. */ constructor() {} } /** * @dev Defined to mediate interaction with externally deployed {NiftyRegistry} dependency. */ interface NiftyRegistry { function isValidNiftySender(address sending_key) external view returns (bool); } // File: contracts/core/ERC721.sol /** * @dev Nifty Gateway implementation of Non-Fungible Token Standard. */ contract ERC721 is NiftyEntity, Context, ERC165, IERC721, IERC721Metadata { // Tracked individual instance spawned by {BuilderShop} contract. uint immutable public _id; // Number of distinct NFTs housed in this contract. uint immutable public _typeCount; // Intial receiver of all newly minted NFTs. address immutable public _defaultOwner; // Component(s) of 'tokenId' calculation. uint immutable internal topLevelMultiplier; uint immutable internal midLevelMultiplier; // Token name. string private _name; // Token symbol. string private _symbol; // Token artifact location. string private _baseURI; // Mapping from Nifty type to name of token. mapping(uint256 => string) private _niftyTypeName; // Mapping from Nifty type to IPFS hash of canonical artifcat file. mapping(uint256 => string) private _niftyTypeIPFSHashes; // Mapping from token ID to owner address. mapping (uint256 => address) internal _owners; // Mapping owner address to token count, by aggregating all _typeCount NFTs in the contact. mapping (address => uint256) internal _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 token collection. */ constructor() NiftyEntity() { _id = 2; _typeCount = 3; _symbol = "ARSHAM"; _name = "Eroding and Reforming Digital Sculptures"; _baseURI = "https://api.niftygateway.com/arsham/"; _defaultOwner = 0xE052113bd7D7700d623414a0a4585BCaE754E9d5; midLevelMultiplier = 10000; topLevelMultiplier = 200000000; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the link to artificat location for a given token by 'tokenId'. * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query. * @return The location where the artifact assets are stored. */ function tokenURI(uint256 tokenId) external view override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory tokenIdStr = Strings.toString(tokenId); return string(abi.encodePacked(_baseURI, tokenIdStr)); } /** * @dev Determine which NFT in the contract (_typeCount) is associated * with this 'tokenId'. */ function _getNiftyTypeId(uint256 tokenId) internal view returns (uint256) { return (tokenId - topLevelMultiplier) / midLevelMultiplier; } /** * @dev Returns the Name for a given token ID. * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query */ function tokenName(uint256 tokenId) external view returns (string memory) { require(_exists(tokenId), "ERC721Metadata: Name query for nonexistent token"); uint256 niftyType = _getNiftyTypeId(tokenId); return _niftyTypeName[niftyType]; } /** * @dev Internal function to set the token IPFS hash for a nifty type. * @param niftyType uint256 ID component of the token to set its IPFS hash * @param ipfs_hash string IPFS link to assign */ function _setTokenIPFSHashNiftyType(uint256 niftyType, string memory ipfs_hash) internal { require(bytes(_niftyTypeIPFSHashes[niftyType]).length == 0, "ERC721Metadata: IPFS hash already set"); _niftyTypeIPFSHashes[niftyType] = ipfs_hash; } /** * @dev Internal function to set the name for a nifty type. * @param niftyType uint256 of nifty type name to be set * @param nifty_type_name name of nifty type */ function _setNiftyTypeName(uint256 niftyType, string memory nifty_type_name) internal { _niftyTypeName[niftyType] = nifty_type_name; } /** * @dev Base URI for computing {tokenURI}. */ function _setBaseURI(string memory baseURI_) internal { _baseURI = baseURI_; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev 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); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (isContract(to)) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // File: contracts/standard/ERC721Burnable.sol /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File: contracts/interface/IDateTime.sol /** * */ interface IDateTime { function getYear(uint timestamp) external view virtual returns (uint16); function getHour(uint timestamp) external view virtual returns (uint8); function getWeekday(uint timestamp) external view virtual returns (uint8); } // File: contracts/core/NiftyBuilderInstance.sol /** * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .*** XXXXXXXXXXXXXXXXXX * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ,********* XXXXXXXXXXXXXXXX * XXXXXXXXXXXXXXXXXXXXXXXXXXXX *************** XXXXXXXXXXXXX * XXXXXXXXXXXXXXXXXXXXXXXXX .******************* XXXXXXXXXXX * XXXXXXXXXXXXXXXXXXXXXXX *********** ********** XXXXXXXX * XXXXXXXXXXXXXXXXXXXX *********** *********** XXXXXX * XXXXXXXXXXXXXXXXXX *********** *************** XXX * XXXXXXXXXXXXXXXX *********** **** ********* XX * XXXXXXXXXXXXXXXX ********* *** *** ********* X * XXXXXXXXXXXXXXXX ********** ***** *********** XXX * XXXXXXXXXXXX /////.************* *********** XXXX * XXXXXXXXX /////////...*********** ************ XXXXXX * XXXXXXX/ ///////////..... ///////// /////////// XXXXXXXX * XXXXXX / //////........./////////////////// XXXXXXXXXX * XXXXXXXXXX .///////...........////////////// XXXXXXXXXXXXX * XXXXXXXXX .///////.....//..//// ///////// XXXXXXXXXXXXXXXX * XXXXXXX# ///////////////////// XXXXXXXXXXXXXXXXXXXXXXXXXXXX * XXXXX //////////////////// XXXXXXXXXXXXXXXXXXXXXXXXXXXXX * XX ////////////// ////// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * * @dev Nifty Gateway extension of customized NFT contract, encapsulates * logic for minting new tokens, and concluding the minting process. */ contract NiftyBuilderInstance is ERC721, ERC721Burnable { // Engine(s) of nifty type dynamism. address public _dateTimeContract00; address public _dateTimeContract01; /** * @dev Eroding and Reforming Bust of Zeus (Earth Day) * * @return uint256 index of asset */ function _bustOfZeus(IDateTime dateTime) internal view returns (uint256) { uint8 hour = dateTime.getHour(block.timestamp); uint8 threshold = 17; if (hour > threshold) { return uint256(3); } threshold = 11; if (hour > threshold) { return uint256(2); } threshold = 5; if (hour > threshold) { return uint256(1); } return uint256(0); } string[4] artifact01 = ["QmNWr9r6pEEnyh9aejue8upHSjYN24pWrAzpYmjRgseExr", //State 01 "QmZuaZ2RphWvnaxMxz9Pd95c4E5DPhE5BtSw4auztiMC1u", //State 02 "QmaB29NhdweR75hAWEehvcXCwXBwN8KBpny6uzdsUHNogv", //State 03 "QmfFCHSMAnjCqyPgTJDCQQuJJCpfqoupcihevgPxk7jHBF"];//State 04 /** * @dev Eroding and Reforming Venus of Arles (72.6 Years) * * @return uint256 index of asset */ function _venusOfArles(IDateTime dateTime) internal view returns (uint256) { uint16 offset = 2021; uint16 value = dateTime.getYear(block.timestamp) - offset; uint16 criterion = 73; uint16 result = value % criterion; return uint256(result); } string[73] artifact02 = ["QmR81UuQPkhfGE4K4cbbnBLj9Z5EZcEocu8YY18UM7NUM1", //State 01 "QmR4bA1ifjixhtkTYnz4VmHKWMpafZv4mFehmeGqcDQdvA", //State 02 "QmRzsgPoMsoYwiVKWYkFDeRjB3C2SiSKXVmTkDHGqy8SRq", //State 03 "QmRa4cdAHdnbfLX3s65rih6FYvwMfTePqSw46cDPR9gkX7", //State 04 "QmRMR9yLVFmLCGZyrSmuSPwh6KxkyScXVZ2akY3N4h7Hf5", //State 05 "QmRgrgEoac8hxMv4zJQmRhxVfUEAthxHQyV4vYUirXXo3W", //State 06 "QmcHYcrKNGs1NN8jnyJUnAzneK6DbaKtmLVwcZVp28Fuji", //State 07 "QmTjWk2p8eJcW6FR2y1t8mLcEAHs9QKt2tcPCcsXTXA5NA", //State 08 "QmNsf7GZUw2Bz4DSek2fcaXEvxSH6GdEUjmzUiprj9i2Ta", //State 09 "QmbEmMK7hLzCe9YWqhqXV3HQedEgorxtc642CkkCogVVho", //State 10 "QmbR2s2uPcywASUudpsujWmhxoFqy5hzxF9DM5ohRNQfWZ", //State 11 "QmWc3r6VknYB6vAu5astS8PzPjGwq3gQAexxt6g6H169gU", //State 12 "QmZrbFSuHf6zdM66RFgj2vCQatbAVYfyCBhHPsSzPzEz2M", //State 13 "QmeVyHYGP9QK3pSGpYPcMCrTrf8PWMppdq9cSxB8TjunRs", //State 14 "QmY9SvuK8rTSoZsAWxgaXS6fPeQSYhqsmWgqxAYbfuDM4y", //State 15 "QmawC7bUXhqwHeoAagd7UV2HhcGxpZ4PZHkU1rxM6ywgKV", //State 16 "QmSiysm4VWLJ19JF81U7enxcfjkb2mVyrzhJkZ6qCK42xS", //State 17 "QmYZHBoNxD9hAZASAThC93yRrGcfV5nCgi86wQNVgZkemV", //State 18 "QmRZ1B27Y1YuDoq6W32p8sFKUaj6hQwfaMJuCzWkA4wmKB", //State 19 "Qmb9b2QkBzSdkPooewAAQRcQULFYP49i8qdgRkZ7z5sijh", //State 20 "QmNNa8zqTZFpjo2ex2kd4x9vLZjK93WWmAp444VWS7NdVD", //State 21 "QmQaKQDstMwrEKZW5W2mbDywuNN6kxuE6MiB5UZZZ7umfJ", //State 22 "QmVcYsG9T3Ng5CJmVAQk7vHR5YzRaTfBkXFbYArqTsaEsA", //State 23 "Qma27xgagQLKhT89DDRvUTfmn5CacCXdn778bWQDUR6NG2", //State 24 "QmZbWLsVVRNgFyjjGWfkCAxisMEEGVJPrpbSiuYRS8unPc", //State 25 "QmNQ2aVkkaKV2eKQMPYVqCFBvaRsKtabAVg9LxCwibueBf", //State 26 "QmVMKPbTNU2fzDmwGTEPVxYsR8TF49yaVF8Vk1tT5uYGEY", //State 27 "QmaqrMBptBkdJcPyrKfrh8axTpD9a38qfodcoXsRNdnibp", //State 28 "QmYbvARyHSJqrp6PTeyvQj16EGrG7rLssoDfxr61JBVchX", //State 29 "QmSSrCyXCHeiKxxrr9V5gxZ4U4j3yt1mxvhGbrQKxRqiB8", //State 30 "QmWJov2kfhHPg7QLZkkbzC8WmKwD81wdATKE94hASfeiMM", //State 31 "Qmabw8dNheYekvDbCez1GDdC6tUdrgCLq8SgUsRFYcMRU8", //State 32 "QmWxi9VLRyMwXy11pSJbcG8XBgf25PXK3QbSZCc7V7aXoe", //State 33 "QmVGS6oXHtPh3jeYnqP7Y28Ti8a8UqJDwNbN6H7bPo9aMk", //State 34 "QmQ5tkbbYieCTvdVPL85PMZzij3MqB9TDsMiWh1UzR8CeN", //State 35 "QmbJkDacA74hcUQiATdSJfCkfxbKpj7CbZKJSfvGw7TZ3D", //State 36 "QmSAihqMxEqYPGaVf9ApFh416NF18soLcnpPM2iR77J7jB", //State 37 "QmZfwfjhjdRzQUBF98TSbZPUiWJod9GDiDWB7piK344b7a", //State 38 "QmUDn7VKVT5gAeNZ36kNA27f4cxS32SQSwsQujFFmebtJK", //State 39 "QmaR98jw8oiJyZRb39FcYuzf885GoXHGTK7uewvCN28FGG", //State 40 "QmTG9yZ4sTdWXPQNwYkRzdzHCjWDMk8qhBY8JCvZdvJksp", //State 41 "QmfRrs388cZqvGc5kctm5hrTNwhX6LeK4Eexk8adBxuYLj", //State 42 "QmdrxzuEecPEL6L7YVixucehiRY2aBWEbZAEeYQ8VkDNes", //State 43 "QmRrWxhqQfvgXV7nuGc58CQfXnE2QKq9WXYd2HaVQNxUJ9", //State 44 "QmXDPxvzeb1gpkchDY3qQai6RYBhALVWqo79HhPYDmbbiQ", //State 45 "QmYa3zGVn33SsGXD6pSXxARHvc9JHBDvRkPCeD8t9RadpH", //State 46 "QmfSkwPEQYbazMKwLrVaZmrFu7Rk6KVTqxVggr7F6zvwfF", //State 47 "QmaU1Hejt2kLTVpcnXfEpWcDT7MC8fb8uWjcBW5SCEgcBn", //State 48 "QmehTRiyb8MVxMJZccHnJk24QtuZdoXRoYc1qZJFWNM2DS", //State 49 "QmPzBPEMjaov2EdZF6mE5Sg4cki35MnnYGCp855MjBdQCS", //State 50 "QmXYgaCZFitc3PWMiNoNvesLPxq18Z2UXcGKQQrbmZsfCg", //State 51 "QmSqRdFM2rWX6igiBvfXbuMCbN9hx13DwrVTtQHi8GNvTE", //State 52 "QmWawbhnLFBC1J71QT55YC6htPwX6WDoLmwoj33aR75muC", //State 53 "QmYLiBGhwfuBWGNi3NmFQgVWj55b2Vxur2HvjVn7tMoD9Y", //State 54 "QmWW1YjGiVBjgSeaQqtNLyp1gKbyVdboqT7DUChXw3NgQt", //State 55 "QmecGhERiccBCXa7BHwASMZGVZRBQPBdnyDAuuzLctPRvB", //State 56 "QmPJNXZ1bXJU3FxCBgb4pUNHGBDQhuwVVYUUGWyuwp4vLX", //State 57 "QmPXsbSRwkWs5xAEqpt9hCbjNDmHsZvvJZkNH3b419FMDm", //State 58 "QmWaLpKgkQk2xrwyPp1kdmsB5xYcrAtiaT1U9tt7BfyxbU", //State 59 "QmU7LR8jiQcjAwTxxrXiGc3j7Ust7Ggjeb5Ysog4T5iW7N", //State 60 "QmcTxChkC259PTqzVgUtCaGstS6d5d3EtMcbnCX2bsZBNj", //State 61 "QmP8eGwqDLtmHD89Nofr54FsAcHvdL2mEMnCjssS9sEcwP", //State 62 "QmSVZPVDsZThK1spkL9Cy4SrxLTsNebXuRn2wCtAf3fXFm", //State 63 "QmUXfmP9k8SsUMNzC89y9F4NWRXkadBV5t6QBQkTTChRZP", //State 64 "QmXHLwFwwa5xiH3xXWPzvPLHRYoEQdKo9ZcMDs1dSfvERD", //State 65 "QmfTHh3E3JM5cZc3erTHJvkXeKh7i5SjAeXwBrQPwwTDTc", //State 66 "QmT6iHKZN9HvwWyS2d3XqBbhqPLXcBf1FXHHNNk7TcbAFu", //State 67 "QmfQpywZY2W2giE929VmqJ6m2NUwWKqeZT663yK661WB4L", //State 68 "QmRtiHoEE5kYrrnFjP51qTECMHBsdMH6PkJSt9uEEzkXXi", //State 69 "QmRiUTY6e8AtEdfvVSc3suRw7sEtRPdZeXkKwyVaM8bvcX", //State 70 "QmVQJD4g4jxJPi6XoCecXwWv7ULkWG5sU75UCFeM5XGPL5", //State 71 "QmZ2SjXuVdVGdR9viCpNhU8ZSRtsnEEErmjLq6LvMgDn4v", //State 72 "QmSx78hghW4cpWq3tinRYmKoHm665LEsDPPXmK1zmg8UpY"];//State 73 /** * @dev Eroding and Reforming Bust of Melpomene (Martian Day) * * @return uint256 index of asset */ function _bustOfMelpomene(IDateTime dateTime) internal view returns (uint256) { uint8 hour = dateTime.getHour(block.timestamp); uint8 weekday = dateTime.getWeekday(block.timestamp); uint8 criterion = 2; uint8 result = weekday - uint8(weekday / criterion); uint8 condition = 0; if (result == condition) { uint8 offset = 23; uint8 result = offset - hour; return uint256(result); } return uint256(hour); } string[24] artifact03 = ["Qma5iW6ch6kGE3GB1FkCvUt5LruJ3nZN7CjJQNZwifxSQH", //State 01 "QmNrSBLVJUNFHBqkT6r5utrNVELLGUPvnyYmXpFQMyw8Bs", //State 02 "QmZ1f4ku6MNt6XnoPTQReYva4AApL2JjBzydwfxPaRoEgk", //State 03 "QmZATZUY14RhFvqfGu8CX1ajUy4Qfx9KDNLYpJjAeiL2a3", //State 04 "QmRn6ncB9VVNNY8U6jpLawaQ5ogoRpKGon8XAcAXmHobeL", //State 05 "QmNLmKCa9EFRvYa8RbdiJjUjtmd6PF99VCaQLtkbfe5U42", //State 06 "Qmd4UgHyTFuSe3PTRJiUvmAqc3adSApzsoLFQeCbtidwpW", //State 07 "QmSxt7BUfePqABdwci7x9By3LgFUvbCM44WRsLoEFC3MYT", //State 08 "QmWetvFhJLuuJBSMhSPwt5xyCv3uW179FhF8MbmnbKUehW", //State 09 "QmXRShHWTLoKWVQZmbEQ1jDenwuV2BPHqNSYpNWnYoJ1K3", //State 10 "QmYkYqMX9FXY7MP5E9edr1ZeNEFBGqz1BNKCdcvkN7eFaN", //State 11 "QmYQqsn1FsMRm79hw8cXTkGPKH3pa3ouTGiTLveGJqm65A", //State 12 "QmYBNZ9AYGtGFQU4HUi2iAWCuhHt7nQ57dv7fuEeGfshTN", //State 13 "QmRsmx1ayeYaArsXRHVan1AQqqW8eBQKURguGfG5xjtpsN", //State 14 "QmZNtn3vk2SoJ4QJf6u2USnUvq5QNMrMqcTKC8s2fAghKY", //State 15 "QmYGN52qdpBoAJs5ye3RuyxgVfw1kAxv6Sjy4fRugb5eES", //State 16 "QmVuxM6foMHArx2qSmiuqhUWCVWid5r1Hhyq8w7aPHiecq", //State 17 "QmZe4njp7a3o9DyRbHFn1RDtGCiyXXoFHJZoxkmEjrFgwT", //State 18 "Qmeqk9eH3sTiucLTbpPAYq28Dj6icc9oAPJtiPej5e5ssC", //State 19 "QmekyAay43mjWax1byL5Erny5KyhN8pZgVhLE7Tg8waDR2", //State 20 "QmcjSYZuCHGS7zox5jyw5bE3NjHNghydjwkqiUMEj3hyPg", //State 21 "QmTigpNi4Y3iZQngxDUbKGcw2D7RrvACCiTVGxFmbRujKV", //State 22 "QmTJsYU9zaJR3pUQCLkLGYNan5N8a96sDoR3HgEwQz6Pzw", //State 23 "QmUH2WtFbawmshSo9PayGwnz4seZSS8NkGyGbuVYkod6Sh"];//State 24 // The artist associated with the collection. string private _creator; // Number of NFTs minted for a given 'typeCount'. mapping (uint256 => uint256) public _mintCount; /** * @dev Serves as a gas cost optimized boolean flag * to indicate whether the minting process has been * concluded for a given 'typeCount', correspinds * to the {_getFinalized} and {setFinalized}. */ mapping (uint256 => bytes32) private _finalized; /** * @dev Emitted when tokens are created. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed fromAddress, address indexed toAddress); /** * @dev Ultimate instantiation of a Nifty Gateway NFT collection. */ constructor() ERC721() { _creator = "Daniel Arsham"; _dateTimeContract00 = 0x740a637ADD6492e5FaA907AF0fe708770B737058; _dateTimeContract01 = 0x740a637ADD6492e5FaA907AF0fe708770B737058; _setNiftyTypeName(1, "Eroding and Reforming Bust of Zeus (Earth Day)"); _setNiftyTypeName(2, "Eroding and Reforming Venus of Arles (72.6 Years)"); _setNiftyTypeName(3, "Eroding and Reforming Bust of Melpomene (Martian Day)"); } /** * Configurable address for DateTime. */ function setDateTimeContract00(address dateTimeContract_) onlyValidSender public { _dateTimeContract00 = dateTimeContract_; } /** * Configurable address for DateTime. */ function setDateTimeContract01(address dateTimeContract_) onlyValidSender public { _dateTimeContract01 = dateTimeContract_; } /** * @dev Generate canonical Nifty Gateway token representation. * Nifty contracts have a data model called a 'niftyType' (typeCount) * The 'niftyType' refers to a specific nifty in our contract, note * that it gives no information about the edition size. In a given * contract, 'niftyType' 1 could be an edition of 10, while 'niftyType' * 2 is a 1/1, etc. * The token IDs are encoded as follows: {id}{niftyType}{edition #} * 'niftyType' has 4 digits, and edition number does as well, to allow * for 9999 possible 'niftyType' and 9999 of each edition in each contract. * Example token id: [500010270] * This is from contract #5, it is 'niftyType' 1 in the contract, and it is * edition #270 of 'niftyType' 1. */ function _encodeTokenId(uint256 niftyType, uint256 tokenNumber) private view returns (uint256) { return (topLevelMultiplier + (niftyType * midLevelMultiplier) + tokenNumber); } /** * @dev Determine whether it is possible to mint additional NFTs for this 'niftyType'. */ function _getFinalized(uint256 niftyType) public view returns (bool) { bytes32 chunk = _finalized[niftyType / 256]; return (chunk & bytes32(1 << (niftyType % 256))) != 0x0; } /** * @dev Prevent the minting of additional NFTs of this 'niftyType'. */ function setFinalized(uint256 niftyType) public onlyValidSender { uint256 quotient = niftyType / 256; bytes32 chunk = _finalized[quotient]; _finalized[quotient] = chunk | bytes32(1 << (niftyType % 256)); } /** * @dev The artist of this collection. */ function creator() public view virtual returns (string memory) { return _creator; } /** * @dev Assign the root location where the artifact assets are stored. */ function setBaseURI(string memory baseURI) public onlyValidSender { _setBaseURI(baseURI); } /** * @dev Allow owner to change nifty name, by 'niftyType'. */ function setNiftyName(uint256 niftyType, string memory niftyName) public onlyValidSender { _setNiftyTypeName(niftyType, niftyName); } /** * @dev Assign the IPFS hash of canonical artifcat file, by 'niftyType'. */ function setNiftyIPFSHash(uint256 niftyType, string memory hashIPFS) public onlyValidSender { _setTokenIPFSHashNiftyType(niftyType, hashIPFS); } /** * @dev Create specified number of nifties en masse. * Once an NFT collection is spawned by the factory contract, we make calls to set the IPFS * hash (above) for each Nifty type in the collection. * Subsequently calls are issued to this function to mint the appropriate number of tokens * for the project. */ function mintNifty(uint256 niftyType, uint256 count) public onlyValidSender { require(!_getFinalized(niftyType), "NiftyBuilderInstance: minting concluded for nifty type"); uint256 tokenNumber = _mintCount[niftyType] + 1; uint256 tokenId00 = _encodeTokenId(niftyType, tokenNumber); uint256 tokenId01 = tokenId00 + count - 1; for (uint256 tokenId = tokenId00; tokenId <= tokenId01; tokenId++) { _owners[tokenId] = _defaultOwner; } _mintCount[niftyType] += count; _balances[_defaultOwner] += count; emit ConsecutiveTransfer(tokenId00, tokenId01, address(0), _defaultOwner); } /** * @dev Returns an IPFS hash for a given token ID. * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query. * @return IPFS hash for this (_typeCount) NFT. */ function tokenIPFSHash(uint256 tokenId) external view returns (string memory) { require(_exists(tokenId), "ERC721Metadata: IPFS hash query for nonexistent token"); IDateTime dateTime00 = IDateTime(_dateTimeContract00); uint256 niftyType = _getNiftyTypeId(tokenId); if (niftyType == 2) { uint256 value = _venusOfArles(dateTime00); return artifact02[value]; } else if (niftyType == 1) { uint256 value = _bustOfZeus(dateTime00); return artifact01[value]; } IDateTime dateTime01 = IDateTime(_dateTimeContract01); uint256 value = _bustOfMelpomene(dateTime01); return artifact03[value]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_dateTimeContract00","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dateTimeContract01","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_defaultOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"niftyType","type":"uint256"}],"name":"_getFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_id","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_mintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_typeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"niftyType","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mintNifty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dateTimeContract_","type":"address"}],"name":"setDateTimeContract00","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dateTimeContract_","type":"address"}],"name":"setDateTimeContract01","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"niftyType","type":"uint256"}],"name":"setFinalized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"niftyType","type":"uint256"},{"internalType":"string","name":"hashIPFS","type":"string"}],"name":"setNiftyIPFSHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"niftyType","type":"uint256"},{"internalType":"string","name":"niftyName","type":"string"}],"name":"setNiftyName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenIPFSHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]
Contract Creation Code
7f6e53130ddff21e3bc963ee902005223b9a202106000000000000000000000000608052610220604052602e6101c081815261014091829190620046186101e03981526020016040518060600160405280602e815260200162004815602e913981526020016040518060600160405280602e815260200162004ddc602e913981526020016040518060600160405280602e815260200162003faa602e91399052620000af90600b90600462000e86565b50604080516109808101909152602e610920820181815282916200456061094084013981526020016040518060600160405280602e8152602001620046a5602e913981526020016040518060600160405280602e8152602001620040be602e913981526020016040518060600160405280602e815260200162004090602e913981526020016040518060600160405280602e815260200162004d24602e913981526020016040518060600160405280602e815260200162003e96602e913981526020016040518060600160405280602e815260200162004f1e602e913981526020016040518060600160405280602e8152602001620047b9602e913981526020016040518060600160405280602e8152602001620042ae602e913981526020016040518060600160405280602e815260200162003ef2602e913981526020016040518060600160405280602e8152602001620049b3602e913981526020016040518060600160405280602e815260200162004a6b602e913981526020016040518060600160405280602e8152602001620041a4602e913981526020016040518060600160405280602e8152602001620045bc602e913981526020016040518060600160405280602e815260200162004b23602e913981526020016040518060600160405280602e815260200162004ac7602e913981526020016040518060600160405280602e8152602001620044d6602e913981526020016040518060600160405280602e8152602001620048fb602e913981526020016040518060600160405280602e8152602001620046d3602e913981526020016040518060600160405280602e815260200162004b51602e913981526020016040518060600160405280602e815260200162004d52602e913981526020016040518060600160405280602e815260200162003e0c602e913981526020016040518060600160405280602e815260200162004366602e913981526020016040518060600160405280602e81526020016200444c602e913981526020016040518060600160405280602e815260200162004cf6602e913981526020016040518060600160405280602e815260200162004af5602e913981526020016040518060600160405280602e815260200162004c37602e913981526020016040518060600160405280602e815260200162005088602e913981526020016040518060600160405280602e8152602001620043f0602e913981526020016040518060600160405280602e815260200162003f7c602e913981526020016040518060600160405280602e815260200162004bdb602e913981526020016040518060600160405280602e8152602001620047e7602e913981526020016040518060600160405280602e815260200162004646602e913981526020016040518060600160405280602e81526020016200502c602e913981526020016040518060600160405280602e815260200162004e0a602e913981526020016040518060600160405280602e815260200162003f4e602e913981526020016040518060600160405280602e815260200162004176602e913981526020016040518060600160405280602e815260200162004871602e913981526020016040518060600160405280602e8152602001620050b6602e913981526020016040518060600160405280602e8152602001620048cd602e913981526020016040518060600160405280602e8152602001620049e1602e913981526020016040518060600160405280602e815260200162004a3d602e913981526020016040518060600160405280602e81526020016200478b602e913981526020016040518060600160405280602e815260200162004c9a602e913981526020016040518060600160405280602e8152602001620041d2602e913981526020016040518060600160405280602e815260200162004006602e913981526020016040518060600160405280602e815260200162004843602e913981526020016040518060600160405280602e81526020016200447a602e913981526020016040518060600160405280602e815260200162003e3a602e913981526020016040518060600160405280602e81526020016200505a602e913981526020016040518060600160405280602e815260200162003f20602e913981526020016040518060600160405280602e81526020016200472f602e913981526020016040518060600160405280602e815260200162004ec2602e913981526020016040518060600160405280602e81526020016200430a602e913981526020016040518060600160405280602e81526020016200441e602e913981526020016040518060600160405280602e815260200162004148602e913981526020016040518060600160405280602e815260200162004504602e913981526020016040518060600160405280602e8152602001620043c2602e913981526020016040518060600160405280602e815260200162004338602e913981526020016040518060600160405280602e815260200162004fa2602e913981526020016040518060600160405280602e815260200162004dae602e913981526020016040518060600160405280602e815260200162004ffe602e913981526020016040518060600160405280602e815260200162004062602e913981526020016040518060600160405280602e81526020016200489f602e913981526020016040518060600160405280602e81526020016200458e602e913981526020016040518060600160405280602e815260200162004e94602e913981526020016040518060600160405280602e815260200162004394602e913981526020016040518060600160405280602e81526020016200475d602e913981526020016040518060600160405280602e815260200162004e38602e913981526020016040518060600160405280602e815260200162003fd8602e913981526020016040518060600160405280602e815260200162003e68602e913981526020016040518060600160405280602e815260200162004f4c602e913981526020016040518060600160405280602e815260200162004cc8602e913990526200099c90600f90604962000edd565b50604080516103608101909152602e61030082018181528291620045ea61032084013981526020016040518060600160405280602e815260200162004b7f602e913981526020016040518060600160405280602e81526020016200425c602e913981526020016040518060600160405280602e815260200162004bad602e913981526020016040518060600160405280602e815260200162003ec4602e913981526020016040518060600160405280602e815260200162004fd0602e913981526020016040518060600160405280602e81526020016200411a602e913981526020016040518060600160405280602e8152602001620040ec602e913981526020016040518060600160405280602e8152602001620044a8602e913981526020016040518060600160405280602e815260200162003dde602e913981526020016040518060600160405280602e815260200162004d80602e913981526020016040518060600160405280602e815260200162004985602e913981526020016040518060600160405280602e815260200162004c09602e913981526020016040518060600160405280602e815260200162004929602e913981526020016040518060600160405280602e815260200162004701602e913981526020016040518060600160405280602e815260200162004e66602e913981526020016040518060600160405280602e815260200162004957602e913981526020016040518060600160405280602e815260200162004a99602e913981526020016040518060600160405280602e81526020016200422e602e913981526020016040518060600160405280602e815260200162004200602e913981526020016040518060600160405280602e815260200162004ef0602e913981526020016040518060600160405280602e815260200162004a0f602e913981526020016040518060600160405280602e8152602001620042dc602e913981526020016040518060600160405280602e815260200162004034602e9139905262000c9a90605890601862000f22565b5034801562000ca857600080fd5b50600260a052600360c0526040805180820190915260068082526541525348414d60d01b602090920191825262000ce29160019162000f67565b5060405180606001604052806028815260200162004f7a60289139805162000d139160009160209091019062000f67565b506040518060600160405280602481526020016200428a60249139805162000d449160029160209091019062000f67565b507fe052113bd7d7700d623414a0a4585bcae754e9d500000000000000000000000060e05261271061012052630bebc2006101005260408051808201909152600d8082526c44616e69656c2041727368616d60981b60209290920191825262000db09160709162000f67565b506009805473740a637add6492e5faa907af0fe708770b7370586001600160a01b03199182168117909255600a805490911690911790556040805160608101909152602e80825262000e0e9160019162004532602083013962000e60565b62000e346002604051806060016040528060318152602001620046746031913962000e60565b62000e5a600360405180606001604052806035815260200162004c656035913962000e60565b620010a9565b6000828152600360209081526040909120825162000e819284019062000f67565b505050565b826004810192821562000ecb579160200282015b8281111562000ecb578251805162000eba91849160209091019062000f67565b509160200191906001019062000e9a565b5062000ed992915062000ff2565b5090565b826049810192821562000ecb579160200282015b8281111562000ecb578251805162000f1191849160209091019062000f67565b509160200191906001019062000ef1565b826018810192821562000ecb579160200282015b8281111562000ecb578251805162000f5691849160209091019062000f67565b509160200191906001019062000f36565b82805462000f75906200106c565b90600052602060002090601f01602090048101928262000f99576000855562000fe4565b82601f1062000fb457805160ff191683800117855562000fe4565b8280016001018555821562000fe4579182015b8281111562000fe457825182559160200191906001019062000fc7565b5062000ed992915062001013565b8082111562000ed95760006200100982826200102a565b5060010162000ff2565b5b8082111562000ed9576000815560010162001014565b50805462001038906200106c565b6000825580601f1062001049575050565b601f01602090049060005260206000209081019062001069919062001013565b50565b600181811c908216806200108157607f821691505b60208210811415620010a357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a05160c05160e05160601c6101005161012051612c926200114c60003960008181611e210152612057015260008181611e4c015261207b0152600081816102cd01528181610d4701528181610db20152610e05015260006102f4015260006102520152600081816104e5015281816109e201528181610b7f01528181610e760152818161109e01528181611630015261174c0152612c926000f3fe608060405234801561001057600080fd5b50600436106101e35760003560e01c806355f804b31161010f578063b88d4fde116100a2578063d7a853be11610071578063d7a853be1461045b578063e71df8b51461046e578063e725f87714610481578063e985e9c51461049457600080fd5b8063b88d4fde1461040f578063c87b56dd14610422578063d371663014610435578063d561e85d1461044857600080fd5b806370a08231116100de57806370a08231146103ce57806395d89b41146103e15780639dd5e481146103e9578063a22cb465146103fc57600080fd5b806355f804b314610375578063569dadf0146103885780635f2ef9dc1461039b5780636352211e146103bb57600080fd5b8063095ea7b3116101875780632b6db055116101565780632b6db0551461032957806342842e0e1461033c57806342966c681461034f5780634fba84ca1461036257600080fd5b8063095ea7b3146102b5578063139fed7c146102c85780632276f3f2146102ef57806323b872dd1461031657600080fd5b806302d05d3f116101c357806302d05d3f14610238578063051802371461024d57806306fdde0314610282578063081812fc1461028a57600080fd5b806260a82f146101e8578062cd587c146101fd57806301ffc9a714610225575b600080fd5b6101fb6101f6366004612665565b6104d0565b005b61021061020b36600461287c565b6105f1565b60405190151581526020015b60405180910390f35b6102106102333660046127e9565b61062f565b6102406106cc565b60405161021c9190612a4c565b6102747f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161021c565b61024061075e565b61029d61029836600461287c565b61076d565b6040516001600160a01b03909116815260200161021c565b6101fb6102c33660046127a2565b610813565b61029d7f000000000000000000000000000000000000000000000000000000000000000081565b6102747f000000000000000000000000000000000000000000000000000000000000000081565b6101fb6103243660046126b3565b610945565b6101fb610337366004612895565b6109cd565b6101fb61034a3660046126b3565b610ac8565b6101fb61035d36600461287c565b610ae3565b6101fb6103703660046128dc565b610b6a565b6101fb610383366004612823565b610e61565b60095461029d906001600160a01b031681565b6102746103a936600461287c565b60716020526000908152604090205481565b61029d6103c936600461287c565b610f55565b6102746103dc366004612665565b610fe0565b61024061107a565b6101fb6103f736600461287c565b611089565b6101fb61040a36600461276b565b6111bc565b6101fb61041d3660046126ef565b611281565b61024061043036600461287c565b611309565b61024061044336600461287c565b6113ce565b6101fb610456366004612665565b61161b565b6101fb610469366004612895565b611737565b600a5461029d906001600160a01b031681565b61024061048f36600461287c565b61182c565b6102106104a2366004612680565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6040516371be737d60e11b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b15801561053457600080fd5b505afa158015610548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056c91906127cc565b9050806105c05760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064015b60405180910390fd5b5050600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60008060728161060361010086612a77565b8152602001908152602001600020549050610100836106229190612bcc565b6001901b16151592915050565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061069257506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806106c657507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060607080546106db90612b55565b80601f016020809104026020016040519081016040528092919081815260200182805461070790612b55565b80156107545780601f1061072957610100808354040283529160200191610754565b820191906000526020600020905b81548152906001019060200180831161073757829003601f168201915b5050505050905090565b6060600080546106db90612b55565b6000818152600560205260408120546001600160a01b03166107f75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016105b7565b506000908152600760205260409020546001600160a01b031690565b600061081e82610f55565b9050806001600160a01b0316836001600160a01b031614156108a85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016105b7565b336001600160a01b03821614806108c457506108c481336104a2565b6109365760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105b7565b6109408383611967565b505050565b610950335b826119e2565b6109c25760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016105b7565b610940838383611aea565b6040516371be737d60e11b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b158015610a3157600080fd5b505afa158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6991906127cc565b905080610ab85760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b610ac28484611cc4565b50505050565b61094083838360405180602001604052806000815250611281565b610aec3361094a565b610b5e5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f7665640000000000000000000000000000000060648201526084016105b7565b610b6781611d71565b50565b6040516371be737d60e11b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b158015610bce57600080fd5b505afa158015610be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0691906127cc565b905080610c555760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b610c5e846105f1565b15610cd15760405162461bcd60e51b815260206004820152603660248201527f4e696674794275696c646572496e7374616e63653a206d696e74696e6720636f60448201527f6e636c7564656420666f72206e6966747920747970650000000000000000000060648201526084016105b7565b600084815260716020526040812054610ceb906001612a5f565b90506000610cf98683611e19565b905060006001610d098784612a5f565b610d139190612aef565b9050815b818111610d84576000818152600560205260409020805473ffffffffffffffffffffffffffffffffffffffff19167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031617905580610d7c81612b90565b915050610d17565b5060008781526071602052604081208054889290610da3908490612a5f565b90915550506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660009081526006602052604081208054889290610df0908490612a5f565b90915550506040518181526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169060009084907fdeaa91b6123d068f5821d0fb0678463d1a8a6079fe8af5de3ce5e896dcf9133d9060200160405180910390a450505050505050565b6040516371be737d60e11b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b158015610ec557600080fd5b505afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd91906127cc565b905080610f4c5760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b61094083611e81565b6000818152600560205260408120546001600160a01b0316806106c65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016105b7565b60006001600160a01b03821661105e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016105b7565b506001600160a01b031660009081526006602052604090205490565b6060600180546106db90612b55565b6040516371be737d60e11b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b1580156110ed57600080fd5b505afa158015611101573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112591906127cc565b9050806111745760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b600061118261010085612a77565b6000818152607260205260409020549091506111a061010086612bcc565b600092835260726020526040909220600190921b179055505050565b6001600160a01b0382163314156112155760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105b7565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61128b33836119e2565b6112fd5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016105b7565b610ac284848484611e98565b6000818152600560205260409020546060906001600160a01b03166113965760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016105b7565b60006113a183611f21565b90506002816040516020016113b7929190612969565b604051602081830303815290604052915050919050565b6000818152600560205260409020546060906001600160a01b031661145b5760405162461bcd60e51b815260206004820152603560248201527f4552433732314d657461646174613a204950465320686173682071756572792060448201527f666f72206e6f6e6578697374656e7420746f6b656e000000000000000000000060648201526084016105b7565b6009546001600160a01b0316600061147284612053565b90508060021415611531576000611488836120aa565b9050600f816049811061149d5761149d612c0c565b0180546114a990612b55565b80601f01602080910402602001604051908101604052809291908181526020018280546114d590612b55565b80156115225780601f106114f757610100808354040283529160200191611522565b820191906000526020600020905b81548152906001019060200180831161150557829003601f168201915b50505050509350505050919050565b806001141561155a5760006115458361216d565b9050600b816004811061149d5761149d612c0c565b600a546001600160a01b031660006115718261223c565b90506058816018811061158657611586612c0c565b01805461159290612b55565b80601f01602080910402602001604051908101604052809291908181526020018280546115be90612b55565b801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b5050505050945050505050919050565b6040516371be737d60e11b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b15801561167f57600080fd5b505afa158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b791906127cc565b9050806117065760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b50506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6040516371be737d60e11b81523360048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b15801561179b57600080fd5b505afa1580156117af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d391906127cc565b9050806118225760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b610ac284846123a1565b6000818152600560205260409020546060906001600160a01b03166118b95760405162461bcd60e51b815260206004820152603060248201527f4552433732314d657461646174613a204e616d6520717565727920666f72206e60448201527f6f6e6578697374656e7420746f6b656e0000000000000000000000000000000060648201526084016105b7565b60006118c483612053565b60008181526003602052604090208054919250906118e190612b55565b80601f016020809104026020016040519081016040528092919081815260200182805461190d90612b55565b801561195a5780601f1061192f5761010080835404028352916020019161195a565b820191906000526020600020905b81548152906001019060200180831161193d57829003601f168201915b5050505050915050919050565b6000818152600760205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906119a982610f55565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600560205260408120546001600160a01b0316611a6c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016105b7565b6000611a7783610f55565b9050806001600160a01b0316846001600160a01b03161480611ab25750836001600160a01b0316611aa78461076d565b6001600160a01b0316145b80611ae257506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611afd82610f55565b6001600160a01b031614611b795760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016105b7565b6001600160a01b038216611bf45760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105b7565b611bff600082611967565b6001600160a01b0383166000908152600660205260408120805460019290611c28908490612aef565b90915550506001600160a01b0382166000908152600660205260408120805460019290611c56908490612a5f565b9091555050600081815260056020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008281526004602052604090208054611cdd90612b55565b159050611d525760405162461bcd60e51b815260206004820152602560248201527f4552433732314d657461646174613a2049504653206861736820616c7265616460448201527f792073657400000000000000000000000000000000000000000000000000000060648201526084016105b7565b600082815260046020908152604090912082516109409284019061251a565b6000611d7c82610f55565b9050611d89600083611967565b6001600160a01b0381166000908152600660205260408120805460019290611db2908490612aef565b9091555050600082815260056020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600081611e467f000000000000000000000000000000000000000000000000000000000000000085612aad565b611e70907f0000000000000000000000000000000000000000000000000000000000000000612a5f565b611e7a9190612a5f565b9392505050565b8051611e9490600290602084019061251a565b5050565b611ea3848484611aea565b611eaf848484846123c0565b610ac25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105b7565b606081611f6157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611f8b5780611f7581612b90565b9150611f849050600a83612a77565b9150611f65565b60008167ffffffffffffffff811115611fa657611fa6612c22565b6040519080825280601f01601f191660200182016040528015611fd0576020820181803683370190505b5090505b8415611ae257611fe5600183612aef565b9150611ff2600a86612bcc565b611ffd906030612a5f565b60f81b81838151811061201257612012612c0c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061204c600a86612a77565b9450611fd4565b60007f00000000000000000000000000000000000000000000000000000000000000006120a07f000000000000000000000000000000000000000000000000000000000000000084612aef565b6106c69190612a77565b6040517f92d663130000000000000000000000000000000000000000000000000000000081524260048201526000906107e590829082906001600160a01b038616906392d663139060240160206040518083038186803b15801561210d57600080fd5b505afa158015612121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121459190612858565b61214f9190612acc565b90506049600061215f8284612bab565b61ffff169695505050505050565b604051631f11cf0d60e11b815242600482015260009081906001600160a01b03841690633e239e1a9060240160206040518083038186803b1580156121b157600080fd5b505afa1580156121c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e991906128fe565b9050601160ff8216811015612202575060039392505050565b50600b60ff821681101561221a575060029392505050565b50600560ff8216811015612232575060019392505050565b5060009392505050565b604051631f11cf0d60e11b815242600482015260009081906001600160a01b03841690633e239e1a9060240160206040518083038186803b15801561228057600080fd5b505afa158015612294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b891906128fe565b6040517f4ac1ad780000000000000000000000000000000000000000000000000000000081524260048201529091506000906001600160a01b03851690634ac1ad789060240160206040518083038186803b15801561231657600080fd5b505afa15801561232a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234e91906128fe565b90506002600061235e8284612a8b565b6123689084612b06565b9050600060ff821661239257601760006123828783612b06565b60ff169998505050505050505050565b505060ff909216949350505050565b600082815260036020908152604090912082516109409284019061251a565b6000833b1561250f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123fb903390899088908890600401612a10565b602060405180830381600087803b15801561241557600080fd5b505af1925050508015612445575060408051601f3d908101601f1916820190925261244291810190612806565b60015b6124f5573d808015612473576040519150601f19603f3d011682016040523d82523d6000602084013e612478565b606091505b5080516124ed5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105b7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ae2565b506001949350505050565b82805461252690612b55565b90600052602060002090601f016020900481019282612548576000855561258e565b82601f1061256157805160ff191683800117855561258e565b8280016001018555821561258e579182015b8281111561258e578251825591602001919060010190612573565b5061259a92915061259e565b5090565b5b8082111561259a576000815560010161259f565b600067ffffffffffffffff808411156125ce576125ce612c22565b604051601f8501601f19908116603f011681019082821181831017156125f6576125f6612c22565b8160405280935085815286868601111561260f57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461264057600080fd5b919050565b600082601f83011261265657600080fd5b611e7a838335602085016125b3565b60006020828403121561267757600080fd5b611e7a82612629565b6000806040838503121561269357600080fd5b61269c83612629565b91506126aa60208401612629565b90509250929050565b6000806000606084860312156126c857600080fd5b6126d184612629565b92506126df60208501612629565b9150604084013590509250925092565b6000806000806080858703121561270557600080fd5b61270e85612629565b935061271c60208601612629565b925060408501359150606085013567ffffffffffffffff81111561273f57600080fd5b8501601f8101871361275057600080fd5b61275f878235602084016125b3565b91505092959194509250565b6000806040838503121561277e57600080fd5b61278783612629565b9150602083013561279781612c38565b809150509250929050565b600080604083850312156127b557600080fd5b6127be83612629565b946020939093013593505050565b6000602082840312156127de57600080fd5b8151611e7a81612c38565b6000602082840312156127fb57600080fd5b8135611e7a81612c46565b60006020828403121561281857600080fd5b8151611e7a81612c46565b60006020828403121561283557600080fd5b813567ffffffffffffffff81111561284c57600080fd5b611ae284828501612645565b60006020828403121561286a57600080fd5b815161ffff81168114611e7a57600080fd5b60006020828403121561288e57600080fd5b5035919050565b600080604083850312156128a857600080fd5b82359150602083013567ffffffffffffffff8111156128c657600080fd5b6128d285828601612645565b9150509250929050565b600080604083850312156128ef57600080fd5b50508035926020909101359150565b60006020828403121561291057600080fd5b815160ff81168114611e7a57600080fd5b60008151808452612939816020860160208601612b29565b601f01601f19169290920160200192915050565b6000815161295f818560208601612b29565b9290920192915050565b600080845481600182811c91508083168061298557607f831692505b60208084108214156129a557634e487b7160e01b86526022600452602486fd5b8180156129b957600181146129ca576129f7565b60ff198616895284890196506129f7565b60008b81526020902060005b868110156129ef5781548b8201529085019083016129d6565b505084890196505b505050505050612a07818561294d565b95945050505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612a426080830184612921565b9695505050505050565b602081526000611e7a6020830184612921565b60008219821115612a7257612a72612be0565b500190565b600082612a8657612a86612bf6565b500490565b600060ff831680612a9e57612a9e612bf6565b8060ff84160491505092915050565b6000816000190483118215151615612ac757612ac7612be0565b500290565b600061ffff83811690831681811015612ae757612ae7612be0565b039392505050565b600082821015612b0157612b01612be0565b500390565b600060ff821660ff841680821015612b2057612b20612be0565b90039392505050565b60005b83811015612b44578181015183820152602001612b2c565b83811115610ac25750506000910152565b600181811c90821680612b6957607f821691505b60208210811415612b8a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ba457612ba4612be0565b5060010190565b600061ffff80841680612bc057612bc0612bf6565b92169190910692915050565b600082612bdb57612bdb612bf6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610b6757600080fd5b6001600160e01b031981168114610b6757600080fdfea2646970667358221220047193fa1921e99dcfc0131928e7bdd16357e24b76af0eaa7b5d33488e34cccd64736f6c63430008060033516d585253684857544c6f4b5756515a6d624551316a44656e77755632425048714e5359704e576e596f4a314b33516d51614b514473744d7772454b5a573557326d62447977754e4e366b787545364d694235555a5a5a37756d664a516d65685452697962384d56784d4a5a6363486e4a6b32345174755a646f58526f596331715a4a46574e4d324453516d56514a443467346a784a506936586f4365635877577637554c6b57473573553735554346654d355847504c35516d52677267456f61633868784d76347a4a516d52687856665545417468784851795634765955697258586f3357516d526e366e63423956564e4e593855366a704c61776151356f676f52704b476f6e3858416341586d486f62654c516d62456d4d4b37684c7a43653959577168715856334851656445676f72787463363432436b6b436f675656686f516d58596761435a466974633350574d694e6f4e7665734c50787131385a32555863474b515172626d5a73664367516d624a6b4461634137346863555169415464534a66436b6678624b706a3743625a4b4a536676477737545a3344516d535372437958434865694b7878727239563567785a3455346a337974316d787668476272514b785271694238516d66464348534d416e6a4371795067544a44435151754a4a437066716f757063696865766750786b376a484246516d52695554593665384174456466765653633373755277377345745250645a65586b4b777956614d3862766358516d5961337a47566e3333537347584436705358784152487663394a48424476526b504365443874395261647048516d5548325774466261776d7368536f3950617947776e7a3473655a5353384e6b477947627556596b6f64365368516d53565a505644735a54684b3173706b4c394379345372784c54734e65625875526e327743744166336658466d516d52613463644148646e62664c583373363572696836465976774d6654655071537734366344505239676b5837516d527a7367506f4d736f597769564b57596b464465526a423343325369534b58566d546b444847717938535271516d537874374255666550714142647763693778394279334c6746557662434d34345752734c6f454643334d5954516d6434556748795446755365335054524a6955766d4171633361645341707a736f4c4651654362746964777057516d656347684552696363424358613742487741534d5a47565a5242515042646e79444175757a4c637450527642516d53416968714d78457159504761566639417046683431364e463138736f4c636e70504d32695237374a376a42516d5a72624653754866367a644d36365246676a327643516174624156596679434268485073537a507a457a324d516d58445078767a65623167706b6368445933715161693652594268414c5657716f373948685059446d62626951516d656b7941617934336d6a5761783162794c3545726e79354b79684e38705a6756684c45375467387761445232516d65716b3965483373546975634c546270504159713238446a36696363396f41504a746950656a356535737343516d5a3166346b75364d4e7436586e6f5054515265597661344141704c324a6a427a79647766785061526f45676b68747470733a2f2f6170692e6e69667479676174657761792e636f6d2f61727368616d2f516d4e736637475a557732427a344453656b3266636158457678534836476445556a6d7a556970726a3969325461516d544a735955397a614a5233705551434c6b4c47594e616e354e3861393673446f523348674577517a36507a77516d594c694247687766754257474e69334e6d46516756576a35356232567875723248766a566e37744d6f443959516d57614c704b676b516b32787277795070316b646d734235785963724174696154315539747437426679786255516d56635973473954334e6735434a6d5641516b3776485235597a52615466426b58466259417271547361457341516d543669484b5a4e39487677577953326433587142626871504c5863426631465848484e4e6b37546362414675516d505873625352776b577335784145717074396843626a4e446d48735a76764a5a6b4e483362343139464d446d516d59627641527948534a717270365054657976516a31364547724737724c73736f4466787236314a4256636858516d575731596a476956426a675365615171744e4c797031674b62795664626f715437445543685877334e675174516d61323778676167514c4b68543839444452765554666d6e354361634358646e373738625751445552364e4732516d61553148656a74326b4c545670636e5866457057634454374d433866623875576a634257355343456763426e516d5765747646684a4c75754a42534d68535077743578794376337557313739466846384d626d6e624b55656857516d536979736d3456574c4a31394a4638315537656e7863666a6b62326d5679727a684a6b5a3671434b34327853516d504a4e585a3162584a55334678434267623470554e4847424451687577565659555547577975777034764c5845726f64696e6720616e64205265666f726d696e672042757374206f66205a657573202845617274682044617929516d523831557551506b68664745344b346362626e424c6a395a35455a63456f63753859593138554d374e554d31516d58484c77467777613578694833785857507a76504c4852596f4551644b6f395a634d44733164536676455244516d6556794859475039514b33705347705950634d43725472663850574d70706471396353784238546a756e5273516d61356957366368366b474533474231466b43765574354c72754a336e5a4e37436a4a514e5a77696678535148516d4e57723972367045456e79683961656a756538757048536a594e3234705772417a70596d6a52677365457872516d57786939564c52794d775879313170534a6263473858426766323550584b335162535a436337563761586f6545726f64696e6720616e64205265666f726d696e672056656e7573206f662041726c6573202837322e3620596561727329516d523462413169666a697868746b54596e7a34566d484b574d7061665a76346d4665686d654771634451647641516d525a3142323759315975446f7136573332703873464b55616a3668517766614d4a75437a576b4134776d4b42516d5a4e746e33766b32536f4a34514a6636753255536e55767135514e4d724d7163544b43387332664167684b59516d53715264464d32725758366967694276665862754d43624e396878313344777256547451486938474e765445516d66517079775a59325732676945393239566d714a366d324e5577574b71655a54363633794b3636315742344c516d6472787a7545656350454c364c3759566978756365686952593261425745625a414565595138566b444e6573516d546a576b327038654a635736465232793174386d4c634541487339514b743274635043637358545841354e41516d61627738644e686559656b76446243657a3147446443367455647267434c713853675573524659634d525538516d5a75615a3252706857766e61784d787a3950643935633445354450684535427453773461757a74694d433175516d66536b775045515962617a4d4b774c7256615a6d72467537526b364b56547178566767723746367a76776646516d5a6677666a686a64527a5155424639385453625a505569574a6f64394744694457423770694b333434623761516d5558666d50396b385373554d4e7a433839793946344e5752586b616442563574365142516b54544368525a50516d615239386a77386f694a795a52623339466359757a66383835476f584847544b3775657776434e3238464747516d595a48426f4e78443968415a415341546843393379527247636656356e436769383677514e56675a6b656d56516d52736d7831617965596141727358524856616e314151717157386542514b5552677547664735786a7470734e516d5675784d36666f4d484172783271536d69757168555743565769643572314868797138773761504869656371516d595171736e3146734d526d37396877386358546b47504b48337061336f75544769544c7665474a716d363541516d6252327332755063797741535575647073756a576d68786f46717935687a784639444d356f68524e5166575a516d544739795a34735464575850514e77596b527a647a48436a57444d6b3871684259384a43765a64764a6b7370516d546967704e69345933695a516e67784455624b4763773244375272764143436954564778466d6252756a4b56516d66527273333838635a71764763356b63746d356872544e776858364c654b344565786b386164427875594c6a516d5763337236566b6e594236764175356173745338507a506a4777713367514165787874366736483136396755516d5a65346e6a703761336f394479526248466e315244744743697958586f46484a5a6f786b6d456a7246677754516d6177433762555868717748656f41616764375556324868634778705a34505a486b553172784d367977674b56516d4e513261566b6b614b5632654b514d50595671434642766152734b746162415667394c784377696275654266516d59395376754b387254536f5a7341577867615853366650655153596871736d576771784159626675444d3479516d62396232516b427a53646b506f6f6577414151526351554c46595034396938716467526b5a377a3573696a68516d4e7253424c564a554e464842716b543672357574724e56454c4c475550766e79596d587046514d7977384273516d5a41545a55593134526846767166477538435831616a557934516678394b444e4c59704a6a4165694c326133516d574a6f76326b666848506737514c5a6b6b627a4338576d4b77443831776441544b4539346841536665694d4d516d59424e5a39415947744746515534485569326941574375684874376e5135376476376675456547667368544e516d564d4b5062544e5532667a446d7747544550567859735238544634397961564638566b31745435755947455945726f64696e6720616e64205265666f726d696e672042757374206f66204d656c706f6d656e6520284d61727469616e2044617929516d527257786871516676675856376e7547633538435166586e4532514b71395758596432486156514e78554a39516d537837386867685734637057713374696e52596d4b6f486d3636354c4573445050586d4b317a6d6738557059516d5a62574c735656524e6746796a6a4757666b43417869734d454547564a5072706253697559525338756e5063516d524d5239794c56466d4c43475a7972536d7553507768364b786b79536358565a32616b59334e346837486635516d4e4e61387a71545a46706a6f326578326b64347839764c5a6a4b393357576d4170343434565753374e645644516d596b59714d5839465859374d50354539656472315a654e45464247717a31424e4b436463766b4e376546614e516d63547843686b433235395054717a56675574436147737453366435643345744d63626e43583262735a424e6a516d614232394e6864776552373568415745656876635843775842774e384b42706e7936757a647355484e6f6776516d5135746b62625969654354766456504c3835504d5a7a696a334d7142395444734d69576831557a523843654e516d527469486f4545356b5972726e466a503531715445434d484273644d4836506b4a5374397545457a6b585869516d59474e3532716470426f414a73357965335275797867566677316b41787636536a7934665275676235654553516d665448683345334a4d35635a6333657254484a766b58654b68376935536a4165587742725150777754445463516d57617762686e4c464243314a37315154353559433668745077583657446f4c6d776f6a3333615237356d7543516d636a53595a7543484753377a6f78356a7977356245334e6a484e676879646a776b7169554d456a3368795067516d63485963724b4e4773314e4e386a6e794a556e417a6e654b364462614b746d4c5677635a5670323846756a69516d5a32536a587556645647645239766943704e6855385a535274736e454545726d6a4c71364c764d67446e347645726f64696e6720616e64205265666f726d696e67204469676974616c205363756c707475726573516d55374c52386a6951636a41775478787258694763336a375573743747676a65623559736f673454356957374e516d4e4c6d4b43613945465276596138526264694a6a556a746d643650463939564361514c746b62666535553432516d503865477771444c746d484438394e6f66723534467341634876644c326d454d6e436a737353397345637750516d564753366f5848745068336a65596e715037593238546938613855714a44774e624e36483762506f39614d6b516d507a4250454d6a616f763245645a46366d4535536734636b6933354d6e6e594743703835354d6a4264514353516d6171724d427074426b644a635079724b6672683861785470443961333871666f64636f5873524e646e696270516d55446e37564b5654356741654e5a33366b4e41323766346378533332535153777351756a46466d6562744a4b
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e35760003560e01c806355f804b31161010f578063b88d4fde116100a2578063d7a853be11610071578063d7a853be1461045b578063e71df8b51461046e578063e725f87714610481578063e985e9c51461049457600080fd5b8063b88d4fde1461040f578063c87b56dd14610422578063d371663014610435578063d561e85d1461044857600080fd5b806370a08231116100de57806370a08231146103ce57806395d89b41146103e15780639dd5e481146103e9578063a22cb465146103fc57600080fd5b806355f804b314610375578063569dadf0146103885780635f2ef9dc1461039b5780636352211e146103bb57600080fd5b8063095ea7b3116101875780632b6db055116101565780632b6db0551461032957806342842e0e1461033c57806342966c681461034f5780634fba84ca1461036257600080fd5b8063095ea7b3146102b5578063139fed7c146102c85780632276f3f2146102ef57806323b872dd1461031657600080fd5b806302d05d3f116101c357806302d05d3f14610238578063051802371461024d57806306fdde0314610282578063081812fc1461028a57600080fd5b806260a82f146101e8578062cd587c146101fd57806301ffc9a714610225575b600080fd5b6101fb6101f6366004612665565b6104d0565b005b61021061020b36600461287c565b6105f1565b60405190151581526020015b60405180910390f35b6102106102333660046127e9565b61062f565b6102406106cc565b60405161021c9190612a4c565b6102747f000000000000000000000000000000000000000000000000000000000000000281565b60405190815260200161021c565b61024061075e565b61029d61029836600461287c565b61076d565b6040516001600160a01b03909116815260200161021c565b6101fb6102c33660046127a2565b610813565b61029d7f000000000000000000000000e052113bd7d7700d623414a0a4585bcae754e9d581565b6102747f000000000000000000000000000000000000000000000000000000000000000381565b6101fb6103243660046126b3565b610945565b6101fb610337366004612895565b6109cd565b6101fb61034a3660046126b3565b610ac8565b6101fb61035d36600461287c565b610ae3565b6101fb6103703660046128dc565b610b6a565b6101fb610383366004612823565b610e61565b60095461029d906001600160a01b031681565b6102746103a936600461287c565b60716020526000908152604090205481565b61029d6103c936600461287c565b610f55565b6102746103dc366004612665565b610fe0565b61024061107a565b6101fb6103f736600461287c565b611089565b6101fb61040a36600461276b565b6111bc565b6101fb61041d3660046126ef565b611281565b61024061043036600461287c565b611309565b61024061044336600461287c565b6113ce565b6101fb610456366004612665565b61161b565b6101fb610469366004612895565b611737565b600a5461029d906001600160a01b031681565b61024061048f36600461287c565b61182c565b6102106104a2366004612680565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6040516371be737d60e11b81523360048201527f0000000000000000000000006e53130ddff21e3bc963ee902005223b9a202106906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b15801561053457600080fd5b505afa158015610548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056c91906127cc565b9050806105c05760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064015b60405180910390fd5b5050600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60008060728161060361010086612a77565b8152602001908152602001600020549050610100836106229190612bcc565b6001901b16151592915050565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061069257506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806106c657507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060607080546106db90612b55565b80601f016020809104026020016040519081016040528092919081815260200182805461070790612b55565b80156107545780601f1061072957610100808354040283529160200191610754565b820191906000526020600020905b81548152906001019060200180831161073757829003601f168201915b5050505050905090565b6060600080546106db90612b55565b6000818152600560205260408120546001600160a01b03166107f75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016105b7565b506000908152600760205260409020546001600160a01b031690565b600061081e82610f55565b9050806001600160a01b0316836001600160a01b031614156108a85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016105b7565b336001600160a01b03821614806108c457506108c481336104a2565b6109365760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016105b7565b6109408383611967565b505050565b610950335b826119e2565b6109c25760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016105b7565b610940838383611aea565b6040516371be737d60e11b81523360048201527f0000000000000000000000006e53130ddff21e3bc963ee902005223b9a202106906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b158015610a3157600080fd5b505afa158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6991906127cc565b905080610ab85760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b610ac28484611cc4565b50505050565b61094083838360405180602001604052806000815250611281565b610aec3361094a565b610b5e5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f7665640000000000000000000000000000000060648201526084016105b7565b610b6781611d71565b50565b6040516371be737d60e11b81523360048201527f0000000000000000000000006e53130ddff21e3bc963ee902005223b9a202106906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b158015610bce57600080fd5b505afa158015610be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0691906127cc565b905080610c555760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b610c5e846105f1565b15610cd15760405162461bcd60e51b815260206004820152603660248201527f4e696674794275696c646572496e7374616e63653a206d696e74696e6720636f60448201527f6e636c7564656420666f72206e6966747920747970650000000000000000000060648201526084016105b7565b600084815260716020526040812054610ceb906001612a5f565b90506000610cf98683611e19565b905060006001610d098784612a5f565b610d139190612aef565b9050815b818111610d84576000818152600560205260409020805473ffffffffffffffffffffffffffffffffffffffff19167f000000000000000000000000e052113bd7d7700d623414a0a4585bcae754e9d56001600160a01b031617905580610d7c81612b90565b915050610d17565b5060008781526071602052604081208054889290610da3908490612a5f565b90915550506001600160a01b037f000000000000000000000000e052113bd7d7700d623414a0a4585bcae754e9d51660009081526006602052604081208054889290610df0908490612a5f565b90915550506040518181526001600160a01b037f000000000000000000000000e052113bd7d7700d623414a0a4585bcae754e9d5169060009084907fdeaa91b6123d068f5821d0fb0678463d1a8a6079fe8af5de3ce5e896dcf9133d9060200160405180910390a450505050505050565b6040516371be737d60e11b81523360048201527f0000000000000000000000006e53130ddff21e3bc963ee902005223b9a202106906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b158015610ec557600080fd5b505afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd91906127cc565b905080610f4c5760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b61094083611e81565b6000818152600560205260408120546001600160a01b0316806106c65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016105b7565b60006001600160a01b03821661105e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016105b7565b506001600160a01b031660009081526006602052604090205490565b6060600180546106db90612b55565b6040516371be737d60e11b81523360048201527f0000000000000000000000006e53130ddff21e3bc963ee902005223b9a202106906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b1580156110ed57600080fd5b505afa158015611101573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112591906127cc565b9050806111745760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b600061118261010085612a77565b6000818152607260205260409020549091506111a061010086612bcc565b600092835260726020526040909220600190921b179055505050565b6001600160a01b0382163314156112155760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105b7565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61128b33836119e2565b6112fd5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016105b7565b610ac284848484611e98565b6000818152600560205260409020546060906001600160a01b03166113965760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016105b7565b60006113a183611f21565b90506002816040516020016113b7929190612969565b604051602081830303815290604052915050919050565b6000818152600560205260409020546060906001600160a01b031661145b5760405162461bcd60e51b815260206004820152603560248201527f4552433732314d657461646174613a204950465320686173682071756572792060448201527f666f72206e6f6e6578697374656e7420746f6b656e000000000000000000000060648201526084016105b7565b6009546001600160a01b0316600061147284612053565b90508060021415611531576000611488836120aa565b9050600f816049811061149d5761149d612c0c565b0180546114a990612b55565b80601f01602080910402602001604051908101604052809291908181526020018280546114d590612b55565b80156115225780601f106114f757610100808354040283529160200191611522565b820191906000526020600020905b81548152906001019060200180831161150557829003601f168201915b50505050509350505050919050565b806001141561155a5760006115458361216d565b9050600b816004811061149d5761149d612c0c565b600a546001600160a01b031660006115718261223c565b90506058816018811061158657611586612c0c565b01805461159290612b55565b80601f01602080910402602001604051908101604052809291908181526020018280546115be90612b55565b801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b5050505050945050505050919050565b6040516371be737d60e11b81523360048201527f0000000000000000000000006e53130ddff21e3bc963ee902005223b9a202106906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b15801561167f57600080fd5b505afa158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b791906127cc565b9050806117065760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b50506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6040516371be737d60e11b81523360048201527f0000000000000000000000006e53130ddff21e3bc963ee902005223b9a202106906000906001600160a01b0383169063e37ce6fa9060240160206040518083038186803b15801561179b57600080fd5b505afa1580156117af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d391906127cc565b9050806118225760405162461bcd60e51b815260206004820152601f60248201527f4e69667479456e746974793a20496e76616c6964206d73672e73656e6465720060448201526064016105b7565b610ac284846123a1565b6000818152600560205260409020546060906001600160a01b03166118b95760405162461bcd60e51b815260206004820152603060248201527f4552433732314d657461646174613a204e616d6520717565727920666f72206e60448201527f6f6e6578697374656e7420746f6b656e0000000000000000000000000000000060648201526084016105b7565b60006118c483612053565b60008181526003602052604090208054919250906118e190612b55565b80601f016020809104026020016040519081016040528092919081815260200182805461190d90612b55565b801561195a5780601f1061192f5761010080835404028352916020019161195a565b820191906000526020600020905b81548152906001019060200180831161193d57829003601f168201915b5050505050915050919050565b6000818152600760205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906119a982610f55565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600560205260408120546001600160a01b0316611a6c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016105b7565b6000611a7783610f55565b9050806001600160a01b0316846001600160a01b03161480611ab25750836001600160a01b0316611aa78461076d565b6001600160a01b0316145b80611ae257506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611afd82610f55565b6001600160a01b031614611b795760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016105b7565b6001600160a01b038216611bf45760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105b7565b611bff600082611967565b6001600160a01b0383166000908152600660205260408120805460019290611c28908490612aef565b90915550506001600160a01b0382166000908152600660205260408120805460019290611c56908490612a5f565b9091555050600081815260056020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008281526004602052604090208054611cdd90612b55565b159050611d525760405162461bcd60e51b815260206004820152602560248201527f4552433732314d657461646174613a2049504653206861736820616c7265616460448201527f792073657400000000000000000000000000000000000000000000000000000060648201526084016105b7565b600082815260046020908152604090912082516109409284019061251a565b6000611d7c82610f55565b9050611d89600083611967565b6001600160a01b0381166000908152600660205260408120805460019290611db2908490612aef565b9091555050600082815260056020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600081611e467f000000000000000000000000000000000000000000000000000000000000271085612aad565b611e70907f000000000000000000000000000000000000000000000000000000000bebc200612a5f565b611e7a9190612a5f565b9392505050565b8051611e9490600290602084019061251a565b5050565b611ea3848484611aea565b611eaf848484846123c0565b610ac25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105b7565b606081611f6157505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611f8b5780611f7581612b90565b9150611f849050600a83612a77565b9150611f65565b60008167ffffffffffffffff811115611fa657611fa6612c22565b6040519080825280601f01601f191660200182016040528015611fd0576020820181803683370190505b5090505b8415611ae257611fe5600183612aef565b9150611ff2600a86612bcc565b611ffd906030612a5f565b60f81b81838151811061201257612012612c0c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061204c600a86612a77565b9450611fd4565b60007f00000000000000000000000000000000000000000000000000000000000027106120a07f000000000000000000000000000000000000000000000000000000000bebc20084612aef565b6106c69190612a77565b6040517f92d663130000000000000000000000000000000000000000000000000000000081524260048201526000906107e590829082906001600160a01b038616906392d663139060240160206040518083038186803b15801561210d57600080fd5b505afa158015612121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121459190612858565b61214f9190612acc565b90506049600061215f8284612bab565b61ffff169695505050505050565b604051631f11cf0d60e11b815242600482015260009081906001600160a01b03841690633e239e1a9060240160206040518083038186803b1580156121b157600080fd5b505afa1580156121c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e991906128fe565b9050601160ff8216811015612202575060039392505050565b50600b60ff821681101561221a575060029392505050565b50600560ff8216811015612232575060019392505050565b5060009392505050565b604051631f11cf0d60e11b815242600482015260009081906001600160a01b03841690633e239e1a9060240160206040518083038186803b15801561228057600080fd5b505afa158015612294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b891906128fe565b6040517f4ac1ad780000000000000000000000000000000000000000000000000000000081524260048201529091506000906001600160a01b03851690634ac1ad789060240160206040518083038186803b15801561231657600080fd5b505afa15801561232a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234e91906128fe565b90506002600061235e8284612a8b565b6123689084612b06565b9050600060ff821661239257601760006123828783612b06565b60ff169998505050505050505050565b505060ff909216949350505050565b600082815260036020908152604090912082516109409284019061251a565b6000833b1561250f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123fb903390899088908890600401612a10565b602060405180830381600087803b15801561241557600080fd5b505af1925050508015612445575060408051601f3d908101601f1916820190925261244291810190612806565b60015b6124f5573d808015612473576040519150601f19603f3d011682016040523d82523d6000602084013e612478565b606091505b5080516124ed5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016105b7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ae2565b506001949350505050565b82805461252690612b55565b90600052602060002090601f016020900481019282612548576000855561258e565b82601f1061256157805160ff191683800117855561258e565b8280016001018555821561258e579182015b8281111561258e578251825591602001919060010190612573565b5061259a92915061259e565b5090565b5b8082111561259a576000815560010161259f565b600067ffffffffffffffff808411156125ce576125ce612c22565b604051601f8501601f19908116603f011681019082821181831017156125f6576125f6612c22565b8160405280935085815286868601111561260f57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461264057600080fd5b919050565b600082601f83011261265657600080fd5b611e7a838335602085016125b3565b60006020828403121561267757600080fd5b611e7a82612629565b6000806040838503121561269357600080fd5b61269c83612629565b91506126aa60208401612629565b90509250929050565b6000806000606084860312156126c857600080fd5b6126d184612629565b92506126df60208501612629565b9150604084013590509250925092565b6000806000806080858703121561270557600080fd5b61270e85612629565b935061271c60208601612629565b925060408501359150606085013567ffffffffffffffff81111561273f57600080fd5b8501601f8101871361275057600080fd5b61275f878235602084016125b3565b91505092959194509250565b6000806040838503121561277e57600080fd5b61278783612629565b9150602083013561279781612c38565b809150509250929050565b600080604083850312156127b557600080fd5b6127be83612629565b946020939093013593505050565b6000602082840312156127de57600080fd5b8151611e7a81612c38565b6000602082840312156127fb57600080fd5b8135611e7a81612c46565b60006020828403121561281857600080fd5b8151611e7a81612c46565b60006020828403121561283557600080fd5b813567ffffffffffffffff81111561284c57600080fd5b611ae284828501612645565b60006020828403121561286a57600080fd5b815161ffff81168114611e7a57600080fd5b60006020828403121561288e57600080fd5b5035919050565b600080604083850312156128a857600080fd5b82359150602083013567ffffffffffffffff8111156128c657600080fd5b6128d285828601612645565b9150509250929050565b600080604083850312156128ef57600080fd5b50508035926020909101359150565b60006020828403121561291057600080fd5b815160ff81168114611e7a57600080fd5b60008151808452612939816020860160208601612b29565b601f01601f19169290920160200192915050565b6000815161295f818560208601612b29565b9290920192915050565b600080845481600182811c91508083168061298557607f831692505b60208084108214156129a557634e487b7160e01b86526022600452602486fd5b8180156129b957600181146129ca576129f7565b60ff198616895284890196506129f7565b60008b81526020902060005b868110156129ef5781548b8201529085019083016129d6565b505084890196505b505050505050612a07818561294d565b95945050505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612a426080830184612921565b9695505050505050565b602081526000611e7a6020830184612921565b60008219821115612a7257612a72612be0565b500190565b600082612a8657612a86612bf6565b500490565b600060ff831680612a9e57612a9e612bf6565b8060ff84160491505092915050565b6000816000190483118215151615612ac757612ac7612be0565b500290565b600061ffff83811690831681811015612ae757612ae7612be0565b039392505050565b600082821015612b0157612b01612be0565b500390565b600060ff821660ff841680821015612b2057612b20612be0565b90039392505050565b60005b83811015612b44578181015183820152602001612b2c565b83811115610ac25750506000910152565b600181811c90821680612b6957607f821691505b60208210811415612b8a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ba457612ba4612be0565b5060010190565b600061ffff80841680612bc057612bc0612bf6565b92169190910692915050565b600082612bdb57612bdb612bf6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114610b6757600080fd5b6001600160e01b031981168114610b6757600080fdfea2646970667358221220047193fa1921e99dcfc0131928e7bdd16357e24b76af0eaa7b5d33488e34cccd64736f6c63430008060033
Deployed Bytecode Sourcemap
28187:17371:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40810:139;;;;;;:::i;:::-;;:::i;:::-;;42068:197;;;;;;:::i;:::-;;:::i;:::-;;;8189:14:1;;8182:22;8164:41;;8152:2;8137:18;42068:197:0;;;;;;;;13551:292;;;;;;:::i;:::-;;:::i;42671:97::-;;;:::i;:::-;;;;;;;:::i;11736:25::-;;;;;;;;15927::1;;;15915:2;15900:18;11736:25:0;15882:76:1;14483:100:0;;;:::i;17674:219::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7441:55:1;;;7423:74;;7411:2;7396:18;17674:219:0;7378:125:1;17211:397:0;;;;;;:::i;:::-;;:::i;11919:38::-;;;;;11828:32;;;;;18560:303;;;;;;:::i;:::-;;:::i;43318:158::-;;;;;;:::i;:::-;;:::i;18934:151::-;;;;;;:::i;:::-;;:::i;26023:245::-;;;;;;:::i;:::-;;:::i;43840:697::-;;;;;;:::i;:::-;;:::i;42870:105::-;;;;;;:::i;:::-;;:::i;28294:34::-;;;;;-1:-1:-1;;;;;28294:34:0;;;39416:46;;;;;;:::i;:::-;;;;;;;;;;;;;;14177:239;;;;;;:::i;:::-;;:::i;13907:208::-;;;;;;:::i;:::-;;:::i;14652:104::-;;;:::i;42364:237::-;;;;;;:::i;:::-;;:::i;17965:293::-;;;;;;:::i;:::-;;:::i;19156:285::-;;;;;;:::i;:::-;;:::i;15065:304::-;;;;;;:::i;:::-;;:::i;44805:748::-;;;;;;:::i;:::-;;:::i;40601:139::-;;;;;;:::i;:::-;;:::i;43064:147::-;;;;;;:::i;:::-;;:::i;28335:34::-;;;;;-1:-1:-1;;;;;28335:34:0;;;15865:268;;;;;;:::i;:::-;;:::i;18329:164::-;;;;;;:::i;:::-;-1:-1:-1;;;;;18450:25:0;;;18426:4;18450:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;18329:164;40810:139;11002:44;;-1:-1:-1;;;11002:44:0;;11035:10;11002:44;;;7423:74:1;10954:21:0;;10910:27;;-1:-1:-1;;;;;11002:32:0;;;;;7396:18:1;;11002:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10987:59;;11065:7;11057:51;;;;-1:-1:-1;;;11057:51:0;;13969:2:1;11057:51:0;;;13951:21:1;14008:2;13988:18;;;13981:30;14047:33;14027:18;;;14020:61;14098:18;;11057:51:0;;;;;;;;;-1:-1:-1;;40902:19:0::1;:39:::0;;-1:-1:-1;;40902:39:0::1;-1:-1:-1::0;;;;;40902:39:0;;;::::1;::::0;;;::::1;::::0;;40810:139::o;42068:197::-;42131:4;;42164:10;42131:4;42175:15;42187:3;42175:9;:15;:::i;:::-;42164:27;;;;;;;;;;;;42148:43;;42244:3;42232:9;:15;;;;:::i;:::-;42226:1;:22;;42210:39;42209:48;;;42068:197;-1:-1:-1;;42068:197:0:o;13551:292::-;13653:4;-1:-1:-1;;;;;;13677:40:0;;13692:25;13677:40;;:105;;-1:-1:-1;;;;;;;13734:48:0;;13749:33;13734:48;13677:105;:158;;;-1:-1:-1;10221:25:0;-1:-1:-1;;;;;;10206:40:0;;;13799:36;13670:165;13551:292;-1:-1:-1;;13551:292:0:o;42671:97::-;42719:13;42752:8;42745:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42671:97;:::o;14483:100::-;14537:13;14570:5;14563:12;;;;;:::i;17674:219::-;17750:7;20997:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20997:16:0;17770:73;;;;-1:-1:-1;;;17770:73:0;;12730:2:1;17770:73:0;;;12712:21:1;12769:2;12749:18;;;12742:30;12808:34;12788:18;;;12781:62;12879:14;12859:18;;;12852:42;12911:19;;17770:73:0;12702:234:1;17770:73:0;-1:-1:-1;17861:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;17861:24:0;;17674:219::o;17211:397::-;17292:13;17308:23;17323:7;17308:14;:23::i;:::-;17292:39;;17356:5;-1:-1:-1;;;;;17350:11:0;:2;-1:-1:-1;;;;;17350:11:0;;;17342:57;;;;-1:-1:-1;;;17342:57:0;;14329:2:1;17342:57:0;;;14311:21:1;14368:2;14348:18;;;14341:30;14407:34;14387:18;;;14380:62;14478:3;14458:18;;;14451:31;14499:19;;17342:57:0;14301:223:1;17342:57:0;8339:10;-1:-1:-1;;;;;17420:21:0;;;;:62;;-1:-1:-1;17445:37:0;17462:5;8339:10;18329:164;:::i;17445:37::-;17412:154;;;;-1:-1:-1;;;17412:154:0;;11078:2:1;17412:154:0;;;11060:21:1;11117:2;11097:18;;;11090:30;11156:34;11136:18;;;11129:62;11227:26;11207:18;;;11200:54;11271:19;;17412:154:0;11050:246:1;17412:154:0;17579:21;17588:2;17592:7;17579:8;:21::i;:::-;17281:327;17211:397;;:::o;18560:303::-;18721:41;8339:10;18740:12;18754:7;18721:18;:41::i;:::-;18713:103;;;;-1:-1:-1;;;18713:103:0;;14731:2:1;18713:103:0;;;14713:21:1;14770:2;14750:18;;;14743:30;14809:34;14789:18;;;14782:62;14880:19;14860:18;;;14853:47;14917:19;;18713:103:0;14703:239:1;18713:103:0;18827:28;18837:4;18843:2;18847:7;18827:9;:28::i;43318:158::-;11002:44;;-1:-1:-1;;;11002:44:0;;11035:10;11002:44;;;7423:74:1;10954:21:0;;10910:27;;-1:-1:-1;;;;;11002:32:0;;;;;7396:18:1;;11002:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10987:59;;11065:7;11057:51;;;;-1:-1:-1;;;11057:51:0;;13969:2:1;11057:51:0;;;13951:21:1;14008:2;13988:18;;;13981:30;14047:33;14027:18;;;14020:61;14098:18;;11057:51:0;13941:181:1;11057:51:0;43421:47:::1;43448:9;43459:8;43421:26;:47::i;:::-;10899:229:::0;;43318:158;;:::o;18934:151::-;19038:39;19055:4;19061:2;19065:7;19038:39;;;;;;;;;;;;:16;:39::i;26023:245::-;26141:41;8339:10;26160:12;8259:98;26141:41;26133:102;;;;-1:-1:-1;;;26133:102:0;;15149:2:1;26133:102:0;;;15131:21:1;15188:2;15168:18;;;15161:30;15227:34;15207:18;;;15200:62;15298:18;15278;;;15271:46;15334:19;;26133:102:0;15121:238:1;26133:102:0;26246:14;26252:7;26246:5;:14::i;:::-;26023:245;:::o;43840:697::-;11002:44;;-1:-1:-1;;;11002:44:0;;11035:10;11002:44;;;7423:74:1;10954:21:0;;10910:27;;-1:-1:-1;;;;;11002:32:0;;;;;7396:18:1;;11002:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10987:59;;11065:7;11057:51;;;;-1:-1:-1;;;11057:51:0;;13969:2:1;11057:51:0;;;13951:21:1;14008:2;13988:18;;;13981:30;14047:33;14027:18;;;14020:61;14098:18;;11057:51:0;13941:181:1;11057:51:0;43936:24:::1;43950:9;43936:13;:24::i;:::-;43935:25;43927:92;;;::::0;-1:-1:-1;;;43927:92:0;;9483:2:1;43927:92:0::1;::::0;::::1;9465:21:1::0;9522:2;9502:18;;;9495:30;9561:34;9541:18;;;9534:62;9632:24;9612:18;;;9605:52;9674:19;;43927:92:0::1;9455:244:1::0;43927:92:0::1;44044:19;44066:21:::0;;;:10:::1;:21;::::0;;;;;:25:::1;::::0;44090:1:::1;44066:25;:::i;:::-;44044:47;;44102:17;44122:38;44137:9;44148:11;44122:14;:38::i;:::-;44102:58:::0;-1:-1:-1;44171:17:0::1;44211:1;44191:17;44203:5:::0;44102:58;44191:17:::1;:::i;:::-;:21;;;;:::i;:::-;44171:41:::0;-1:-1:-1;44256:9:0;44233:126:::1;44278:9;44267:7;:20;44233:126;;44315:16;::::0;;;:7:::1;:16;::::0;;;;:32;;-1:-1:-1;;44315:32:0::1;44334:13;-1:-1:-1::0;;;;;44315:32:0::1;;::::0;;:16;44289:9:::1;44315:16:::0;44289:9:::1;:::i;:::-;;;;44233:126;;;-1:-1:-1::0;44369:21:0::1;::::0;;;:10:::1;:21;::::0;;;;:30;;44394:5;;44369:21;:30:::1;::::0;44394:5;;44369:30:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;44420:13:0::1;44410:24;;::::0;;;:9:::1;:24;::::0;;;;:33;;44438:5;;44410:24;:33:::1;::::0;44438:5;;44410:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;44461:68:0::1;::::0;15927:25:1;;;-1:-1:-1;;;;;44515:13:0::1;44461:68;::::0;44511:1:::1;::::0;44481:9;;44461:68:::1;::::0;15915:2:1;15900:18;44461:68:0::1;;;;;;;43916:621;;;10899:229:::0;;43840:697;;:::o;42870:105::-;11002:44;;-1:-1:-1;;;11002:44:0;;11035:10;11002:44;;;7423:74:1;10954:21:0;;10910:27;;-1:-1:-1;;;;;11002:32:0;;;;;7396:18:1;;11002:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10987:59;;11065:7;11057:51;;;;-1:-1:-1;;;11057:51:0;;13969:2:1;11057:51:0;;;13951:21:1;14008:2;13988:18;;;13981:30;14047:33;14027:18;;;14020:61;14098:18;;11057:51:0;13941:181:1;11057:51:0;42947:20:::1;42959:7;42947:11;:20::i;14177:239::-:0;14249:7;14285:16;;;:7;:16;;;;;;-1:-1:-1;;;;;14285:16:0;14320:19;14312:73;;;;-1:-1:-1;;;14312:73:0;;11914:2:1;14312:73:0;;;11896:21:1;11953:2;11933:18;;;11926:30;11992:34;11972:18;;;11965:62;12063:11;12043:18;;;12036:39;12092:19;;14312:73:0;11886:231:1;13907:208:0;13979:7;-1:-1:-1;;;;;14007:19:0;;13999:74;;;;-1:-1:-1;;;13999:74:0;;11503:2:1;13999:74:0;;;11485:21:1;11542:2;11522:18;;;11515:30;11581:34;11561:18;;;11554:62;11652:12;11632:18;;;11625:40;11682:19;;13999:74:0;11475:232:1;13999:74:0;-1:-1:-1;;;;;;14091:16:0;;;;;:9;:16;;;;;;;13907:208::o;14652:104::-;14708:13;14741:7;14734:14;;;;;:::i;42364:237::-;11002:44;;-1:-1:-1;;;11002:44:0;;11035:10;11002:44;;;7423:74:1;10954:21:0;;10910:27;;-1:-1:-1;;;;;11002:32:0;;;;;7396:18:1;;11002:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10987:59;;11065:7;11057:51;;;;-1:-1:-1;;;11057:51:0;;13969:2:1;11057:51:0;;;13951:21:1;14008:2;13988:18;;;13981:30;14047:33;14027:18;;;14020:61;14098:18;;11057:51:0;13941:181:1;11057:51:0;42439:16:::1;42458:15;42470:3;42458:9:::0;:15:::1;:::i;:::-;42484:13;42500:20:::0;;;:10:::1;:20;::::0;;;;;42439:34;;-1:-1:-1;42576:15:0::1;42588:3;42576:9:::0;:15:::1;:::i;:::-;42562:31;42531:20:::0;;;:10:::1;:20;::::0;;;;;42570:1:::1;:22:::0;;::::1;42554:39;42531:62:::0;;-1:-1:-1;;;42364:237:0:o;17965:293::-;-1:-1:-1;;;;;18068:24:0;;8339:10;18068:24;;18060:62;;;;-1:-1:-1;;;18060:62:0;;10311:2:1;18060:62:0;;;10293:21:1;10350:2;10330:18;;;10323:30;10389:27;10369:18;;;10362:55;10434:18;;18060:62:0;10283:175:1;18060:62:0;8339:10;18133:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;18133:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;18133:53:0;;;;;;;;;;18202:48;;8164:41:1;;;18133:42:0;;8339:10;18202:48;;8137:18:1;18202:48:0;;;;;;;17965:293;;:::o;19156:285::-;19288:41;8339:10;19321:7;19288:18;:41::i;:::-;19280:103;;;;-1:-1:-1;;;19280:103:0;;14731:2:1;19280:103:0;;;14713:21:1;14770:2;14750:18;;;14743:30;14809:34;14789:18;;;14782:62;14880:19;14860:18;;;14853:47;14917:19;;19280:103:0;14703:239:1;19280:103:0;19394:39;19408:4;19414:2;19418:7;19427:5;19394:13;:39::i;15065:304::-;20973:4;20997:16;;;:7;:16;;;;;;15132:13;;-1:-1:-1;;;;;20997:16:0;15158:76;;;;-1:-1:-1;;;15158:76:0;;13553:2:1;15158:76:0;;;13535:21:1;13592:2;13572:18;;;13565:30;13631:34;13611:18;;;13604:62;13702:17;13682:18;;;13675:45;13737:19;;15158:76:0;13525:237:1;15158:76:0;15245:24;15272:25;15289:7;15272:16;:25::i;:::-;15245:52;;15339:8;15349:10;15322:38;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15308:53;;;15065:304;;;:::o;44805:748::-;20973:4;20997:16;;;:7;:16;;;;;;44868:13;;-1:-1:-1;;;;;20997:16:0;44894:82;;;;-1:-1:-1;;;44894:82:0;;8642:2:1;44894:82:0;;;8624:21:1;8681:2;8661:18;;;8654:30;8720:34;8700:18;;;8693:62;8791:23;8771:18;;;8764:51;8832:19;;44894:82:0;8614:243:1;44894:82:0;45022:19;;-1:-1:-1;;;;;45022:19:0;44989:20;45079:24;45095:7;45079:15;:24::i;:::-;45059:44;;45127:9;45140:1;45127:14;45123:268;;;45158:13;45174:25;45188:10;45174:13;:25::i;:::-;45158:41;;45221:10;45232:5;45221:17;;;;;;;:::i;:::-;;45214:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44805:748;;;:::o;45123:268::-;45270:9;45283:1;45270:14;45266:125;;;45301:13;45317:23;45329:10;45317:11;:23::i;:::-;45301:39;;45362:10;45373:5;45362:17;;;;;;;:::i;45266:125::-;45435:19;;-1:-1:-1;;;;;45435:19:0;45402:20;45482:28;45435:19;45482:16;:28::i;:::-;45466:44;;45528:10;45539:5;45528:17;;;;;;;:::i;:::-;;45521:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44805:748;;;:::o;40601:139::-;11002:44;;-1:-1:-1;;;11002:44:0;;11035:10;11002:44;;;7423:74:1;10954:21:0;;10910:27;;-1:-1:-1;;;;;11002:32:0;;;;;7396:18:1;;11002:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10987:59;;11065:7;11057:51;;;;-1:-1:-1;;;11057:51:0;;13969:2:1;11057:51:0;;;13951:21:1;14008:2;13988:18;;;13981:30;14047:33;14027:18;;;14020:61;14098:18;;11057:51:0;13941:181:1;11057:51:0;-1:-1:-1;;40693:19:0::1;:39:::0;;-1:-1:-1;;40693:39:0::1;-1:-1:-1::0;;;;;40693:39:0;;;::::1;::::0;;;::::1;::::0;;40601:139::o;43064:147::-;11002:44;;-1:-1:-1;;;11002:44:0;;11035:10;11002:44;;;7423:74:1;10954:21:0;;10910:27;;-1:-1:-1;;;;;11002:32:0;;;;;7396:18:1;;11002:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10987:59;;11065:7;11057:51;;;;-1:-1:-1;;;11057:51:0;;13969:2:1;11057:51:0;;;13951:21:1;14008:2;13988:18;;;13981:30;14047:33;14027:18;;;14020:61;14098:18;;11057:51:0;13941:181:1;11057:51:0;43164:39:::1;43182:9;43193;43164:17;:39::i;15865:268::-:0;20973:4;20997:16;;;:7;:16;;;;;;15924:13;;-1:-1:-1;;;;;20997:16:0;15950:77;;;;-1:-1:-1;;;15950:77:0;;15566:2:1;15950:77:0;;;15548:21:1;15605:2;15585:18;;;15578:30;15644:34;15624:18;;;15617:62;15715:18;15695;;;15688:46;15751:19;;15950:77:0;15538:238:1;15950:77:0;16038:17;16058:24;16074:7;16058:15;:24::i;:::-;16100:25;;;;:14;:25;;;;;16093:32;;16038:44;;-1:-1:-1;16100:25:0;16093:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15865:268;;;:::o;23025:174::-;23100:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;23100:29:0;-1:-1:-1;;;;;23100:29:0;;;;;;;;:24;;23154:23;23100:24;23154:14;:23::i;:::-;-1:-1:-1;;;;;23145:46:0;;;;;;;;;;;23025:174;;:::o;21202:348::-;21295:4;20997:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20997:16:0;21312:73;;;;-1:-1:-1;;;21312:73:0;;10665:2:1;21312:73:0;;;10647:21:1;10704:2;10684:18;;;10677:30;10743:34;10723:18;;;10716:62;10814:14;10794:18;;;10787:42;10846:19;;21312:73:0;10637:234:1;21312:73:0;21396:13;21412:23;21427:7;21412:14;:23::i;:::-;21396:39;;21465:5;-1:-1:-1;;;;;21454:16:0;:7;-1:-1:-1;;;;;21454:16:0;;:51;;;;21498:7;-1:-1:-1;;;;;21474:31:0;:20;21486:7;21474:11;:20::i;:::-;-1:-1:-1;;;;;21474:31:0;;21454:51;:87;;;-1:-1:-1;;;;;;18450:25:0;;;18426:4;18450:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;21509:32;21446:96;21202:348;-1:-1:-1;;;;21202:348:0:o;22415:492::-;22540:4;-1:-1:-1;;;;;22513:31:0;:23;22528:7;22513:14;:23::i;:::-;-1:-1:-1;;;;;22513:31:0;;22505:85;;;;-1:-1:-1;;;22505:85:0;;13143:2:1;22505:85:0;;;13125:21:1;13182:2;13162:18;;;13155:30;13221:34;13201:18;;;13194:62;13292:11;13272:18;;;13265:39;13321:19;;22505:85:0;13115:231:1;22505:85:0;-1:-1:-1;;;;;22609:16:0;;22601:65;;;;-1:-1:-1;;;22601:65:0;;9906:2:1;22601:65:0;;;9888:21:1;9945:2;9925:18;;;9918:30;9984:34;9964:18;;;9957:62;10055:6;10035:18;;;10028:34;10079:19;;22601:65:0;9878:226:1;22601:65:0;22731:29;22748:1;22752:7;22731:8;:29::i;:::-;-1:-1:-1;;;;;22773:15:0;;;;;;:9;:15;;;;;:20;;22792:1;;22773:15;:20;;22792:1;;22773:20;:::i;:::-;;;;-1:-1:-1;;;;;;;22804:13:0;;;;;;:9;:13;;;;;:18;;22821:1;;22804:13;:18;;22821:1;;22804:18;:::i;:::-;;;;-1:-1:-1;;22833:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;22833:21:0;-1:-1:-1;;;;;22833:21:0;;;;;;;;;22872:27;;22833:16;;22872:27;;;;;;;22415:492;;;:::o;16370:262::-;16484:31;;;;:20;:31;;;;;16478:45;;;;;:::i;:::-;:50;;-1:-1:-1;16470:100:0;;;;-1:-1:-1;;;16470:100:0;;12324:2:1;16470:100:0;;;12306:21:1;12363:2;12343:18;;;12336:30;12402:34;12382:18;;;12375:62;12473:7;12453:18;;;12446:35;12498:19;;16470:100:0;12296:227:1;16470:100:0;16581:31;;;;:20;:31;;;;;;;;:43;;;;;;;;:::i;21779:299::-;21839:13;21855:23;21870:7;21855:14;:23::i;:::-;21839:39;;21919:29;21936:1;21940:7;21919:8;:29::i;:::-;-1:-1:-1;;;;;21961:16:0;;;;;;:9;:16;;;;;:21;;21981:1;;21961:16;:21;;21981:1;;21961:21;:::i;:::-;;;;-1:-1:-1;;22000:16:0;;;;:7;:16;;;;;;21993:23;;-1:-1:-1;;21993:23:0;;;22034:36;22008:7;;22000:16;-1:-1:-1;;;;;22034:36:0;;;;;22000:16;;22034:36;21828:250;21779:299;:::o;41760:190::-;41846:7;41930:11;41896:30;41908:18;41896:9;:30;:::i;:::-;41874:53;;:18;:53;:::i;:::-;:67;;;;:::i;:::-;41866:76;41760:190;-1:-1:-1;;;41760:190:0:o;17057:92::-;17122:19;;;;:8;;:19;;;;;:::i;:::-;;17057:92;:::o;20323:272::-;20437:28;20447:4;20453:2;20457:7;20437:9;:28::i;:::-;20484:48;20507:4;20513:2;20517:7;20526:5;20484:22;:48::i;:::-;20476:111;;;;-1:-1:-1;;;20476:111:0;;9064:2:1;20476:111:0;;;9046:21:1;9103:2;9083:18;;;9076:30;9142:34;9122:18;;;9115:62;9213:20;9193:18;;;9186:48;9251:19;;20476:111:0;9036:240:1;8625:723:0;8681:13;8902:10;8898:53;;-1:-1:-1;;8929:10:0;;;;;;;;;;;;;;;;;;8625:723::o;8898:53::-;8976:5;8961:12;9017:78;9024:9;;9017:78;;9050:8;;;;:::i;:::-;;-1:-1:-1;9073:10:0;;-1:-1:-1;9081:2:0;9073:10;;:::i;:::-;;;9017:78;;;9105:19;9137:6;9127:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9127:17:0;;9105:39;;9155:154;9162:10;;9155:154;;9189:11;9199:1;9189:11;;:::i;:::-;;-1:-1:-1;9258:10:0;9266:2;9258:5;:10;:::i;:::-;9245:24;;:2;:24;:::i;:::-;9232:39;;9215:6;9222;9215:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;9286:11:0;9295:2;9286:11;;:::i;:::-;;;9155:154;;15505:151;15570:7;15630:18;15598:28;15608:18;15598:7;:28;:::i;:::-;15597:51;;;;:::i;29476:291::-;29608:33;;;;;29625:15;29608:33;;;15927:25:1;29542:7:0;;29578:4;;29542:7;;29578:4;;-1:-1:-1;;;;;29608:16:0;;;;;15900:18:1;;29608:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;;:::i;:::-;29593:57;-1:-1:-1;29680:2:0;29661:16;29709:17;29680:2;29593:57;29709:17;:::i;:::-;29744:15;;;29476:291;-1:-1:-1;;;;;;29476:291:0:o;28503:475::-;28600:33;;-1:-1:-1;;;28600:33:0;;28617:15;28600:33;;;15927:25:1;28567:7:0;;;;-1:-1:-1;;;;;28600:16:0;;;;;15900:18:1;;28600:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28587:46;-1:-1:-1;28662:2:0;28679:16;;;;-1:-1:-1;28675:66:0;;;-1:-1:-1;28727:1:0;;28503:475;-1:-1:-1;;;28503:475:0:o;28675:66::-;-1:-1:-1;28763:2:0;28780:16;;;;-1:-1:-1;28776:66:0;;;-1:-1:-1;28828:1:0;;28503:475;-1:-1:-1;;;28503:475:0:o;28776:66::-;-1:-1:-1;28864:1:0;28880:16;;;;-1:-1:-1;28876:66:0;;;-1:-1:-1;28928:1:0;;28503:475;-1:-1:-1;;;28503:475:0:o;28876:66::-;-1:-1:-1;28968:1:0;;28503:475;-1:-1:-1;;;28503:475:0:o;36552:531::-;36654:33;;-1:-1:-1;;;36654:33:0;;36671:15;36654:33;;;15927:25:1;36621:7:0;;;;-1:-1:-1;;;;;36654:16:0;;;;;15900:18:1;;36654:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36714:36;;;;;36734:15;36714:36;;;15927:25:1;36641:46:0;;-1:-1:-1;36698:13:0;;-1:-1:-1;;;;;36714:19:0;;;;;15900:18:1;;36714:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36698:52;-1:-1:-1;36781:1:0;36763:15;36824:19;36781:1;36698:52;36824:19;:::i;:::-;36808:36;;:7;:36;:::i;:::-;36793:51;-1:-1:-1;36865:15:0;36899:19;;;36895:149;;36950:2;36935:12;36982:13;36991:4;36950:2;36982:13;:::i;:::-;37017:15;;;36552:531;-1:-1:-1;;;;;;;;;36552:531:0:o;36895:149::-;-1:-1:-1;;37062:13:0;;;;;36552:531;-1:-1:-1;;;;36552:531:0:o;16835:148::-;16932:25;;;;:14;:25;;;;;;;;:43;;;;;;;;:::i;23764:842::-;23885:4;25568:20;;25607:8;23907:692;;23946:72;;-1:-1:-1;;;23946:72:0;;-1:-1:-1;;;;;23946:36:0;;;;;:72;;8339:10;;23997:4;;24003:7;;24012:5;;23946:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23946:72:0;;;;;;;;-1:-1:-1;;23946:72:0;;;;;;;;;;;;:::i;:::-;;;23942:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24192:13:0;;24188:341;;24235:60;;-1:-1:-1;;;24235:60:0;;9064:2:1;24235:60:0;;;9046:21:1;9103:2;9083:18;;;9076:30;9142:34;9122:18;;;9115:62;9213:20;9193:18;;;9186:48;9251:19;;24235:60:0;9036:240:1;24188:341:0;24479:6;24473:13;24464:6;24460:2;24456:15;24449:38;23942:602;-1:-1:-1;;;;;;24069:55:0;-1:-1:-1;;;24069:55:0;;-1:-1:-1;24062:62:0;;23907:692;-1:-1:-1;24583:4:0;23764:842;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:196::-;718:20;;-1:-1:-1;;;;;767:54:1;;757:65;;747:2;;836:1;833;826:12;747:2;699:147;;;:::o;851:221::-;894:5;947:3;940:4;932:6;928:17;924:27;914:2;;965:1;962;955:12;914:2;987:79;1062:3;1053:6;1040:20;1033:4;1025:6;1021:17;987:79;:::i;1077:186::-;1136:6;1189:2;1177:9;1168:7;1164:23;1160:32;1157:2;;;1205:1;1202;1195:12;1157:2;1228:29;1247:9;1228:29;:::i;1268:260::-;1336:6;1344;1397:2;1385:9;1376:7;1372:23;1368:32;1365:2;;;1413:1;1410;1403:12;1365:2;1436:29;1455:9;1436:29;:::i;:::-;1426:39;;1484:38;1518:2;1507:9;1503:18;1484:38;:::i;:::-;1474:48;;1355:173;;;;;:::o;1533:328::-;1610:6;1618;1626;1679:2;1667:9;1658:7;1654:23;1650:32;1647:2;;;1695:1;1692;1685:12;1647:2;1718:29;1737:9;1718:29;:::i;:::-;1708:39;;1766:38;1800:2;1789:9;1785:18;1766:38;:::i;:::-;1756:48;;1851:2;1840:9;1836:18;1823:32;1813:42;;1637:224;;;;;:::o;1866:666::-;1961:6;1969;1977;1985;2038:3;2026:9;2017:7;2013:23;2009:33;2006:2;;;2055:1;2052;2045:12;2006:2;2078:29;2097:9;2078:29;:::i;:::-;2068:39;;2126:38;2160:2;2149:9;2145:18;2126:38;:::i;:::-;2116:48;;2211:2;2200:9;2196:18;2183:32;2173:42;;2266:2;2255:9;2251:18;2238:32;2293:18;2285:6;2282:30;2279:2;;;2325:1;2322;2315:12;2279:2;2348:22;;2401:4;2393:13;;2389:27;-1:-1:-1;2379:2:1;;2430:1;2427;2420:12;2379:2;2453:73;2518:7;2513:2;2500:16;2495:2;2491;2487:11;2453:73;:::i;:::-;2443:83;;;1996:536;;;;;;;:::o;2537:315::-;2602:6;2610;2663:2;2651:9;2642:7;2638:23;2634:32;2631:2;;;2679:1;2676;2669:12;2631:2;2702:29;2721:9;2702:29;:::i;:::-;2692:39;;2781:2;2770:9;2766:18;2753:32;2794:28;2816:5;2794:28;:::i;:::-;2841:5;2831:15;;;2621:231;;;;;:::o;2857:254::-;2925:6;2933;2986:2;2974:9;2965:7;2961:23;2957:32;2954:2;;;3002:1;2999;2992:12;2954:2;3025:29;3044:9;3025:29;:::i;:::-;3015:39;3101:2;3086:18;;;;3073:32;;-1:-1:-1;;;2944:167:1:o;3116:245::-;3183:6;3236:2;3224:9;3215:7;3211:23;3207:32;3204:2;;;3252:1;3249;3242:12;3204:2;3284:9;3278:16;3303:28;3325:5;3303:28;:::i;3366:245::-;3424:6;3477:2;3465:9;3456:7;3452:23;3448:32;3445:2;;;3493:1;3490;3483:12;3445:2;3532:9;3519:23;3551:30;3575:5;3551:30;:::i;3616:249::-;3685:6;3738:2;3726:9;3717:7;3713:23;3709:32;3706:2;;;3754:1;3751;3744:12;3706:2;3786:9;3780:16;3805:30;3829:5;3805:30;:::i;3870:322::-;3939:6;3992:2;3980:9;3971:7;3967:23;3963:32;3960:2;;;4008:1;4005;3998:12;3960:2;4048:9;4035:23;4081:18;4073:6;4070:30;4067:2;;;4113:1;4110;4103:12;4067:2;4136:50;4178:7;4169:6;4158:9;4154:22;4136:50;:::i;4197:276::-;4266:6;4319:2;4307:9;4298:7;4294:23;4290:32;4287:2;;;4335:1;4332;4325:12;4287:2;4367:9;4361:16;4417:6;4410:5;4406:18;4399:5;4396:29;4386:2;;4439:1;4436;4429:12;4478:180;4537:6;4590:2;4578:9;4569:7;4565:23;4561:32;4558:2;;;4606:1;4603;4596:12;4558:2;-1:-1:-1;4629:23:1;;4548:110;-1:-1:-1;4548:110:1:o;4663:390::-;4741:6;4749;4802:2;4790:9;4781:7;4777:23;4773:32;4770:2;;;4818:1;4815;4808:12;4770:2;4854:9;4841:23;4831:33;;4915:2;4904:9;4900:18;4887:32;4942:18;4934:6;4931:30;4928:2;;;4974:1;4971;4964:12;4928:2;4997:50;5039:7;5030:6;5019:9;5015:22;4997:50;:::i;:::-;4987:60;;;4760:293;;;;;:::o;5058:248::-;5126:6;5134;5187:2;5175:9;5166:7;5162:23;5158:32;5155:2;;;5203:1;5200;5193:12;5155:2;-1:-1:-1;;5226:23:1;;;5296:2;5281:18;;;5268:32;;-1:-1:-1;5145:161:1:o;5311:273::-;5379:6;5432:2;5420:9;5411:7;5407:23;5403:32;5400:2;;;5448:1;5445;5438:12;5400:2;5480:9;5474:16;5530:4;5523:5;5519:16;5512:5;5509:27;5499:2;;5550:1;5547;5540:12;5589:257;5630:3;5668:5;5662:12;5695:6;5690:3;5683:19;5711:63;5767:6;5760:4;5755:3;5751:14;5744:4;5737:5;5733:16;5711:63;:::i;:::-;5828:2;5807:15;-1:-1:-1;;5803:29:1;5794:39;;;;5835:4;5790:50;;5638:208;-1:-1:-1;;5638:208:1:o;5851:185::-;5893:3;5931:5;5925:12;5946:52;5991:6;5986:3;5979:4;5972:5;5968:16;5946:52;:::i;:::-;6014:16;;;;;5901:135;-1:-1:-1;;5901:135:1:o;6041:1231::-;6217:3;6246:1;6279:6;6273:13;6309:3;6331:1;6359:9;6355:2;6351:18;6341:28;;6419:2;6408:9;6404:18;6441;6431:2;;6485:4;6477:6;6473:17;6463:27;;6431:2;6511;6559;6551:6;6548:14;6528:18;6525:38;6522:2;;;-1:-1:-1;;;6593:3:1;6586:90;6699:4;6696:1;6689:15;6729:4;6724:3;6717:17;6522:2;6760:18;6787:104;;;;6905:1;6900:320;;;;6753:467;;6787:104;-1:-1:-1;;6820:24:1;;6808:37;;6865:16;;;;-1:-1:-1;6787:104:1;;6900:320;16036:1;16029:14;;;16073:4;16060:18;;6995:1;7009:165;7023:6;7020:1;7017:13;7009:165;;;7101:14;;7088:11;;;7081:35;7144:16;;;;7038:10;;7009:165;;;7013:3;;7203:6;7198:3;7194:16;7187:23;;6753:467;;;;;;;7236:30;7262:3;7254:6;7236:30;:::i;:::-;7229:37;6225:1047;-1:-1:-1;;;;;6225:1047:1:o;7508:511::-;7702:4;-1:-1:-1;;;;;7812:2:1;7804:6;7800:15;7789:9;7782:34;7864:2;7856:6;7852:15;7847:2;7836:9;7832:18;7825:43;;7904:6;7899:2;7888:9;7884:18;7877:34;7947:3;7942:2;7931:9;7927:18;7920:31;7968:45;8008:3;7997:9;7993:19;7985:6;7968:45;:::i;:::-;7960:53;7711:308;-1:-1:-1;;;;;;7711:308:1:o;8216:219::-;8365:2;8354:9;8347:21;8328:4;8385:44;8425:2;8414:9;8410:18;8402:6;8385:44;:::i;16089:128::-;16129:3;16160:1;16156:6;16153:1;16150:13;16147:2;;;16166:18;;:::i;:::-;-1:-1:-1;16202:9:1;;16137:80::o;16222:120::-;16262:1;16288;16278:2;;16293:18;;:::i;:::-;-1:-1:-1;16327:9:1;;16268:74::o;16347:165::-;16385:1;16419:4;16416:1;16412:12;16443:3;16433:2;;16450:18;;:::i;:::-;16502:3;16495:4;16492:1;16488:12;16484:22;16479:27;;;16391:121;;;;:::o;16517:168::-;16557:7;16623:1;16619;16615:6;16611:14;16608:1;16605:21;16600:1;16593:9;16586:17;16582:45;16579:2;;;16630:18;;:::i;:::-;-1:-1:-1;16670:9:1;;16569:116::o;16690:217::-;16729:4;16758:6;16814:10;;;;16784;;16836:12;;;16833:2;;;16851:18;;:::i;:::-;16888:13;;16738:169;-1:-1:-1;;;16738:169:1:o;16912:125::-;16952:4;16980:1;16977;16974:8;16971:2;;;16985:18;;:::i;:::-;-1:-1:-1;17022:9:1;;16961:76::o;17042:195::-;17080:4;17117;17114:1;17110:12;17149:4;17146:1;17142:12;17174:3;17169;17166:12;17163:2;;;17181:18;;:::i;:::-;17218:13;;;17089:148;-1:-1:-1;;;17089:148:1:o;17242:258::-;17314:1;17324:113;17338:6;17335:1;17332:13;17324:113;;;17414:11;;;17408:18;17395:11;;;17388:39;17360:2;17353:10;17324:113;;;17455:6;17452:1;17449:13;17446:2;;;-1:-1:-1;;17490:1:1;17472:16;;17465:27;17295:205::o;17505:437::-;17584:1;17580:12;;;;17627;;;17648:2;;17702:4;17694:6;17690:17;17680:27;;17648:2;17755;17747:6;17744:14;17724:18;17721:38;17718:2;;;-1:-1:-1;;;17789:1:1;17782:88;17893:4;17890:1;17883:15;17921:4;17918:1;17911:15;17718:2;;17560:382;;;:::o;17947:135::-;17986:3;-1:-1:-1;;18007:17:1;;18004:2;;;18027:18;;:::i;:::-;-1:-1:-1;18074:1:1;18063:13;;17994:88::o;18087:179::-;18118:1;18144:6;18177:2;18174:1;18170:10;18199:3;18189:2;;18206:18;;:::i;:::-;18244:10;;18240:20;;;;;18124:142;-1:-1:-1;;18124:142:1:o;18271:112::-;18303:1;18329;18319:2;;18334:18;;:::i;:::-;-1:-1:-1;18368:9:1;;18309:74::o;18388:184::-;-1:-1:-1;;;18437:1:1;18430:88;18537:4;18534:1;18527:15;18561:4;18558:1;18551:15;18577:184;-1:-1:-1;;;18626:1:1;18619:88;18726:4;18723:1;18716:15;18750:4;18747:1;18740:15;18766:184;-1:-1:-1;;;18815:1:1;18808:88;18915:4;18912:1;18905:15;18939:4;18936:1;18929:15;18955:184;-1:-1:-1;;;19004:1:1;18997:88;19104:4;19101:1;19094:15;19128:4;19125:1;19118:15;19144:118;19230:5;19223:13;19216:21;19209:5;19206:32;19196:2;;19252:1;19249;19242:12;19267:177;-1:-1:-1;;;;;;19345:5:1;19341:78;19334:5;19331:89;19321:2;;19434:1;19431;19424:12
Swarm Source
ipfs://047193fa1921e99dcfc0131928e7bdd16357e24b76af0eaa7b5d33488e34cccd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.