Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
0 CLRX
Holders
3,126
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 CLRXLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ChillRx
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-18 */ // Sources flattened with hardhat v2.8.1 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) 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/cryptography/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and( vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if ( uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 ) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", hash) ); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n", Strings.toString(s.length), s ) ); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256( abi.encodePacked("\x19\x01", domainSeparator, structHash) ); } } // File contracts/ChillRx.sol pragma solidity ^0.8.4; contract ChillRx is ERC721, Ownable { using Counters for Counters.Counter; using Strings for uint256; using ECDSA for bytes32; string public PROVENANCE; string public chillRxUnrevealed; bool public isSaleActive = false; bool public isRevealed = false; bool public isPresaleActive = false; bool public isMintPassExchangeEnabled = true; Counters.Counter public tokenMintedFromOrigin; uint256 public STARTING_INDEX = 0; address private signerAddress; address private fundReceiver; address private mintPassContractAddress; string private crxCollectionBaseUri; mapping(address => uint256) public presaleMinters; uint256 public constant MAX_SUPPLY = 9848; uint256 public constant MINTPASS_AMOUNT = 151; uint256 public constant ALLOWED_TOKEN_PER_TX = 10; uint256 public constant PRICE_PER_TOKEN = 0.0808 ether; constructor(address _signerAddress, address _fundReceiver) ERC721("ChillRx", "CLRX") { signerAddress = _signerAddress; fundReceiver = _fundReceiver; } modifier onlyFundReceiver() { require(msg.sender == fundReceiver); _; } modifier onlyValidAccess(bytes memory _signature, string memory _saletype) { require( isValidAccessMessage(_signature, _saletype), "Invalid Access Signature" ); _; } function setStartingIndex(uint256 _STARTING_INDEX) external onlyOwner { STARTING_INDEX = _STARTING_INDEX + MINTPASS_AMOUNT; } function setChillRxUnrevealed(string calldata _chillRxUnrevealed) external onlyOwner { chillRxUnrevealed = _chillRxUnrevealed; } function setMintPassContractAddress(address _newContractAddress) external onlyOwner { mintPassContractAddress = _newContractAddress; } function setCrxCollectionBaseUri(string calldata _crxCollectionBaseUri) external onlyOwner { crxCollectionBaseUri = _crxCollectionBaseUri; } function setProvenance(string calldata provenance) external onlyOwner { PROVENANCE = provenance; } function toggleIsMintPassExchangeEnabled() external onlyOwner { isMintPassExchangeEnabled = !isMintPassExchangeEnabled; } function toggleIsPresaleActive() external onlyOwner { isPresaleActive = !isPresaleActive; } function toggleIsSaleActive() external onlyOwner { isSaleActive = !isSaleActive; } function toggleIsRevealed() external onlyOwner { isRevealed = !isRevealed; } function isValidAccessMessage( bytes memory _signature, string memory _saletype ) private view returns (bool) { bytes32 messagehash = keccak256( abi.encodePacked(address(this), msg.sender, _saletype) ); address revealedSignerAddress = messagehash .toEthSignedMessageHash() .recover(_signature); return signerAddress == revealedSignerAddress; } function getRealId(uint256 _originalId) private pure returns (uint256) { return _originalId % (MAX_SUPPLY + MINTPASS_AMOUNT); } function increaseNextTokenId() private returns (uint256) { tokenMintedFromOrigin.increment(); return getRealId(tokenMintedFromOrigin.current() - 1 + STARTING_INDEX); } function reserve(address[] memory _recipients, uint256[] memory _amounts) external onlyOwner { require( _recipients.length == _amounts.length, "RESERVE: arrays have different lengths" ); for (uint256 j = 0; j < _recipients.length; j++) { for (uint256 k = 0; k < _amounts[j]; k++) { _safeMint(_recipients[j], increaseNextTokenId()); } } } function compareStrings(string memory a, string memory b) private pure returns (bool) { return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)))); } function checkAllowedTokenNumberAndAddToMap( string memory _saletype, uint256 _numberOfTokensToMint ) private { require( compareStrings(_saletype, "WL") || compareStrings(_saletype, "OG"), "Presale: Invalid presale type" ); uint256 tokenMintLimit = (compareStrings(_saletype, "WL")) ? 2 : 3; require( presaleMinters[msg.sender] + _numberOfTokensToMint <= tokenMintLimit, "Presale: Authorized limit exceeded" ); presaleMinters[msg.sender] = presaleMinters[msg.sender] + _numberOfTokensToMint; } function presaleMint( uint256 _numberOfTokensToMint, bytes memory _signature, string memory _saletype ) external payable onlyValidAccess(_signature, _saletype) { require(isPresaleActive, "PRESALE: presale is inactive"); require( tokenMintedFromOrigin.current() + _numberOfTokensToMint <= MAX_SUPPLY, "Purchase would exceed max tokens" ); require( PRICE_PER_TOKEN * _numberOfTokensToMint <= msg.value, "PRESALE: Ether value sent is incorrect" ); checkAllowedTokenNumberAndAddToMap(_saletype, _numberOfTokensToMint); for (uint256 i = 0; i < _numberOfTokensToMint; i++) { _safeMint(msg.sender, increaseNextTokenId()); } } function mint(uint256 _numberOfTokens, address _receiverAddress) external payable { require(isSaleActive, "MintError: Sale is inactive"); require( _numberOfTokens <= ALLOWED_TOKEN_PER_TX, "MintError: Max tokens per transaction exceeded" ); require( tokenMintedFromOrigin.current() + _numberOfTokens <= MAX_SUPPLY, "MintError: Purchase would exceed max tokens" ); require( PRICE_PER_TOKEN * _numberOfTokens <= msg.value, "MintError: Ether value sent is incorrect" ); for (uint256 i = 0; i < _numberOfTokens; i++) { _safeMint(_receiverAddress, increaseNextTokenId()); } } function airdropTokenExchange(address _receiver, uint256 _passid) external returns (uint256) { require( msg.sender == mintPassContractAddress, "Token Exchange: Unauthorized" ); require( isMintPassExchangeEnabled == true, "Token Exchange is inactive" ); require( _passid > 0 && _passid <= MINTPASS_AMOUNT, "Token Exchange: pass id out of range" ); uint256 mintedId = getRealId( STARTING_INDEX + _passid - MINTPASS_AMOUNT - 1 ); _safeMint(_receiver, mintedId); return mintedId; } function withdraw() external onlyFundReceiver { payable(fundReceiver).transfer(address(this).balance); } function _baseURI() internal view virtual override returns (string memory) { return crxCollectionBaseUri; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "tokenURI: URI query for nonexistent token"); string memory baseURI = _baseURI(); if (isRevealed == false || bytes(baseURI).length == 0) { return chillRxUnrevealed; } return string(abi.encodePacked(baseURI, tokenId.toString())); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"},{"internalType":"address","name":"_fundReceiver","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ALLOWED_TOKEN_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTPASS_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PER_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTING_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_passid","type":"uint256"}],"name":"airdropTokenExchange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"chillRxUnrevealed","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintPassExchangeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleActive","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":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokens","type":"uint256"},{"internalType":"address","name":"_receiverAddress","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokensToMint","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"string","name":"_saletype","type":"string"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleMinters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_chillRxUnrevealed","type":"string"}],"name":"setChillRxUnrevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_crxCollectionBaseUri","type":"string"}],"name":"setCrxCollectionBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newContractAddress","type":"address"}],"name":"setMintPassContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenance","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_STARTING_INDEX","type":"uint256"}],"name":"setStartingIndex","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":[],"name":"toggleIsMintPassExchangeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleIsPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleIsRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleIsSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenMintedFromOrigin","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526009805463ffffffff191663010000001790556000600b553480156200002957600080fd5b50604051620030e2380380620030e28339810160408190526200004c9162000215565b6040805180820182526007815266086d0d2d8d8a4f60cb1b60208083019182528351808501909452600484526308698a4b60e31b908401528151919291620000979160009162000152565b508051620000ad90600190602084019062000152565b505050620000ca620000c4620000fc60201b60201c565b62000100565b600c80546001600160a01b039384166001600160a01b031991821617909155600d80549290931691161790556200028a565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000160906200024d565b90600052602060002090601f016020900481019282620001845760008555620001cf565b82601f106200019f57805160ff1916838001178555620001cf565b82800160010185558215620001cf579182015b82811115620001cf578251825591602001919060010190620001b2565b50620001dd929150620001e1565b5090565b5b80821115620001dd5760008155600101620001e2565b80516001600160a01b03811681146200021057600080fd5b919050565b600080604083850312156200022957600080fd5b6200023483620001f8565b91506200024460208401620001f8565b90509250929050565b600181811c908216806200026257607f821691505b602082108114156200028457634e487b7160e01b600052602260045260246000fd5b50919050565b612e48806200029a6000396000f3fe60806040526004361061025c5760003560e01c806369e1cac1116101445780639d6be997116100b6578063d38dc1551161007a578063d38dc155146106a6578063e985e9c5146106c6578063ea4bb53d1461070f578063f2fde38b14610724578063f7de95e414610744578063ffe630b51461075a57600080fd5b80639d6be99714610613578063a22cb46514610626578063afed00a614610646578063b88d4fde14610666578063c87b56dd1461068657600080fd5b8063833b949911610108578063833b94991461057c57806384381b9d1461059857806388f2ebcb146105ad5780638da5cb5b146105cd57806394bf804d146105eb57806395d89b41146105fe57600080fd5b806369e1cac1146104fb57806370a082311461051b578063715018a61461053b578063717f47a3146105505780637aa579de1461056557600080fd5b806332cb6b0c116101dd57806354214f69116101a157806354214f691461044d578063564566a81461046c5780635a5944fb1461048657806360d938dc146104a65780636352211e146104c65780636373a6b1146104e657600080fd5b806332cb6b0c146103d857806336de00dc146103ee5780633ccfd60b1461040357806342842e0e146104185780634a0f30921461043857600080fd5b80630eb346a9116102245780630eb346a91461034d5780631609078d1461036d5780631eb5b9431461038e57806321b80420146103a357806323b872dd146103b857600080fd5b806301ffc9a71461026157806304384e971461029657806306fdde03146102d1578063081812fc146102f3578063095ea7b31461032b575b600080fd5b34801561026d57600080fd5b5061028161027c3660046125f2565b61077a565b60405190151581526020015b60405180910390f35b3480156102a257600080fd5b506102c36102b136600461262b565b60106020526000908152604090205481565b60405190815260200161028d565b3480156102dd57600080fd5b506102e66107cc565b60405161028d919061269e565b3480156102ff57600080fd5b5061031361030e3660046126b1565b61085e565b6040516001600160a01b03909116815260200161028d565b34801561033757600080fd5b5061034b6103463660046126ca565b6108f8565b005b34801561035957600080fd5b5061034b61036836600461262b565b610a0e565b34801561037957600080fd5b50600954610281906301000000900460ff1681565b34801561039a57600080fd5b506102c3609781565b3480156103af57600080fd5b5061034b610a5a565b3480156103c457600080fd5b5061034b6103d33660046126f4565b610aa1565b3480156103e457600080fd5b506102c361267881565b3480156103fa57600080fd5b506102c3600a81565b34801561040f57600080fd5b5061034b610ad2565b34801561042457600080fd5b5061034b6104333660046126f4565b610b25565b34801561044457600080fd5b5061034b610b40565b34801561045957600080fd5b5060095461028190610100900460ff1681565b34801561047857600080fd5b506009546102819060ff1681565b34801561049257600080fd5b5061034b6104a1366004612730565b610b89565b3480156104b257600080fd5b506009546102819062010000900460ff1681565b3480156104d257600080fd5b506103136104e13660046126b1565b610bbf565b3480156104f257600080fd5b506102e6610c36565b34801561050757600080fd5b5061034b610516366004612878565b610cc4565b34801561052757600080fd5b506102c361053636600461262b565b610dcd565b34801561054757600080fd5b5061034b610e54565b34801561055c57600080fd5b506102e6610e8a565b34801561057157600080fd5b50600a546102c39081565b34801561058857600080fd5b506102c367011f0f2c01da000081565b3480156105a457600080fd5b5061034b610e97565b3480156105b957600080fd5b5061034b6105c83660046126b1565b610ed5565b3480156105d957600080fd5b506006546001600160a01b0316610313565b61034b6105f9366004612938565b610f10565b34801561060a57600080fd5b506102e66110de565b61034b6106213660046129dc565b6110ed565b34801561063257600080fd5b5061034b610641366004612a5d565b6112ad565b34801561065257600080fd5b5061034b610661366004612730565b6112bc565b34801561067257600080fd5b5061034b610681366004612a99565b6112f2565b34801561069257600080fd5b506102e66106a13660046126b1565b61132a565b3480156106b257600080fd5b506102c36106c13660046126ca565b611490565b3480156106d257600080fd5b506102816106e1366004612b01565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561071b57600080fd5b5061034b6115f7565b34801561073057600080fd5b5061034b61073f36600461262b565b611642565b34801561075057600080fd5b506102c3600b5481565b34801561076657600080fd5b5061034b610775366004612730565b6116da565b60006001600160e01b031982166380ac58cd60e01b14806107ab57506001600160e01b03198216635b5e139f60e01b145b806107c657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107db90612b2b565b80601f016020809104026020016040519081016040528092919081815260200182805461080790612b2b565b80156108545780601f1061082957610100808354040283529160200191610854565b820191906000526020600020905b81548152906001019060200180831161083757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108dc5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061090382610bbf565b9050806001600160a01b0316836001600160a01b031614156109715760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108d3565b336001600160a01b038216148061098d575061098d81336106e1565b6109ff5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108d3565b610a098383611710565b505050565b6006546001600160a01b03163314610a385760405162461bcd60e51b81526004016108d390612b66565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314610a845760405162461bcd60e51b81526004016108d390612b66565b6009805461ff001981166101009182900460ff1615909102179055565b610aab338261177e565b610ac75760405162461bcd60e51b81526004016108d390612b9b565b610a09838383611875565b600d546001600160a01b03163314610ae957600080fd5b600d546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610b22573d6000803e3d6000fd5b50565b610a09838383604051806020016040528060008152506112f2565b6006546001600160a01b03163314610b6a5760405162461bcd60e51b81526004016108d390612b66565b6009805462ff0000198116620100009182900460ff1615909102179055565b6006546001600160a01b03163314610bb35760405162461bcd60e51b81526004016108d390612b66565b610a09600f8383612543565b6000818152600260205260408120546001600160a01b0316806107c65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108d3565b60078054610c4390612b2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6f90612b2b565b8015610cbc5780601f10610c9157610100808354040283529160200191610cbc565b820191906000526020600020905b815481529060010190602001808311610c9f57829003601f168201915b505050505081565b6006546001600160a01b03163314610cee5760405162461bcd60e51b81526004016108d390612b66565b8051825114610d4e5760405162461bcd60e51b815260206004820152602660248201527f524553455256453a20617272617973206861766520646966666572656e74206c604482015265656e6774687360d01b60648201526084016108d3565b60005b8251811015610a095760005b828281518110610d6f57610d6f612bec565b6020026020010151811015610dba57610da8848381518110610d9357610d93612bec565b6020026020010151610da3611a15565b611a4f565b80610db281612c18565b915050610d5d565b5080610dc581612c18565b915050610d51565b60006001600160a01b038216610e385760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108d3565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610e7e5760405162461bcd60e51b81526004016108d390612b66565b610e886000611a69565b565b60088054610c4390612b2b565b6006546001600160a01b03163314610ec15760405162461bcd60e51b81526004016108d390612b66565b6009805460ff19811660ff90911615179055565b6006546001600160a01b03163314610eff5760405162461bcd60e51b81526004016108d390612b66565b610f0a609782612c33565b600b5550565b60095460ff16610f625760405162461bcd60e51b815260206004820152601b60248201527f4d696e744572726f723a2053616c6520697320696e616374697665000000000060448201526064016108d3565b600a821115610fca5760405162461bcd60e51b815260206004820152602e60248201527f4d696e744572726f723a204d617820746f6b656e7320706572207472616e736160448201526d18dd1a5bdb88195e18d95959195960921b60648201526084016108d3565b61267882610fd7600a5490565b610fe19190612c33565b11156110435760405162461bcd60e51b815260206004820152602b60248201527f4d696e744572726f723a20507572636861736520776f756c642065786365656460448201526a206d617820746f6b656e7360a81b60648201526084016108d3565b346110568367011f0f2c01da0000612c4b565b11156110b55760405162461bcd60e51b815260206004820152602860248201527f4d696e744572726f723a2045746865722076616c75652073656e7420697320696044820152671b98dbdc9c9958dd60c21b60648201526084016108d3565b60005b82811015610a09576110cc82610da3611a15565b806110d681612c18565b9150506110b8565b6060600180546107db90612b2b565b81816110f98282611abb565b6111455760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420416363657373205369676e6174757265000000000000000060448201526064016108d3565b60095462010000900460ff1661119d5760405162461bcd60e51b815260206004820152601c60248201527f50524553414c453a2070726573616c6520697320696e6163746976650000000060448201526064016108d3565b612678856111aa600a5490565b6111b49190612c33565b11156112025760405162461bcd60e51b815260206004820181905260248201527f507572636861736520776f756c6420657863656564206d617820746f6b656e7360448201526064016108d3565b346112158667011f0f2c01da0000612c4b565b11156112725760405162461bcd60e51b815260206004820152602660248201527f50524553414c453a2045746865722076616c75652073656e7420697320696e636044820152651bdc9c9958dd60d21b60648201526084016108d3565b61127c8386611b68565b60005b858110156112a55761129333610da3611a15565b8061129d81612c18565b91505061127f565b505050505050565b6112b8338383611ce4565b5050565b6006546001600160a01b031633146112e65760405162461bcd60e51b81526004016108d390612b66565b610a0960088383612543565b6112fc338361177e565b6113185760405162461bcd60e51b81526004016108d390612b9b565b61132484848484611db3565b50505050565b6000818152600260205260409020546060906001600160a01b03166113a35760405162461bcd60e51b815260206004820152602960248201527f746f6b656e5552493a2055524920717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108d3565b60006113ad611de6565b600954909150610100900460ff1615806113c657508051155b1561145e57600880546113d890612b2b565b80601f016020809104026020016040519081016040528092919081815260200182805461140490612b2b565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b5050505050915050919050565b8061146884611df5565b604051602001611479929190612c6a565b604051602081830303815290604052915050919050565b600e546000906001600160a01b031633146114ed5760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e2045786368616e67653a20556e617574686f72697a65640000000060448201526064016108d3565b6009546301000000900460ff16151560011461154b5760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e2045786368616e676520697320696e61637469766500000000000060448201526064016108d3565b60008211801561155c575060978211155b6115b45760405162461bcd60e51b8152602060048201526024808201527f546f6b656e2045786368616e67653a2070617373206964206f7574206f662072604482015263616e676560e01b60648201526084016108d3565b60006115e46001609785600b546115cb9190612c33565b6115d59190612c99565b6115df9190612c99565b611ef3565b90506115f08482611a4f565b9392505050565b6006546001600160a01b031633146116215760405162461bcd60e51b81526004016108d390612b66565b6009805463ff00000019811663010000009182900460ff1615909102179055565b6006546001600160a01b0316331461166c5760405162461bcd60e51b81526004016108d390612b66565b6001600160a01b0381166116d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d3565b610b2281611a69565b6006546001600160a01b031633146117045760405162461bcd60e51b81526004016108d390612b66565b610a0960078383612543565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061174582610bbf565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166117f75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108d3565b600061180283610bbf565b9050806001600160a01b0316846001600160a01b0316148061183d5750836001600160a01b03166118328461085e565b6001600160a01b0316145b8061186d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661188882610bbf565b6001600160a01b0316146118f05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108d3565b6001600160a01b0382166119525760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108d3565b61195d600082611710565b6001600160a01b0383166000908152600360205260408120805460019290611986908490612c99565b90915550506001600160a01b03821660009081526003602052604081208054600192906119b4908490612c33565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000611a25600a80546001019055565b611a4a600b546001611a36600a5490565b611a409190612c99565b6115df9190612c33565b905090565b6112b8828260405180602001604052806000815250611f0c565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080303384604051602001611ad393929190612cb0565b6040516020818303038152906040528051906020012090506000611b4e85611b48846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611f3f565b600c546001600160a01b0391821691161495945050505050565b611b8c826040518060400160405280600281526020016115d360f21b815250611f63565b80611bb65750611bb682604051806040016040528060028152602001614f4760f01b815250611f63565b611c025760405162461bcd60e51b815260206004820152601d60248201527f50726573616c653a20496e76616c69642070726573616c65207479706500000060448201526064016108d3565b6000611c28836040518060400160405280600281526020016115d360f21b815250611f63565b611c33576003611c36565b60025b3360009081526010602052604090205460ff9190911691508190611c5b908490612c33565b1115611cb45760405162461bcd60e51b815260206004820152602260248201527f50726573616c653a20417574686f72697a6564206c696d697420657863656564604482015261195960f21b60648201526084016108d3565b33600090815260106020526040902054611ccf908390612c33565b33600090815260106020526040902055505050565b816001600160a01b0316836001600160a01b03161415611d465760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d3565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611dbe848484611875565b611dca84848484611fbc565b6113245760405162461bcd60e51b81526004016108d390612cf6565b6060600f80546107db90612b2b565b606081611e195750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e435780611e2d81612c18565b9150611e3c9050600a83612d5e565b9150611e1d565b60008167ffffffffffffffff811115611e5e57611e5e6127a2565b6040519080825280601f01601f191660200182016040528015611e88576020820181803683370190505b5090505b841561186d57611e9d600183612c99565b9150611eaa600a86612d72565b611eb5906030612c33565b60f81b818381518110611eca57611eca612bec565b60200101906001600160f81b031916908160001a905350611eec600a86612d5e565b9450611e8c565b6000611f026097612678612c33565b6107c69083612d72565b611f1683836120ba565b611f236000848484611fbc565b610a095760405162461bcd60e51b81526004016108d390612cf6565b6000806000611f4e85856121fc565b91509150611f5b8161226c565b509392505050565b600081604051602001611f769190612d86565b6040516020818303038152906040528051906020012083604051602001611f9d9190612d86565b6040516020818303038152906040528051906020012014905092915050565b60006001600160a01b0384163b156120af57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612000903390899088908890600401612da2565b6020604051808303816000875af192505050801561203b575060408051601f3d908101601f1916820190925261203891810190612ddf565b60015b612095573d808015612069576040519150601f19603f3d011682016040523d82523d6000602084013e61206e565b606091505b50805161208d5760405162461bcd60e51b81526004016108d390612cf6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061186d565b506001949350505050565b6001600160a01b0382166121105760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d3565b6000818152600260205260409020546001600160a01b0316156121755760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d3565b6001600160a01b038216600090815260036020526040812080546001929061219e908490612c33565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000808251604114156122335760208301516040840151606085015160001a61222787828585612427565b94509450505050612265565b82516040141561225d5760208301516040840151612252868383612514565b935093505050612265565b506000905060025b9250929050565b600081600481111561228057612280612dfc565b14156122895750565b600181600481111561229d5761229d612dfc565b14156122eb5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108d3565b60028160048111156122ff576122ff612dfc565b141561234d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108d3565b600381600481111561236157612361612dfc565b14156123ba5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016108d3565b60048160048111156123ce576123ce612dfc565b1415610b225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016108d3565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561245e575060009050600361250b565b8460ff16601b1415801561247657508460ff16601c14155b15612487575060009050600461250b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156124db573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166125045760006001925092505061250b565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b0161253587828885612427565b935093505050935093915050565b82805461254f90612b2b565b90600052602060002090601f01602090048101928261257157600085556125b7565b82601f1061258a5782800160ff198235161785556125b7565b828001600101855582156125b7579182015b828111156125b757823582559160200191906001019061259c565b506125c39291506125c7565b5090565b5b808211156125c357600081556001016125c8565b6001600160e01b031981168114610b2257600080fd5b60006020828403121561260457600080fd5b81356115f0816125dc565b80356001600160a01b038116811461262657600080fd5b919050565b60006020828403121561263d57600080fd5b6115f08261260f565b60005b83811015612661578181015183820152602001612649565b838111156113245750506000910152565b6000815180845261268a816020860160208601612646565b601f01601f19169290920160200192915050565b6020815260006115f06020830184612672565b6000602082840312156126c357600080fd5b5035919050565b600080604083850312156126dd57600080fd5b6126e68361260f565b946020939093013593505050565b60008060006060848603121561270957600080fd5b6127128461260f565b92506127206020850161260f565b9150604084013590509250925092565b6000806020838503121561274357600080fd5b823567ffffffffffffffff8082111561275b57600080fd5b818501915085601f83011261276f57600080fd5b81358181111561277e57600080fd5b86602082850101111561279057600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156127e1576127e16127a2565b604052919050565b600067ffffffffffffffff821115612803576128036127a2565b5060051b60200190565b600082601f83011261281e57600080fd5b8135602061283361282e836127e9565b6127b8565b82815260059290921b8401810191818101908684111561285257600080fd5b8286015b8481101561286d5780358352918301918301612856565b509695505050505050565b6000806040838503121561288b57600080fd5b823567ffffffffffffffff808211156128a357600080fd5b818501915085601f8301126128b757600080fd5b813560206128c761282e836127e9565b82815260059290921b840181019181810190898411156128e657600080fd5b948201945b8386101561290b576128fc8661260f565b825294820194908201906128eb565b9650508601359250508082111561292157600080fd5b5061292e8582860161280d565b9150509250929050565b6000806040838503121561294b57600080fd5b8235915061295b6020840161260f565b90509250929050565b600067ffffffffffffffff83111561297e5761297e6127a2565b612991601f8401601f19166020016127b8565b90508281528383830111156129a557600080fd5b828260208301376000602084830101529392505050565b600082601f8301126129cd57600080fd5b6115f083833560208501612964565b6000806000606084860312156129f157600080fd5b83359250602084013567ffffffffffffffff80821115612a1057600080fd5b612a1c878388016129bc565b93506040860135915080821115612a3257600080fd5b508401601f81018613612a4457600080fd5b612a5386823560208401612964565b9150509250925092565b60008060408385031215612a7057600080fd5b612a798361260f565b915060208301358015158114612a8e57600080fd5b809150509250929050565b60008060008060808587031215612aaf57600080fd5b612ab88561260f565b9350612ac66020860161260f565b925060408501359150606085013567ffffffffffffffff811115612ae957600080fd5b612af5878288016129bc565b91505092959194509250565b60008060408385031215612b1457600080fd5b612b1d8361260f565b915061295b6020840161260f565b600181811c90821680612b3f57607f821691505b60208210811415612b6057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612c2c57612c2c612c02565b5060010190565b60008219821115612c4657612c46612c02565b500190565b6000816000190483118215151615612c6557612c65612c02565b500290565b60008351612c7c818460208801612646565b835190830190612c90818360208801612646565b01949350505050565b600082821015612cab57612cab612c02565b500390565b60006bffffffffffffffffffffffff19808660601b168352808560601b166014840152508251612ce7816028850160208701612646565b91909101602801949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612d6d57612d6d612d48565b500490565b600082612d8157612d81612d48565b500690565b60008251612d98818460208701612646565b9190910192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612dd590830184612672565b9695505050505050565b600060208284031215612df157600080fd5b81516115f0816125dc565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220a7034cbfc2c4ba41b0df41cfa38bc5d17c20da88fcc52971e0a7414e7ea68e2964736f6c634300080b003300000000000000000000000022087445743da772fde2ece88425ad9f52c078af0000000000000000000000007b311bdcf4dd8b86c0eba5656bf03b183f51d88d
Deployed Bytecode
0x60806040526004361061025c5760003560e01c806369e1cac1116101445780639d6be997116100b6578063d38dc1551161007a578063d38dc155146106a6578063e985e9c5146106c6578063ea4bb53d1461070f578063f2fde38b14610724578063f7de95e414610744578063ffe630b51461075a57600080fd5b80639d6be99714610613578063a22cb46514610626578063afed00a614610646578063b88d4fde14610666578063c87b56dd1461068657600080fd5b8063833b949911610108578063833b94991461057c57806384381b9d1461059857806388f2ebcb146105ad5780638da5cb5b146105cd57806394bf804d146105eb57806395d89b41146105fe57600080fd5b806369e1cac1146104fb57806370a082311461051b578063715018a61461053b578063717f47a3146105505780637aa579de1461056557600080fd5b806332cb6b0c116101dd57806354214f69116101a157806354214f691461044d578063564566a81461046c5780635a5944fb1461048657806360d938dc146104a65780636352211e146104c65780636373a6b1146104e657600080fd5b806332cb6b0c146103d857806336de00dc146103ee5780633ccfd60b1461040357806342842e0e146104185780634a0f30921461043857600080fd5b80630eb346a9116102245780630eb346a91461034d5780631609078d1461036d5780631eb5b9431461038e57806321b80420146103a357806323b872dd146103b857600080fd5b806301ffc9a71461026157806304384e971461029657806306fdde03146102d1578063081812fc146102f3578063095ea7b31461032b575b600080fd5b34801561026d57600080fd5b5061028161027c3660046125f2565b61077a565b60405190151581526020015b60405180910390f35b3480156102a257600080fd5b506102c36102b136600461262b565b60106020526000908152604090205481565b60405190815260200161028d565b3480156102dd57600080fd5b506102e66107cc565b60405161028d919061269e565b3480156102ff57600080fd5b5061031361030e3660046126b1565b61085e565b6040516001600160a01b03909116815260200161028d565b34801561033757600080fd5b5061034b6103463660046126ca565b6108f8565b005b34801561035957600080fd5b5061034b61036836600461262b565b610a0e565b34801561037957600080fd5b50600954610281906301000000900460ff1681565b34801561039a57600080fd5b506102c3609781565b3480156103af57600080fd5b5061034b610a5a565b3480156103c457600080fd5b5061034b6103d33660046126f4565b610aa1565b3480156103e457600080fd5b506102c361267881565b3480156103fa57600080fd5b506102c3600a81565b34801561040f57600080fd5b5061034b610ad2565b34801561042457600080fd5b5061034b6104333660046126f4565b610b25565b34801561044457600080fd5b5061034b610b40565b34801561045957600080fd5b5060095461028190610100900460ff1681565b34801561047857600080fd5b506009546102819060ff1681565b34801561049257600080fd5b5061034b6104a1366004612730565b610b89565b3480156104b257600080fd5b506009546102819062010000900460ff1681565b3480156104d257600080fd5b506103136104e13660046126b1565b610bbf565b3480156104f257600080fd5b506102e6610c36565b34801561050757600080fd5b5061034b610516366004612878565b610cc4565b34801561052757600080fd5b506102c361053636600461262b565b610dcd565b34801561054757600080fd5b5061034b610e54565b34801561055c57600080fd5b506102e6610e8a565b34801561057157600080fd5b50600a546102c39081565b34801561058857600080fd5b506102c367011f0f2c01da000081565b3480156105a457600080fd5b5061034b610e97565b3480156105b957600080fd5b5061034b6105c83660046126b1565b610ed5565b3480156105d957600080fd5b506006546001600160a01b0316610313565b61034b6105f9366004612938565b610f10565b34801561060a57600080fd5b506102e66110de565b61034b6106213660046129dc565b6110ed565b34801561063257600080fd5b5061034b610641366004612a5d565b6112ad565b34801561065257600080fd5b5061034b610661366004612730565b6112bc565b34801561067257600080fd5b5061034b610681366004612a99565b6112f2565b34801561069257600080fd5b506102e66106a13660046126b1565b61132a565b3480156106b257600080fd5b506102c36106c13660046126ca565b611490565b3480156106d257600080fd5b506102816106e1366004612b01565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561071b57600080fd5b5061034b6115f7565b34801561073057600080fd5b5061034b61073f36600461262b565b611642565b34801561075057600080fd5b506102c3600b5481565b34801561076657600080fd5b5061034b610775366004612730565b6116da565b60006001600160e01b031982166380ac58cd60e01b14806107ab57506001600160e01b03198216635b5e139f60e01b145b806107c657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546107db90612b2b565b80601f016020809104026020016040519081016040528092919081815260200182805461080790612b2b565b80156108545780601f1061082957610100808354040283529160200191610854565b820191906000526020600020905b81548152906001019060200180831161083757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108dc5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061090382610bbf565b9050806001600160a01b0316836001600160a01b031614156109715760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108d3565b336001600160a01b038216148061098d575061098d81336106e1565b6109ff5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108d3565b610a098383611710565b505050565b6006546001600160a01b03163314610a385760405162461bcd60e51b81526004016108d390612b66565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314610a845760405162461bcd60e51b81526004016108d390612b66565b6009805461ff001981166101009182900460ff1615909102179055565b610aab338261177e565b610ac75760405162461bcd60e51b81526004016108d390612b9b565b610a09838383611875565b600d546001600160a01b03163314610ae957600080fd5b600d546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610b22573d6000803e3d6000fd5b50565b610a09838383604051806020016040528060008152506112f2565b6006546001600160a01b03163314610b6a5760405162461bcd60e51b81526004016108d390612b66565b6009805462ff0000198116620100009182900460ff1615909102179055565b6006546001600160a01b03163314610bb35760405162461bcd60e51b81526004016108d390612b66565b610a09600f8383612543565b6000818152600260205260408120546001600160a01b0316806107c65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108d3565b60078054610c4390612b2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6f90612b2b565b8015610cbc5780601f10610c9157610100808354040283529160200191610cbc565b820191906000526020600020905b815481529060010190602001808311610c9f57829003601f168201915b505050505081565b6006546001600160a01b03163314610cee5760405162461bcd60e51b81526004016108d390612b66565b8051825114610d4e5760405162461bcd60e51b815260206004820152602660248201527f524553455256453a20617272617973206861766520646966666572656e74206c604482015265656e6774687360d01b60648201526084016108d3565b60005b8251811015610a095760005b828281518110610d6f57610d6f612bec565b6020026020010151811015610dba57610da8848381518110610d9357610d93612bec565b6020026020010151610da3611a15565b611a4f565b80610db281612c18565b915050610d5d565b5080610dc581612c18565b915050610d51565b60006001600160a01b038216610e385760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108d3565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610e7e5760405162461bcd60e51b81526004016108d390612b66565b610e886000611a69565b565b60088054610c4390612b2b565b6006546001600160a01b03163314610ec15760405162461bcd60e51b81526004016108d390612b66565b6009805460ff19811660ff90911615179055565b6006546001600160a01b03163314610eff5760405162461bcd60e51b81526004016108d390612b66565b610f0a609782612c33565b600b5550565b60095460ff16610f625760405162461bcd60e51b815260206004820152601b60248201527f4d696e744572726f723a2053616c6520697320696e616374697665000000000060448201526064016108d3565b600a821115610fca5760405162461bcd60e51b815260206004820152602e60248201527f4d696e744572726f723a204d617820746f6b656e7320706572207472616e736160448201526d18dd1a5bdb88195e18d95959195960921b60648201526084016108d3565b61267882610fd7600a5490565b610fe19190612c33565b11156110435760405162461bcd60e51b815260206004820152602b60248201527f4d696e744572726f723a20507572636861736520776f756c642065786365656460448201526a206d617820746f6b656e7360a81b60648201526084016108d3565b346110568367011f0f2c01da0000612c4b565b11156110b55760405162461bcd60e51b815260206004820152602860248201527f4d696e744572726f723a2045746865722076616c75652073656e7420697320696044820152671b98dbdc9c9958dd60c21b60648201526084016108d3565b60005b82811015610a09576110cc82610da3611a15565b806110d681612c18565b9150506110b8565b6060600180546107db90612b2b565b81816110f98282611abb565b6111455760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420416363657373205369676e6174757265000000000000000060448201526064016108d3565b60095462010000900460ff1661119d5760405162461bcd60e51b815260206004820152601c60248201527f50524553414c453a2070726573616c6520697320696e6163746976650000000060448201526064016108d3565b612678856111aa600a5490565b6111b49190612c33565b11156112025760405162461bcd60e51b815260206004820181905260248201527f507572636861736520776f756c6420657863656564206d617820746f6b656e7360448201526064016108d3565b346112158667011f0f2c01da0000612c4b565b11156112725760405162461bcd60e51b815260206004820152602660248201527f50524553414c453a2045746865722076616c75652073656e7420697320696e636044820152651bdc9c9958dd60d21b60648201526084016108d3565b61127c8386611b68565b60005b858110156112a55761129333610da3611a15565b8061129d81612c18565b91505061127f565b505050505050565b6112b8338383611ce4565b5050565b6006546001600160a01b031633146112e65760405162461bcd60e51b81526004016108d390612b66565b610a0960088383612543565b6112fc338361177e565b6113185760405162461bcd60e51b81526004016108d390612b9b565b61132484848484611db3565b50505050565b6000818152600260205260409020546060906001600160a01b03166113a35760405162461bcd60e51b815260206004820152602960248201527f746f6b656e5552493a2055524920717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108d3565b60006113ad611de6565b600954909150610100900460ff1615806113c657508051155b1561145e57600880546113d890612b2b565b80601f016020809104026020016040519081016040528092919081815260200182805461140490612b2b565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b5050505050915050919050565b8061146884611df5565b604051602001611479929190612c6a565b604051602081830303815290604052915050919050565b600e546000906001600160a01b031633146114ed5760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e2045786368616e67653a20556e617574686f72697a65640000000060448201526064016108d3565b6009546301000000900460ff16151560011461154b5760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e2045786368616e676520697320696e61637469766500000000000060448201526064016108d3565b60008211801561155c575060978211155b6115b45760405162461bcd60e51b8152602060048201526024808201527f546f6b656e2045786368616e67653a2070617373206964206f7574206f662072604482015263616e676560e01b60648201526084016108d3565b60006115e46001609785600b546115cb9190612c33565b6115d59190612c99565b6115df9190612c99565b611ef3565b90506115f08482611a4f565b9392505050565b6006546001600160a01b031633146116215760405162461bcd60e51b81526004016108d390612b66565b6009805463ff00000019811663010000009182900460ff1615909102179055565b6006546001600160a01b0316331461166c5760405162461bcd60e51b81526004016108d390612b66565b6001600160a01b0381166116d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d3565b610b2281611a69565b6006546001600160a01b031633146117045760405162461bcd60e51b81526004016108d390612b66565b610a0960078383612543565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061174582610bbf565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166117f75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108d3565b600061180283610bbf565b9050806001600160a01b0316846001600160a01b0316148061183d5750836001600160a01b03166118328461085e565b6001600160a01b0316145b8061186d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661188882610bbf565b6001600160a01b0316146118f05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108d3565b6001600160a01b0382166119525760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108d3565b61195d600082611710565b6001600160a01b0383166000908152600360205260408120805460019290611986908490612c99565b90915550506001600160a01b03821660009081526003602052604081208054600192906119b4908490612c33565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000611a25600a80546001019055565b611a4a600b546001611a36600a5490565b611a409190612c99565b6115df9190612c33565b905090565b6112b8828260405180602001604052806000815250611f0c565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080303384604051602001611ad393929190612cb0565b6040516020818303038152906040528051906020012090506000611b4e85611b48846040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611f3f565b600c546001600160a01b0391821691161495945050505050565b611b8c826040518060400160405280600281526020016115d360f21b815250611f63565b80611bb65750611bb682604051806040016040528060028152602001614f4760f01b815250611f63565b611c025760405162461bcd60e51b815260206004820152601d60248201527f50726573616c653a20496e76616c69642070726573616c65207479706500000060448201526064016108d3565b6000611c28836040518060400160405280600281526020016115d360f21b815250611f63565b611c33576003611c36565b60025b3360009081526010602052604090205460ff9190911691508190611c5b908490612c33565b1115611cb45760405162461bcd60e51b815260206004820152602260248201527f50726573616c653a20417574686f72697a6564206c696d697420657863656564604482015261195960f21b60648201526084016108d3565b33600090815260106020526040902054611ccf908390612c33565b33600090815260106020526040902055505050565b816001600160a01b0316836001600160a01b03161415611d465760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d3565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611dbe848484611875565b611dca84848484611fbc565b6113245760405162461bcd60e51b81526004016108d390612cf6565b6060600f80546107db90612b2b565b606081611e195750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e435780611e2d81612c18565b9150611e3c9050600a83612d5e565b9150611e1d565b60008167ffffffffffffffff811115611e5e57611e5e6127a2565b6040519080825280601f01601f191660200182016040528015611e88576020820181803683370190505b5090505b841561186d57611e9d600183612c99565b9150611eaa600a86612d72565b611eb5906030612c33565b60f81b818381518110611eca57611eca612bec565b60200101906001600160f81b031916908160001a905350611eec600a86612d5e565b9450611e8c565b6000611f026097612678612c33565b6107c69083612d72565b611f1683836120ba565b611f236000848484611fbc565b610a095760405162461bcd60e51b81526004016108d390612cf6565b6000806000611f4e85856121fc565b91509150611f5b8161226c565b509392505050565b600081604051602001611f769190612d86565b6040516020818303038152906040528051906020012083604051602001611f9d9190612d86565b6040516020818303038152906040528051906020012014905092915050565b60006001600160a01b0384163b156120af57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612000903390899088908890600401612da2565b6020604051808303816000875af192505050801561203b575060408051601f3d908101601f1916820190925261203891810190612ddf565b60015b612095573d808015612069576040519150601f19603f3d011682016040523d82523d6000602084013e61206e565b606091505b50805161208d5760405162461bcd60e51b81526004016108d390612cf6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061186d565b506001949350505050565b6001600160a01b0382166121105760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d3565b6000818152600260205260409020546001600160a01b0316156121755760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d3565b6001600160a01b038216600090815260036020526040812080546001929061219e908490612c33565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000808251604114156122335760208301516040840151606085015160001a61222787828585612427565b94509450505050612265565b82516040141561225d5760208301516040840151612252868383612514565b935093505050612265565b506000905060025b9250929050565b600081600481111561228057612280612dfc565b14156122895750565b600181600481111561229d5761229d612dfc565b14156122eb5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108d3565b60028160048111156122ff576122ff612dfc565b141561234d5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108d3565b600381600481111561236157612361612dfc565b14156123ba5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016108d3565b60048160048111156123ce576123ce612dfc565b1415610b225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016108d3565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561245e575060009050600361250b565b8460ff16601b1415801561247657508460ff16601c14155b15612487575060009050600461250b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156124db573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166125045760006001925092505061250b565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b0161253587828885612427565b935093505050935093915050565b82805461254f90612b2b565b90600052602060002090601f01602090048101928261257157600085556125b7565b82601f1061258a5782800160ff198235161785556125b7565b828001600101855582156125b7579182015b828111156125b757823582559160200191906001019061259c565b506125c39291506125c7565b5090565b5b808211156125c357600081556001016125c8565b6001600160e01b031981168114610b2257600080fd5b60006020828403121561260457600080fd5b81356115f0816125dc565b80356001600160a01b038116811461262657600080fd5b919050565b60006020828403121561263d57600080fd5b6115f08261260f565b60005b83811015612661578181015183820152602001612649565b838111156113245750506000910152565b6000815180845261268a816020860160208601612646565b601f01601f19169290920160200192915050565b6020815260006115f06020830184612672565b6000602082840312156126c357600080fd5b5035919050565b600080604083850312156126dd57600080fd5b6126e68361260f565b946020939093013593505050565b60008060006060848603121561270957600080fd5b6127128461260f565b92506127206020850161260f565b9150604084013590509250925092565b6000806020838503121561274357600080fd5b823567ffffffffffffffff8082111561275b57600080fd5b818501915085601f83011261276f57600080fd5b81358181111561277e57600080fd5b86602082850101111561279057600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156127e1576127e16127a2565b604052919050565b600067ffffffffffffffff821115612803576128036127a2565b5060051b60200190565b600082601f83011261281e57600080fd5b8135602061283361282e836127e9565b6127b8565b82815260059290921b8401810191818101908684111561285257600080fd5b8286015b8481101561286d5780358352918301918301612856565b509695505050505050565b6000806040838503121561288b57600080fd5b823567ffffffffffffffff808211156128a357600080fd5b818501915085601f8301126128b757600080fd5b813560206128c761282e836127e9565b82815260059290921b840181019181810190898411156128e657600080fd5b948201945b8386101561290b576128fc8661260f565b825294820194908201906128eb565b9650508601359250508082111561292157600080fd5b5061292e8582860161280d565b9150509250929050565b6000806040838503121561294b57600080fd5b8235915061295b6020840161260f565b90509250929050565b600067ffffffffffffffff83111561297e5761297e6127a2565b612991601f8401601f19166020016127b8565b90508281528383830111156129a557600080fd5b828260208301376000602084830101529392505050565b600082601f8301126129cd57600080fd5b6115f083833560208501612964565b6000806000606084860312156129f157600080fd5b83359250602084013567ffffffffffffffff80821115612a1057600080fd5b612a1c878388016129bc565b93506040860135915080821115612a3257600080fd5b508401601f81018613612a4457600080fd5b612a5386823560208401612964565b9150509250925092565b60008060408385031215612a7057600080fd5b612a798361260f565b915060208301358015158114612a8e57600080fd5b809150509250929050565b60008060008060808587031215612aaf57600080fd5b612ab88561260f565b9350612ac66020860161260f565b925060408501359150606085013567ffffffffffffffff811115612ae957600080fd5b612af5878288016129bc565b91505092959194509250565b60008060408385031215612b1457600080fd5b612b1d8361260f565b915061295b6020840161260f565b600181811c90821680612b3f57607f821691505b60208210811415612b6057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612c2c57612c2c612c02565b5060010190565b60008219821115612c4657612c46612c02565b500190565b6000816000190483118215151615612c6557612c65612c02565b500290565b60008351612c7c818460208801612646565b835190830190612c90818360208801612646565b01949350505050565b600082821015612cab57612cab612c02565b500390565b60006bffffffffffffffffffffffff19808660601b168352808560601b166014840152508251612ce7816028850160208701612646565b91909101602801949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612d6d57612d6d612d48565b500490565b600082612d8157612d81612d48565b500690565b60008251612d98818460208701612646565b9190910192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612dd590830184612672565b9695505050505050565b600060208284031215612df157600080fd5b81516115f0816125dc565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220a7034cbfc2c4ba41b0df41cfa38bc5d17c20da88fcc52971e0a7414e7ea68e2964736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000022087445743da772fde2ece88425ad9f52c078af0000000000000000000000007b311bdcf4dd8b86c0eba5656bf03b183f51d88d
-----Decoded View---------------
Arg [0] : _signerAddress (address): 0x22087445743dA772fdE2eCE88425AD9f52C078af
Arg [1] : _fundReceiver (address): 0x7B311BDCF4DD8b86c0EBa5656BF03B183F51D88d
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000022087445743da772fde2ece88425ad9f52c078af
Arg [1] : 0000000000000000000000007b311bdcf4dd8b86c0eba5656bf03b183f51d88d
Deployed Bytecode Sourcemap
49584:7932:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22030:355;;;;;;;;;;-1:-1:-1;22030:355:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;22030:355:0;;;;;;;;50224:49;;;;;;;;;;-1:-1:-1;50224:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1107:25:1;;;1095:2;1080:18;50224:49:0;961:177:1;23199:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24892:308::-;;;;;;;;;;-1:-1:-1;24892:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2243:32:1;;;2225:51;;2213:2;2198:18;24892:308:0;2079:203:1;24415:411:0;;;;;;;;;;-1:-1:-1;24415:411:0;;;;;:::i;:::-;;:::i;:::-;;51349:171;;;;;;;;;;-1:-1:-1;51349:171:0;;;;;:::i;:::-;;:::i;49920:44::-;;;;;;;;;;-1:-1:-1;49920:44:0;;;;;;;;;;;50330:45;;;;;;;;;;;;50372:3;50330:45;;52193:90;;;;;;;;;;;;;:::i;25811:376::-;;;;;;;;;;-1:-1:-1;25811:376:0;;;;;:::i;:::-;;:::i;50282:41::-;;;;;;;;;;;;50319:4;50282:41;;50382:49;;;;;;;;;;;;50429:2;50382:49;;56797:118;;;;;;;;;;;;;:::i;26258:185::-;;;;;;;;;;-1:-1:-1;26258:185:0;;;;;:::i;:::-;;:::i;51976:105::-;;;;;;;;;;;;;:::i;49841:30::-;;;;;;;;;;-1:-1:-1;49841:30:0;;;;;;;;;;;49802:32;;;;;;;;;;-1:-1:-1;49802:32:0;;;;;;;;51528:177;;;;;;;;;;-1:-1:-1;51528:177:0;;;;;:::i;:::-;;:::i;49878:35::-;;;;;;;;;;-1:-1:-1;49878:35:0;;;;;;;;;;;22806:326;;;;;;;;;;-1:-1:-1;22806:326:0;;;;;:::i;:::-;;:::i;49733:24::-;;;;;;;;;;;;;:::i;53098:472::-;;;;;;;;;;-1:-1:-1;53098:472:0;;;;;:::i;:::-;;:::i;22449:295::-;;;;;;;;;;-1:-1:-1;22449:295:0;;;;;:::i;:::-;;:::i;37170:103::-;;;;;;;;;;;;;:::i;49764:31::-;;;;;;;;;;;;;:::i;49971:45::-;;;;;;;;;;-1:-1:-1;49971:45:0;;;;;;50438:54;;;;;;;;;;;;50480:12;50438:54;;52089:96;;;;;;;;;;;;;:::i;51029:139::-;;;;;;;;;;-1:-1:-1;51029:139:0;;;;;:::i;:::-;;:::i;36519:87::-;;;;;;;;;;-1:-1:-1;36592:6:0;;-1:-1:-1;;;;;36592:6:0;36519:87;;55318:769;;;;;;:::i;:::-;;:::i;23368:104::-;;;;;;;;;;;;;:::i;54493:817::-;;;;;;:::i;:::-;;:::i;25272:187::-;;;;;;;;;;-1:-1:-1;25272:187:0;;;;;:::i;:::-;;:::i;51176:165::-;;;;;;;;;;-1:-1:-1;51176:165:0;;;;;:::i;:::-;;:::i;26514:365::-;;;;;;;;;;-1:-1:-1;26514:365:0;;;;;:::i;:::-;;:::i;57052:461::-;;;;;;;;;;-1:-1:-1;57052:461:0;;;;;:::i;:::-;;:::i;56095:694::-;;;;;;;;;;-1:-1:-1;56095:694:0;;;;;:::i;:::-;;:::i;25530:214::-;;;;;;;;;;-1:-1:-1;25530:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;25701:25:0;;;25672:4;25701:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25530:214;51833:135;;;;;;;;;;;;;:::i;37428:238::-;;;;;;;;;;-1:-1:-1;37428:238:0;;;;;:::i;:::-;;:::i;50023:33::-;;;;;;;;;;;;;;;;51713:112;;;;;;;;;;-1:-1:-1;51713:112:0;;;;;:::i;:::-;;:::i;22030:355::-;22177:4;-1:-1:-1;;;;;;22219:40:0;;-1:-1:-1;;;22219:40:0;;:105;;-1:-1:-1;;;;;;;22276:48:0;;-1:-1:-1;;;22276:48:0;22219:105;:158;;;-1:-1:-1;;;;;;;;;;20593:40:0;;;22341:36;22199:178;22030:355;-1:-1:-1;;22030:355:0:o;23199:100::-;23253:13;23286:5;23279:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23199:100;:::o;24892:308::-;25013:7;28515:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28515:16:0;25038:110;;;;-1:-1:-1;;;25038:110:0;;9277:2:1;25038:110:0;;;9259:21:1;9316:2;9296:18;;;9289:30;9355:34;9335:18;;;9328:62;-1:-1:-1;;;9406:18:1;;;9399:42;9458:19;;25038:110:0;;;;;;;;;-1:-1:-1;25168:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25168:24:0;;24892:308::o;24415:411::-;24496:13;24512:23;24527:7;24512:14;:23::i;:::-;24496:39;;24560:5;-1:-1:-1;;;;;24554:11:0;:2;-1:-1:-1;;;;;24554:11:0;;;24546:57;;;;-1:-1:-1;;;24546:57:0;;9690:2:1;24546:57:0;;;9672:21:1;9729:2;9709:18;;;9702:30;9768:34;9748:18;;;9741:62;-1:-1:-1;;;9819:18:1;;;9812:31;9860:19;;24546:57:0;9488:397:1;24546:57:0;17273:10;-1:-1:-1;;;;;24638:21:0;;;;:62;;-1:-1:-1;24663:37:0;24680:5;17273:10;25530:214;:::i;24663:37::-;24616:168;;;;-1:-1:-1;;;24616:168:0;;10092:2:1;24616:168:0;;;10074:21:1;10131:2;10111:18;;;10104:30;10170:34;10150:18;;;10143:62;10241:26;10221:18;;;10214:54;10285:19;;24616:168:0;9890:420:1;24616:168:0;24797:21;24806:2;24810:7;24797:8;:21::i;:::-;24485:341;24415:411;;:::o;51349:171::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;51467:23:::1;:45:::0;;-1:-1:-1;;;;;;51467:45:0::1;-1:-1:-1::0;;;;;51467:45:0;;;::::1;::::0;;;::::1;::::0;;51349:171::o;52193:90::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;52265:10:::1;::::0;;-1:-1:-1;;52251:24:0;::::1;52265:10;::::0;;;::::1;;;52264:11;52251:24:::0;;::::1;;::::0;;52193:90::o;25811:376::-;26020:41;17273:10;26053:7;26020:18;:41::i;:::-;25998:140;;;;-1:-1:-1;;;25998:140:0;;;;;;;:::i;:::-;26151:28;26161:4;26167:2;26171:7;26151:9;:28::i;56797:118::-;50757:12;;-1:-1:-1;;;;;50757:12:0;50743:10;:26;50735:35;;;;;;56862:12:::1;::::0;56854:53:::1;::::0;-1:-1:-1;;;;;56862:12:0;;::::1;::::0;56885:21:::1;56854:53:::0;::::1;;;::::0;56862:12:::1;56854:53:::0;56862:12;56854:53;56885:21;56862:12;56854:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;56797:118::o:0;26258:185::-;26396:39;26413:4;26419:2;26423:7;26396:39;;;;;;;;;;;;:16;:39::i;51976:105::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;52058:15:::1;::::0;;-1:-1:-1;;52039:34:0;::::1;52058:15:::0;;;;::::1;;;52057:16;52039:34:::0;;::::1;;::::0;;51976:105::o;51528:177::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;51653:44:::1;:20;51676:21:::0;;51653:44:::1;:::i;22806:326::-:0;22923:7;22964:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22964:16:0;23013:19;22991:110;;;;-1:-1:-1;;;22991:110:0;;11296:2:1;22991:110:0;;;11278:21:1;11335:2;11315:18;;;11308:30;11374:34;11354:18;;;11347:62;-1:-1:-1;;;11425:18:1;;;11418:39;11474:19;;22991:110:0;11094:405:1;49733:24:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53098:472::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;53269:8:::1;:15;53247:11;:18;:37;53225:125;;;::::0;-1:-1:-1;;;53225:125:0;;11706:2:1;53225:125:0::1;::::0;::::1;11688:21:1::0;11745:2;11725:18;;;11718:30;11784:34;11764:18;;;11757:62;-1:-1:-1;;;11835:18:1;;;11828:36;11881:19;;53225:125:0::1;11504:402:1::0;53225:125:0::1;53368:9;53363:200;53387:11;:18;53383:1;:22;53363:200;;;53432:9;53427:125;53451:8;53460:1;53451:11;;;;;;;;:::i;:::-;;;;;;;53447:1;:15;53427:125;;;53488:48;53498:11;53510:1;53498:14;;;;;;;;:::i;:::-;;;;;;;53514:21;:19;:21::i;:::-;53488:9;:48::i;:::-;53464:3:::0;::::1;::::0;::::1;:::i;:::-;;;;53427:125;;;-1:-1:-1::0;53407:3:0;::::1;::::0;::::1;:::i;:::-;;;;53363:200;;22449:295:::0;22566:7;-1:-1:-1;;;;;22613:19:0;;22591:111;;;;-1:-1:-1;;;22591:111:0;;12517:2:1;22591:111:0;;;12499:21:1;12556:2;12536:18;;;12529:30;12595:34;12575:18;;;12568:62;-1:-1:-1;;;12646:18:1;;;12639:40;12696:19;;22591:111:0;12315:406:1;22591:111:0;-1:-1:-1;;;;;;22720:16:0;;;;;:9;:16;;;;;;;22449:295::o;37170:103::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;37235:30:::1;37262:1;37235:18;:30::i;:::-;37170:103::o:0;49764:31::-;;;;;;;:::i;52089:96::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;52165:12:::1;::::0;;-1:-1:-1;;52149:28:0;::::1;52165:12;::::0;;::::1;52164:13;52149:28;::::0;;52089:96::o;51029:139::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;51127:33:::1;50372:3;51127:15:::0;:33:::1;:::i;:::-;51110:14;:50:::0;-1:-1:-1;51029:139:0:o;55318:769::-;55442:12;;;;55434:52;;;;-1:-1:-1;;;55434:52:0;;13061:2:1;55434:52:0;;;13043:21:1;13100:2;13080:18;;;13073:30;13139:29;13119:18;;;13112:57;13186:18;;55434:52:0;12859:351:1;55434:52:0;50429:2;55519:15;:39;;55497:135;;;;-1:-1:-1;;;55497:135:0;;13417:2:1;55497:135:0;;;13399:21:1;13456:2;13436:18;;;13429:30;13495:34;13475:18;;;13468:62;-1:-1:-1;;;13546:18:1;;;13539:44;13600:19;;55497:135:0;13215:410:1;55497:135:0;50319:4;55699:15;55665:31;:21;38992:14;;38900:114;55665:31;:49;;;;:::i;:::-;:63;;55643:156;;;;-1:-1:-1;;;55643:156:0;;13832:2:1;55643:156:0;;;13814:21:1;13871:2;13851:18;;;13844:30;13910:34;13890:18;;;13883:62;-1:-1:-1;;;13961:18:1;;;13954:41;14012:19;;55643:156:0;13630:407:1;55643:156:0;55869:9;55832:33;55850:15;50480:12;55832:33;:::i;:::-;:46;;55810:136;;;;-1:-1:-1;;;55810:136:0;;14417:2:1;55810:136:0;;;14399:21:1;14456:2;14436:18;;;14429:30;14495:34;14475:18;;;14468:62;-1:-1:-1;;;14546:18:1;;;14539:38;14594:19;;55810:136:0;14215:404:1;55810:136:0;55962:9;55957:123;55981:15;55977:1;:19;55957:123;;;56018:50;56028:16;56046:21;:19;:21::i;56018:50::-;55998:3;;;;:::i;:::-;;;;55957:123;;23368:104;23424:13;23457:7;23450:14;;;;;:::i;54493:817::-;54662:10;54674:9;50906:43;50927:10;50939:9;50906:20;:43::i;:::-;50884:117;;;;-1:-1:-1;;;50884:117:0;;14826:2:1;50884:117:0;;;14808:21:1;14865:2;14845:18;;;14838:30;14904:26;14884:18;;;14877:54;14948:18;;50884:117:0;14624:348:1;50884:117:0;54704:15:::1;::::0;;;::::1;;;54696:56;;;::::0;-1:-1:-1;;;54696:56:0;;15179:2:1;54696:56:0::1;::::0;::::1;15161:21:1::0;15218:2;15198:18;;;15191:30;15257;15237:18;;;15230:58;15305:18;;54696:56:0::1;14977:352:1::0;54696:56:0::1;50319:4;54821:21;54787:31;:21;38992:14:::0;;38900:114;54787:31:::1;:55;;;;:::i;:::-;:86;;54765:168;;;::::0;-1:-1:-1;;;54765:168:0;;15536:2:1;54765:168:0::1;::::0;::::1;15518:21:1::0;;;15555:18;;;15548:30;15614:34;15594:18;;;15587:62;15666:18;;54765:168:0::1;15334:356:1::0;54765:168:0::1;55011:9;54968:39;54986:21:::0;50480:12:::1;54968:39;:::i;:::-;:52;;54946:140;;;::::0;-1:-1:-1;;;54946:140:0;;15897:2:1;54946:140:0::1;::::0;::::1;15879:21:1::0;15936:2;15916:18;;;15909:30;15975:34;15955:18;;;15948:62;-1:-1:-1;;;16026:18:1;;;16019:36;16072:19;;54946:140:0::1;15695:402:1::0;54946:140:0::1;55099:68;55134:9;55145:21;55099:34;:68::i;:::-;55185:9;55180:123;55204:21;55200:1;:25;55180:123;;;55247:44;55257:10;55269:21;:19;:21::i;55247:44::-;55227:3:::0;::::1;::::0;::::1;:::i;:::-;;;;55180:123;;;;54493:817:::0;;;;;:::o;25272:187::-;25399:52;17273:10;25432:8;25442;25399:18;:52::i;:::-;25272:187;;:::o;51176:165::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;51295:38:::1;:17;51315:18:::0;;51295:38:::1;:::i;26514:365::-:0;26703:41;17273:10;26736:7;26703:18;:41::i;:::-;26681:140;;;;-1:-1:-1;;;26681:140:0;;;;;;;:::i;:::-;26832:39;26846:4;26852:2;26856:7;26865:5;26832:13;:39::i;:::-;26514:365;;;;:::o;57052:461::-;28491:4;28515:16;;;:7;:16;;;;;;57170:13;;-1:-1:-1;;;;;28515:16:0;57201:70;;;;-1:-1:-1;;;57201:70:0;;16304:2:1;57201:70:0;;;16286:21:1;16343:2;16323:18;;;16316:30;16382:34;16362:18;;;16355:62;-1:-1:-1;;;16433:18:1;;;16426:39;16482:19;;57201:70:0;16102:405:1;57201:70:0;57282:21;57306:10;:8;:10::i;:::-;57331;;57282:34;;-1:-1:-1;57331:10:0;;;;;:19;;:49;;-1:-1:-1;57354:21:0;;:26;57331:49;57327:106;;;57404:17;57397:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57052:461;;;:::o;57327:106::-;57476:7;57485:18;:7;:16;:18::i;:::-;57459:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57445:60;;;57052:461;;;:::o;56095:694::-;56258:23;;56197:7;;-1:-1:-1;;;;;56258:23:0;56244:10;:37;56222:115;;;;-1:-1:-1;;;56222:115:0;;17189:2:1;56222:115:0;;;17171:21:1;17228:2;17208:18;;;17201:30;17267;17247:18;;;17240:58;17315:18;;56222:115:0;16987:352:1;56222:115:0;56372:25;;;;;;;:33;;56401:4;56372:33;56350:109;;;;-1:-1:-1;;;56350:109:0;;17546:2:1;56350:109:0;;;17528:21:1;17585:2;17565:18;;;17558:30;17624:28;17604:18;;;17597:56;17670:18;;56350:109:0;17344:350:1;56350:109:0;56504:1;56494:7;:11;:41;;;;;50372:3;56509:7;:26;;56494:41;56472:127;;;;-1:-1:-1;;;56472:127:0;;17901:2:1;56472:127:0;;;17883:21:1;17940:2;17920:18;;;17913:30;17979:34;17959:18;;;17952:62;-1:-1:-1;;;18030:18:1;;;18023:34;18074:19;;56472:127:0;17699:400:1;56472:127:0;56612:16;56631:81;56700:1;50372:3;56672:7;56655:14;;:24;;;;:::i;:::-;:42;;;;:::i;:::-;:46;;;;:::i;:::-;56631:9;:81::i;:::-;56612:100;;56723:30;56733:9;56744:8;56723:9;:30::i;:::-;56773:8;56095:694;-1:-1:-1;;;56095:694:0:o;51833:135::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;51935:25:::1;::::0;;-1:-1:-1;;51906:54:0;::::1;51935:25:::0;;;;::::1;;;51934:26;51906:54:::0;;::::1;;::::0;;51833:135::o;37428:238::-;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37531:22:0;::::1;37509:110;;;::::0;-1:-1:-1;;;37509:110:0;;18436:2:1;37509:110:0::1;::::0;::::1;18418:21:1::0;18475:2;18455:18;;;18448:30;18514:34;18494:18;;;18487:62;-1:-1:-1;;;18565:18:1;;;18558:36;18611:19;;37509:110:0::1;18234:402:1::0;37509:110:0::1;37630:28;37649:8;37630:18;:28::i;51713:112::-:0;36592:6;;-1:-1:-1;;;;;36592:6:0;17273:10;36739:23;36731:68;;;;-1:-1:-1;;;36731:68:0;;;;;;;:::i;:::-;51794:23:::1;:10;51807::::0;;51794:23:::1;:::i;32549:174::-:0;32624:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32624:29:0;-1:-1:-1;;;;;32624:29:0;;;;;;;;:24;;32678:23;32624:24;32678:14;:23::i;:::-;-1:-1:-1;;;;;32669:46:0;;;;;;;;;;;32549:174;;:::o;28720:452::-;28849:4;28515:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28515:16:0;28871:110;;;;-1:-1:-1;;;28871:110:0;;18843:2:1;28871:110:0;;;18825:21:1;18882:2;18862:18;;;18855:30;18921:34;18901:18;;;18894:62;-1:-1:-1;;;18972:18:1;;;18965:42;19024:19;;28871:110:0;18641:408:1;28871:110:0;28992:13;29008:23;29023:7;29008:14;:23::i;:::-;28992:39;;29061:5;-1:-1:-1;;;;;29050:16:0;:7;-1:-1:-1;;;;;29050:16:0;;:64;;;;29107:7;-1:-1:-1;;;;;29083:31:0;:20;29095:7;29083:11;:20::i;:::-;-1:-1:-1;;;;;29083:31:0;;29050:64;:113;;;-1:-1:-1;;;;;;25701:25:0;;;25672:4;25701:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29131:32;29042:122;28720:452;-1:-1:-1;;;;28720:452:0:o;31816:615::-;31989:4;-1:-1:-1;;;;;31962:31:0;:23;31977:7;31962:14;:23::i;:::-;-1:-1:-1;;;;;31962:31:0;;31940:122;;;;-1:-1:-1;;;31940:122:0;;19256:2:1;31940:122:0;;;19238:21:1;19295:2;19275:18;;;19268:30;19334:34;19314:18;;;19307:62;-1:-1:-1;;;19385:18:1;;;19378:39;19434:19;;31940:122:0;19054:405:1;31940:122:0;-1:-1:-1;;;;;32081:16:0;;32073:65;;;;-1:-1:-1;;;32073:65:0;;19666:2:1;32073:65:0;;;19648:21:1;19705:2;19685:18;;;19678:30;19744:34;19724:18;;;19717:62;-1:-1:-1;;;19795:18:1;;;19788:34;19839:19;;32073:65:0;19464:400:1;32073:65:0;32255:29;32272:1;32276:7;32255:8;:29::i;:::-;-1:-1:-1;;;;;32297:15:0;;;;;;:9;:15;;;;;:20;;32316:1;;32297:15;:20;;32316:1;;32297:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32328:13:0;;;;;;:9;:13;;;;;:18;;32345:1;;32328:13;:18;;32345:1;;32328:18;:::i;:::-;;;;-1:-1:-1;;32357:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32357:21:0;-1:-1:-1;;;;;32357:21:0;;;;;;;;;32396:27;;32357:16;;32396:27;;;;;;;31816:615;;;:::o;52898:192::-;52946:7;52966:33;:21;39111:19;;39129:1;39111:19;;;39022:127;52966:33;53019:63;53067:14;;53063:1;53029:31;:21;38992:14;;38900:114;53029:31;:35;;;;:::i;:::-;:52;;;;:::i;53019:63::-;53012:70;;52898:192;:::o;29514:110::-;29590:26;29600:2;29604:7;29590:26;;;;;;;;;;;;:9;:26::i;37826:191::-;37919:6;;;-1:-1:-1;;;;;37936:17:0;;;-1:-1:-1;;;;;;37936:17:0;;;;;;;37969:40;;37919:6;;;37936:17;37919:6;;37969:40;;37900:16;;37969:40;37889:128;37826:191;:::o;52291:450::-;52418:4;52435:19;52506:4;52513:10;52525:9;52481:54;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52457:89;;;;;;52435:111;;52559:29;52591:84;52664:10;52591:50;:11;48161:58;;22525:66:1;48161:58:0;;;22513:79:1;22608:12;;;22601:28;;;47992:7:0;;22645:12:1;;48161:58:0;;;;;;;;;;;;48133:101;;;;;;48113:121;;47896:346;;;;52591:50;:72;;:84::i;:::-;52695:13;;-1:-1:-1;;;;;52695:38:0;;;:13;;:38;;52291:450;-1:-1:-1;;;;;52291:450:0:o;53813:672::-;53979:31;53994:9;53979:31;;;;;;;;;;;;;-1:-1:-1;;;53979:31:0;;;:14;:31::i;:::-;:66;;;;54014:31;54029:9;54014:31;;;;;;;;;;;;;-1:-1:-1;;;54014:31:0;;;:14;:31::i;:::-;53957:145;;;;-1:-1:-1;;;53957:145:0;;20577:2:1;53957:145:0;;;20559:21:1;20616:2;20596:18;;;20589:30;20655:31;20635:18;;;20628:59;20704:18;;53957:145:0;20375:353:1;53957:145:0;54115:22;54141:31;54156:9;54141:31;;;;;;;;;;;;;-1:-1:-1;;;54141:31:0;;;:14;:31::i;:::-;54140:41;;54180:1;54140:41;;;54176:1;54140:41;54229:10;54214:26;;;;:14;:26;;;;;;54115:66;;;;;;-1:-1:-1;54115:66:0;;54214:50;;54243:21;;54214:50;:::i;:::-;:85;;54192:169;;;;-1:-1:-1;;;54192:169:0;;20935:2:1;54192:169:0;;;20917:21:1;20974:2;20954:18;;;20947:30;21013:34;20993:18;;;20986:62;-1:-1:-1;;;21064:18:1;;;21057:32;21106:19;;54192:169:0;20733:398:1;54192:169:0;54429:10;54414:26;;;;:14;:26;;;;;;:63;;54456:21;;54414:63;:::i;:::-;54387:10;54372:26;;;;:14;:26;;;;;:105;-1:-1:-1;;;53813:672:0:o;32865:315::-;33020:8;-1:-1:-1;;;;;33011:17:0;:5;-1:-1:-1;;;;;33011:17:0;;;33003:55;;;;-1:-1:-1;;;33003:55:0;;21338:2:1;33003:55:0;;;21320:21:1;21377:2;21357:18;;;21350:30;21416:27;21396:18;;;21389:55;21461:18;;33003:55:0;21136:349:1;33003:55:0;-1:-1:-1;;;;;33069:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;33069:46:0;;;;;;;;;;33131:41;;540::1;;;33131::0;;513:18:1;33131:41:0;;;;;;;32865:315;;;:::o;27761:352::-;27918:28;27928:4;27934:2;27938:7;27918:9;:28::i;:::-;27979:48;28002:4;28008:2;28012:7;28021:5;27979:22;:48::i;:::-;27957:148;;;;-1:-1:-1;;;27957:148:0;;;;;;;:::i;56923:121::-;56983:13;57016:20;57009:27;;;;;:::i;17776:723::-;17832:13;18053:10;18049:53;;-1:-1:-1;;18080:10:0;;;;;;;;;;;;-1:-1:-1;;;18080:10:0;;;;;17776:723::o;18049:53::-;18127:5;18112:12;18168:78;18175:9;;18168:78;;18201:8;;;;:::i;:::-;;-1:-1:-1;18224:10:0;;-1:-1:-1;18232:2:0;18224:10;;:::i;:::-;;;18168:78;;;18256:19;18288:6;18278:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18278:17:0;;18256:39;;18306:154;18313:10;;18306:154;;18340:11;18350:1;18340:11;;:::i;:::-;;-1:-1:-1;18409:10:0;18417:2;18409:5;:10;:::i;:::-;18396:24;;:2;:24;:::i;:::-;18383:39;;18366:6;18373;18366:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;18366:56:0;;;;;;;;-1:-1:-1;18437:11:0;18446:2;18437:11;;:::i;:::-;;;18306:154;;52749:141;52811:7;52853:28;50372:3;50319:4;52853:28;:::i;:::-;52838:44;;:11;:44;:::i;29851:321::-;29981:18;29987:2;29991:7;29981:5;:18::i;:::-;30032:54;30063:1;30067:2;30071:7;30080:5;30032:22;:54::i;:::-;30010:154;;;;-1:-1:-1;;;30010:154:0;;;;;;;:::i;43929:263::-;44034:7;44060:17;44079:18;44101:27;44112:4;44118:9;44101:10;:27::i;:::-;44059:69;;;;44139:18;44151:5;44139:11;:18::i;:::-;-1:-1:-1;44175:9:0;43929:263;-1:-1:-1;;;43929:263:0:o;53578:227::-;53685:4;53792:1;53774:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;53764:32;;;;;;53743:1;53725:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;53715:32;;;;;;:81;53707:90;;53578:227;;;;:::o;33745:980::-;33900:4;-1:-1:-1;;;;;33921:13:0;;9035:20;9083:8;33917:801;;33974:175;;-1:-1:-1;;;33974:175:0;;-1:-1:-1;;;;;33974:36:0;;;;;:175;;17273:10;;34068:4;;34095:7;;34125:5;;33974:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33974:175:0;;;;;;;;-1:-1:-1;;33974:175:0;;;;;;;;;;;;:::i;:::-;;;33953:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34332:13:0;;34328:320;;34375:108;;-1:-1:-1;;;34375:108:0;;;;;;;:::i;34328:320::-;34598:6;34592:13;34583:6;34579:2;34575:15;34568:38;33953:710;-1:-1:-1;;;;;;34213:51:0;-1:-1:-1;;;34213:51:0;;-1:-1:-1;34206:58:0;;33917:801;-1:-1:-1;34702:4:0;33745:980;;;;;;:::o;30508:382::-;-1:-1:-1;;;;;30588:16:0;;30580:61;;;;-1:-1:-1;;;30580:61:0;;23899:2:1;30580:61:0;;;23881:21:1;;;23918:18;;;23911:30;23977:34;23957:18;;;23950:62;24029:18;;30580:61:0;23697:356:1;30580:61:0;28491:4;28515:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28515:16:0;:30;30652:58;;;;-1:-1:-1;;;30652:58:0;;24260:2:1;30652:58:0;;;24242:21:1;24299:2;24279:18;;;24272:30;24338;24318:18;;;24311:58;24386:18;;30652:58:0;24058:352:1;30652:58:0;-1:-1:-1;;;;;30781:13:0;;;;;;:9;:13;;;;;:18;;30798:1;;30781:13;:18;;30798:1;;30781:18;:::i;:::-;;;;-1:-1:-1;;30810:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30810:21:0;-1:-1:-1;;;;;30810:21:0;;;;;;;;30849:33;;30810:16;;;30849:33;;30810:16;;30849:33;30508:382;;:::o;41787:1340::-;41895:7;41904:12;42134:9;:16;42154:2;42134:22;42130:990;;;42430:4;42415:20;;42409:27;42480:4;42465:20;;42459:27;42538:4;42523:20;;42517:27;42173:9;42509:36;42581:25;42592:4;42509:36;42409:27;42459;42581:10;:25::i;:::-;42574:32;;;;;;;;;42130:990;42628:9;:16;42648:2;42628:22;42624:496;;;42903:4;42888:20;;42882:27;42954:4;42939:20;;42933:27;42996:23;43007:4;42882:27;42933;42996:10;:23::i;:::-;42989:30;;;;;;;;42624:496;-1:-1:-1;43068:1:0;;-1:-1:-1;43072:35:0;42624:496;41787:1340;;;;;:::o;40058:643::-;40136:20;40127:5;:29;;;;;;;;:::i;:::-;;40123:571;;;40058:643;:::o;40123:571::-;40234:29;40225:5;:38;;;;;;;;:::i;:::-;;40221:473;;;40280:34;;-1:-1:-1;;;40280:34:0;;24749:2:1;40280:34:0;;;24731:21:1;24788:2;24768:18;;;24761:30;24827:26;24807:18;;;24800:54;24871:18;;40280:34:0;24547:348:1;40221:473:0;40345:35;40336:5;:44;;;;;;;;:::i;:::-;;40332:362;;;40397:41;;-1:-1:-1;;;40397:41:0;;25102:2:1;40397:41:0;;;25084:21:1;25141:2;25121:18;;;25114:30;25180:33;25160:18;;;25153:61;25231:18;;40397:41:0;24900:355:1;40332:362:0;40469:30;40460:5;:39;;;;;;;;:::i;:::-;;40456:238;;;40516:44;;-1:-1:-1;;;40516:44:0;;25462:2:1;40516:44:0;;;25444:21:1;25501:2;25481:18;;;25474:30;25540:34;25520:18;;;25513:62;-1:-1:-1;;;25591:18:1;;;25584:32;25633:19;;40516:44:0;25260:398:1;40456:238:0;40591:30;40582:5;:39;;;;;;;;:::i;:::-;;40578:116;;;40638:44;;-1:-1:-1;;;40638:44:0;;25865:2:1;40638:44:0;;;25847:21:1;25904:2;25884:18;;;25877:30;25943:34;25923:18;;;25916:62;-1:-1:-1;;;25994:18:1;;;25987:32;26036:19;;40638:44:0;25663:398:1;45509:1669:0;45640:7;;46601:66;46575:92;;46557:200;;;-1:-1:-1;46710:1:0;;-1:-1:-1;46714:30:0;46694:51;;46557:200;46771:1;:7;;46776:2;46771:7;;:18;;;;;46782:1;:7;;46787:2;46782:7;;46771:18;46767:102;;;-1:-1:-1;46822:1:0;;-1:-1:-1;46826:30:0;46806:51;;46767:102;46983:24;;;46966:14;46983:24;;;;;;;;;26293:25:1;;;26366:4;26354:17;;26334:18;;;26327:45;;;;26388:18;;;26381:34;;;26431:18;;;26424:34;;;46983:24:0;;26265:19:1;;46983:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46983:24:0;;-1:-1:-1;;46983:24:0;;;-1:-1:-1;;;;;;;47022:20:0;;47018:103;;47075:1;47079:29;47059:50;;;;;;;47018:103;47141:6;-1:-1:-1;47149:20:0;;-1:-1:-1;45509:1669:0;;;;;;;;:::o;44455:440::-;44569:7;;-1:-1:-1;;;;;44670:124:0;;44821:3;44817:12;;;44831:2;44813:21;44862:25;44873:4;44813:21;44882:1;44670:124;44862:10;:25::i;:::-;44855:32;;;;;;44455:440;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:173::-;660:20;;-1:-1:-1;;;;;709:31:1;;699:42;;689:70;;755:1;752;745:12;689:70;592:173;;;:::o;770:186::-;829:6;882:2;870:9;861:7;857:23;853:32;850:52;;;898:1;895;888:12;850:52;921:29;940:9;921:29;:::i;1143:258::-;1215:1;1225:113;1239:6;1236:1;1233:13;1225:113;;;1315:11;;;1309:18;1296:11;;;1289:39;1261:2;1254:10;1225:113;;;1356:6;1353:1;1350:13;1347:48;;;-1:-1:-1;;1391:1:1;1373:16;;1366:27;1143:258::o;1406:::-;1448:3;1486:5;1480:12;1513:6;1508:3;1501:19;1529:63;1585:6;1578:4;1573:3;1569:14;1562:4;1555:5;1551:16;1529:63;:::i;:::-;1646:2;1625:15;-1:-1:-1;;1621:29:1;1612:39;;;;1653:4;1608:50;;1406:258;-1:-1:-1;;1406:258:1:o;1669:220::-;1818:2;1807:9;1800:21;1781:4;1838:45;1879:2;1868:9;1864:18;1856:6;1838:45;:::i;1894:180::-;1953:6;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;-1:-1:-1;2045:23:1;;1894:180;-1:-1:-1;1894:180:1:o;2287:254::-;2355:6;2363;2416:2;2404:9;2395:7;2391:23;2387:32;2384:52;;;2432:1;2429;2422:12;2384:52;2455:29;2474:9;2455:29;:::i;:::-;2445:39;2531:2;2516:18;;;;2503:32;;-1:-1:-1;;;2287:254:1:o;2546:328::-;2623:6;2631;2639;2692:2;2680:9;2671:7;2667:23;2663:32;2660:52;;;2708:1;2705;2698:12;2660:52;2731:29;2750:9;2731:29;:::i;:::-;2721:39;;2779:38;2813:2;2802:9;2798:18;2779:38;:::i;:::-;2769:48;;2864:2;2853:9;2849:18;2836:32;2826:42;;2546:328;;;;;:::o;2879:592::-;2950:6;2958;3011:2;2999:9;2990:7;2986:23;2982:32;2979:52;;;3027:1;3024;3017:12;2979:52;3067:9;3054:23;3096:18;3137:2;3129:6;3126:14;3123:34;;;3153:1;3150;3143:12;3123:34;3191:6;3180:9;3176:22;3166:32;;3236:7;3229:4;3225:2;3221:13;3217:27;3207:55;;3258:1;3255;3248:12;3207:55;3298:2;3285:16;3324:2;3316:6;3313:14;3310:34;;;3340:1;3337;3330:12;3310:34;3385:7;3380:2;3371:6;3367:2;3363:15;3359:24;3356:37;3353:57;;;3406:1;3403;3396:12;3353:57;3437:2;3429:11;;;;;3459:6;;-1:-1:-1;2879:592:1;;-1:-1:-1;;;;2879:592:1:o;3476:127::-;3537:10;3532:3;3528:20;3525:1;3518:31;3568:4;3565:1;3558:15;3592:4;3589:1;3582:15;3608:275;3679:2;3673:9;3744:2;3725:13;;-1:-1:-1;;3721:27:1;3709:40;;3779:18;3764:34;;3800:22;;;3761:62;3758:88;;;3826:18;;:::i;:::-;3862:2;3855:22;3608:275;;-1:-1:-1;3608:275:1:o;3888:183::-;3948:4;3981:18;3973:6;3970:30;3967:56;;;4003:18;;:::i;:::-;-1:-1:-1;4048:1:1;4044:14;4060:4;4040:25;;3888:183::o;4076:662::-;4130:5;4183:3;4176:4;4168:6;4164:17;4160:27;4150:55;;4201:1;4198;4191:12;4150:55;4237:6;4224:20;4263:4;4287:60;4303:43;4343:2;4303:43;:::i;:::-;4287:60;:::i;:::-;4381:15;;;4467:1;4463:10;;;;4451:23;;4447:32;;;4412:12;;;;4491:15;;;4488:35;;;4519:1;4516;4509:12;4488:35;4555:2;4547:6;4543:15;4567:142;4583:6;4578:3;4575:15;4567:142;;;4649:17;;4637:30;;4687:12;;;;4600;;4567:142;;;-1:-1:-1;4727:5:1;4076:662;-1:-1:-1;;;;;;4076:662:1:o;4743:1146::-;4861:6;4869;4922:2;4910:9;4901:7;4897:23;4893:32;4890:52;;;4938:1;4935;4928:12;4890:52;4978:9;4965:23;5007:18;5048:2;5040:6;5037:14;5034:34;;;5064:1;5061;5054:12;5034:34;5102:6;5091:9;5087:22;5077:32;;5147:7;5140:4;5136:2;5132:13;5128:27;5118:55;;5169:1;5166;5159:12;5118:55;5205:2;5192:16;5227:4;5251:60;5267:43;5307:2;5267:43;:::i;5251:60::-;5345:15;;;5427:1;5423:10;;;;5415:19;;5411:28;;;5376:12;;;;5451:19;;;5448:39;;;5483:1;5480;5473:12;5448:39;5507:11;;;;5527:148;5543:6;5538:3;5535:15;5527:148;;;5609:23;5628:3;5609:23;:::i;:::-;5597:36;;5560:12;;;;5653;;;;5527:148;;;5694:5;-1:-1:-1;;5737:18:1;;5724:32;;-1:-1:-1;;5768:16:1;;;5765:36;;;5797:1;5794;5787:12;5765:36;;5820:63;5875:7;5864:8;5853:9;5849:24;5820:63;:::i;:::-;5810:73;;;4743:1146;;;;;:::o;5894:254::-;5962:6;5970;6023:2;6011:9;6002:7;5998:23;5994:32;5991:52;;;6039:1;6036;6029:12;5991:52;6075:9;6062:23;6052:33;;6104:38;6138:2;6127:9;6123:18;6104:38;:::i;:::-;6094:48;;5894:254;;;;;:::o;6153:406::-;6217:5;6251:18;6243:6;6240:30;6237:56;;;6273:18;;:::i;:::-;6311:57;6356:2;6335:15;;-1:-1:-1;;6331:29:1;6362:4;6327:40;6311:57;:::i;:::-;6302:66;;6391:6;6384:5;6377:21;6431:3;6422:6;6417:3;6413:16;6410:25;6407:45;;;6448:1;6445;6438:12;6407:45;6497:6;6492:3;6485:4;6478:5;6474:16;6461:43;6551:1;6544:4;6535:6;6528:5;6524:18;6520:29;6513:40;6153:406;;;;;:::o;6564:220::-;6606:5;6659:3;6652:4;6644:6;6640:17;6636:27;6626:55;;6677:1;6674;6667:12;6626:55;6699:79;6774:3;6765:6;6752:20;6745:4;6737:6;6733:17;6699:79;:::i;6789:737::-;6885:6;6893;6901;6954:2;6942:9;6933:7;6929:23;6925:32;6922:52;;;6970:1;6967;6960:12;6922:52;7006:9;6993:23;6983:33;;7067:2;7056:9;7052:18;7039:32;7090:18;7131:2;7123:6;7120:14;7117:34;;;7147:1;7144;7137:12;7117:34;7170:49;7211:7;7202:6;7191:9;7187:22;7170:49;:::i;:::-;7160:59;;7272:2;7261:9;7257:18;7244:32;7228:48;;7301:2;7291:8;7288:16;7285:36;;;7317:1;7314;7307:12;7285:36;-1:-1:-1;7340:24:1;;7395:4;7387:13;;7383:27;-1:-1:-1;7373:55:1;;7424:1;7421;7414:12;7373:55;7447:73;7512:7;7507:2;7494:16;7489:2;7485;7481:11;7447:73;:::i;:::-;7437:83;;;6789:737;;;;;:::o;7531:347::-;7596:6;7604;7657:2;7645:9;7636:7;7632:23;7628:32;7625:52;;;7673:1;7670;7663:12;7625:52;7696:29;7715:9;7696:29;:::i;:::-;7686:39;;7775:2;7764:9;7760:18;7747:32;7822:5;7815:13;7808:21;7801:5;7798:32;7788:60;;7844:1;7841;7834:12;7788:60;7867:5;7857:15;;;7531:347;;;;;:::o;7883:537::-;7978:6;7986;7994;8002;8055:3;8043:9;8034:7;8030:23;8026:33;8023:53;;;8072:1;8069;8062:12;8023:53;8095:29;8114:9;8095:29;:::i;:::-;8085:39;;8143:38;8177:2;8166:9;8162:18;8143:38;:::i;:::-;8133:48;;8228:2;8217:9;8213:18;8200:32;8190:42;;8283:2;8272:9;8268:18;8255:32;8310:18;8302:6;8299:30;8296:50;;;8342:1;8339;8332:12;8296:50;8365:49;8406:7;8397:6;8386:9;8382:22;8365:49;:::i;:::-;8355:59;;;7883:537;;;;;;;:::o;8425:260::-;8493:6;8501;8554:2;8542:9;8533:7;8529:23;8525:32;8522:52;;;8570:1;8567;8560:12;8522:52;8593:29;8612:9;8593:29;:::i;:::-;8583:39;;8641:38;8675:2;8664:9;8660:18;8641:38;:::i;8690:380::-;8769:1;8765:12;;;;8812;;;8833:61;;8887:4;8879:6;8875:17;8865:27;;8833:61;8940:2;8932:6;8929:14;8909:18;8906:38;8903:161;;;8986:10;8981:3;8977:20;8974:1;8967:31;9021:4;9018:1;9011:15;9049:4;9046:1;9039:15;8903:161;;8690:380;;;:::o;10315:356::-;10517:2;10499:21;;;10536:18;;;10529:30;10595:34;10590:2;10575:18;;10568:62;10662:2;10647:18;;10315:356::o;10676:413::-;10878:2;10860:21;;;10917:2;10897:18;;;10890:30;10956:34;10951:2;10936:18;;10929:62;-1:-1:-1;;;11022:2:1;11007:18;;11000:47;11079:3;11064:19;;10676:413::o;11911:127::-;11972:10;11967:3;11963:20;11960:1;11953:31;12003:4;12000:1;11993:15;12027:4;12024:1;12017:15;12043:127;12104:10;12099:3;12095:20;12092:1;12085:31;12135:4;12132:1;12125:15;12159:4;12156:1;12149:15;12175:135;12214:3;-1:-1:-1;;12235:17:1;;12232:43;;;12255:18;;:::i;:::-;-1:-1:-1;12302:1:1;12291:13;;12175:135::o;12726:128::-;12766:3;12797:1;12793:6;12790:1;12787:13;12784:39;;;12803:18;;:::i;:::-;-1:-1:-1;12839:9:1;;12726:128::o;14042:168::-;14082:7;14148:1;14144;14140:6;14136:14;14133:1;14130:21;14125:1;14118:9;14111:17;14107:45;14104:71;;;14155:18;;:::i;:::-;-1:-1:-1;14195:9:1;;14042:168::o;16512:470::-;16691:3;16729:6;16723:13;16745:53;16791:6;16786:3;16779:4;16771:6;16767:17;16745:53;:::i;:::-;16861:13;;16820:16;;;;16883:57;16861:13;16820:16;16917:4;16905:17;;16883:57;:::i;:::-;16956:20;;16512:470;-1:-1:-1;;;;16512:470:1:o;18104:125::-;18144:4;18172:1;18169;18166:8;18163:34;;;18177:18;;:::i;:::-;-1:-1:-1;18214:9:1;;18104:125::o;19869:501::-;20056:3;20088:26;20084:31;20157:2;20148:6;20144:2;20140:15;20136:24;20131:3;20124:37;20212:2;20203:6;20199:2;20195:15;20191:24;20186:2;20181:3;20177:12;20170:46;;20245:6;20239:13;20261:62;20316:6;20311:2;20306:3;20302:12;20295:4;20287:6;20283:17;20261:62;:::i;:::-;20343:16;;;;20361:2;20339:25;;19869:501;-1:-1:-1;;;;19869:501:1:o;21490:414::-;21692:2;21674:21;;;21731:2;21711:18;;;21704:30;21770:34;21765:2;21750:18;;21743:62;-1:-1:-1;;;21836:2:1;21821:18;;21814:48;21894:3;21879:19;;21490:414::o;21909:127::-;21970:10;21965:3;21961:20;21958:1;21951:31;22001:4;21998:1;21991:15;22025:4;22022:1;22015:15;22041:120;22081:1;22107;22097:35;;22112:18;;:::i;:::-;-1:-1:-1;22146:9:1;;22041:120::o;22166:112::-;22198:1;22224;22214:35;;22229:18;;:::i;:::-;-1:-1:-1;22263:9:1;;22166:112::o;22668:276::-;22799:3;22837:6;22831:13;22853:53;22899:6;22894:3;22887:4;22879:6;22875:17;22853:53;:::i;:::-;22922:16;;;;;22668:276;-1:-1:-1;;22668:276:1:o;22949:489::-;-1:-1:-1;;;;;23218:15:1;;;23200:34;;23270:15;;23265:2;23250:18;;23243:43;23317:2;23302:18;;23295:34;;;23365:3;23360:2;23345:18;;23338:31;;;23143:4;;23386:46;;23412:19;;23404:6;23386:46;:::i;:::-;23378:54;22949:489;-1:-1:-1;;;;;;22949:489:1:o;23443:249::-;23512:6;23565:2;23553:9;23544:7;23540:23;23536:32;23533:52;;;23581:1;23578;23571:12;23533:52;23613:9;23607:16;23632:30;23656:5;23632:30;:::i;24415:127::-;24476:10;24471:3;24467:20;24464:1;24457:31;24507:4;24504:1;24497:15;24531:4;24528:1;24521:15
Swarm Source
ipfs://a7034cbfc2c4ba41b0df41cfa38bc5d17c20da88fcc52971e0a7414e7ea68e29
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.