ERC-721
Overview
Max Total Supply
216 CLST
Holders
51
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 CLSTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CelestialSecrets
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-16 */ /** *Submitted for verification at Etherscan.io on 2022-05-06 */ //// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } library Ballots { struct Ballot { uint256 _nOption; uint256[] _poll; mapping(address => bool) _voters; bool _isOpen; } function currentPoll(Ballot storage ballot) internal view returns (uint256[] memory) { return ballot._poll; } function createNewPoll(Ballot storage ballot, uint256 _nOption) internal { ballot._poll = new uint256[](_nOption); ballot._nOption = _nOption; } function vote(Ballot storage ballot, uint256 _option, uint256 _voteCount) internal { require( ballot._voters[msg.sender] == false, "Already Voted" ); require( ballot._isOpen == true, "Poll is closed" ); ballot._poll[_option] += _voteCount; ballot._voters[msg.sender] = true; } function closePoll(Ballot storage ballot) internal { ballot._isOpen = false; } function reopenPoll(Ballot storage ballot) internal { ballot._isOpen = true; } } // File: contracts/CelestialSecrets.sol contract CelestialSecrets is ERC721A, Ownable, ReentrancyGuard { using Counters for Counters.Counter; using Ballots for Ballots.Ballot; using Strings for uint256; Ballots.Ballot[] private ballots; Counters.Counter private totalBallots; enum SellState { Paused, Whitelist, Public } SellState public currentSellState; string public baseTokenURI; uint256 public constant MAX_SUPPLY = 5555; uint256 public maxMint = 10; uint256 public reservedForCoreTeam; uint256 public currentMintCost = 0.03 ether; uint256 public totalWithdraw; bool public isRevealed = false; string public baseExtension = ".json"; mapping(address => bool) whitelistedAddresses; constructor(string memory baseURI, uint256 coreTeamReserved) ERC721A("CelestialSecrets", "CLST", maxMint, MAX_SUPPLY) { setBaseURI(baseURI); reservedForCoreTeam = coreTeamReserved; currentSellState = SellState.Paused; } // Cost Functions function setMintCost(uint256 _cost) public onlyOwner { // _cost is in wei currentMintCost = _cost; } // Whitelist Functions function addWhitelistedUser(address[] calldata _users) external onlyOwner { for (uint256 i = 0; i < _users.length; i++) { require(_users[i] != address(0), "Can't add the null address"); whitelistedAddresses[_users[i]] = true; } } function removeWhitelistedUser(address[] calldata _users) external onlyOwner { for (uint256 i = 0; i < _users.length; i++) { require(_users[i] != address(0), "Can't remove the null address"); whitelistedAddresses[_users[i]] = false; } } function verifyWhitelistedUser(address _user) external view returns(bool) { return whitelistedAddresses[_user]; } // Update SaleState (Pause/Whitelist/Public) function setSellState(uint256 _state) external onlyOwner { if (_state == 0) { currentSellState = SellState.Paused; } else if (_state == 1) { currentSellState = SellState.Whitelist; setMintCost(30000000000000000); } else if (_state == 2) { currentSellState = SellState.Public; setMintCost(40000000000000000); } } // Minting Functions function mintCelestialSecrets(uint256 _mintAmount) external payable { // Raise error if SellState is Paused require( currentSellState != SellState.Paused, "Minting is currently paused" ); // Raise error if trying to mint less than 1 or more than 5 require( _mintAmount > 0 && _mintAmount <= maxMint, "Can only mint minimum 1 and maximum 10" ); // Check if user is whitelisted bool isUserWhitelisted = whitelistedAddresses[msg.sender]; // Raise error currently whitelist sell but user not whitelisted if (currentSellState == SellState.Whitelist) { require( isUserWhitelisted == true, "User is not whitelisted" ); } // Get Price uint256 mintPrice; if (isUserWhitelisted && currentMintCost > 30000000000000000) { mintPrice = 30000000000000000; } else { mintPrice = currentMintCost; } // Raise error if not enough fund require( msg.value >= mintPrice * _mintAmount, "Insufficient fund" ); // Raise error if out of supply require( totalSupply() + _mintAmount <= MAX_SUPPLY, "Insufficient supply" ); _safeMint(msg.sender, _mintAmount); } function mintForCoreTeam(uint256 _mintAmount) external onlyOwner { require( _mintAmount % maxMint == 0, "can only mint a multiple of the maxBatchSize" ); uint256 nLoop = _mintAmount / maxMint; for (uint256 i = 0; i < nLoop; i++) { _safeMint(msg.sender, maxMint); } reservedForCoreTeam = reservedForCoreTeam - _mintAmount; } // Withdraw Functions function withdraw() public onlyOwner { uint256 amount = address(this).balance; (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); totalWithdraw += amount; } // Airdrop Functions function airdrop(address[] calldata _addresses, uint256 airdropPerWallet) external onlyOwner { require( totalSupply() + _addresses.length <= MAX_SUPPLY, "Airdrop will exceed maximum supply" ); for (uint256 i = 0; i < _addresses.length; i++) { require(_addresses[i] != address(0), "Airdrop to Null address"); _safeMint(_addresses[i], airdropPerWallet); } } // Voting modifier pollIdentifierCompliance(uint256 _pollNumber) { require( 0 < _pollNumber && _pollNumber <= totalBallots.current(), "Invalid Poll Number" ); _; } function startNewPoll(uint256 _nOptions) external onlyOwner { Ballots.Ballot storage newBallot = ballots.push(); newBallot.createNewPoll(_nOptions); totalBallots.increment(); } function vote(uint256 _pollNumber, uint256 _option) external pollIdentifierCompliance(_pollNumber) { ballots[_pollNumber-1].vote(_option, balanceOf(msg.sender)); } function getVotes(uint256 _pollNumber) external view pollIdentifierCompliance(_pollNumber) returns (uint256[] memory) { return ballots[_pollNumber-1].currentPoll(); } function getTotalBallots() external view returns (uint256) { return totalBallots.current(); } function closeGivenPoll(uint256 _pollNumber) external onlyOwner pollIdentifierCompliance(_pollNumber) { ballots[_pollNumber-1].closePoll(); } function reopoenGivenPoll(uint256 _pollNumber) external onlyOwner pollIdentifierCompliance(_pollNumber) { ballots[_pollNumber-1].reopenPoll(); } // Reveal function setBaseExtension(string memory _newExtension) public onlyOwner { baseExtension = _newExtension; } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } function setRevealed(bool _state) public onlyOwner { isRevealed = _state; } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), baseExtension)) : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"uint256","name":"coreTeamReserved","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addWhitelistedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"airdropPerWallet","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNumber","type":"uint256"}],"name":"closeGivenPoll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentMintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSellState","outputs":[{"internalType":"enum CelestialSecrets.SellState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBallots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNumber","type":"uint256"}],"name":"getVotes","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintCelestialSecrets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintForCoreTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"removeWhitelistedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNumber","type":"uint256"}],"name":"reopoenGivenPoll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedForCoreTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":"_newExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setMintCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"setSellState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nOptions","type":"uint256"}],"name":"startNewPoll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"verifyWhitelistedUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pollNumber","type":"uint256"},{"internalType":"uint256","name":"_option","type":"uint256"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6000808055600755600a600e55666a94d74f4300006010556012805460ff19169055610100604052600560c081905264173539b7b760d91b60e09081526200004b91601391906200024b565b503480156200005957600080fd5b5060405162003b6838038062003b688339810160408190526200007c91620002f1565b6040518060400160405280601081526020016f43656c65737469616c5365637265747360801b8152506040518060400160405280600481526020016310d314d560e21b815250600e546115b360008111620000f45760405162461bcd60e51b8152600401620000eb9062000444565b60405180910390fd5b60008211620001175760405162461bcd60e51b8152600401620000eb90620003c8565b83516200012c9060019060208701906200024b565b508251620001429060029060208601906200024b565b5060a091909152608052506200016390506200015d62000187565b6200018b565b60016009556200017382620001dd565b600f5550600c805460ff19169055620004e5565b3390565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001e762000187565b6001600160a01b0316620001fa6200023c565b6001600160a01b031614620002235760405162461bcd60e51b8152600401620000eb906200040f565b80516200023890600d9060208401906200024b565b5050565b6008546001600160a01b031690565b828054620002599062000492565b90600052602060002090601f0160209004810192826200027d5760008555620002c8565b82601f106200029857805160ff1916838001178555620002c8565b82800160010185558215620002c8579182015b82811115620002c8578251825591602001919060010190620002ab565b50620002d6929150620002da565b5090565b5b80821115620002d65760008155600101620002db565b6000806040838503121562000304578182fd5b82516001600160401b03808211156200031b578384fd5b818501915085601f8301126200032f578384fd5b815181811115620003445762000344620004cf565b6040516020601f8301601f19168201810184811183821017156200036c576200036c620004cf565b604052828252848301810189101562000383578687fd5b8693505b82841015620003a6578484018101518285018201529283019262000387565b82841115620003b757868184840101525b969096015195979596505050505050565b60208082526027908201527f455243373231413a206d61782062617463682073697a65206d757374206265206040820152666e6f6e7a65726f60c81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602e908201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060408201526d6e6f6e7a65726f20737570706c7960901b606082015260800190565b600281046001821680620004a757607f821691505b60208210811415620004c957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a0516136526200051660003960008181611eaa01528181611ed401526123aa0152600050506136526000f3fe6080604052600436106102885760003560e01c80637501f7411161015a578063c6682862116100c1578063dfd8fbce1161007a578063dfd8fbce1461073c578063e0a808531461075c578063e985e9c51461077c578063f2fde38b1461079c578063fcc7c5cf146107bc578063ff981099146107d157610288565b8063c66828621461069b578063c87b56dd146106b0578063d2fa4b75146106d0578063d547cfb7146106f2578063d7224ba014610707578063da3ef23f1461071c57610288565b8063a22cb46511610113578063a22cb465146105db578063a9c117d3146105fb578063b384abef1461061b578063b633cd801461063b578063b88d4fde1461065b578063c204642c1461067b57610288565b80637501f741146105475780637b8829e21461055c5780638545f4ea1461057c578063854797e91461059c5780638da5cb5b146105b157806395d89b41146105c657610288565b80633ccfd60b116101fe57806354214f69116101b757806354214f69146104aa57806355f804b3146104bf5780635f97a1e9146104df5780636352211e146104f257806370a0823114610512578063715018a61461053257610288565b80633ccfd60b146104005780633e5481351461041557806342842e0e1461043557806343e280b114610455578063455fd623146104755780634f6ccce71461048a57610288565b806318160ddd1161025057806318160ddd1461035457806323b872dd146103765780632f745c5914610396578063317b1a33146103b657806332cb6b0c146103cb5780633bc89bfc146103e057610288565b806301ffc9a71461028d57806306fdde03146102c357806307538a70146102e5578063081812fc14610305578063095ea7b314610332575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612988565b6107fe565b6040516102ba9190612bc4565b60405180910390f35b3480156102cf57600080fd5b506102d8610861565b6040516102ba9190612bf7565b3480156102f157600080fd5b506102ad610300366004612795565b6108f3565b34801561031157600080fd5b50610325610320366004612a05565b610911565b6040516102ba9190612b2f565b34801561033e57600080fd5b5061035261034d3660046128bd565b61095d565b005b34801561036057600080fd5b506103696109f6565b6040516102ba9190613453565b34801561038257600080fd5b506103526103913660046127e1565b6109fc565b3480156103a257600080fd5b506103696103b13660046128bd565b610a07565b3480156103c257600080fd5b50610369610b02565b3480156103d757600080fd5b50610369610b13565b3480156103ec57600080fd5b506103526103fb366004612a05565b610b19565b34801561040c57600080fd5b50610352610bd3565b34801561042157600080fd5b50610352610430366004612a05565b610c9e565b34801561044157600080fd5b506103526104503660046127e1565b610d2a565b34801561046157600080fd5b50610352610470366004612a05565b610d45565b34801561048157600080fd5b50610369610dec565b34801561049657600080fd5b506103696104a5366004612a05565b610df2565b3480156104b657600080fd5b506102ad610e1e565b3480156104cb57600080fd5b506103526104da3660046129c0565b610e27565b6103526104ed366004612a05565b610e79565b3480156104fe57600080fd5b5061032561050d366004612a05565b610fe4565b34801561051e57600080fd5b5061036961052d366004612795565b610ff6565b34801561053e57600080fd5b50610352611043565b34801561055357600080fd5b5061036961108e565b34801561056857600080fd5b50610352610577366004612a05565b611094565b34801561058857600080fd5b50610352610597366004612a05565b61114a565b3480156105a857600080fd5b5061036961118e565b3480156105bd57600080fd5b50610325611194565b3480156105d257600080fd5b506102d86111a3565b3480156105e757600080fd5b506103526105f6366004612894565b6111b2565b34801561060757600080fd5b506103526106163660046128e6565b611280565b34801561062757600080fd5b50610352610636366004612a1d565b61139d565b34801561064757600080fd5b506103526106563660046128e6565b611428565b34801561066757600080fd5b5061035261067636600461281c565b611545565b34801561068757600080fd5b50610352610696366004612925565b61157e565b3480156106a757600080fd5b506102d86116aa565b3480156106bc57600080fd5b506102d86106cb366004612a05565b611738565b3480156106dc57600080fd5b506106e56117be565b6040516102ba9190612bcf565b3480156106fe57600080fd5b506102d86117c7565b34801561071357600080fd5b506103696117d4565b34801561072857600080fd5b506103526107373660046129c0565b6117da565b34801561074857600080fd5b50610352610757366004612a05565b61182c565b34801561076857600080fd5b5061035261077736600461296e565b6118e2565b34801561078857600080fd5b506102ad6107973660046127af565b611934565b3480156107a857600080fd5b506103526107b7366004612795565b611962565b3480156107c857600080fd5b506103696119d0565b3480156107dd57600080fd5b506107f16107ec366004612a05565b6119d6565b6040516102ba9190612b80565b60006001600160e01b031982166380ac58cd60e01b148061082f57506001600160e01b03198216635b5e139f60e01b145b8061084a57506001600160e01b0319821663780e9d6360e01b145b80610859575061085982611a55565b90505b919050565b60606001805461087090613560565b80601f016020809104026020016040519081016040528092919081815260200182805461089c90613560565b80156108e95780601f106108be576101008083540402835291602001916108e9565b820191906000526020600020905b8154815290600101906020018083116108cc57829003601f168201915b5050505050905090565b6001600160a01b031660009081526014602052604090205460ff1690565b600061091c82611a6e565b6109415760405162461bcd60e51b8152600401610938906133c4565b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061096882610fe4565b9050806001600160a01b0316836001600160a01b0316141561099c5760405162461bcd60e51b8152600401610938906131ef565b806001600160a01b03166109ae611a75565b6001600160a01b031614806109ca57506109ca81610797611a75565b6109e65760405162461bcd60e51b815260040161093890612eea565b6109f1838383611a79565b505050565b60005490565b6109f1838383611ad5565b6000610a1283610ff6565b8210610a305760405162461bcd60e51b815260040161093890612c0a565b6000610a3a6109f6565b905060008060005b83811015610ae3576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610a9457805192505b876001600160a01b0316836001600160a01b03161415610ad05786841415610ac257509350610afc92505050565b83610acc81613595565b9450505b5080610adb81613595565b915050610a42565b5060405162461bcd60e51b815260040161093890613327565b92915050565b6000610b0e600b611de7565b905090565b6115b381565b610b21611a75565b6001600160a01b0316610b32611194565b6001600160a01b031614610b585760405162461bcd60e51b815260040161093890613047565b600e54610b6590826135b0565b15610b825760405162461bcd60e51b815260040161093890612d3a565b6000600e5482610b9291906134ab565b905060005b81811015610bbd57610bab33600e54611deb565b80610bb581613595565b915050610b97565b5081600f54610bcc9190613506565b600f555050565b610bdb611a75565b6001600160a01b0316610bec611194565b6001600160a01b031614610c125760405162461bcd60e51b815260040161093890613047565b476000610c1d611194565b6001600160a01b031647604051610c3390612b2c565b60006040518083038185875af1925050503d8060008114610c70576040519150601f19603f3d011682016040523d82523d6000602084013e610c75565b606091505b5050905080610c8357600080fd5b8160116000828254610c959190613493565b90915550505050565b610ca6611a75565b6001600160a01b0316610cb7611194565b6001600160a01b031614610cdd5760405162461bcd60e51b815260040161093890613047565b600a80546001810182556000919091526004027fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801610d1c8183611e05565b610d26600b611e70565b5050565b6109f183838360405180602001604052806000815250611545565b610d4d611a75565b6001600160a01b0316610d5e611194565b6001600160a01b031614610d845760405162461bcd60e51b815260040161093890613047565b80610d9857600c805460ff19169055610de9565b8060011415610dc357600c805460ff19166001179055610dbe666a94d74f43000061114a565b610de9565b8060021415610de957600c805460ff19166002179055610de9668e1bc9bf04000061114a565b50565b60115481565b6000610dfc6109f6565b8210610e1a5760405162461bcd60e51b815260040161093890612d86565b5090565b60125460ff1681565b610e2f611a75565b6001600160a01b0316610e40611194565b6001600160a01b031614610e665760405162461bcd60e51b815260040161093890613047565b8051610d2690600d9060208401906125d1565b6000600c5460ff166002811115610ea057634e487b7160e01b600052602160045260246000fd5b1415610ebe5760405162461bcd60e51b8152600401610938906131b8565b600081118015610ed05750600e548111155b610eec5760405162461bcd60e51b815260040161093890612e6d565b3360009081526014602052604090205460ff166001600c5460ff166002811115610f2657634e487b7160e01b600052602160045260246000fd5b1415610f4e57600181151514610f4e5760405162461bcd60e51b815260040161093890612eb3565b6000818015610f655750666a94d74f430000601054115b15610f785750666a94d74f430000610f7d565b506010545b610f8783826134bf565b341015610fa65760405162461bcd60e51b8152600401610938906132fc565b6115b383610fb26109f6565b610fbc9190613493565b1115610fda5760405162461bcd60e51b81526004016109389061301a565b6109f13384611deb565b6000610fef82611e79565b5192915050565b60006001600160a01b03821661101e5760405162461bcd60e51b815260040161093890612f47565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b61104b611a75565b6001600160a01b031661105c611194565b6001600160a01b0316146110825760405162461bcd60e51b815260040161093890613047565b61108c6000611f8b565b565b600e5481565b61109c611a75565b6001600160a01b03166110ad611194565b6001600160a01b0316146110d35760405162461bcd60e51b815260040161093890613047565b808060001080156110ed57506110e9600b611de7565b8111155b6111095760405162461bcd60e51b81526004016109389061318b565b610d26600a611119600185613506565b8154811061113757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201611fdd565b611152611a75565b6001600160a01b0316611163611194565b6001600160a01b0316146111895760405162461bcd60e51b815260040161093890613047565b601055565b60105481565b6008546001600160a01b031690565b60606002805461087090613560565b6111ba611a75565b6001600160a01b0316826001600160a01b031614156111eb5760405162461bcd60e51b815260040161093890613102565b80600660006111f8611a75565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561123c611a75565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112749190612bc4565b60405180910390a35050565b611288611a75565b6001600160a01b0316611299611194565b6001600160a01b0316146112bf5760405162461bcd60e51b815260040161093890613047565b60005b818110156109f15760008383838181106112ec57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113019190612795565b6001600160a01b031614156113285760405162461bcd60e51b815260040161093890612c4c565b60006014600085858581811061134e57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113639190612795565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061139581613595565b9150506112c2565b818060001080156113b757506113b3600b611de7565b8111155b6113d35760405162461bcd60e51b81526004016109389061318b565b6109f1826113e033610ff6565b600a6113ed600188613506565b8154811061140b57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201611fed9092919063ffffffff16565b611430611a75565b6001600160a01b0316611441611194565b6001600160a01b0316146114675760405162461bcd60e51b815260040161093890613047565b60005b818110156109f157600083838381811061149457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114a99190612795565b6001600160a01b031614156114d05760405162461bcd60e51b81526004016109389061307c565b6001601460008585858181106114f657634e487b7160e01b600052603260045260246000fd5b905060200201602081019061150b9190612795565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061153d81613595565b91505061146a565b611550848484611ad5565b61155c848484846120ab565b6115785760405162461bcd60e51b815260040161093890613231565b50505050565b611586611a75565b6001600160a01b0316611597611194565b6001600160a01b0316146115bd5760405162461bcd60e51b815260040161093890613047565b6115b3826115c96109f6565b6115d39190613493565b11156115f15760405162461bcd60e51b815260040161093890612f92565b60005b8281101561157857600084848381811061161e57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116339190612795565b6001600160a01b0316141561165a5760405162461bcd60e51b815260040161093890612dc9565b61169884848381811061167d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116929190612795565b83611deb565b806116a281613595565b9150506115f4565b601380546116b790613560565b80601f01602080910402602001604051908101604052809291908181526020018280546116e390613560565b80156117305780601f1061170557610100808354040283529160200191611730565b820191906000526020600020905b81548152906001019060200180831161171357829003601f168201915b505050505081565b606061174382611a6e565b61175f5760405162461bcd60e51b8152600401610938906130b3565b60006117696121c7565b9050600081511161178957604051806020016040528060008152506117b7565b80611793846121d6565b60136040516020016117a793929190612a6a565b6040516020818303038152906040525b9392505050565b600c5460ff1681565b600d80546116b790613560565b60075481565b6117e2611a75565b6001600160a01b03166117f3611194565b6001600160a01b0316146118195760405162461bcd60e51b815260040161093890613047565b8051610d269060139060208401906125d1565b611834611a75565b6001600160a01b0316611845611194565b6001600160a01b03161461186b5760405162461bcd60e51b815260040161093890613047565b808060001080156118855750611881600b611de7565b8111155b6118a15760405162461bcd60e51b81526004016109389061318b565b610d26600a6118b1600185613506565b815481106118cf57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402016122f0565b6118ea611a75565b6001600160a01b03166118fb611194565b6001600160a01b0316146119215760405162461bcd60e51b815260040161093890613047565b6012805460ff1916911515919091179055565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61196a611a75565b6001600160a01b031661197b611194565b6001600160a01b0316146119a15760405162461bcd60e51b815260040161093890613047565b6001600160a01b0381166119c75760405162461bcd60e51b815260040161093890612caa565b610de981611f8b565b600f5481565b6060818060001080156119f257506119ee600b611de7565b8111155b611a0e5760405162461bcd60e51b81526004016109389061318b565b6117b7600a611a1e600186613506565b81548110611a3c57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402016122fd565b50919050565b6001600160e01b031981166301ffc9a760e01b14919050565b6000541190565b3390565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611ae082611e79565b9050600081600001516001600160a01b0316611afa611a75565b6001600160a01b03161480611b2f5750611b12611a75565b6001600160a01b0316611b2484610911565b6001600160a01b0316145b80611b4357508151611b4390610797611a75565b905080611b625760405162461bcd60e51b815260040161093890613139565b846001600160a01b031682600001516001600160a01b031614611b975760405162461bcd60e51b815260040161093890612fd4565b6001600160a01b038416611bbd5760405162461bcd60e51b815260040161093890612e00565b611bca8585856001611578565b611bda6000848460000151611a79565b6001600160a01b0385166000908152600460205260408120805460019290611c0c9084906001600160801b03166134de565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526004602052604081208054600194509092611c5891859116613468565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526003909152948520935184549151909216600160a01b0267ffffffffffffffff60a01b19929093166001600160a01b03199091161716179055611ced846001613493565b6000818152600360205260409020549091506001600160a01b0316611d9157611d1581611a6e565b15611d915760408051808201825284516001600160a01b0390811682526020808701516001600160401b0390811682850190815260008781526003909352949091209251835494516001600160a01b031990951692169190911767ffffffffffffffff60a01b1916600160a01b93909116929092029190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ddf8686866001611578565b505050505050565b5490565b610d26828260405180602001604052806000815250612359565b806001600160401b03811115611e2b57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611e54578160200160208202803683370190505b508051611e6b916001850191602090910190612651565b509055565b80546001019055565b611e8161268b565b611e8a82611a6e565b611ea65760405162461bcd60e51b815260040161093890612cf0565b60007f00000000000000000000000000000000000000000000000000000000000000008310611f0757611ef97f000000000000000000000000000000000000000000000000000000000000000084613506565b611f04906001613493565b90505b825b818110611f72576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215611f5f57925061085c915050565b5080611f6a81613549565b915050611f09565b5060405162461bcd60e51b815260040161093890613375565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600301805460ff19166001179055565b33600090815260028401602052604090205460ff161561201f5760405162461bcd60e51b815260040161093890612c83565b600383015460ff1615156001146120485760405162461bcd60e51b815260040161093890612e45565b8083600101838154811061206c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160008282546120859190613493565b90915550503360009081526002909301602052505060409020805460ff19166001179055565b60006120bf846001600160a01b03166125cb565b156121bb57836001600160a01b031663150b7a026120db611a75565b8786866040518563ffffffff1660e01b81526004016120fd9493929190612b43565b602060405180830381600087803b15801561211757600080fd5b505af1925050508015612147575060408051601f3d908101601f19168201909252612144918101906129a4565b60015b6121a1573d808015612175576040519150601f19603f3d011682016040523d82523d6000602084013e61217a565b606091505b5080516121995760405162461bcd60e51b815260040161093890613231565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121bf565b5060015b949350505050565b6060600d805461087090613560565b6060816121fb57506040805180820190915260018152600360fc1b602082015261085c565b8160005b8115612225578061220f81613595565b915061221e9050600a836134ab565b91506121ff565b6000816001600160401b0381111561224d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612277576020820181803683370190505b5090505b84156121bf5761228c600183613506565b9150612299600a866135b0565b6122a4906030613493565b60f81b8183815181106122c757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506122e9600a866134ab565b945061227b565b600301805460ff19169055565b60608160010180548060200260200160405190810160405280929190818152602001828054801561234d57602002820191906000526020600020905b815481526020019060010190808311612339575b50505050509050919050565b6000546001600160a01b0384166123825760405162461bcd60e51b8152600401610938906132bb565b61238b81611a6e565b156123a85760405162461bcd60e51b815260040161093890613284565b7f00000000000000000000000000000000000000000000000000000000000000008311156123e85760405162461bcd60e51b815260040161093890613411565b6123f56000858386611578565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612451908790613468565b6001600160801b0316815260200185836020015161246f9190613468565b6001600160801b039081169091526001600160a01b03808816600081815260046020908152604080832087518154988401518816600160801b029088166fffffffffffffffffffffffffffffffff199099169890981790961696909617909455845180860186529182526001600160401b034281168386019081528883526003909552948120915182549451909516600160a01b0267ffffffffffffffff60a01b19959093166001600160a01b031990941693909317939093161790915582905b858110156125b95760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461257d60008884886120ab565b6125995760405162461bcd60e51b815260040161093890613231565b816125a381613595565b92505080806125b190613595565b915050612530565b506000818155611ddf90878588611578565b3b151590565b8280546125dd90613560565b90600052602060002090601f0160209004810192826125ff5760008555612645565b82601f1061261857805160ff1916838001178555612645565b82800160010185558215612645579182015b8281111561264557825182559160200191906001019061262a565b50610e1a9291506126a2565b828054828255906000526020600020908101928215612645579160200282018281111561264557825182559160200191906001019061262a565b604080518082019091526000808252602082015290565b5b80821115610e1a57600081556001016126a3565b60006001600160401b03808411156126d1576126d16135f0565b604051601f8501601f1916810160200182811182821017156126f5576126f56135f0565b60405284815291508183850186101561270d57600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461085c57600080fd5b60008083601f84011261274e578081fd5b5081356001600160401b03811115612764578182fd5b602083019150836020808302850101111561277e57600080fd5b9250929050565b8035801515811461085c57600080fd5b6000602082840312156127a6578081fd5b6117b782612726565b600080604083850312156127c1578081fd5b6127ca83612726565b91506127d860208401612726565b90509250929050565b6000806000606084860312156127f5578081fd5b6127fe84612726565b925061280c60208501612726565b9150604084013590509250925092565b60008060008060808587031215612831578081fd5b61283a85612726565b935061284860208601612726565b92506040850135915060608501356001600160401b03811115612869578182fd5b8501601f81018713612879578182fd5b612888878235602084016126b7565b91505092959194509250565b600080604083850312156128a6578182fd5b6128af83612726565b91506127d860208401612785565b600080604083850312156128cf578182fd5b6128d883612726565b946020939093013593505050565b600080602083850312156128f8578182fd5b82356001600160401b0381111561290d578283fd5b6129198582860161273d565b90969095509350505050565b600080600060408486031215612939578283fd5b83356001600160401b0381111561294e578384fd5b61295a8682870161273d565b909790965060209590950135949350505050565b60006020828403121561297f578081fd5b6117b782612785565b600060208284031215612999578081fd5b81356117b781613606565b6000602082840312156129b5578081fd5b81516117b781613606565b6000602082840312156129d1578081fd5b81356001600160401b038111156129e6578182fd5b8201601f810184136129f6578182fd5b6121bf848235602084016126b7565b600060208284031215612a16578081fd5b5035919050565b60008060408385031215612a2f578182fd5b50508035926020909101359150565b60008151808452612a5681602086016020860161351d565b601f01601f19169290920160200192915050565b600084516020612a7d8285838a0161351d565b855191840191612a908184848a0161351d565b8554920191839060028104600180831680612aac57607f831692505b858310811415612aca57634e487b7160e01b88526022600452602488fd5b808015612ade5760018114612aef57612b1b565b60ff19851688528388019550612b1b565b612af88b61345c565b895b85811015612b135781548a820152908401908801612afa565b505083880195505b50939b9a5050505050505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b7690830184612a3e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612bb857835183529284019291840191600101612b9c565b50909695505050505050565b901515815260200190565b6020810160038310612bf157634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082526117b76020830184612a3e565b60208082526022908201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252601d908201527f43616e27742072656d6f766520746865206e756c6c2061646472657373000000604082015260600190565b6020808252600d908201526c105b1c9958591e48159bdd1959609a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602a908201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736040820152693a32b73a103a37b5b2b760b11b606082015260800190565b6020808252602c908201527f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060408201526b6d6178426174636853697a6560a01b606082015260800190565b60208082526023908201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756040820152626e647360e81b606082015260800190565b60208082526017908201527f41697264726f7020746f204e756c6c2061646472657373000000000000000000604082015260600190565b60208082526025908201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600e908201526d141bdb1b081a5cc818db1bdcd95960921b604082015260600190565b60208082526026908201527f43616e206f6e6c79206d696e74206d696e696d756d203120616e64206d61786960408201526506d756d2031360d41b606082015260800190565b60208082526017908201527f55736572206973206e6f742077686974656c6973746564000000000000000000604082015260600190565b60208082526039908201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60408201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606082015260800190565b6020808252602b908201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526022908201527f41697264726f702077696c6c20657863656564206d6178696d756d20737570706040820152616c7960f01b606082015260800190565b60208082526026908201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746040820152651037bbb732b960d11b606082015260800190565b602080825260139082015272496e73756666696369656e7420737570706c7960681b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f43616e27742061646420746865206e756c6c2061646472657373000000000000604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252601a908201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604082015260600190565b60208082526032908201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b60208082526013908201527224b73b30b634b2102837b63610273ab6b132b960691b604082015260600190565b6020808252601b908201527f4d696e74696e672069732063757272656e746c79207061757365640000000000604082015260600190565b60208082526022908201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020808252601d908201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604082015260600190565b60208082526021908201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b602080825260119082015270125b9cdd59999a58da595b9d08199d5b99607a1b604082015260600190565b6020808252602e908201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060408201526d0deeedccae440c4f240d2dcc8caf60931b606082015260800190565b6020808252602f908201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560408201526e1037bbb732b91037b3103a37b5b2b760891b606082015260800190565b6020808252602d908201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560408201526c3c34b9ba32b73a103a37b5b2b760991b606082015260800190565b60208082526022908201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696040820152610ced60f31b606082015260800190565b90815260200190565b60009081526020902090565b60006001600160801b0380831681851680830382111561348a5761348a6135c4565b01949350505050565b600082198211156134a6576134a66135c4565b500190565b6000826134ba576134ba6135da565b500490565b60008160001904831182151516156134d9576134d96135c4565b500290565b60006001600160801b03838116908316818110156134fe576134fe6135c4565b039392505050565b600082821015613518576135186135c4565b500390565b60005b83811015613538578181015183820152602001613520565b838111156115785750506000910152565b600081613558576135586135c4565b506000190190565b60028104600182168061357457607f821691505b60208210811415611a4f57634e487b7160e01b600052602260045260246000fd5b60006000198214156135a9576135a96135c4565b5060010190565b6000826135bf576135bf6135da565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610de957600080fdfea2646970667358221220665538e2829f2aed9b9dab7af328ac1e1724606cbc7b72da3142ba19fafadcaa64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000015b3000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f63656c65737469616c736563726574732e6d7970696e6174612e636c6f75642f697066732f516d5663766736554e79325245577148424c457a357978574337377539644c6372327058726741425877714d6d592f00000000
Deployed Bytecode
0x6080604052600436106102885760003560e01c80637501f7411161015a578063c6682862116100c1578063dfd8fbce1161007a578063dfd8fbce1461073c578063e0a808531461075c578063e985e9c51461077c578063f2fde38b1461079c578063fcc7c5cf146107bc578063ff981099146107d157610288565b8063c66828621461069b578063c87b56dd146106b0578063d2fa4b75146106d0578063d547cfb7146106f2578063d7224ba014610707578063da3ef23f1461071c57610288565b8063a22cb46511610113578063a22cb465146105db578063a9c117d3146105fb578063b384abef1461061b578063b633cd801461063b578063b88d4fde1461065b578063c204642c1461067b57610288565b80637501f741146105475780637b8829e21461055c5780638545f4ea1461057c578063854797e91461059c5780638da5cb5b146105b157806395d89b41146105c657610288565b80633ccfd60b116101fe57806354214f69116101b757806354214f69146104aa57806355f804b3146104bf5780635f97a1e9146104df5780636352211e146104f257806370a0823114610512578063715018a61461053257610288565b80633ccfd60b146104005780633e5481351461041557806342842e0e1461043557806343e280b114610455578063455fd623146104755780634f6ccce71461048a57610288565b806318160ddd1161025057806318160ddd1461035457806323b872dd146103765780632f745c5914610396578063317b1a33146103b657806332cb6b0c146103cb5780633bc89bfc146103e057610288565b806301ffc9a71461028d57806306fdde03146102c357806307538a70146102e5578063081812fc14610305578063095ea7b314610332575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612988565b6107fe565b6040516102ba9190612bc4565b60405180910390f35b3480156102cf57600080fd5b506102d8610861565b6040516102ba9190612bf7565b3480156102f157600080fd5b506102ad610300366004612795565b6108f3565b34801561031157600080fd5b50610325610320366004612a05565b610911565b6040516102ba9190612b2f565b34801561033e57600080fd5b5061035261034d3660046128bd565b61095d565b005b34801561036057600080fd5b506103696109f6565b6040516102ba9190613453565b34801561038257600080fd5b506103526103913660046127e1565b6109fc565b3480156103a257600080fd5b506103696103b13660046128bd565b610a07565b3480156103c257600080fd5b50610369610b02565b3480156103d757600080fd5b50610369610b13565b3480156103ec57600080fd5b506103526103fb366004612a05565b610b19565b34801561040c57600080fd5b50610352610bd3565b34801561042157600080fd5b50610352610430366004612a05565b610c9e565b34801561044157600080fd5b506103526104503660046127e1565b610d2a565b34801561046157600080fd5b50610352610470366004612a05565b610d45565b34801561048157600080fd5b50610369610dec565b34801561049657600080fd5b506103696104a5366004612a05565b610df2565b3480156104b657600080fd5b506102ad610e1e565b3480156104cb57600080fd5b506103526104da3660046129c0565b610e27565b6103526104ed366004612a05565b610e79565b3480156104fe57600080fd5b5061032561050d366004612a05565b610fe4565b34801561051e57600080fd5b5061036961052d366004612795565b610ff6565b34801561053e57600080fd5b50610352611043565b34801561055357600080fd5b5061036961108e565b34801561056857600080fd5b50610352610577366004612a05565b611094565b34801561058857600080fd5b50610352610597366004612a05565b61114a565b3480156105a857600080fd5b5061036961118e565b3480156105bd57600080fd5b50610325611194565b3480156105d257600080fd5b506102d86111a3565b3480156105e757600080fd5b506103526105f6366004612894565b6111b2565b34801561060757600080fd5b506103526106163660046128e6565b611280565b34801561062757600080fd5b50610352610636366004612a1d565b61139d565b34801561064757600080fd5b506103526106563660046128e6565b611428565b34801561066757600080fd5b5061035261067636600461281c565b611545565b34801561068757600080fd5b50610352610696366004612925565b61157e565b3480156106a757600080fd5b506102d86116aa565b3480156106bc57600080fd5b506102d86106cb366004612a05565b611738565b3480156106dc57600080fd5b506106e56117be565b6040516102ba9190612bcf565b3480156106fe57600080fd5b506102d86117c7565b34801561071357600080fd5b506103696117d4565b34801561072857600080fd5b506103526107373660046129c0565b6117da565b34801561074857600080fd5b50610352610757366004612a05565b61182c565b34801561076857600080fd5b5061035261077736600461296e565b6118e2565b34801561078857600080fd5b506102ad6107973660046127af565b611934565b3480156107a857600080fd5b506103526107b7366004612795565b611962565b3480156107c857600080fd5b506103696119d0565b3480156107dd57600080fd5b506107f16107ec366004612a05565b6119d6565b6040516102ba9190612b80565b60006001600160e01b031982166380ac58cd60e01b148061082f57506001600160e01b03198216635b5e139f60e01b145b8061084a57506001600160e01b0319821663780e9d6360e01b145b80610859575061085982611a55565b90505b919050565b60606001805461087090613560565b80601f016020809104026020016040519081016040528092919081815260200182805461089c90613560565b80156108e95780601f106108be576101008083540402835291602001916108e9565b820191906000526020600020905b8154815290600101906020018083116108cc57829003601f168201915b5050505050905090565b6001600160a01b031660009081526014602052604090205460ff1690565b600061091c82611a6e565b6109415760405162461bcd60e51b8152600401610938906133c4565b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061096882610fe4565b9050806001600160a01b0316836001600160a01b0316141561099c5760405162461bcd60e51b8152600401610938906131ef565b806001600160a01b03166109ae611a75565b6001600160a01b031614806109ca57506109ca81610797611a75565b6109e65760405162461bcd60e51b815260040161093890612eea565b6109f1838383611a79565b505050565b60005490565b6109f1838383611ad5565b6000610a1283610ff6565b8210610a305760405162461bcd60e51b815260040161093890612c0a565b6000610a3a6109f6565b905060008060005b83811015610ae3576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610a9457805192505b876001600160a01b0316836001600160a01b03161415610ad05786841415610ac257509350610afc92505050565b83610acc81613595565b9450505b5080610adb81613595565b915050610a42565b5060405162461bcd60e51b815260040161093890613327565b92915050565b6000610b0e600b611de7565b905090565b6115b381565b610b21611a75565b6001600160a01b0316610b32611194565b6001600160a01b031614610b585760405162461bcd60e51b815260040161093890613047565b600e54610b6590826135b0565b15610b825760405162461bcd60e51b815260040161093890612d3a565b6000600e5482610b9291906134ab565b905060005b81811015610bbd57610bab33600e54611deb565b80610bb581613595565b915050610b97565b5081600f54610bcc9190613506565b600f555050565b610bdb611a75565b6001600160a01b0316610bec611194565b6001600160a01b031614610c125760405162461bcd60e51b815260040161093890613047565b476000610c1d611194565b6001600160a01b031647604051610c3390612b2c565b60006040518083038185875af1925050503d8060008114610c70576040519150601f19603f3d011682016040523d82523d6000602084013e610c75565b606091505b5050905080610c8357600080fd5b8160116000828254610c959190613493565b90915550505050565b610ca6611a75565b6001600160a01b0316610cb7611194565b6001600160a01b031614610cdd5760405162461bcd60e51b815260040161093890613047565b600a80546001810182556000919091526004027fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801610d1c8183611e05565b610d26600b611e70565b5050565b6109f183838360405180602001604052806000815250611545565b610d4d611a75565b6001600160a01b0316610d5e611194565b6001600160a01b031614610d845760405162461bcd60e51b815260040161093890613047565b80610d9857600c805460ff19169055610de9565b8060011415610dc357600c805460ff19166001179055610dbe666a94d74f43000061114a565b610de9565b8060021415610de957600c805460ff19166002179055610de9668e1bc9bf04000061114a565b50565b60115481565b6000610dfc6109f6565b8210610e1a5760405162461bcd60e51b815260040161093890612d86565b5090565b60125460ff1681565b610e2f611a75565b6001600160a01b0316610e40611194565b6001600160a01b031614610e665760405162461bcd60e51b815260040161093890613047565b8051610d2690600d9060208401906125d1565b6000600c5460ff166002811115610ea057634e487b7160e01b600052602160045260246000fd5b1415610ebe5760405162461bcd60e51b8152600401610938906131b8565b600081118015610ed05750600e548111155b610eec5760405162461bcd60e51b815260040161093890612e6d565b3360009081526014602052604090205460ff166001600c5460ff166002811115610f2657634e487b7160e01b600052602160045260246000fd5b1415610f4e57600181151514610f4e5760405162461bcd60e51b815260040161093890612eb3565b6000818015610f655750666a94d74f430000601054115b15610f785750666a94d74f430000610f7d565b506010545b610f8783826134bf565b341015610fa65760405162461bcd60e51b8152600401610938906132fc565b6115b383610fb26109f6565b610fbc9190613493565b1115610fda5760405162461bcd60e51b81526004016109389061301a565b6109f13384611deb565b6000610fef82611e79565b5192915050565b60006001600160a01b03821661101e5760405162461bcd60e51b815260040161093890612f47565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b61104b611a75565b6001600160a01b031661105c611194565b6001600160a01b0316146110825760405162461bcd60e51b815260040161093890613047565b61108c6000611f8b565b565b600e5481565b61109c611a75565b6001600160a01b03166110ad611194565b6001600160a01b0316146110d35760405162461bcd60e51b815260040161093890613047565b808060001080156110ed57506110e9600b611de7565b8111155b6111095760405162461bcd60e51b81526004016109389061318b565b610d26600a611119600185613506565b8154811061113757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201611fdd565b611152611a75565b6001600160a01b0316611163611194565b6001600160a01b0316146111895760405162461bcd60e51b815260040161093890613047565b601055565b60105481565b6008546001600160a01b031690565b60606002805461087090613560565b6111ba611a75565b6001600160a01b0316826001600160a01b031614156111eb5760405162461bcd60e51b815260040161093890613102565b80600660006111f8611a75565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561123c611a75565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112749190612bc4565b60405180910390a35050565b611288611a75565b6001600160a01b0316611299611194565b6001600160a01b0316146112bf5760405162461bcd60e51b815260040161093890613047565b60005b818110156109f15760008383838181106112ec57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113019190612795565b6001600160a01b031614156113285760405162461bcd60e51b815260040161093890612c4c565b60006014600085858581811061134e57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113639190612795565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061139581613595565b9150506112c2565b818060001080156113b757506113b3600b611de7565b8111155b6113d35760405162461bcd60e51b81526004016109389061318b565b6109f1826113e033610ff6565b600a6113ed600188613506565b8154811061140b57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201611fed9092919063ffffffff16565b611430611a75565b6001600160a01b0316611441611194565b6001600160a01b0316146114675760405162461bcd60e51b815260040161093890613047565b60005b818110156109f157600083838381811061149457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114a99190612795565b6001600160a01b031614156114d05760405162461bcd60e51b81526004016109389061307c565b6001601460008585858181106114f657634e487b7160e01b600052603260045260246000fd5b905060200201602081019061150b9190612795565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061153d81613595565b91505061146a565b611550848484611ad5565b61155c848484846120ab565b6115785760405162461bcd60e51b815260040161093890613231565b50505050565b611586611a75565b6001600160a01b0316611597611194565b6001600160a01b0316146115bd5760405162461bcd60e51b815260040161093890613047565b6115b3826115c96109f6565b6115d39190613493565b11156115f15760405162461bcd60e51b815260040161093890612f92565b60005b8281101561157857600084848381811061161e57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116339190612795565b6001600160a01b0316141561165a5760405162461bcd60e51b815260040161093890612dc9565b61169884848381811061167d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116929190612795565b83611deb565b806116a281613595565b9150506115f4565b601380546116b790613560565b80601f01602080910402602001604051908101604052809291908181526020018280546116e390613560565b80156117305780601f1061170557610100808354040283529160200191611730565b820191906000526020600020905b81548152906001019060200180831161171357829003601f168201915b505050505081565b606061174382611a6e565b61175f5760405162461bcd60e51b8152600401610938906130b3565b60006117696121c7565b9050600081511161178957604051806020016040528060008152506117b7565b80611793846121d6565b60136040516020016117a793929190612a6a565b6040516020818303038152906040525b9392505050565b600c5460ff1681565b600d80546116b790613560565b60075481565b6117e2611a75565b6001600160a01b03166117f3611194565b6001600160a01b0316146118195760405162461bcd60e51b815260040161093890613047565b8051610d269060139060208401906125d1565b611834611a75565b6001600160a01b0316611845611194565b6001600160a01b03161461186b5760405162461bcd60e51b815260040161093890613047565b808060001080156118855750611881600b611de7565b8111155b6118a15760405162461bcd60e51b81526004016109389061318b565b610d26600a6118b1600185613506565b815481106118cf57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402016122f0565b6118ea611a75565b6001600160a01b03166118fb611194565b6001600160a01b0316146119215760405162461bcd60e51b815260040161093890613047565b6012805460ff1916911515919091179055565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61196a611a75565b6001600160a01b031661197b611194565b6001600160a01b0316146119a15760405162461bcd60e51b815260040161093890613047565b6001600160a01b0381166119c75760405162461bcd60e51b815260040161093890612caa565b610de981611f8b565b600f5481565b6060818060001080156119f257506119ee600b611de7565b8111155b611a0e5760405162461bcd60e51b81526004016109389061318b565b6117b7600a611a1e600186613506565b81548110611a3c57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402016122fd565b50919050565b6001600160e01b031981166301ffc9a760e01b14919050565b6000541190565b3390565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611ae082611e79565b9050600081600001516001600160a01b0316611afa611a75565b6001600160a01b03161480611b2f5750611b12611a75565b6001600160a01b0316611b2484610911565b6001600160a01b0316145b80611b4357508151611b4390610797611a75565b905080611b625760405162461bcd60e51b815260040161093890613139565b846001600160a01b031682600001516001600160a01b031614611b975760405162461bcd60e51b815260040161093890612fd4565b6001600160a01b038416611bbd5760405162461bcd60e51b815260040161093890612e00565b611bca8585856001611578565b611bda6000848460000151611a79565b6001600160a01b0385166000908152600460205260408120805460019290611c0c9084906001600160801b03166134de565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526004602052604081208054600194509092611c5891859116613468565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526003909152948520935184549151909216600160a01b0267ffffffffffffffff60a01b19929093166001600160a01b03199091161716179055611ced846001613493565b6000818152600360205260409020549091506001600160a01b0316611d9157611d1581611a6e565b15611d915760408051808201825284516001600160a01b0390811682526020808701516001600160401b0390811682850190815260008781526003909352949091209251835494516001600160a01b031990951692169190911767ffffffffffffffff60a01b1916600160a01b93909116929092029190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ddf8686866001611578565b505050505050565b5490565b610d26828260405180602001604052806000815250612359565b806001600160401b03811115611e2b57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611e54578160200160208202803683370190505b508051611e6b916001850191602090910190612651565b509055565b80546001019055565b611e8161268b565b611e8a82611a6e565b611ea65760405162461bcd60e51b815260040161093890612cf0565b60007f000000000000000000000000000000000000000000000000000000000000000a8310611f0757611ef97f000000000000000000000000000000000000000000000000000000000000000a84613506565b611f04906001613493565b90505b825b818110611f72576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215611f5f57925061085c915050565b5080611f6a81613549565b915050611f09565b5060405162461bcd60e51b815260040161093890613375565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600301805460ff19166001179055565b33600090815260028401602052604090205460ff161561201f5760405162461bcd60e51b815260040161093890612c83565b600383015460ff1615156001146120485760405162461bcd60e51b815260040161093890612e45565b8083600101838154811061206c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160008282546120859190613493565b90915550503360009081526002909301602052505060409020805460ff19166001179055565b60006120bf846001600160a01b03166125cb565b156121bb57836001600160a01b031663150b7a026120db611a75565b8786866040518563ffffffff1660e01b81526004016120fd9493929190612b43565b602060405180830381600087803b15801561211757600080fd5b505af1925050508015612147575060408051601f3d908101601f19168201909252612144918101906129a4565b60015b6121a1573d808015612175576040519150601f19603f3d011682016040523d82523d6000602084013e61217a565b606091505b5080516121995760405162461bcd60e51b815260040161093890613231565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121bf565b5060015b949350505050565b6060600d805461087090613560565b6060816121fb57506040805180820190915260018152600360fc1b602082015261085c565b8160005b8115612225578061220f81613595565b915061221e9050600a836134ab565b91506121ff565b6000816001600160401b0381111561224d57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612277576020820181803683370190505b5090505b84156121bf5761228c600183613506565b9150612299600a866135b0565b6122a4906030613493565b60f81b8183815181106122c757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506122e9600a866134ab565b945061227b565b600301805460ff19169055565b60608160010180548060200260200160405190810160405280929190818152602001828054801561234d57602002820191906000526020600020905b815481526020019060010190808311612339575b50505050509050919050565b6000546001600160a01b0384166123825760405162461bcd60e51b8152600401610938906132bb565b61238b81611a6e565b156123a85760405162461bcd60e51b815260040161093890613284565b7f000000000000000000000000000000000000000000000000000000000000000a8311156123e85760405162461bcd60e51b815260040161093890613411565b6123f56000858386611578565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612451908790613468565b6001600160801b0316815260200185836020015161246f9190613468565b6001600160801b039081169091526001600160a01b03808816600081815260046020908152604080832087518154988401518816600160801b029088166fffffffffffffffffffffffffffffffff199099169890981790961696909617909455845180860186529182526001600160401b034281168386019081528883526003909552948120915182549451909516600160a01b0267ffffffffffffffff60a01b19959093166001600160a01b031990941693909317939093161790915582905b858110156125b95760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461257d60008884886120ab565b6125995760405162461bcd60e51b815260040161093890613231565b816125a381613595565b92505080806125b190613595565b915050612530565b506000818155611ddf90878588611578565b3b151590565b8280546125dd90613560565b90600052602060002090601f0160209004810192826125ff5760008555612645565b82601f1061261857805160ff1916838001178555612645565b82800160010185558215612645579182015b8281111561264557825182559160200191906001019061262a565b50610e1a9291506126a2565b828054828255906000526020600020908101928215612645579160200282018281111561264557825182559160200191906001019061262a565b604080518082019091526000808252602082015290565b5b80821115610e1a57600081556001016126a3565b60006001600160401b03808411156126d1576126d16135f0565b604051601f8501601f1916810160200182811182821017156126f5576126f56135f0565b60405284815291508183850186101561270d57600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461085c57600080fd5b60008083601f84011261274e578081fd5b5081356001600160401b03811115612764578182fd5b602083019150836020808302850101111561277e57600080fd5b9250929050565b8035801515811461085c57600080fd5b6000602082840312156127a6578081fd5b6117b782612726565b600080604083850312156127c1578081fd5b6127ca83612726565b91506127d860208401612726565b90509250929050565b6000806000606084860312156127f5578081fd5b6127fe84612726565b925061280c60208501612726565b9150604084013590509250925092565b60008060008060808587031215612831578081fd5b61283a85612726565b935061284860208601612726565b92506040850135915060608501356001600160401b03811115612869578182fd5b8501601f81018713612879578182fd5b612888878235602084016126b7565b91505092959194509250565b600080604083850312156128a6578182fd5b6128af83612726565b91506127d860208401612785565b600080604083850312156128cf578182fd5b6128d883612726565b946020939093013593505050565b600080602083850312156128f8578182fd5b82356001600160401b0381111561290d578283fd5b6129198582860161273d565b90969095509350505050565b600080600060408486031215612939578283fd5b83356001600160401b0381111561294e578384fd5b61295a8682870161273d565b909790965060209590950135949350505050565b60006020828403121561297f578081fd5b6117b782612785565b600060208284031215612999578081fd5b81356117b781613606565b6000602082840312156129b5578081fd5b81516117b781613606565b6000602082840312156129d1578081fd5b81356001600160401b038111156129e6578182fd5b8201601f810184136129f6578182fd5b6121bf848235602084016126b7565b600060208284031215612a16578081fd5b5035919050565b60008060408385031215612a2f578182fd5b50508035926020909101359150565b60008151808452612a5681602086016020860161351d565b601f01601f19169290920160200192915050565b600084516020612a7d8285838a0161351d565b855191840191612a908184848a0161351d565b8554920191839060028104600180831680612aac57607f831692505b858310811415612aca57634e487b7160e01b88526022600452602488fd5b808015612ade5760018114612aef57612b1b565b60ff19851688528388019550612b1b565b612af88b61345c565b895b85811015612b135781548a820152908401908801612afa565b505083880195505b50939b9a5050505050505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612b7690830184612a3e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612bb857835183529284019291840191600101612b9c565b50909695505050505050565b901515815260200190565b6020810160038310612bf157634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082526117b76020830184612a3e565b60208082526022908201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252601d908201527f43616e27742072656d6f766520746865206e756c6c2061646472657373000000604082015260600190565b6020808252600d908201526c105b1c9958591e48159bdd1959609a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602a908201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736040820152693a32b73a103a37b5b2b760b11b606082015260800190565b6020808252602c908201527f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060408201526b6d6178426174636853697a6560a01b606082015260800190565b60208082526023908201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756040820152626e647360e81b606082015260800190565b60208082526017908201527f41697264726f7020746f204e756c6c2061646472657373000000000000000000604082015260600190565b60208082526025908201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600e908201526d141bdb1b081a5cc818db1bdcd95960921b604082015260600190565b60208082526026908201527f43616e206f6e6c79206d696e74206d696e696d756d203120616e64206d61786960408201526506d756d2031360d41b606082015260800190565b60208082526017908201527f55736572206973206e6f742077686974656c6973746564000000000000000000604082015260600190565b60208082526039908201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60408201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000606082015260800190565b6020808252602b908201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526022908201527f41697264726f702077696c6c20657863656564206d6178696d756d20737570706040820152616c7960f01b606082015260800190565b60208082526026908201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746040820152651037bbb732b960d11b606082015260800190565b602080825260139082015272496e73756666696369656e7420737570706c7960681b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f43616e27742061646420746865206e756c6c2061646472657373000000000000604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252601a908201527f455243373231413a20617070726f766520746f2063616c6c6572000000000000604082015260600190565b60208082526032908201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b60208082526013908201527224b73b30b634b2102837b63610273ab6b132b960691b604082015260600190565b6020808252601b908201527f4d696e74696e672069732063757272656e746c79207061757365640000000000604082015260600190565b60208082526022908201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6020808252601d908201527f455243373231413a20746f6b656e20616c7265616479206d696e746564000000604082015260600190565b60208082526021908201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b602080825260119082015270125b9cdd59999a58da595b9d08199d5b99607a1b604082015260600190565b6020808252602e908201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060408201526d0deeedccae440c4f240d2dcc8caf60931b606082015260800190565b6020808252602f908201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560408201526e1037bbb732b91037b3103a37b5b2b760891b606082015260800190565b6020808252602d908201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560408201526c3c34b9ba32b73a103a37b5b2b760991b606082015260800190565b60208082526022908201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696040820152610ced60f31b606082015260800190565b90815260200190565b60009081526020902090565b60006001600160801b0380831681851680830382111561348a5761348a6135c4565b01949350505050565b600082198211156134a6576134a66135c4565b500190565b6000826134ba576134ba6135da565b500490565b60008160001904831182151516156134d9576134d96135c4565b500290565b60006001600160801b03838116908316818110156134fe576134fe6135c4565b039392505050565b600082821015613518576135186135c4565b500390565b60005b83811015613538578181015183820152602001613520565b838111156115785750506000910152565b600081613558576135586135c4565b506000190190565b60028104600182168061357457607f821691505b60208210811415611a4f57634e487b7160e01b600052602260045260246000fd5b60006000198214156135a9576135a96135c4565b5060010190565b6000826135bf576135bf6135da565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610de957600080fdfea2646970667358221220665538e2829f2aed9b9dab7af328ac1e1724606cbc7b72da3142ba19fafadcaa64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000015b3000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f63656c65737469616c736563726574732e6d7970696e6174612e636c6f75642f697066732f516d5663766736554e79325245577148424c457a357978574337377539644c6372327058726741425877714d6d592f00000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://celestialsecrets.mypinata.cloud/ipfs/QmVcvg6UNy2REWqHBLEz5yxWC77u9dLcr2pXrgABXwqMmY/
Arg [1] : coreTeamReserved (uint256): 5555
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000015b3
Arg [2] : 000000000000000000000000000000000000000000000000000000000000005c
Arg [3] : 68747470733a2f2f63656c65737469616c736563726574732e6d7970696e6174
Arg [4] : 612e636c6f75642f697066732f516d5663766736554e79325245577148424c45
Arg [5] : 7a357978574337377539644c6372327058726741425877714d6d592f00000000
Deployed Bytecode Sourcemap
45575:7277:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31190:406;;;;;;;;;;-1:-1:-1;31190:406:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33064:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;47393:127::-;;;;;;;;;;-1:-1:-1;47393:127:0;;;;;:::i;:::-;;:::i;34719:214::-;;;;;;;;;;-1:-1:-1;34719:214:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34250:405::-;;;;;;;;;;-1:-1:-1;34250:405:0;;;;;:::i;:::-;;:::i;:::-;;29639:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35639:162::-;;;;;;;;;;-1:-1:-1;35639:162:0;;;;;:::i;:::-;;:::i;30300:820::-;;;;;;;;;;-1:-1:-1;30300:820:0;;;;;:::i;:::-;;:::i;51515:107::-;;;;;;;;;;;;;:::i;45972:41::-;;;;;;;;;;;;;:::i;49506:421::-;;;;;;;;;;-1:-1:-1;49506:421:0;;;;;:::i;:::-;;:::i;49964:230::-;;;;;;;;;;;;;:::i;50922:208::-;;;;;;;;;;-1:-1:-1;50922:208:0;;;;;:::i;:::-;;:::i;35870:177::-;;;;;;;;;;-1:-1:-1;35870:177:0;;;;;:::i;:::-;;:::i;47582:426::-;;;;;;;;;;-1:-1:-1;47582:426:0;;;;;:::i;:::-;;:::i;46145:28::-;;;;;;;;;;;;;:::i;29814:187::-;;;;;;;;;;-1:-1:-1;29814:187:0;;;;;:::i;:::-;;:::i;46182:30::-;;;;;;;;;;;;;:::i;52322:101::-;;;;;;;;;;-1:-1:-1;52322:101:0;;;;;:::i;:::-;;:::i;48048:1450::-;;;;;;:::i;:::-;;:::i;32875:124::-;;;;;;;;;;-1:-1:-1;32875:124:0;;;;;:::i;:::-;;:::i;31658:221::-;;;;;;;;;;-1:-1:-1;31658:221:0;;;;;:::i;:::-;;:::i;12460:94::-;;;;;;;;;;;;;:::i;46020:27::-;;;;;;;;;;;;;:::i;51793:158::-;;;;;;;;;;-1:-1:-1;51793:158:0;;;;;:::i;:::-;;:::i;46605:123::-;;;;;;;;;;-1:-1:-1;46605:123:0;;;;;:::i;:::-;;:::i;46095:43::-;;;;;;;;;;;;;:::i;11809:87::-;;;;;;;;;;;;;:::i;33231:104::-;;;;;;;;;;;;;:::i;35003:288::-;;;;;;;;;;-1:-1:-1;35003:288:0;;;;;:::i;:::-;;:::i;47077:308::-;;;;;;;;;;-1:-1:-1;47077:308:0;;;;;:::i;:::-;;:::i;51142:177::-;;;;;;;;;;-1:-1:-1;51142:177:0;;;;;:::i;:::-;;:::i;46768:301::-;;;;;;;;;;-1:-1:-1;46768:301:0;;;;;:::i;:::-;;:::i;36116:347::-;;;;;;;;;;-1:-1:-1;36116:347:0;;;;;:::i;:::-;;:::i;50230:448::-;;;;;;;;;;-1:-1:-1;50230:448:0;;;;;:::i;:::-;;:::i;46219:37::-;;;;;;;;;;;;;:::i;52431:418::-;;;;;;;;;;-1:-1:-1;52431:418:0;;;;;:::i;:::-;;:::i;45897:33::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;45937:26::-;;;;;;;;;;;;;:::i;40872:43::-;;;;;;;;;;;;;:::i;51976:120::-;;;;;;;;;;-1:-1:-1;51976:120:0;;;;;:::i;:::-;;:::i;51630:155::-;;;;;;;;;;-1:-1:-1;51630:155:0;;;;;:::i;:::-;;:::i;52225:89::-;;;;;;;;;;-1:-1:-1;52225:89:0;;;;;:::i;:::-;;:::i;35360:214::-;;;;;;;;;;-1:-1:-1;35360:214:0;;;;;:::i;:::-;;:::i;12709:229::-;;;;;;;;;;-1:-1:-1;12709:229:0;;;;;:::i;:::-;;:::i;46054:34::-;;;;;;;;;;;;;:::i;51327:180::-;;;;;;;;;;-1:-1:-1;51327:180:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;31190:406::-;31337:4;-1:-1:-1;;;;;;31375:40:0;;-1:-1:-1;;;31375:40:0;;:101;;-1:-1:-1;;;;;;;31428:48:0;;-1:-1:-1;;;31428:48:0;31375:101;:164;;;-1:-1:-1;;;;;;;31489:50:0;;-1:-1:-1;;;31489:50:0;31375:164;:213;;;;31552:36;31576:11;31552:23;:36::i;:::-;31359:229;;31190:406;;;;:::o;33064:100::-;33118:13;33151:5;33144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33064:100;:::o;47393:127::-;-1:-1:-1;;;;;47485:27:0;47461:4;47485:27;;;:20;:27;;;;;;;;;47393:127::o;34719:214::-;34787:7;34815:16;34823:7;34815;:16::i;:::-;34807:74;;;;-1:-1:-1;;;34807:74:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;34901:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;34901:24:0;;34719:214::o;34250:405::-;34323:13;34339:24;34355:7;34339:15;:24::i;:::-;34323:40;;34388:5;-1:-1:-1;;;;;34382:11:0;:2;-1:-1:-1;;;;;34382:11:0;;;34374:58;;;;-1:-1:-1;;;34374:58:0;;;;;;;:::i;:::-;34479:5;-1:-1:-1;;;;;34463:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;34463:21:0;;:62;;;;34488:37;34505:5;34512:12;:10;:12::i;34488:37::-;34445:161;;;;-1:-1:-1;;;34445:161:0;;;;;;;:::i;:::-;34619:28;34628:2;34632:7;34641:5;34619:8;:28::i;:::-;34250:405;;;:::o;29639:100::-;29692:7;29719:12;29639:100;:::o;35639:162::-;35765:28;35775:4;35781:2;35785:7;35765:9;:28::i;30300:820::-;30425:7;30466:16;30476:5;30466:9;:16::i;:::-;30458:5;:24;30450:71;;;;-1:-1:-1;;;30450:71:0;;;;;;;:::i;:::-;30532:22;30557:13;:11;:13::i;:::-;30532:38;;30581:19;30615:25;30669:9;30664:382;30688:14;30684:1;:18;30664:382;;;30720:31;30754:14;;;:11;:14;;;;;;;;;30720:48;;;;;;;;;-1:-1:-1;;;;;30720:48:0;;;;;-1:-1:-1;;;30720:48:0;;;-1:-1:-1;;;;;30720:48:0;;;;;;;;30783:28;30779:95;;30848:14;;;-1:-1:-1;30779:95:0;30909:5;-1:-1:-1;;;;;30888:26:0;:17;-1:-1:-1;;;;;30888:26:0;;30884:151;;;30950:5;30935:11;:20;30931:65;;;-1:-1:-1;30979:1:0;-1:-1:-1;30972:8:0;;-1:-1:-1;;;30972:8:0;30931:65;31010:13;;;;:::i;:::-;;;;30884:151;-1:-1:-1;30704:3:0;;;;:::i;:::-;;;;30664:382;;;;31056:56;;-1:-1:-1;;;31056:56:0;;;;;;;:::i;30300:820::-;;;;;:::o;51515:107::-;51565:7;51592:22;:12;:20;:22::i;:::-;51585:29;;51515:107;:::o;45972:41::-;46009:4;45972:41;:::o;49506:421::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;49618:7:::1;::::0;49604:21:::1;::::0;:11;:21:::1;:::i;:::-;:26:::0;49582:120:::1;;;;-1:-1:-1::0;;;49582:120:0::1;;;;;;;:::i;:::-;49713:13;49743:7;;49729:11;:21;;;;:::i;:::-;49713:37;;49766:9;49761:93;49785:5;49781:1;:9;49761:93;;;49812:30;49822:10;49834:7;;49812:9;:30::i;:::-;49792:3:::0;::::1;::::0;::::1;:::i;:::-;;;;49761:93;;;;49908:11;49886:19;;:33;;;;:::i;:::-;49864:19;:55:::0;-1:-1:-1;;49506:421:0:o;49964:230::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;50029:21:::1;50012:14;50083:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;50075:21:0::1;50104;50075:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50061:69;;;50149:2;50141:11;;;::::0;::::1;;50180:6;50163:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;49964:230:0:o;50922:208::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;51028:7:::1;:14:::0;;::::1;::::0;::::1;::::0;;50993:32:::1;51028:14:::0;;;;::::1;;::::0;::::1;51053:34;51028:14:::0;51077:9;51053:23:::1;:34::i;:::-;51098:24;:12;:22;:24::i;:::-;12100:1;50922:208:::0;:::o;35870:177::-;36000:39;36017:4;36023:2;36027:7;36000:39;;;;;;;;;;;;:16;:39::i;47582:426::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;47654:11;47650:351:::1;;47682:16;:35:::0;;-1:-1:-1;;47682:35:0::1;::::0;;47650:351:::1;;;47739:6;47749:1;47739:11;47735:266;;;47767:16;:38:::0;;-1:-1:-1;;47767:38:0::1;47786:19;47767:38;::::0;;47820:30:::1;47832:17;47820:11;:30::i;:::-;47735:266;;;47881:6;47891:1;47881:11;47877:124;;;47909:16;:35:::0;;-1:-1:-1;;47909:35:0::1;47928:16;47909:35;::::0;;47959:30:::1;47971:17;47959:11;:30::i;:::-;47582:426:::0;:::o;46145:28::-;;;;:::o;29814:187::-;29881:7;29917:13;:11;:13::i;:::-;29909:5;:21;29901:69;;;;-1:-1:-1;;;29901:69:0;;;;;;;:::i;:::-;-1:-1:-1;29988:5:0;29814:187::o;46182:30::-;;;;;;:::o;52322:101::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;52393:22;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;48048:1450::-:0;48216:16;48196;;;;:36;;;;;;-1:-1:-1;;;48196:36:0;;;;;;;;;;;48174:114;;;;-1:-1:-1;;;48174:114:0;;;;;;;:::i;:::-;48406:1;48392:11;:15;:41;;;;;48426:7;;48411:11;:22;;48392:41;48370:129;;;;-1:-1:-1;;;48370:129:0;;;;;;;:::i;:::-;48599:10;48553:22;48578:32;;;:20;:32;;;;;;;;;48701:16;;;;:39;;;;;;-1:-1:-1;;;48701:39:0;;;;;;;;;;48697:182;;;48804:4;48783:25;;;;48757:110;;;;-1:-1:-1;;;48757:110:0;;;;;;;:::i;:::-;48913:17;48945;:56;;;;;48984:17;48966:15;;:35;48945:56;48941:178;;;-1:-1:-1;49030:17:0;48941:178;;;-1:-1:-1;49092:15:0;;48941:178;49211:23;49223:11;49211:9;:23;:::i;:::-;49198:9;:36;;49176:103;;;;-1:-1:-1;;;49176:103:0;;;;;;;:::i;:::-;46009:4;49371:11;49355:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:41;;49333:110;;;;-1:-1:-1;;;49333:110:0;;;;;;;:::i;:::-;49456:34;49466:10;49478:11;49456:9;:34::i;32875:124::-;32939:7;32966:20;32978:7;32966:11;:20::i;:::-;:25;;32875:124;-1:-1:-1;;32875:124:0:o;31658:221::-;31722:7;-1:-1:-1;;;;;31750:19:0;;31742:75;;;;-1:-1:-1;;;31742:75:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;31843:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;31843:27:0;;31658:221::o;12460:94::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;12525:21:::1;12543:1;12525:9;:21::i;:::-;12460:94::o:0;46020:27::-;;;;:::o;51793:158::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;51884:11:::1;50795;50791:1;:15;:56;;;;;50825:22;:12;:20;:22::i;:::-;50810:11;:37;;50791:56;50769:125;;;;-1:-1:-1::0;;;50769:125:0::1;;;;;;;:::i;:::-;51908:35:::2;:7;51916:13;51928:1;51916:11:::0;:13:::2;:::i;:::-;51908:22;;;;;;-1:-1:-1::0;;;51908:22:0::2;;;;;;;;;;;;;;;;;;;:33;:35::i;46605:123::-:0;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;46697:15:::1;:23:::0;46605:123::o;46095:43::-;;;;:::o;11809:87::-;11882:6;;-1:-1:-1;;;;;11882:6:0;11809:87;:::o;33231:104::-;33287:13;33320:7;33313:14;;;;;:::i;35003:288::-;35110:12;:10;:12::i;:::-;-1:-1:-1;;;;;35098:24:0;:8;-1:-1:-1;;;;;35098:24:0;;;35090:63;;;;-1:-1:-1;;;35090:63:0;;;;;;;:::i;:::-;35211:8;35166:18;:32;35185:12;:10;:12::i;:::-;-1:-1:-1;;;;;35166:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;35166:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;35166:53:0;;;;;;;;;;;35250:12;:10;:12::i;:::-;-1:-1:-1;;;;;35235:48:0;;35274:8;35235:48;;;;;;:::i;:::-;;;;;;;;35003:288;;:::o;47077:308::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;47193:9:::1;47188:190;47208:17:::0;;::::1;47188:190;;;47276:1;47255:6:::0;;47262:1;47255:9;;::::1;;;-1:-1:-1::0;;;47255:9:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47255:23:0::1;;;47247:65;;;;-1:-1:-1::0;;;47247:65:0::1;;;;;;;:::i;:::-;47361:5;47327:20;:31;47348:6;;47355:1;47348:9;;;;;-1:-1:-1::0;;;47348:9:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47327:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;47327:31:0;:39;;-1:-1:-1;;47327:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47227:3;::::1;::::0;::::1;:::i;:::-;;;;47188:190;;51142:177:::0;51228:11;50795;50791:1;:15;:56;;;;;50825:22;:12;:20;:22::i;:::-;50810:11;:37;;50791:56;50769:125;;;;-1:-1:-1;;;50769:125:0;;;;;;;:::i;:::-;51252:59:::1;51280:7;51289:21;51299:10;51289:9;:21::i;:::-;51252:7;51260:13;51272:1;51260:11:::0;:13:::1;:::i;:::-;51252:22;;;;;;-1:-1:-1::0;;;51252:22:0::1;;;;;;;;;;;;;;;;;;;:27;;:59;;;;;:::i;46768:301::-:0;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;46881:9:::1;46876:186;46896:17:::0;;::::1;46876:186;;;46964:1;46943:6:::0;;46950:1;46943:9;;::::1;;;-1:-1:-1::0;;;46943:9:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46943:23:0::1;;;46935:62;;;;-1:-1:-1::0;;;46935:62:0::1;;;;;;;:::i;:::-;47046:4;47012:20;:31;47033:6;;47040:1;47033:9;;;;;-1:-1:-1::0;;;47033:9:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47012:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;47012:31:0;:38;;-1:-1:-1;;47012:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46915:3;::::1;::::0;::::1;:::i;:::-;;;;46876:186;;36116:347:::0;36275:28;36285:4;36291:2;36295:7;36275:9;:28::i;:::-;36332:48;36355:4;36361:2;36365:7;36374:5;36332:22;:48::i;:::-;36314:141;;;;-1:-1:-1;;;36314:141:0;;;;;;;:::i;:::-;36116:347;;;;:::o;50230:448::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;46009:4:::1;50372:10:::0;50356:13:::1;:11;:13::i;:::-;:33;;;;:::i;:::-;:47;;50334:131;;;;-1:-1:-1::0;;;50334:131:0::1;;;;;;;:::i;:::-;50481:9;50476:195;50496:21:::0;;::::1;50476:195;;;50572:1;50547:10:::0;;50558:1;50547:13;;::::1;;;-1:-1:-1::0;;;50547:13:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50547:27:0::1;;;50539:63;;;;-1:-1:-1::0;;;50539:63:0::1;;;;;;;:::i;:::-;50617:42;50627:10;;50638:1;50627:13;;;;;-1:-1:-1::0;;;50627:13:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50642:16;50617:9;:42::i;:::-;50519:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50476:195;;46219:37:::0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52431:418::-;52504:13;52553:16;52561:7;52553;:16::i;:::-;52535:105;;;;-1:-1:-1;;;52535:105:0;;;;;;;:::i;:::-;52653:21;52677:10;:8;:10::i;:::-;52653:34;;52738:1;52720:7;52714:21;:25;:127;;;;;;;;;;;;;;;;;52779:7;52788:18;:7;:16;:18::i;:::-;52808:13;52762:60;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52714:127;52698:143;52431:418;-1:-1:-1;;;52431:418:0:o;45897:33::-;;;;;;:::o;45937:26::-;;;;;;;:::i;40872:43::-;;;;:::o;51976:120::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;52059:29;;::::1;::::0;:13:::1;::::0;:29:::1;::::0;::::1;::::0;::::1;:::i;51630:155::-:0;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;51719:11:::1;50795;50791:1;:15;:56;;;;;50825:22;:12;:20;:22::i;:::-;50810:11;:37;;50791:56;50769:125;;;;-1:-1:-1::0;;;50769:125:0::1;;;;;;;:::i;:::-;51743:34:::2;:7;51751:13;51763:1;51751:11:::0;:13:::2;:::i;:::-;51743:22;;;;;;-1:-1:-1::0;;;51743:22:0::2;;;;;;;;;;;;;;;;;;;:32;:34::i;52225:89::-:0;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;52287:10:::1;:19:::0;;-1:-1:-1;;52287:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52225:89::o;35360:214::-;-1:-1:-1;;;;;35531:25:0;;;35502:4;35531:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;35360:214::o;12709:229::-;12040:12;:10;:12::i;:::-;-1:-1:-1;;;;;12029:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;12029:23:0;;12021:68;;;;-1:-1:-1;;;12021:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12812:22:0;::::1;12790:110;;;;-1:-1:-1::0;;;12790:110:0::1;;;;;;;:::i;:::-;12911:19;12921:8;12911:9;:19::i;46054:34::-:0;;;;:::o;51327:180::-;51427:16;51405:11;50795;50791:1;:15;:56;;;;;50825:22;:12;:20;:22::i;:::-;50810:11;:37;;50791:56;50769:125;;;;-1:-1:-1;;;50769:125:0;;;;;;;:::i;:::-;51463:36:::1;:7;51471:13;51483:1;51471:11:::0;:13:::1;:::i;:::-;51463:22;;;;;;-1:-1:-1::0;;;51463:22:0::1;;;;;;;;;;;;;;;;;;;:34;:36::i;50905:1::-;51327:180:::0;;;;:::o;14930:207::-;-1:-1:-1;;;;;;15089:40:0;;-1:-1:-1;;;15089:40:0;14930:207;;;:::o;36712:111::-;36769:4;36803:12;-1:-1:-1;36793:22:0;36712:111::o;2090:98::-;2170:10;2090:98;:::o;40668:196::-;40783:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;40783:29:0;-1:-1:-1;;;;;40783:29:0;;;;;;;;;40828:28;;40783:24;;40828:28;;;;;;;40668:196;;;:::o;38901:1653::-;39016:35;39054:20;39066:7;39054:11;:20::i;:::-;39016:58;;39087:22;39129:13;:18;;;-1:-1:-1;;;;;39113:34:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;39113:34:0;;:83;;;;39184:12;:10;:12::i;:::-;-1:-1:-1;;;;;39160:36:0;:20;39172:7;39160:11;:20::i;:::-;-1:-1:-1;;;;;39160:36:0;;39113:83;:146;;;-1:-1:-1;39226:18:0;;39209:50;;39246:12;:10;:12::i;39209:50::-;39087:173;;39291:17;39273:109;;;;-1:-1:-1;;;39273:109:0;;;;;;;:::i;:::-;39435:4;-1:-1:-1;;;;;39413:26:0;:13;:18;;;-1:-1:-1;;;;;39413:26:0;;39395:106;;;;-1:-1:-1;;;39395:106:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39520:16:0;;39512:66;;;;-1:-1:-1;;;39512:66:0;;;;;;;:::i;:::-;39591:43;39613:4;39619:2;39623:7;39632:1;39591:21;:43::i;:::-;39699:49;39716:1;39720:7;39729:13;:18;;;39699:8;:49::i;:::-;-1:-1:-1;;;;;39761:18:0;;;;;;:12;:18;;;;;:31;;39791:1;;39761:18;:31;;39791:1;;-1:-1:-1;;;;;39761:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;39761:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;39803:16:0;;-1:-1:-1;39803:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;39803:16:0;;:29;;-1:-1:-1;;39803:29:0;;:::i;:::-;;;-1:-1:-1;;;;;39803:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39866:43:0;;;;;;;;-1:-1:-1;;;;;39866:43:0;;;;;-1:-1:-1;;;;;39892:15:0;39866:43;;;;;;;;;-1:-1:-1;39843:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;39843:66:0;-1:-1:-1;;;;39843:66:0;;;;-1:-1:-1;;;;;;39843:66:0;;;;;;;;40171:11;39855:7;-1:-1:-1;40171:11:0;:::i;:::-;40238:1;40197:24;;;:11;:24;;;;;:29;40149:33;;-1:-1:-1;;;;;;40197:29:0;40193:256;;40257:20;40265:11;40257:7;:20::i;:::-;40253:185;;;40321:105;;;;;;;;40350:18;;-1:-1:-1;;;;;40321:105:0;;;;;;40383:28;;;;-1:-1:-1;;;;;40321:105:0;;;;;;;;;-1:-1:-1;40294:24:0;;;:11;:24;;;;;;;:132;;;;;;-1:-1:-1;;;;;;40294:132:0;;;;;;;;;-1:-1:-1;;;;40294:132:0;-1:-1:-1;;;40294:132:0;;;;;;;;;;;;;;40253:185;40485:7;40481:2;-1:-1:-1;;;;;40466:27:0;40475:4;-1:-1:-1;;;;;40466:27:0;;;;;;;;;;;40504:42;40525:4;40531:2;40535:7;40544:1;40504:20;:42::i;:::-;38901:1653;;;;;;:::o;873:114::-;965:14;;873:114::o;36831:104::-;36900:27;36910:2;36914:8;36900:27;;;;;;;;;;;;:9;:27::i;44761:167::-;44874:8;-1:-1:-1;;;;;44860:23:0;;;;;-1:-1:-1;;;44860:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44860:23:0;-1:-1:-1;44845:38:0;;;;:12;;;;:38;;;;;;:::i;:::-;-1:-1:-1;44894:26:0;;44761:167::o;995:127::-;1084:19;;1102:1;1084:19;;;995:127::o;32153:662::-;32241:21;;:::i;:::-;32288:16;32296:7;32288;:16::i;:::-;32280:71;;;;-1:-1:-1;;;32280:71:0;;;;;;;:::i;:::-;32364:26;32416:12;32405:7;:23;32401:99;;32462:22;32472:12;32462:7;:22;:::i;:::-;:26;;32487:1;32462:26;:::i;:::-;32441:47;;32401:99;32532:7;32512:226;32549:18;32541:4;:26;32512:226;;32588:31;32622:17;;;:11;:17;;;;;;;;;32588:51;;;;;;;;;-1:-1:-1;;;;;32588:51:0;;;;;-1:-1:-1;;;32588:51:0;;;-1:-1:-1;;;;;32588:51:0;;;;;;;;32654:28;32650:77;;32706:9;-1:-1:-1;32699:16:0;;-1:-1:-1;;32699:16:0;32650:77;-1:-1:-1;32569:6:0;;;;:::i;:::-;;;;32512:226;;;;32750:57;;-1:-1:-1;;;32750:57:0;;;;;;;:::i;12946:173::-;13021:6;;;-1:-1:-1;;;;;13038:17:0;;;-1:-1:-1;;;;;;13038:17:0;;;;;;;13071:40;;13021:6;;;13038:17;13021:6;;13071:40;;13002:16;;13071:40;12946:173;;:::o;45431:92::-;45494:14;;:21;;-1:-1:-1;;45494:21:0;45511:4;45494:21;;;45431:92::o;44936:387::-;45067:10;45052:26;;;;:14;;;:26;;;;;;;;:35;45030:98;;;;-1:-1:-1;;;45030:98:0;;;;;;;:::i;:::-;45161:14;;;;;;:22;;:14;:22;45139:86;;;;-1:-1:-1;;;45139:86:0;;;;;;;:::i;:::-;45261:10;45236:6;:12;;45249:7;45236:21;;;;;;-1:-1:-1;;;45236:21:0;;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;45297:10:0;45282:26;;;;:14;;;;:26;;-1:-1:-1;;45282:26:0;;;:33;;-1:-1:-1;;45282:33:0;45311:4;45282:33;;;44936:387::o;42492:762::-;42647:4;42668:15;:2;-1:-1:-1;;;;;42668:13:0;;:15::i;:::-;42664:583;;;42729:2;-1:-1:-1;;;;;42713:36:0;;42750:12;:10;:12::i;:::-;42764:4;42770:7;42779:5;42713:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42713:72:0;;;;;;;;-1:-1:-1;;42713:72:0;;;;;;;;;;;;:::i;:::-;;;42696:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42956:13:0;;42952:233;;42991:61;;-1:-1:-1;;;42991:61:0;;;;;;;:::i;42952:233::-;43147:6;43141:13;43132:6;43128:2;43124:15;43117:38;42696:500;-1:-1:-1;;;;;;42841:55:0;-1:-1:-1;;;42841:55:0;;-1:-1:-1;42834:62:0;;42664:583;-1:-1:-1;43231:4:0;42664:583;42492:762;;;;;;:::o;52104:113::-;52164:13;52197:12;52190:19;;;;;:::i;15451:723::-;15507:13;15728:10;15724:53;;-1:-1:-1;15755:10:0;;;;;;;;;;;;-1:-1:-1;;;15755:10:0;;;;;;15724:53;15802:5;15787:12;15843:78;15850:9;;15843:78;;15876:8;;;;:::i;:::-;;-1:-1:-1;15899:10:0;;-1:-1:-1;15907:2:0;15899:10;;:::i;:::-;;;15843:78;;;15931:19;15963:6;-1:-1:-1;;;;;15953:17:0;;;;;-1:-1:-1;;;15953:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15953:17:0;;15931:39;;15981:154;15988:10;;15981:154;;16015:11;16025:1;16015:11;;:::i;:::-;;-1:-1:-1;16084:10:0;16092:2;16084:5;:10;:::i;:::-;16071:24;;:2;:24;:::i;:::-;16058:39;;16041:6;16048;16041:14;;;;;;-1:-1:-1;;;16041:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;16041:56:0;;;;;;;;-1:-1:-1;16112:11:0;16121:2;16112:11;;:::i;:::-;;;15981:154;;45331:92;45393:14;;:22;;-1:-1:-1;;45393:22:0;;;45331:92::o;44630:123::-;44697:16;44733:6;:12;;44726:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44630:123;;;:::o;37288:1368::-;37411:20;37434:12;-1:-1:-1;;;;;37465:16:0;;37457:62;;;;-1:-1:-1;;;37457:62:0;;;;;;;:::i;:::-;37664:21;37672:12;37664:7;:21::i;:::-;37663:22;37655:64;;;;-1:-1:-1;;;37655:64:0;;;;;;;:::i;:::-;37750:12;37738:8;:24;;37730:71;;;;-1:-1:-1;;;37730:71:0;;;;;;;:::i;:::-;37814:61;37844:1;37848:2;37852:12;37866:8;37814:21;:61::i;:::-;-1:-1:-1;;;;;37921:16:0;;37888:30;37921:16;;;:12;:16;;;;;;;;;37888:49;;;;;;;;;-1:-1:-1;;;;;37888:49:0;;;;;-1:-1:-1;;;37888:49:0;;;;;;;;;;;37967:127;;;;;;;;37989:19;;37888:49;;37967:127;;;37989:39;;38019:8;;37989:39;:::i;:::-;-1:-1:-1;;;;;37967:127:0;;;;;38074:8;38039:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;37967:127:0;;;;;;-1:-1:-1;;;;;37948:16:0;;;;;;;:12;:16;;;;;;;;:146;;;;;;;;;;-1:-1:-1;;;37948:146:0;;;;-1:-1:-1;;37948:146:0;;;;;;;;;;;;;;;;;38133:43;;;;;;;;;;-1:-1:-1;;;;;38159:15:0;38133:43;;;;;;;;38105:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;38105:71:0;-1:-1:-1;;;;38105:71:0;;;;-1:-1:-1;;;;;;38105:71:0;;;;;;;;;;;;;;;38117:12;;38237:301;38261:8;38257:1;:12;38237:301;;;38292:38;;38317:12;;-1:-1:-1;;;;;38292:38:0;;;38309:1;;38292:38;;38309:1;;38292:38;38363:59;38394:1;38398:2;38402:12;38416:5;38363:22;:59::i;:::-;38341:160;;;;-1:-1:-1;;;38341:160:0;;;;;;;:::i;:::-;38512:14;;;;:::i;:::-;;;;38271:3;;;;;:::i;:::-;;;;38237:301;;;-1:-1:-1;38550:12:0;:27;;;38588:60;;38621:2;38625:12;38639:8;38588:20;:60::i;18004:387::-;18327:20;18375:8;;;18004:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;-1:-1:-1;;;;;151:2:1;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:400;;;939:3;932:4;924:6;920:17;916:27;906:2;;962:6;954;947:22;906:2;-1:-1:-1;990:20:1;;-1:-1:-1;;;;;1022:30:1;;1019:2;;;1072:8;1062;1055:26;1019:2;1116:4;1108:6;1104:17;1092:29;;1179:3;1172:4;1164;1156:6;1152:17;1144:6;1140:30;1136:41;1133:50;1130:2;;;1196:1;1193;1186:12;1130:2;896:310;;;;;:::o;1211:162::-;1278:20;;1334:13;;1327:21;1317:32;;1307:2;;1363:1;1360;1353:12;1378:198;;1490:2;1478:9;1469:7;1465:23;1461:32;1458:2;;;1511:6;1503;1496:22;1458:2;1539:31;1560:9;1539:31;:::i;1581:274::-;;;1710:2;1698:9;1689:7;1685:23;1681:32;1678:2;;;1731:6;1723;1716:22;1678:2;1759:31;1780:9;1759:31;:::i;:::-;1749:41;;1809:40;1845:2;1834:9;1830:18;1809:40;:::i;:::-;1799:50;;1668:187;;;;;:::o;1860:342::-;;;;2006:2;1994:9;1985:7;1981:23;1977:32;1974:2;;;2027:6;2019;2012:22;1974:2;2055:31;2076:9;2055:31;:::i;:::-;2045:41;;2105:40;2141:2;2130:9;2126:18;2105:40;:::i;:::-;2095:50;;2192:2;2181:9;2177:18;2164:32;2154:42;;1964:238;;;;;:::o;2207:702::-;;;;;2379:3;2367:9;2358:7;2354:23;2350:33;2347:2;;;2401:6;2393;2386:22;2347:2;2429:31;2450:9;2429:31;:::i;:::-;2419:41;;2479:40;2515:2;2504:9;2500:18;2479:40;:::i;:::-;2469:50;;2566:2;2555:9;2551:18;2538:32;2528:42;;2621:2;2610:9;2606:18;2593:32;-1:-1:-1;;;;;2640:6:1;2637:30;2634:2;;;2685:6;2677;2670:22;2634:2;2713:22;;2766:4;2758:13;;2754:27;-1:-1:-1;2744:2:1;;2800:6;2792;2785:22;2744:2;2828:75;2895:7;2890:2;2877:16;2872:2;2868;2864:11;2828:75;:::i;:::-;2818:85;;;2337:572;;;;;;;:::o;2914:268::-;;;3040:2;3028:9;3019:7;3015:23;3011:32;3008:2;;;3061:6;3053;3046:22;3008:2;3089:31;3110:9;3089:31;:::i;:::-;3079:41;;3139:37;3172:2;3161:9;3157:18;3139:37;:::i;3187:266::-;;;3316:2;3304:9;3295:7;3291:23;3287:32;3284:2;;;3337:6;3329;3322:22;3284:2;3365:31;3386:9;3365:31;:::i;:::-;3355:41;3443:2;3428:18;;;;3415:32;;-1:-1:-1;;;3274:179:1:o;3458:463::-;;;3605:2;3593:9;3584:7;3580:23;3576:32;3573:2;;;3626:6;3618;3611:22;3573:2;3671:9;3658:23;-1:-1:-1;;;;;3696:6:1;3693:30;3690:2;;;3741:6;3733;3726:22;3690:2;3785:76;3853:7;3844:6;3833:9;3829:22;3785:76;:::i;:::-;3880:8;;3759:102;;-1:-1:-1;3563:358:1;-1:-1:-1;;;;3563:358:1:o;3926:531::-;;;;4090:2;4078:9;4069:7;4065:23;4061:32;4058:2;;;4111:6;4103;4096:22;4058:2;4156:9;4143:23;-1:-1:-1;;;;;4181:6:1;4178:30;4175:2;;;4226:6;4218;4211:22;4175:2;4270:76;4338:7;4329:6;4318:9;4314:22;4270:76;:::i;:::-;4365:8;;4244:102;;-1:-1:-1;4447:2:1;4432:18;;;;4419:32;;4048:409;-1:-1:-1;;;;4048:409:1:o;4462:192::-;;4571:2;4559:9;4550:7;4546:23;4542:32;4539:2;;;4592:6;4584;4577:22;4539:2;4620:28;4638:9;4620:28;:::i;4659:257::-;;4770:2;4758:9;4749:7;4745:23;4741:32;4738:2;;;4791:6;4783;4776:22;4738:2;4835:9;4822:23;4854:32;4880:5;4854:32;:::i;4921:261::-;;5043:2;5031:9;5022:7;5018:23;5014:32;5011:2;;;5064:6;5056;5049:22;5011:2;5101:9;5095:16;5120:32;5146:5;5120:32;:::i;5187:482::-;;5309:2;5297:9;5288:7;5284:23;5280:32;5277:2;;;5330:6;5322;5315:22;5277:2;5375:9;5362:23;-1:-1:-1;;;;;5400:6:1;5397:30;5394:2;;;5445:6;5437;5430:22;5394:2;5473:22;;5526:4;5518:13;;5514:27;-1:-1:-1;5504:2:1;;5560:6;5552;5545:22;5504:2;5588:75;5655:7;5650:2;5637:16;5632:2;5628;5624:11;5588:75;:::i;5674:190::-;;5786:2;5774:9;5765:7;5761:23;5757:32;5754:2;;;5807:6;5799;5792:22;5754:2;-1:-1:-1;5835:23:1;;5744:120;-1:-1:-1;5744:120:1:o;5869:258::-;;;5998:2;5986:9;5977:7;5973:23;5969:32;5966:2;;;6019:6;6011;6004:22;5966:2;-1:-1:-1;;6047:23:1;;;6117:2;6102:18;;;6089:32;;-1:-1:-1;5956:171:1:o;6132:259::-;;6213:5;6207:12;6240:6;6235:3;6228:19;6256:63;6312:6;6305:4;6300:3;6296:14;6289:4;6282:5;6278:16;6256:63;:::i;:::-;6373:2;6352:15;-1:-1:-1;;6348:29:1;6339:39;;;;6380:4;6335:50;;6183:208;-1:-1:-1;;6183:208:1:o;6396:1532::-;;6658:6;6652:13;6684:4;6697:51;6741:6;6736:3;6731:2;6723:6;6719:15;6697:51;:::i;:::-;6811:13;;6770:16;;;;6833:55;6811:13;6770:16;6855:15;;;6833:55;:::i;:::-;6979:13;;6910:20;;;6950:3;;7056:1;7041:17;;7077:1;7113:18;;;;7140:2;;7218:4;7208:8;7204:19;7192:31;;7140:2;7281;7271:8;7268:16;7248:18;7245:40;7242:2;;;-1:-1:-1;;;7308:33:1;;7364:4;7361:1;7354:15;7394:4;7315:3;7382:17;7242:2;7425:18;7452:110;;;;7576:1;7571:332;;;;7418:485;;7452:110;-1:-1:-1;;7487:24:1;;7473:39;;7532:20;;;;-1:-1:-1;7452:110:1;;7571:332;7607:39;7639:6;7607:39;:::i;:::-;7668:3;7684:169;7698:8;7695:1;7692:15;7684:169;;;7780:14;;7765:13;;;7758:37;7823:16;;;;7715:10;;7684:169;;;7688:3;;7884:8;7877:5;7873:20;7866:27;;7418:485;-1:-1:-1;7919:3:1;;6628:1300;-1:-1:-1;;;;;;;;;;;6628:1300:1:o;7933:205::-;8133:3;8124:14::o;8143:203::-;-1:-1:-1;;;;;8307:32:1;;;;8289:51;;8277:2;8262:18;;8244:102::o;8351:490::-;-1:-1:-1;;;;;8620:15:1;;;8602:34;;8672:15;;8667:2;8652:18;;8645:43;8719:2;8704:18;;8697:34;;;8767:3;8762:2;8747:18;;8740:31;;;8351:490;;8788:47;;8815:19;;8807:6;8788:47;:::i;:::-;8780:55;8554:287;-1:-1:-1;;;;;;8554:287:1:o;8846:635::-;9017:2;9069:21;;;9139:13;;9042:18;;;9161:22;;;8846:635;;9017:2;9240:15;;;;9214:2;9199:18;;;8846:635;9286:169;9300:6;9297:1;9294:13;9286:169;;;9361:13;;9349:26;;9430:15;;;;9395:12;;;;9322:1;9315:9;9286:169;;;-1:-1:-1;9472:3:1;;8997:484;-1:-1:-1;;;;;;8997:484:1:o;9486:187::-;9651:14;;9644:22;9626:41;;9614:2;9599:18;;9581:92::o;9678:342::-;9824:2;9809:18;;9857:1;9846:13;;9836:2;;9902:10;9897:3;9893:20;9890:1;9883:31;9937:4;9934:1;9927:15;9965:4;9962:1;9955:15;9836:2;9989:25;;;9791:229;:::o;10025:221::-;;10174:2;10163:9;10156:21;10194:46;10236:2;10225:9;10221:18;10213:6;10194:46;:::i;10251:398::-;10453:2;10435:21;;;10492:2;10472:18;;;10465:30;10531:34;10526:2;10511:18;;10504:62;-1:-1:-1;;;10597:2:1;10582:18;;10575:32;10639:3;10624:19;;10425:224::o;10654:353::-;10856:2;10838:21;;;10895:2;10875:18;;;10868:30;10934:31;10929:2;10914:18;;10907:59;10998:2;10983:18;;10828:179::o;11012:337::-;11214:2;11196:21;;;11253:2;11233:18;;;11226:30;-1:-1:-1;;;11287:2:1;11272:18;;11265:43;11340:2;11325:18;;11186:163::o;11354:402::-;11556:2;11538:21;;;11595:2;11575:18;;;11568:30;11634:34;11629:2;11614:18;;11607:62;-1:-1:-1;;;11700:2:1;11685:18;;11678:36;11746:3;11731:19;;11528:228::o;11761:406::-;11963:2;11945:21;;;12002:2;11982:18;;;11975:30;12041:34;12036:2;12021:18;;12014:62;-1:-1:-1;;;12107:2:1;12092:18;;12085:40;12157:3;12142:19;;11935:232::o;12172:408::-;12374:2;12356:21;;;12413:2;12393:18;;;12386:30;12452:34;12447:2;12432:18;;12425:62;-1:-1:-1;;;12518:2:1;12503:18;;12496:42;12570:3;12555:19;;12346:234::o;12585:399::-;12787:2;12769:21;;;12826:2;12806:18;;;12799:30;12865:34;12860:2;12845:18;;12838:62;-1:-1:-1;;;12931:2:1;12916:18;;12909:33;12974:3;12959:19;;12759:225::o;12989:347::-;13191:2;13173:21;;;13230:2;13210:18;;;13203:30;13269:25;13264:2;13249:18;;13242:53;13327:2;13312:18;;13163:173::o;13341:401::-;13543:2;13525:21;;;13582:2;13562:18;;;13555:30;13621:34;13616:2;13601:18;;13594:62;-1:-1:-1;;;13687:2:1;13672:18;;13665:35;13732:3;13717:19;;13515:227::o;13747:338::-;13949:2;13931:21;;;13988:2;13968:18;;;13961:30;-1:-1:-1;;;14022:2:1;14007:18;;14000:44;14076:2;14061:18;;13921:164::o;14090:402::-;14292:2;14274:21;;;14331:2;14311:18;;;14304:30;14370:34;14365:2;14350:18;;14343:62;-1:-1:-1;;;14436:2:1;14421:18;;14414:36;14482:3;14467:19;;14264:228::o;14497:347::-;14699:2;14681:21;;;14738:2;14718:18;;;14711:30;14777:25;14772:2;14757:18;;14750:53;14835:2;14820:18;;14671:173::o;14849:421::-;15051:2;15033:21;;;15090:2;15070:18;;;15063:30;15129:34;15124:2;15109:18;;15102:62;15200:27;15195:2;15180:18;;15173:55;15260:3;15245:19;;15023:247::o;15275:407::-;15477:2;15459:21;;;15516:2;15496:18;;;15489:30;15555:34;15550:2;15535:18;;15528:62;-1:-1:-1;;;15621:2:1;15606:18;;15599:41;15672:3;15657:19;;15449:233::o;15687:398::-;15889:2;15871:21;;;15928:2;15908:18;;;15901:30;15967:34;15962:2;15947:18;;15940:62;-1:-1:-1;;;16033:2:1;16018:18;;16011:32;16075:3;16060:19;;15861:224::o;16090:402::-;16292:2;16274:21;;;16331:2;16311:18;;;16304:30;16370:34;16365:2;16350:18;;16343:62;-1:-1:-1;;;16436:2:1;16421:18;;16414:36;16482:3;16467:19;;16264:228::o;16497:343::-;16699:2;16681:21;;;16738:2;16718:18;;;16711:30;-1:-1:-1;;;16772:2:1;16757:18;;16750:49;16831:2;16816:18;;16671:169::o;16845:356::-;17047:2;17029:21;;;17066:18;;;17059:30;17125:34;17120:2;17105:18;;17098:62;17192:2;17177:18;;17019:182::o;17206:350::-;17408:2;17390:21;;;17447:2;17427:18;;;17420:30;17486:28;17481:2;17466:18;;17459:56;17547:2;17532:18;;17380:176::o;17561:411::-;17763:2;17745:21;;;17802:2;17782:18;;;17775:30;17841:34;17836:2;17821:18;;17814:62;-1:-1:-1;;;17907:2:1;17892:18;;17885:45;17962:3;17947:19;;17735:237::o;17977:350::-;18179:2;18161:21;;;18218:2;18198:18;;;18191:30;18257:28;18252:2;18237:18;;18230:56;18318:2;18303:18;;18151:176::o;18332:414::-;18534:2;18516:21;;;18573:2;18553:18;;;18546:30;18612:34;18607:2;18592:18;;18585:62;-1:-1:-1;;;18678:2:1;18663:18;;18656:48;18736:3;18721:19;;18506:240::o;18751:343::-;18953:2;18935:21;;;18992:2;18972:18;;;18965:30;-1:-1:-1;;;19026:2:1;19011:18;;19004:49;19085:2;19070:18;;18925:169::o;19099:351::-;19301:2;19283:21;;;19340:2;19320:18;;;19313:30;19379:29;19374:2;19359:18;;19352:57;19441:2;19426:18;;19273:177::o;19455:398::-;19657:2;19639:21;;;19696:2;19676:18;;;19669:30;19735:34;19730:2;19715:18;;19708:62;-1:-1:-1;;;19801:2:1;19786:18;;19779:32;19843:3;19828:19;;19629:224::o;19858:415::-;20060:2;20042:21;;;20099:2;20079:18;;;20072:30;20138:34;20133:2;20118:18;;20111:62;-1:-1:-1;;;20204:2:1;20189:18;;20182:49;20263:3;20248:19;;20032:241::o;20278:353::-;20480:2;20462:21;;;20519:2;20499:18;;;20492:30;20558:31;20553:2;20538:18;;20531:59;20622:2;20607:18;;20452:179::o;20636:397::-;20838:2;20820:21;;;20877:2;20857:18;;;20850:30;20916:34;20911:2;20896:18;;20889:62;-1:-1:-1;;;20982:2:1;20967:18;;20960:31;21023:3;21008:19;;20810:223::o;21038:341::-;21240:2;21222:21;;;21279:2;21259:18;;;21252:30;-1:-1:-1;;;21313:2:1;21298:18;;21291:47;21370:2;21355:18;;21212:167::o;21384:410::-;21586:2;21568:21;;;21625:2;21605:18;;;21598:30;21664:34;21659:2;21644:18;;21637:62;-1:-1:-1;;;21730:2:1;21715:18;;21708:44;21784:3;21769:19;;21558:236::o;21799:411::-;22001:2;21983:21;;;22040:2;22020:18;;;22013:30;22079:34;22074:2;22059:18;;22052:62;-1:-1:-1;;;22145:2:1;22130:18;;22123:45;22200:3;22185:19;;21973:237::o;22215:409::-;22417:2;22399:21;;;22456:2;22436:18;;;22429:30;22495:34;22490:2;22475:18;;22468:62;-1:-1:-1;;;22561:2:1;22546:18;;22539:43;22614:3;22599:19;;22389:235::o;22629:398::-;22831:2;22813:21;;;22870:2;22850:18;;;22843:30;22909:34;22904:2;22889:18;;22882:62;-1:-1:-1;;;22975:2:1;22960:18;;22953:32;23017:3;23002:19;;22803:224::o;23032:177::-;23178:25;;;23166:2;23151:18;;23133:76::o;23214:129::-;;23282:17;;;23332:4;23316:21;;;23272:71::o;23348:253::-;;-1:-1:-1;;;;;23477:2:1;23474:1;23470:10;23507:2;23504:1;23500:10;23538:3;23534:2;23530:12;23525:3;23522:21;23519:2;;;23546:18;;:::i;:::-;23582:13;;23396:205;-1:-1:-1;;;;23396:205:1:o;23606:128::-;;23677:1;23673:6;23670:1;23667:13;23664:2;;;23683:18;;:::i;:::-;-1:-1:-1;23719:9:1;;23654:80::o;23739:120::-;;23805:1;23795:2;;23810:18;;:::i;:::-;-1:-1:-1;23844:9:1;;23785:74::o;23864:168::-;;23970:1;23966;23962:6;23958:14;23955:1;23952:21;23947:1;23940:9;23933:17;23929:45;23926:2;;;23977:18;;:::i;:::-;-1:-1:-1;24017:9:1;;23916:116::o;24037:246::-;;-1:-1:-1;;;;;24190:10:1;;;;24160;;24212:12;;;24209:2;;;24227:18;;:::i;:::-;24264:13;;24086:197;-1:-1:-1;;;24086:197:1:o;24288:125::-;;24356:1;24353;24350:8;24347:2;;;24361:18;;:::i;:::-;-1:-1:-1;24398:9:1;;24337:76::o;24418:258::-;24490:1;24500:113;24514:6;24511:1;24508:13;24500:113;;;24590:11;;;24584:18;24571:11;;;24564:39;24536:2;24529:10;24500:113;;;24631:6;24628:1;24625:13;24622:2;;;-1:-1:-1;;24666:1:1;24648:16;;24641:27;24471:205::o;24681:136::-;;24748:5;24738:2;;24757:18;;:::i;:::-;-1:-1:-1;;;24793:18:1;;24728:89::o;24822:380::-;24907:1;24897:12;;24954:1;24944:12;;;24965:2;;25019:4;25011:6;25007:17;24997:27;;24965:2;25072;25064:6;25061:14;25041:18;25038:38;25035:2;;;25118:10;25113:3;25109:20;25106:1;25099:31;25153:4;25150:1;25143:15;25181:4;25178:1;25171:15;25207:135;;-1:-1:-1;;25267:17:1;;25264:2;;;25287:18;;:::i;:::-;-1:-1:-1;25334:1:1;25323:13;;25254:88::o;25347:112::-;;25405:1;25395:2;;25410:18;;:::i;:::-;-1:-1:-1;25444:9:1;;25385:74::o;25464:127::-;25525:10;25520:3;25516:20;25513:1;25506:31;25556:4;25553:1;25546:15;25580:4;25577:1;25570:15;25596:127;25657:10;25652:3;25648:20;25645:1;25638:31;25688:4;25685:1;25678:15;25712:4;25709:1;25702:15;25728:127;25789:10;25784:3;25780:20;25777:1;25770:31;25820:4;25817:1;25810:15;25844:4;25841:1;25834:15;25860:133;-1:-1:-1;;;;;;25936:32:1;;25926:43;;25916:2;;25983:1;25980;25973:12
Swarm Source
ipfs://665538e2829f2aed9b9dab7af328ac1e1724606cbc7b72da3142ba19fafadcaa
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.