Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
3,333 QUEENZ
Holders
2,117
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 QUEENZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KaijuQueenz
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-17 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @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/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } pragma solidity ^0.8.0; contract KaijuQueenz is ERC721, Ownable { using Strings for uint256; string private baseURI; string private blindURI; bytes32 public merkleRoot; uint256 public constant MINT_COST = 0.0666 ether; uint256 public constant MAX_SUPPLY = 3333; uint256 public constant MAX_MINT_PER_TX = 2; uint256 public constant PRESALE_MINT_LIMIT = 2; uint256 public constant MAX_NFTS_PER_PUBLIC_ADDRESS = 2; uint256 public totalSupply; bool public paused = true; bool public reveal; bool public onlyWhitelisted = true; mapping(address => bool) whitelistClaimed; mapping(address => uint256) public addressMintedBalance; mapping(address => uint256) public presaleAddressMintedBalance; event NewMint(address indexed from); event IsPaused(bool state); event IsWhitelisted(bool state); event StopPurchase(); constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initBlindURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI, _initBlindURI); } function whitelistMint(bytes32[] calldata _merkleProof, uint256 _mintAmount) public payable { require(!paused, "Sale is paused"); require(onlyWhitelisted, "Presale is still active"); require(_mintAmount > 0, "Mint amount must be larger than zero"); require(_mintAmount <= MAX_MINT_PER_TX, "Mint amount cannot be greater than max mint per tx"); uint256 supply = totalSupply; require(supply + _mintAmount <= MAX_SUPPLY, "Purchase would exceed max public supply of NFTs"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "User is not whitelisted"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= PRESALE_MINT_LIMIT, "Max presale NFT limit exceeded"); require(msg.value >= MINT_COST * _mintAmount, "Ether value sent is not correct"); if (ownerMintedCount + _mintAmount == PRESALE_MINT_LIMIT) { emit StopPurchase(); } if (!whitelistClaimed[msg.sender]) { whitelistClaimed[msg.sender] = true; } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } presaleAddressMintedBalance[msg.sender] += _mintAmount; addressMintedBalance[msg.sender] += _mintAmount; totalSupply += _mintAmount; emit NewMint(msg.sender); } function publicMint(uint256 _mintAmount) public payable { require(!paused, "Sale is paused"); require(!onlyWhitelisted, "Presale needs to be over"); require(_mintAmount > 0, "Mint amount must be larger than zero"); require(_mintAmount <= MAX_MINT_PER_TX, "Mint amount cannot be greater than max mint per tx"); uint256 supply = totalSupply; require(supply + _mintAmount <= MAX_SUPPLY, "Purchase would exceed max public supply of NFTs"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(msg.value >= MINT_COST * _mintAmount, "Ether value sent is not correct"); bool isWhitelistUser = whitelistClaimed[msg.sender]; if (isWhitelistUser) { uint256 ownerPresaleMintedCount = presaleAddressMintedBalance[msg.sender]; uint256 MAX_NFTS_PER_WHITELIST_ADDRESS = ownerPresaleMintedCount + MAX_MINT_PER_TX; require(ownerMintedCount + _mintAmount <= MAX_NFTS_PER_WHITELIST_ADDRESS, "Max whitelist address NFT limit exceeded"); if (ownerMintedCount + _mintAmount == MAX_NFTS_PER_WHITELIST_ADDRESS) { emit StopPurchase(); } } else { require(ownerMintedCount + _mintAmount <= MAX_NFTS_PER_PUBLIC_ADDRESS, "Max non whitelist address NFT limit exceeded"); if (ownerMintedCount + _mintAmount == MAX_NFTS_PER_PUBLIC_ADDRESS) { emit StopPurchase(); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } addressMintedBalance[msg.sender] += _mintAmount; totalSupply += _mintAmount; emit NewMint(msg.sender); } function ownerMint(uint256 _mintAmount) public onlyOwner { uint256 supply = totalSupply; require(supply + _mintAmount <= MAX_SUPPLY, "Purchase would exceed max public supply of NFTs"); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } totalSupply += _mintAmount; } function verify(bytes32[] memory proof) public view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); return MerkleProof.verify(proof, merkleRoot, leaf); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); if (!reveal) { return string(abi.encodePacked(blindURI)); } else { return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : ""; } } function setBaseURI(string memory _newBaseURI, string memory _newBlindURI) public onlyOwner { baseURI = _newBaseURI; blindURI = _newBlindURI; } function revealNow() public onlyOwner { reveal = true; } function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner { merkleRoot = _merkleRoot; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; emit IsWhitelisted(_state); } function pause(bool _state) public onlyOwner { paused = _state; emit IsPaused(_state); } function withdraw() public onlyOwner { // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initBlindURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"IsPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"IsWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"}],"name":"NewMint","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":[],"name":"StopPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFTS_PER_PUBLIC_ADDRESS","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":"MINT_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleAddressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealNow","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":"_newBaseURI","type":"string"},{"internalType":"string","name":"_newBlindURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600b805462ff00ff1916620100011790553480156200002257600080fd5b5060405162002d2e38038062002d2e8339810160408190526200004591620002e9565b8351849084906200005e9060009060208501906200018c565b508051620000749060019060208401906200018c565b505050620000916200008b620000a760201b60201c565b620000ab565b6200009d8282620000fd565b50505050620003f5565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b031633146200015c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8151620001719060079060208501906200018c565b508051620001879060089060208401906200018c565b505050565b8280546200019a90620003a2565b90600052602060002090601f016020900481019282620001be576000855562000209565b82601f10620001d957805160ff191683800117855562000209565b8280016001018555821562000209579182015b8281111562000209578251825591602001919060010190620001ec565b50620002179291506200021b565b5090565b5b808211156200021757600081556001016200021c565b600082601f8301126200024457600080fd5b81516001600160401b0380821115620002615762000261620003df565b604051601f8301601f19908116603f011681019082821181831017156200028c576200028c620003df565b81604052838152602092508683858801011115620002a957600080fd5b600091505b83821015620002cd5785820183015181830184015290820190620002ae565b83821115620002df5760008385830101525b9695505050505050565b600080600080608085870312156200030057600080fd5b84516001600160401b03808211156200031857600080fd5b620003268883890162000232565b955060208701519150808211156200033d57600080fd5b6200034b8883890162000232565b945060408701519150808211156200036257600080fd5b620003708883890162000232565b935060608701519150808211156200038757600080fd5b50620003968782880162000232565b91505092959194509250565b600181811c90821680620003b757607f821691505b60208210811415620003d957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61292980620004056000396000f3fe6080604052600436106102255760003560e01c80636790a9de11610123578063a22cb465116100ab578063c87b56dd1161006f578063c87b56dd14610606578063e985e9c514610626578063f19e75d41461066f578063f2fde38b1461068f578063f5ebec801461052257600080fd5b8063a22cb4651461058c578063a475b5dd146105ac578063b88d4fde146105cb578063c0847fd314610522578063c662e481146105eb57600080fd5b80638da5cb5b116100f25780638da5cb5b146105045780638ecad7211461052257806395d89b4114610537578063976116381461054c5780639c70b5121461056c57600080fd5b80636790a9de1461048f57806370a08231146104af578063715018a6146104cf5780637cb64759146104e457600080fd5b80632904e6d9116101b15780633ccfd60b116101755780633ccfd60b1461040b57806342842e0e146104205780635c975abb146104405780635f0f45b21461045a5780636352211e1461046f57600080fd5b80632904e6d9146103995780632db11544146103ac5780632eb4a7ab146103bf57806332cb6b0c146103d55780633c952764146103eb57600080fd5b8063081812fc116101f8578063081812fc146102de578063095ea7b31461031657806318160ddd1461033657806318cae2691461034c57806323b872dd1461037957600080fd5b806301a592dc1461022a57806301ffc9a71461026a57806302329a291461029a57806306fdde03146102bc575b600080fd5b34801561023657600080fd5b506102576102453660046120f4565b600e6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561027657600080fd5b5061028a6102853660046123aa565b6106af565b6040519015158152602001610261565b3480156102a657600080fd5b506102ba6102b5366004612376565b610701565b005b3480156102c857600080fd5b506102d161077c565b604051610261919061258c565b3480156102ea57600080fd5b506102fe6102f9366004612391565b61080e565b6040516001600160a01b039091168152602001610261565b34801561032257600080fd5b506102ba610331366004612224565b6108a3565b34801561034257600080fd5b50610257600a5481565b34801561035857600080fd5b506102576103673660046120f4565b600d6020526000908152604090205481565b34801561038557600080fd5b506102ba610394366004612142565b6109b9565b6102ba6103a736600461224e565b6109ea565b6102ba6103ba366004612391565b610db7565b3480156103cb57600080fd5b5061025760095481565b3480156103e157600080fd5b50610257610d0581565b3480156103f757600080fd5b506102ba610406366004612376565b61115a565b34801561041757600080fd5b506102ba6111cf565b34801561042c57600080fd5b506102ba61043b366004612142565b61126d565b34801561044c57600080fd5b50600b5461028a9060ff1681565b34801561046657600080fd5b506102ba611288565b34801561047b57600080fd5b506102fe61048a366004612391565b6112c3565b34801561049b57600080fd5b506102ba6104aa3660046123e4565b61133a565b3480156104bb57600080fd5b506102576104ca3660046120f4565b61138b565b3480156104db57600080fd5b506102ba611412565b3480156104f057600080fd5b506102ba6104ff366004612391565b611448565b34801561051057600080fd5b506006546001600160a01b03166102fe565b34801561052e57600080fd5b50610257600281565b34801561054357600080fd5b506102d1611477565b34801561055857600080fd5b5061028a6105673660046122c9565b611486565b34801561057857600080fd5b50600b5461028a9062010000900460ff1681565b34801561059857600080fd5b506102ba6105a73660046121fa565b6114d5565b3480156105b857600080fd5b50600b5461028a90610100900460ff1681565b3480156105d757600080fd5b506102ba6105e636600461217e565b61159a565b3480156105f757600080fd5b5061025766ec9c58de0a800081565b34801561061257600080fd5b506102d1610621366004612391565b6115d2565b34801561063257600080fd5b5061028a61064136600461210f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561067b57600080fd5b506102ba61068a366004612391565b6116d4565b34801561069b57600080fd5b506102ba6106aa3660046120f4565b611772565b60006001600160e01b031982166380ac58cd60e01b14806106e057506001600160e01b03198216635b5e139f60e01b145b806106fb57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146107345760405162461bcd60e51b815260040161072b90612687565b60405180910390fd5b600b805460ff19168215159081179091556040519081527fff4a5dbbab6b1963d10f5edd139f33a7987ecb3c4f65969be77ddba28d946594906020015b60405180910390a150565b60606000805461078b9061281b565b80601f01602080910402602001604051908101604052809291908181526020018280546107b79061281b565b80156108045780601f106107d957610100808354040283529160200191610804565b820191906000526020600020905b8154815290600101906020018083116107e757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108875760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161072b565b506000908152600460205260409020546001600160a01b031690565b60006108ae826112c3565b9050806001600160a01b0316836001600160a01b0316141561091c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161072b565b336001600160a01b038216148061093857506109388133610641565b6109aa5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161072b565b6109b4838361180a565b505050565b6109c33382611878565b6109df5760405162461bcd60e51b815260040161072b9061270b565b6109b483838361196f565b600b5460ff1615610a2e5760405162461bcd60e51b815260206004820152600e60248201526d14d85b19481a5cc81c185d5cd95960921b604482015260640161072b565b600b5462010000900460ff16610a865760405162461bcd60e51b815260206004820152601760248201527f50726573616c65206973207374696c6c20616374697665000000000000000000604482015260640161072b565b60008111610aa65760405162461bcd60e51b815260040161072b906125f1565b6002811115610ac75760405162461bcd60e51b815260040161072b90612635565b600a54610d05610ad7838361278d565b1115610af55760405162461bcd60e51b815260040161072b906126bc565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610b6f858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506009549150849050611b0f565b610bbb5760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f742077686974656c6973746564000000000000000000604482015260640161072b565b336000908152600d60205260409020546002610bd7858361278d565b1115610c255760405162461bcd60e51b815260206004820152601e60248201527f4d61782070726573616c65204e4654206c696d69742065786365656465640000604482015260640161072b565b610c368466ec9c58de0a80006127b9565b341015610c855760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f727265637400604482015260640161072b565b6002610c91858361278d565b1415610cc1576040517f53ce9f6beb48d1bab096ecb721230565d78aa641c1c5a6e3b8230df64bc2435f90600090a15b336000908152600c602052604090205460ff16610cf357336000908152600c60205260409020805460ff191660011790555b60015b848111610d2257610d1033610d0b838761278d565b611b25565b80610d1a81612856565b915050610cf6565b50336000908152600e602052604081208054869290610d4290849061278d565b9091555050336000908152600d602052604081208054869290610d6690849061278d565b9250508190555083600a6000828254610d7f919061278d565b909155505060405133907f8b2c278f73c005e759168a8c2349ca23121267b31389820c9faa1b8acb51a8c990600090a2505050505050565b600b5460ff1615610dfb5760405162461bcd60e51b815260206004820152600e60248201526d14d85b19481a5cc81c185d5cd95960921b604482015260640161072b565b600b5462010000900460ff1615610e545760405162461bcd60e51b815260206004820152601860248201527f50726573616c65206e6565647320746f206265206f7665720000000000000000604482015260640161072b565b60008111610e745760405162461bcd60e51b815260040161072b906125f1565b6002811115610e955760405162461bcd60e51b815260040161072b90612635565b600a54610d05610ea5838361278d565b1115610ec35760405162461bcd60e51b815260040161072b906126bc565b336000908152600d6020526040902054610ee48366ec9c58de0a80006127b9565b341015610f335760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f727265637400604482015260640161072b565b336000908152600c602052604090205460ff16801561101657336000908152600e602052604081205490610f6860028361278d565b905080610f75878661278d565b1115610fd45760405162461bcd60e51b815260206004820152602860248201527f4d61782077686974656c6973742061646472657373204e4654206c696d697420604482015267195e18d95959195960c21b606482015260840161072b565b80610fdf878661278d565b141561100f576040517f53ce9f6beb48d1bab096ecb721230565d78aa641c1c5a6e3b8230df64bc2435f90600090a15b50506110c1565b6002611022858461278d565b11156110855760405162461bcd60e51b815260206004820152602c60248201527f4d6178206e6f6e2077686974656c6973742061646472657373204e4654206c6960448201526b1b5a5d08195e18d95959195960a21b606482015260840161072b565b6002611091858461278d565b14156110c1576040517f53ce9f6beb48d1bab096ecb721230565d78aa641c1c5a6e3b8230df64bc2435f90600090a15b60015b8481116110eb576110d933610d0b838761278d565b806110e381612856565b9150506110c4565b50336000908152600d60205260408120805486929061110b90849061278d565b9250508190555083600a6000828254611124919061278d565b909155505060405133907f8b2c278f73c005e759168a8c2349ca23121267b31389820c9faa1b8acb51a8c990600090a250505050565b6006546001600160a01b031633146111845760405162461bcd60e51b815260040161072b90612687565b600b8054821515620100000262ff0000199091161790556040517f619d866d0017dabc38dd622f97867d0b1ac32882b731148a222f7d8a9610b34f9061077190831515815260200190565b6006546001600160a01b031633146111f95760405162461bcd60e51b815260040161072b90612687565b600061120d6006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611257576040519150601f19603f3d011682016040523d82523d6000602084013e61125c565b606091505b505090508061126a57600080fd5b50565b6109b48383836040518060200160405280600081525061159a565b6006546001600160a01b031633146112b25760405162461bcd60e51b815260040161072b90612687565b600b805461ff001916610100179055565b6000818152600260205260408120546001600160a01b0316806106fb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161072b565b6006546001600160a01b031633146113645760405162461bcd60e51b815260040161072b90612687565b8151611377906007906020850190611fbc565b5080516109b4906008906020840190611fbc565b60006001600160a01b0382166113f65760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161072b565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331461143c5760405162461bcd60e51b815260040161072b90612687565b6114466000611b43565b565b6006546001600160a01b031633146114725760405162461bcd60e51b815260040161072b90612687565b600955565b60606001805461078b9061281b565b6040516bffffffffffffffffffffffff193360601b16602082015260009081906034016040516020818303038152906040528051906020012090506114ce8360095483611b0f565b9392505050565b6001600160a01b03821633141561152e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161072b565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6115a43383611878565b6115c05760405162461bcd60e51b815260040161072b9061270b565b6115cc84848484611b95565b50505050565b6000818152600260205260409020546060906001600160a01b03166116515760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161072b565b600b54610100900460ff16611688576008604051602001611672919061250e565b6040516020818303038152906040529050919050565b6000600780546116979061281b565b9050116116b357604051806020016040528060008152506106fb565b60076116be83611bc8565b60405160200161167292919061251a565b919050565b6006546001600160a01b031633146116fe5760405162461bcd60e51b815260040161072b90612687565b600a54610d0561170e838361278d565b111561172c5760405162461bcd60e51b815260040161072b906126bc565b60015b8281116117565761174433610d0b838561278d565b8061174e81612856565b91505061172f565b5081600a6000828254611769919061278d565b90915550505050565b6006546001600160a01b0316331461179c5760405162461bcd60e51b815260040161072b90612687565b6001600160a01b0381166118015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161072b565b61126a81611b43565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061183f826112c3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118f15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161072b565b60006118fc836112c3565b9050806001600160a01b0316846001600160a01b031614806119375750836001600160a01b031661192c8461080e565b6001600160a01b0316145b8061196757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611982826112c3565b6001600160a01b0316146119ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161072b565b6001600160a01b038216611a4c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161072b565b611a5760008261180a565b6001600160a01b0383166000908152600360205260408120805460019290611a809084906127d8565b90915550506001600160a01b0382166000908152600360205260408120805460019290611aae90849061278d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600082611b1c8584611cc6565b14949350505050565b611b3f828260405180602001604052806000815250611d3a565b5050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611ba084848461196f565b611bac84848484611d6d565b6115cc5760405162461bcd60e51b815260040161072b9061259f565b606081611bec5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c165780611c0081612856565b9150611c0f9050600a836127a5565b9150611bf0565b60008167ffffffffffffffff811115611c3157611c316128c7565b6040519080825280601f01601f191660200182016040528015611c5b576020820181803683370190505b5090505b841561196757611c706001836127d8565b9150611c7d600a86612871565b611c8890603061278d565b60f81b818381518110611c9d57611c9d6128b1565b60200101906001600160f81b031916908160001a905350611cbf600a866127a5565b9450611c5f565b600081815b8451811015611d32576000858281518110611ce857611ce86128b1565b60200260200101519050808311611d0e5760008381526020829052604090209250611d1f565b600081815260208490526040902092505b5080611d2a81612856565b915050611ccb565b509392505050565b611d448383611e7a565b611d516000848484611d6d565b6109b45760405162461bcd60e51b815260040161072b9061259f565b60006001600160a01b0384163b15611e6f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611db190339089908890889060040161254f565b602060405180830381600087803b158015611dcb57600080fd5b505af1925050508015611dfb575060408051601f3d908101601f19168201909252611df8918101906123c7565b60015b611e55573d808015611e29576040519150601f19603f3d011682016040523d82523d6000602084013e611e2e565b606091505b508051611e4d5760405162461bcd60e51b815260040161072b9061259f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611967565b506001949350505050565b6001600160a01b038216611ed05760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161072b565b6000818152600260205260409020546001600160a01b031615611f355760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161072b565b6001600160a01b0382166000908152600360205260408120805460019290611f5e90849061278d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611fc89061281b565b90600052602060002090601f016020900481019282611fea5760008555612030565b82601f1061200357805160ff1916838001178555612030565b82800160010185558215612030579182015b82811115612030578251825591602001919060010190612015565b5061203c929150612040565b5090565b5b8082111561203c5760008155600101612041565b600067ffffffffffffffff83111561206f5761206f6128c7565b612082601f8401601f191660200161275c565b905082815283838301111561209657600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146116cf57600080fd5b803580151581146116cf57600080fd5b600082601f8301126120e557600080fd5b6114ce83833560208501612055565b60006020828403121561210657600080fd5b6114ce826120ad565b6000806040838503121561212257600080fd5b61212b836120ad565b9150612139602084016120ad565b90509250929050565b60008060006060848603121561215757600080fd5b612160846120ad565b925061216e602085016120ad565b9150604084013590509250925092565b6000806000806080858703121561219457600080fd5b61219d856120ad565b93506121ab602086016120ad565b925060408501359150606085013567ffffffffffffffff8111156121ce57600080fd5b8501601f810187136121df57600080fd5b6121ee87823560208401612055565b91505092959194509250565b6000806040838503121561220d57600080fd5b612216836120ad565b9150612139602084016120c4565b6000806040838503121561223757600080fd5b612240836120ad565b946020939093013593505050565b60008060006040848603121561226357600080fd5b833567ffffffffffffffff8082111561227b57600080fd5b818601915086601f83011261228f57600080fd5b81358181111561229e57600080fd5b8760208260051b85010111156122b357600080fd5b6020928301989097509590910135949350505050565b600060208083850312156122dc57600080fd5b823567ffffffffffffffff808211156122f457600080fd5b818501915085601f83011261230857600080fd5b81358181111561231a5761231a6128c7565b8060051b915061232b84830161275c565b8181528481019084860184860187018a101561234657600080fd5b600095505b8386101561236957803583526001959095019491860191860161234b565b5098975050505050505050565b60006020828403121561238857600080fd5b6114ce826120c4565b6000602082840312156123a357600080fd5b5035919050565b6000602082840312156123bc57600080fd5b81356114ce816128dd565b6000602082840312156123d957600080fd5b81516114ce816128dd565b600080604083850312156123f757600080fd5b823567ffffffffffffffff8082111561240f57600080fd5b61241b868387016120d4565b9350602085013591508082111561243157600080fd5b5061243e858286016120d4565b9150509250929050565b600081518084526124608160208601602086016127ef565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061248e57607f831692505b60208084108214156124b057634e487b7160e01b600052602260045260246000fd5b8180156124c457600181146124d557612502565b60ff19861689528489019650612502565b60008881526020902060005b868110156124fa5781548b8201529085019083016124e1565b505084890196505b50505050505092915050565b60006114ce8284612474565b60006125268285612474565b83516125368183602088016127ef565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061258290830184612448565b9695505050505050565b6020815260006114ce6020830184612448565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526024908201527f4d696e7420616d6f756e74206d757374206265206c6172676572207468616e206040820152637a65726f60e01b606082015260800190565b60208082526032908201527f4d696e7420616d6f756e742063616e6e6f7420626520677265617465722074686040820152710c2dc40dac2f040dad2dce840e0cae440e8f60731b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f507572636861736520776f756c6420657863656564206d6178207075626c696360408201526e20737570706c79206f66204e46547360881b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612785576127856128c7565b604052919050565b600082198211156127a0576127a0612885565b500190565b6000826127b4576127b461289b565b500490565b60008160001904831182151516156127d3576127d3612885565b500290565b6000828210156127ea576127ea612885565b500390565b60005b8381101561280a5781810151838201526020016127f2565b838111156115cc5750506000910152565b600181811c9082168061282f57607f821691505b6020821081141561285057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561286a5761286a612885565b5060010190565b6000826128805761288061289b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461126a57600080fdfea2646970667358221220486af4843c2362fc108606ecdb7996bc44bc995da6d6dcecbbe4a84fd0e1c87c64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000c4b61696a7520517565656e7a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006515545454e5a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d646757567a343262526748564c45774e7843556e664b657a6b48475464536f415858587553384346377670432f68696464656e2e6a736f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d646757567a343262526748564c45774e7843556e664b657a6b48475464536f415858587553384346377670432f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102255760003560e01c80636790a9de11610123578063a22cb465116100ab578063c87b56dd1161006f578063c87b56dd14610606578063e985e9c514610626578063f19e75d41461066f578063f2fde38b1461068f578063f5ebec801461052257600080fd5b8063a22cb4651461058c578063a475b5dd146105ac578063b88d4fde146105cb578063c0847fd314610522578063c662e481146105eb57600080fd5b80638da5cb5b116100f25780638da5cb5b146105045780638ecad7211461052257806395d89b4114610537578063976116381461054c5780639c70b5121461056c57600080fd5b80636790a9de1461048f57806370a08231146104af578063715018a6146104cf5780637cb64759146104e457600080fd5b80632904e6d9116101b15780633ccfd60b116101755780633ccfd60b1461040b57806342842e0e146104205780635c975abb146104405780635f0f45b21461045a5780636352211e1461046f57600080fd5b80632904e6d9146103995780632db11544146103ac5780632eb4a7ab146103bf57806332cb6b0c146103d55780633c952764146103eb57600080fd5b8063081812fc116101f8578063081812fc146102de578063095ea7b31461031657806318160ddd1461033657806318cae2691461034c57806323b872dd1461037957600080fd5b806301a592dc1461022a57806301ffc9a71461026a57806302329a291461029a57806306fdde03146102bc575b600080fd5b34801561023657600080fd5b506102576102453660046120f4565b600e6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561027657600080fd5b5061028a6102853660046123aa565b6106af565b6040519015158152602001610261565b3480156102a657600080fd5b506102ba6102b5366004612376565b610701565b005b3480156102c857600080fd5b506102d161077c565b604051610261919061258c565b3480156102ea57600080fd5b506102fe6102f9366004612391565b61080e565b6040516001600160a01b039091168152602001610261565b34801561032257600080fd5b506102ba610331366004612224565b6108a3565b34801561034257600080fd5b50610257600a5481565b34801561035857600080fd5b506102576103673660046120f4565b600d6020526000908152604090205481565b34801561038557600080fd5b506102ba610394366004612142565b6109b9565b6102ba6103a736600461224e565b6109ea565b6102ba6103ba366004612391565b610db7565b3480156103cb57600080fd5b5061025760095481565b3480156103e157600080fd5b50610257610d0581565b3480156103f757600080fd5b506102ba610406366004612376565b61115a565b34801561041757600080fd5b506102ba6111cf565b34801561042c57600080fd5b506102ba61043b366004612142565b61126d565b34801561044c57600080fd5b50600b5461028a9060ff1681565b34801561046657600080fd5b506102ba611288565b34801561047b57600080fd5b506102fe61048a366004612391565b6112c3565b34801561049b57600080fd5b506102ba6104aa3660046123e4565b61133a565b3480156104bb57600080fd5b506102576104ca3660046120f4565b61138b565b3480156104db57600080fd5b506102ba611412565b3480156104f057600080fd5b506102ba6104ff366004612391565b611448565b34801561051057600080fd5b506006546001600160a01b03166102fe565b34801561052e57600080fd5b50610257600281565b34801561054357600080fd5b506102d1611477565b34801561055857600080fd5b5061028a6105673660046122c9565b611486565b34801561057857600080fd5b50600b5461028a9062010000900460ff1681565b34801561059857600080fd5b506102ba6105a73660046121fa565b6114d5565b3480156105b857600080fd5b50600b5461028a90610100900460ff1681565b3480156105d757600080fd5b506102ba6105e636600461217e565b61159a565b3480156105f757600080fd5b5061025766ec9c58de0a800081565b34801561061257600080fd5b506102d1610621366004612391565b6115d2565b34801561063257600080fd5b5061028a61064136600461210f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561067b57600080fd5b506102ba61068a366004612391565b6116d4565b34801561069b57600080fd5b506102ba6106aa3660046120f4565b611772565b60006001600160e01b031982166380ac58cd60e01b14806106e057506001600160e01b03198216635b5e139f60e01b145b806106fb57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146107345760405162461bcd60e51b815260040161072b90612687565b60405180910390fd5b600b805460ff19168215159081179091556040519081527fff4a5dbbab6b1963d10f5edd139f33a7987ecb3c4f65969be77ddba28d946594906020015b60405180910390a150565b60606000805461078b9061281b565b80601f01602080910402602001604051908101604052809291908181526020018280546107b79061281b565b80156108045780601f106107d957610100808354040283529160200191610804565b820191906000526020600020905b8154815290600101906020018083116107e757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108875760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161072b565b506000908152600460205260409020546001600160a01b031690565b60006108ae826112c3565b9050806001600160a01b0316836001600160a01b0316141561091c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161072b565b336001600160a01b038216148061093857506109388133610641565b6109aa5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161072b565b6109b4838361180a565b505050565b6109c33382611878565b6109df5760405162461bcd60e51b815260040161072b9061270b565b6109b483838361196f565b600b5460ff1615610a2e5760405162461bcd60e51b815260206004820152600e60248201526d14d85b19481a5cc81c185d5cd95960921b604482015260640161072b565b600b5462010000900460ff16610a865760405162461bcd60e51b815260206004820152601760248201527f50726573616c65206973207374696c6c20616374697665000000000000000000604482015260640161072b565b60008111610aa65760405162461bcd60e51b815260040161072b906125f1565b6002811115610ac75760405162461bcd60e51b815260040161072b90612635565b600a54610d05610ad7838361278d565b1115610af55760405162461bcd60e51b815260040161072b906126bc565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610b6f858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506009549150849050611b0f565b610bbb5760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f742077686974656c6973746564000000000000000000604482015260640161072b565b336000908152600d60205260409020546002610bd7858361278d565b1115610c255760405162461bcd60e51b815260206004820152601e60248201527f4d61782070726573616c65204e4654206c696d69742065786365656465640000604482015260640161072b565b610c368466ec9c58de0a80006127b9565b341015610c855760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f727265637400604482015260640161072b565b6002610c91858361278d565b1415610cc1576040517f53ce9f6beb48d1bab096ecb721230565d78aa641c1c5a6e3b8230df64bc2435f90600090a15b336000908152600c602052604090205460ff16610cf357336000908152600c60205260409020805460ff191660011790555b60015b848111610d2257610d1033610d0b838761278d565b611b25565b80610d1a81612856565b915050610cf6565b50336000908152600e602052604081208054869290610d4290849061278d565b9091555050336000908152600d602052604081208054869290610d6690849061278d565b9250508190555083600a6000828254610d7f919061278d565b909155505060405133907f8b2c278f73c005e759168a8c2349ca23121267b31389820c9faa1b8acb51a8c990600090a2505050505050565b600b5460ff1615610dfb5760405162461bcd60e51b815260206004820152600e60248201526d14d85b19481a5cc81c185d5cd95960921b604482015260640161072b565b600b5462010000900460ff1615610e545760405162461bcd60e51b815260206004820152601860248201527f50726573616c65206e6565647320746f206265206f7665720000000000000000604482015260640161072b565b60008111610e745760405162461bcd60e51b815260040161072b906125f1565b6002811115610e955760405162461bcd60e51b815260040161072b90612635565b600a54610d05610ea5838361278d565b1115610ec35760405162461bcd60e51b815260040161072b906126bc565b336000908152600d6020526040902054610ee48366ec9c58de0a80006127b9565b341015610f335760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f727265637400604482015260640161072b565b336000908152600c602052604090205460ff16801561101657336000908152600e602052604081205490610f6860028361278d565b905080610f75878661278d565b1115610fd45760405162461bcd60e51b815260206004820152602860248201527f4d61782077686974656c6973742061646472657373204e4654206c696d697420604482015267195e18d95959195960c21b606482015260840161072b565b80610fdf878661278d565b141561100f576040517f53ce9f6beb48d1bab096ecb721230565d78aa641c1c5a6e3b8230df64bc2435f90600090a15b50506110c1565b6002611022858461278d565b11156110855760405162461bcd60e51b815260206004820152602c60248201527f4d6178206e6f6e2077686974656c6973742061646472657373204e4654206c6960448201526b1b5a5d08195e18d95959195960a21b606482015260840161072b565b6002611091858461278d565b14156110c1576040517f53ce9f6beb48d1bab096ecb721230565d78aa641c1c5a6e3b8230df64bc2435f90600090a15b60015b8481116110eb576110d933610d0b838761278d565b806110e381612856565b9150506110c4565b50336000908152600d60205260408120805486929061110b90849061278d565b9250508190555083600a6000828254611124919061278d565b909155505060405133907f8b2c278f73c005e759168a8c2349ca23121267b31389820c9faa1b8acb51a8c990600090a250505050565b6006546001600160a01b031633146111845760405162461bcd60e51b815260040161072b90612687565b600b8054821515620100000262ff0000199091161790556040517f619d866d0017dabc38dd622f97867d0b1ac32882b731148a222f7d8a9610b34f9061077190831515815260200190565b6006546001600160a01b031633146111f95760405162461bcd60e51b815260040161072b90612687565b600061120d6006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611257576040519150601f19603f3d011682016040523d82523d6000602084013e61125c565b606091505b505090508061126a57600080fd5b50565b6109b48383836040518060200160405280600081525061159a565b6006546001600160a01b031633146112b25760405162461bcd60e51b815260040161072b90612687565b600b805461ff001916610100179055565b6000818152600260205260408120546001600160a01b0316806106fb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161072b565b6006546001600160a01b031633146113645760405162461bcd60e51b815260040161072b90612687565b8151611377906007906020850190611fbc565b5080516109b4906008906020840190611fbc565b60006001600160a01b0382166113f65760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161072b565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331461143c5760405162461bcd60e51b815260040161072b90612687565b6114466000611b43565b565b6006546001600160a01b031633146114725760405162461bcd60e51b815260040161072b90612687565b600955565b60606001805461078b9061281b565b6040516bffffffffffffffffffffffff193360601b16602082015260009081906034016040516020818303038152906040528051906020012090506114ce8360095483611b0f565b9392505050565b6001600160a01b03821633141561152e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161072b565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6115a43383611878565b6115c05760405162461bcd60e51b815260040161072b9061270b565b6115cc84848484611b95565b50505050565b6000818152600260205260409020546060906001600160a01b03166116515760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161072b565b600b54610100900460ff16611688576008604051602001611672919061250e565b6040516020818303038152906040529050919050565b6000600780546116979061281b565b9050116116b357604051806020016040528060008152506106fb565b60076116be83611bc8565b60405160200161167292919061251a565b919050565b6006546001600160a01b031633146116fe5760405162461bcd60e51b815260040161072b90612687565b600a54610d0561170e838361278d565b111561172c5760405162461bcd60e51b815260040161072b906126bc565b60015b8281116117565761174433610d0b838561278d565b8061174e81612856565b91505061172f565b5081600a6000828254611769919061278d565b90915550505050565b6006546001600160a01b0316331461179c5760405162461bcd60e51b815260040161072b90612687565b6001600160a01b0381166118015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161072b565b61126a81611b43565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061183f826112c3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118f15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161072b565b60006118fc836112c3565b9050806001600160a01b0316846001600160a01b031614806119375750836001600160a01b031661192c8461080e565b6001600160a01b0316145b8061196757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611982826112c3565b6001600160a01b0316146119ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161072b565b6001600160a01b038216611a4c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161072b565b611a5760008261180a565b6001600160a01b0383166000908152600360205260408120805460019290611a809084906127d8565b90915550506001600160a01b0382166000908152600360205260408120805460019290611aae90849061278d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600082611b1c8584611cc6565b14949350505050565b611b3f828260405180602001604052806000815250611d3a565b5050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611ba084848461196f565b611bac84848484611d6d565b6115cc5760405162461bcd60e51b815260040161072b9061259f565b606081611bec5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c165780611c0081612856565b9150611c0f9050600a836127a5565b9150611bf0565b60008167ffffffffffffffff811115611c3157611c316128c7565b6040519080825280601f01601f191660200182016040528015611c5b576020820181803683370190505b5090505b841561196757611c706001836127d8565b9150611c7d600a86612871565b611c8890603061278d565b60f81b818381518110611c9d57611c9d6128b1565b60200101906001600160f81b031916908160001a905350611cbf600a866127a5565b9450611c5f565b600081815b8451811015611d32576000858281518110611ce857611ce86128b1565b60200260200101519050808311611d0e5760008381526020829052604090209250611d1f565b600081815260208490526040902092505b5080611d2a81612856565b915050611ccb565b509392505050565b611d448383611e7a565b611d516000848484611d6d565b6109b45760405162461bcd60e51b815260040161072b9061259f565b60006001600160a01b0384163b15611e6f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611db190339089908890889060040161254f565b602060405180830381600087803b158015611dcb57600080fd5b505af1925050508015611dfb575060408051601f3d908101601f19168201909252611df8918101906123c7565b60015b611e55573d808015611e29576040519150601f19603f3d011682016040523d82523d6000602084013e611e2e565b606091505b508051611e4d5760405162461bcd60e51b815260040161072b9061259f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611967565b506001949350505050565b6001600160a01b038216611ed05760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161072b565b6000818152600260205260409020546001600160a01b031615611f355760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161072b565b6001600160a01b0382166000908152600360205260408120805460019290611f5e90849061278d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611fc89061281b565b90600052602060002090601f016020900481019282611fea5760008555612030565b82601f1061200357805160ff1916838001178555612030565b82800160010185558215612030579182015b82811115612030578251825591602001919060010190612015565b5061203c929150612040565b5090565b5b8082111561203c5760008155600101612041565b600067ffffffffffffffff83111561206f5761206f6128c7565b612082601f8401601f191660200161275c565b905082815283838301111561209657600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146116cf57600080fd5b803580151581146116cf57600080fd5b600082601f8301126120e557600080fd5b6114ce83833560208501612055565b60006020828403121561210657600080fd5b6114ce826120ad565b6000806040838503121561212257600080fd5b61212b836120ad565b9150612139602084016120ad565b90509250929050565b60008060006060848603121561215757600080fd5b612160846120ad565b925061216e602085016120ad565b9150604084013590509250925092565b6000806000806080858703121561219457600080fd5b61219d856120ad565b93506121ab602086016120ad565b925060408501359150606085013567ffffffffffffffff8111156121ce57600080fd5b8501601f810187136121df57600080fd5b6121ee87823560208401612055565b91505092959194509250565b6000806040838503121561220d57600080fd5b612216836120ad565b9150612139602084016120c4565b6000806040838503121561223757600080fd5b612240836120ad565b946020939093013593505050565b60008060006040848603121561226357600080fd5b833567ffffffffffffffff8082111561227b57600080fd5b818601915086601f83011261228f57600080fd5b81358181111561229e57600080fd5b8760208260051b85010111156122b357600080fd5b6020928301989097509590910135949350505050565b600060208083850312156122dc57600080fd5b823567ffffffffffffffff808211156122f457600080fd5b818501915085601f83011261230857600080fd5b81358181111561231a5761231a6128c7565b8060051b915061232b84830161275c565b8181528481019084860184860187018a101561234657600080fd5b600095505b8386101561236957803583526001959095019491860191860161234b565b5098975050505050505050565b60006020828403121561238857600080fd5b6114ce826120c4565b6000602082840312156123a357600080fd5b5035919050565b6000602082840312156123bc57600080fd5b81356114ce816128dd565b6000602082840312156123d957600080fd5b81516114ce816128dd565b600080604083850312156123f757600080fd5b823567ffffffffffffffff8082111561240f57600080fd5b61241b868387016120d4565b9350602085013591508082111561243157600080fd5b5061243e858286016120d4565b9150509250929050565b600081518084526124608160208601602086016127ef565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061248e57607f831692505b60208084108214156124b057634e487b7160e01b600052602260045260246000fd5b8180156124c457600181146124d557612502565b60ff19861689528489019650612502565b60008881526020902060005b868110156124fa5781548b8201529085019083016124e1565b505084890196505b50505050505092915050565b60006114ce8284612474565b60006125268285612474565b83516125368183602088016127ef565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061258290830184612448565b9695505050505050565b6020815260006114ce6020830184612448565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526024908201527f4d696e7420616d6f756e74206d757374206265206c6172676572207468616e206040820152637a65726f60e01b606082015260800190565b60208082526032908201527f4d696e7420616d6f756e742063616e6e6f7420626520677265617465722074686040820152710c2dc40dac2f040dad2dce840e0cae440e8f60731b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f507572636861736520776f756c6420657863656564206d6178207075626c696360408201526e20737570706c79206f66204e46547360881b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612785576127856128c7565b604052919050565b600082198211156127a0576127a0612885565b500190565b6000826127b4576127b461289b565b500490565b60008160001904831182151516156127d3576127d3612885565b500290565b6000828210156127ea576127ea612885565b500390565b60005b8381101561280a5781810151838201526020016127f2565b838111156115cc5750506000910152565b600181811c9082168061282f57607f821691505b6020821081141561285057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561286a5761286a612885565b5060010190565b6000826128805761288061289b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461126a57600080fdfea2646970667358221220486af4843c2362fc108606ecdb7996bc44bc995da6d6dcecbbe4a84fd0e1c87c64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000c4b61696a7520517565656e7a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006515545454e5a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d646757567a343262526748564c45774e7843556e664b657a6b48475464536f415858587553384346377670432f68696464656e2e6a736f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d646757567a343262526748564c45774e7843556e664b657a6b48475464536f415858587553384346377670432f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Kaiju Queenz
Arg [1] : _symbol (string): QUEENZ
Arg [2] : _initBaseURI (string): ipfs://QmdgWVz42bRgHVLEwNxCUnfKezkHGTdSoAXXXuS8CF7vpC/hidden.json
Arg [3] : _initBlindURI (string): ipfs://QmdgWVz42bRgHVLEwNxCUnfKezkHGTdSoAXXXuS8CF7vpC/hidden.json
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [5] : 4b61696a7520517565656e7a0000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 515545454e5a0000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [9] : 697066733a2f2f516d646757567a343262526748564c45774e7843556e664b65
Arg [10] : 7a6b48475464536f415858587553384346377670432f68696464656e2e6a736f
Arg [11] : 6e00000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [13] : 697066733a2f2f516d646757567a343262526748564c45774e7843556e664b65
Arg [14] : 7a6b48475464536f415858587553384346377670432f68696464656e2e6a736f
Arg [15] : 6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
37247:6566:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37938:62;;;;;;;;;;-1:-1:-1;37938:62:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;9708:25:1;;;9696:2;9681:18;37938:62:0;;;;;;;;20626:305;;;;;;;;;;-1:-1:-1;20626:305:0;;;;;:::i;:::-;;:::i;:::-;;;9535:14:1;;9528:22;9510:41;;9498:2;9483:18;20626:305:0;9370:187:1;43275:111:0;;;;;;;;;;-1:-1:-1;43275:111:0;;;;;:::i;:::-;;:::i;:::-;;21571:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23130:221::-;;;;;;;;;;-1:-1:-1;23130:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8833:32:1;;;8815:51;;8803:2;8788:18;23130:221:0;8669:203:1;22653:411:0;;;;;;;;;;-1:-1:-1;22653:411:0;;;;;:::i;:::-;;:::i;37693:26::-;;;;;;;;;;;;;;;;37876:55;;;;;;;;;;-1:-1:-1;37876:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;24020:339;;;;;;;;;;-1:-1:-1;24020:339:0;;;;;:::i;:::-;;:::i;38396:1508::-;;;;;;:::i;:::-;;:::i;39912:1764::-;;;;;;:::i;:::-;;:::i;37391:25::-;;;;;;;;;;;;;;;;37480:41;;;;;;;;;;;;37517:4;37480:41;;43125:138;;;;;;;;;;-1:-1:-1;43125:138:0;;;;;:::i;:::-;;:::i;43398:412::-;;;;;;;;;;;;;:::i;24430:185::-;;;;;;;;;;-1:-1:-1;24430:185:0;;;;;:::i;:::-;;:::i;37728:25::-;;;;;;;;;;-1:-1:-1;37728:25:0;;;;;;;;42935:70;;;;;;;;;;;;;:::i;21265:239::-;;;;;;;;;;-1:-1:-1;21265:239:0;;;;;:::i;:::-;;:::i;42761:166::-;;;;;;;;;;-1:-1:-1;42761:166:0;;;;;:::i;:::-;;:::i;20995:208::-;;;;;;;;;;-1:-1:-1;20995:208:0;;;;;:::i;:::-;;:::i;34390:94::-;;;;;;;;;;;;;:::i;43013:104::-;;;;;;;;;;-1:-1:-1;43013:104:0;;;;;:::i;:::-;;:::i;33739:87::-;;;;;;;;;;-1:-1:-1;33812:6:0;;-1:-1:-1;;;;;33812:6:0;33739:87;;37528:43;;;;;;;;;;;;37570:1;37528:43;;21740:104;;;;;;;;;;;;;:::i;42051:201::-;;;;;;;;;;-1:-1:-1;42051:201:0;;;;;:::i;:::-;;:::i;37785:34::-;;;;;;;;;;-1:-1:-1;37785:34:0;;;;;;;;;;;23423:295;;;;;;;;;;-1:-1:-1;23423:295:0;;;;;:::i;:::-;;:::i;37760:18::-;;;;;;;;;;-1:-1:-1;37760:18:0;;;;;;;;;;;24686:328;;;;;;;;;;-1:-1:-1;24686:328:0;;;;;:::i;:::-;;:::i;37425:48::-;;;;;;;;;;;;37461:12;37425:48;;42260:493;;;;;;;;;;-1:-1:-1;42260:493:0;;;;;:::i;:::-;;:::i;23789:164::-;;;;;;;;;;-1:-1:-1;23789:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;23910:25:0;;;23886:4;23910:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23789:164;41684:359;;;;;;;;;;-1:-1:-1;41684:359:0;;;;;:::i;:::-;;:::i;34639:192::-;;;;;;;;;;-1:-1:-1;34639:192:0;;;;;:::i;:::-;;:::i;20626:305::-;20728:4;-1:-1:-1;;;;;;20765:40:0;;-1:-1:-1;;;20765:40:0;;:105;;-1:-1:-1;;;;;;;20822:48:0;;-1:-1:-1;;;20822:48:0;20765:105;:158;;;-1:-1:-1;;;;;;;;;;6566:40:0;;;20887:36;20745:178;20626:305;-1:-1:-1;;20626:305:0:o;43275:111::-;33812:6;;-1:-1:-1;;;;;33812:6:0;19180:10;33959:23;33951:68;;;;-1:-1:-1;;;33951:68:0;;;;;;;:::i;:::-;;;;;;;;;43331:6:::1;:15:::0;;-1:-1:-1;;43331:15:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43362:16:::1;::::0;9510:41:1;;;43362:16:0::1;::::0;9498:2:1;9483:18;43362:16:0::1;;;;;;;;43275:111:::0;:::o;21571:100::-;21625:13;21658:5;21651:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21571:100;:::o;23130:221::-;23206:7;26613:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26613:16:0;23226:73;;;;-1:-1:-1;;;23226:73:0;;16783:2:1;23226:73:0;;;16765:21:1;16822:2;16802:18;;;16795:30;16861:34;16841:18;;;16834:62;-1:-1:-1;;;16912:18:1;;;16905:42;16964:19;;23226:73:0;16581:408:1;23226:73:0;-1:-1:-1;23319:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23319:24:0;;23130:221::o;22653:411::-;22734:13;22750:23;22765:7;22750:14;:23::i;:::-;22734:39;;22798:5;-1:-1:-1;;;;;22792:11:0;:2;-1:-1:-1;;;;;22792:11:0;;;22784:57;;;;-1:-1:-1;;;22784:57:0;;18802:2:1;22784:57:0;;;18784:21:1;18841:2;18821:18;;;18814:30;18880:34;18860:18;;;18853:62;-1:-1:-1;;;18931:18:1;;;18924:31;18972:19;;22784:57:0;18600:397:1;22784:57:0;19180:10;-1:-1:-1;;;;;22876:21:0;;;;:62;;-1:-1:-1;22901:37:0;22918:5;19180:10;23789:164;:::i;22901:37::-;22854:168;;;;-1:-1:-1;;;22854:168:0;;14823:2:1;22854:168:0;;;14805:21:1;14862:2;14842:18;;;14835:30;14901:34;14881:18;;;14874:62;14972:26;14952:18;;;14945:54;15016:19;;22854:168:0;14621:420:1;22854:168:0;23035:21;23044:2;23048:7;23035:8;:21::i;:::-;22723:341;22653:411;;:::o;24020:339::-;24215:41;19180:10;24248:7;24215:18;:41::i;:::-;24207:103;;;;-1:-1:-1;;;24207:103:0;;;;;;;:::i;:::-;24323:28;24333:4;24339:2;24343:7;24323:9;:28::i;38396:1508::-;38508:6;;;;38507:7;38499:34;;;;-1:-1:-1;;;38499:34:0;;20390:2:1;38499:34:0;;;20372:21:1;20429:2;20409:18;;;20402:30;-1:-1:-1;;;20448:18:1;;;20441:44;20502:18;;38499:34:0;20188:338:1;38499:34:0;38552:15;;;;;;;38544:51;;;;-1:-1:-1;;;38544:51:0;;20038:2:1;38544:51:0;;;20020:21:1;20077:2;20057:18;;;20050:30;20116:25;20096:18;;;20089:53;20159:18;;38544:51:0;19836:347:1;38544:51:0;38628:1;38614:11;:15;38606:64;;;;-1:-1:-1;;;38606:64:0;;;;;;;:::i;:::-;37570:1;38689:11;:30;;38681:93;;;;-1:-1:-1;;;38681:93:0;;;;;;;:::i;:::-;38802:11;;37517:4;38832:20;38841:11;38802;38832:20;:::i;:::-;:34;;38824:94;;;;-1:-1:-1;;;38824:94:0;;;;;;;:::i;:::-;38964:28;;-1:-1:-1;;38981:10:0;7624:2:1;7620:15;7616:53;38964:28:0;;;7604:66:1;38939:12:0;;7686::1;;38964:28:0;;;;;;;;;;;;38954:39;;;;;;38939:54;;39012:50;39031:12;;39012:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39045:10:0;;;-1:-1:-1;39057:4:0;;-1:-1:-1;39012:18:0;:50::i;:::-;39004:86;;;;-1:-1:-1;;;39004:86:0;;14066:2:1;39004:86:0;;;14048:21:1;14105:2;14085:18;;;14078:30;14144:25;14124:18;;;14117:53;14187:18;;39004:86:0;13864:347:1;39004:86:0;39151:10;39103:24;39130:32;;;:20;:32;;;;;;37623:1;39181:30;39200:11;39130:32;39181:30;:::i;:::-;:52;;39173:95;;;;-1:-1:-1;;;39173:95:0;;12934:2:1;39173:95:0;;;12916:21:1;12973:2;12953:18;;;12946:30;13012:32;12992:18;;;12985:60;13062:18;;39173:95:0;12732:354:1;39173:95:0;39300:23;39312:11;37461:12;39300:23;:::i;:::-;39287:9;:36;;39279:80;;;;-1:-1:-1;;;39279:80:0;;13293:2:1;39279:80:0;;;13275:21:1;13332:2;13312:18;;;13305:30;13371:33;13351:18;;;13344:61;13422:18;;39279:80:0;13091:355:1;39279:80:0;37623:1;39376:30;39395:11;39376:16;:30;:::i;:::-;:52;39372:104;;;39450:14;;;;;;;39372:104;39510:10;39493:28;;;;:16;:28;;;;;;;;39488:97;;39555:10;39538:28;;;;:16;:28;;;;;:35;;-1:-1:-1;;39538:35:0;39569:4;39538:35;;;39488:97;39614:1;39597:103;39622:11;39617:1;:16;39597:103;;39655:33;39665:10;39677;39686:1;39677:6;:10;:::i;:::-;39655:9;:33::i;:::-;39635:3;;;;:::i;:::-;;;;39597:103;;;-1:-1:-1;39738:10:0;39710:39;;;;:27;:39;;;;;:54;;39753:11;;39710:39;:54;;39753:11;;39710:54;:::i;:::-;;;;-1:-1:-1;;39796:10:0;39775:32;;;;:20;:32;;;;;:47;;39811:11;;39775:32;:47;;39811:11;;39775:47;:::i;:::-;;;;;;;;39848:11;39833;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;39877:19:0;;39885:10;;39877:19;;;;;38488:1416;;;38396:1508;;;:::o;39912:1764::-;39988:6;;;;39987:7;39979:34;;;;-1:-1:-1;;;39979:34:0;;20390:2:1;39979:34:0;;;20372:21:1;20429:2;20409:18;;;20402:30;-1:-1:-1;;;20448:18:1;;;20441:44;20502:18;;39979:34:0;20188:338:1;39979:34:0;40033:15;;;;;;;40032:16;40024:53;;;;-1:-1:-1;;;40024:53:0;;15248:2:1;40024:53:0;;;15230:21:1;15287:2;15267:18;;;15260:30;15326:26;15306:18;;;15299:54;15370:18;;40024:53:0;15046:348:1;40024:53:0;40110:1;40096:11;:15;40088:64;;;;-1:-1:-1;;;40088:64:0;;;;;;;:::i;:::-;37570:1;40171:11;:30;;40163:93;;;;-1:-1:-1;;;40163:93:0;;;;;;;:::i;:::-;40284:11;;37517:4;40314:20;40323:11;40284;40314:20;:::i;:::-;:34;;40306:94;;;;-1:-1:-1;;;40306:94:0;;;;;;;:::i;:::-;40459:10;40411:24;40438:32;;;:20;:32;;;;;;40502:23;40514:11;37461:12;40502:23;:::i;:::-;40489:9;:36;;40481:80;;;;-1:-1:-1;;;40481:80:0;;13293:2:1;40481:80:0;;;13275:21:1;13332:2;13312:18;;;13305:30;13371:33;13351:18;;;13344:61;13422:18;;40481:80:0;13091:355:1;40481:80:0;40618:10;40578:20;40601:28;;;:16;:28;;;;;;;;40640:774;;;;40738:10;40676:31;40710:39;;;:27;:39;;;;;;;40805:41;37570:1;40710:39;40805:41;:::i;:::-;40764:82;-1:-1:-1;40764:82:0;40869:30;40888:11;40869:16;:30;:::i;:::-;:64;;40861:117;;;;-1:-1:-1;;;40861:117:0;;12525:2:1;40861:117:0;;;12507:21:1;12564:2;12544:18;;;12537:30;12603:34;12583:18;;;12576:62;-1:-1:-1;;;12654:18:1;;;12647:38;12702:19;;40861:117:0;12323:404:1;40861:117:0;41031:30;40997;41016:11;40997:16;:30;:::i;:::-;:64;40993:124;;;41087:14;;;;;;;40993:124;40661:467;;40640:774;;;37685:1;41157:30;41176:11;41157:16;:30;:::i;:::-;:61;;41149:118;;;;-1:-1:-1;;;41149:118:0;;11353:2:1;41149:118:0;;;11335:21:1;11392:2;11372:18;;;11365:30;11431:34;11411:18;;;11404:62;-1:-1:-1;;;11482:18:1;;;11475:42;11534:19;;41149:118:0;11151:408:1;41149:118:0;37685:1;41286:30;41305:11;41286:16;:30;:::i;:::-;:61;41282:121;;;41373:14;;;;;;;41282:121;41443:1;41426:103;41451:11;41446:1;:16;41426:103;;41484:33;41494:10;41506;41515:1;41506:6;:10;:::i;41484:33::-;41464:3;;;;:::i;:::-;;;;41426:103;;;-1:-1:-1;41560:10:0;41539:32;;;;:20;:32;;;;;:47;;41575:11;;41539:32;:47;;41575:11;;41539:47;:::i;:::-;;;;;;;;41612:11;41597;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;41649:19:0;;41657:10;;41649:19;;;;;39968:1708;;;39912:1764;:::o;43125:138::-;33812:6;;-1:-1:-1;;;;;33812:6:0;19180:10;33959:23;33951:68;;;;-1:-1:-1;;;33951:68:0;;;;;;;:::i;:::-;43194:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;43194:24:0;;::::1;;::::0;;43234:21:::1;::::0;::::1;::::0;::::1;::::0;43212:6;9535:14:1;9528:22;9510:41;;9498:2;9483:18;;9370:187;43398:412:0;33812:6;;-1:-1:-1;;;;;33812:6:0;19180:10;33959:23;33951:68;;;;-1:-1:-1;;;33951:68:0;;;;;;;:::i;:::-;43622:7:::1;43643;33812:6:::0;;-1:-1:-1;;;;;33812:6:0;;33739:87;43643:7:::1;-1:-1:-1::0;;;;;43635:21:0::1;43664;43635:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43621:69;;;43709:2;43701:11;;;::::0;::::1;;43435:375;43398:412::o:0;24430:185::-;24568:39;24585:4;24591:2;24595:7;24568:39;;;;;;;;;;;;:16;:39::i;42935:70::-;33812:6;;-1:-1:-1;;;;;33812:6:0;19180:10;33959:23;33951:68;;;;-1:-1:-1;;;33951:68:0;;;;;;;:::i;:::-;42984:6:::1;:13:::0;;-1:-1:-1;;42984:13:0::1;;;::::0;;42935:70::o;21265:239::-;21337:7;21373:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21373:16:0;21408:19;21400:73;;;;-1:-1:-1;;;21400:73:0;;16012:2:1;21400:73:0;;;15994:21:1;16051:2;16031:18;;;16024:30;16090:34;16070:18;;;16063:62;-1:-1:-1;;;16141:18:1;;;16134:39;16190:19;;21400:73:0;15810:405:1;42761:166:0;33812:6;;-1:-1:-1;;;;;33812:6:0;19180:10;33959:23;33951:68;;;;-1:-1:-1;;;33951:68:0;;;;;;;:::i;:::-;42864:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;42896:23:0;;::::1;::::0;:8:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;20995:208::-:0;21067:7;-1:-1:-1;;;;;21095:19:0;;21087:74;;;;-1:-1:-1;;;21087:74:0;;15601:2:1;21087:74:0;;;15583:21:1;15640:2;15620:18;;;15613:30;15679:34;15659:18;;;15652:62;-1:-1:-1;;;15730:18:1;;;15723:40;15780:19;;21087:74:0;15399:406:1;21087:74:0;-1:-1:-1;;;;;;21179:16:0;;;;;:9;:16;;;;;;;20995:208::o;34390:94::-;33812:6;;-1:-1:-1;;;;;33812:6:0;19180:10;33959:23;33951:68;;;;-1:-1:-1;;;33951:68:0;;;;;;;:::i;:::-;34455:21:::1;34473:1;34455:9;:21::i;:::-;34390:94::o:0;43013:104::-;33812:6;;-1:-1:-1;;;;;33812:6:0;19180:10;33959:23;33951:68;;;;-1:-1:-1;;;33951:68:0;;;;;;;:::i;:::-;43085:10:::1;:24:::0;43013:104::o;21740:::-;21796:13;21829:7;21822:14;;;;;:::i;42051:201::-;42154:28;;-1:-1:-1;;42171:10:0;7624:2:1;7620:15;7616:53;42154:28:0;;;7604:66:1;42112:4:0;;;;7686:12:1;;42154:28:0;;;;;;;;;;;;42144:39;;;;;;42129:54;;42201:43;42220:5;42227:10;;42239:4;42201:18;:43::i;:::-;42194:50;42051:201;-1:-1:-1;;;42051:201:0:o;23423:295::-;-1:-1:-1;;;;;23526:24:0;;19180:10;23526:24;;23518:62;;;;-1:-1:-1;;;23518:62:0;;12171:2:1;23518:62:0;;;12153:21:1;12210:2;12190:18;;;12183:30;12249:27;12229:18;;;12222:55;12294:18;;23518:62:0;11969:349:1;23518:62:0;19180:10;23593:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23593:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;23593:53:0;;;;;;;;;;23662:48;;9510:41:1;;;23593:42:0;;19180:10;23662:48;;9483:18:1;23662:48:0;;;;;;;23423:295;;:::o;24686:328::-;24861:41;19180:10;24894:7;24861:18;:41::i;:::-;24853:103;;;;-1:-1:-1;;;24853:103:0;;;;;;;:::i;:::-;24967:39;24981:4;24987:2;24991:7;25000:5;24967:13;:39::i;:::-;24686:328;;;;:::o;42260:493::-;26589:4;26613:16;;;:7;:16;;;;;;42378:13;;-1:-1:-1;;;;;26613:16:0;42409:76;;;;-1:-1:-1;;;42409:76:0;;18386:2:1;42409:76:0;;;18368:21:1;18425:2;18405:18;;;18398:30;18464:34;18444:18;;;18437:62;-1:-1:-1;;;18515:18:1;;;18508:45;18570:19;;42409:76:0;18184:411:1;42409:76:0;42501:6;;;;;;;42496:250;;42555:8;42538:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;42524:41;;42260:493;;;:::o;42496:250::-;42629:1;42611:7;42605:21;;;;;:::i;:::-;;;:25;:129;;;;;;;;;;;;;;;;;42674:7;42683:18;:7;:16;:18::i;:::-;42657:54;;;;;;;;;:::i;42496:250::-;42260:493;;;:::o;41684:359::-;33812:6;;-1:-1:-1;;;;;33812:6:0;19180:10;33959:23;33951:68;;;;-1:-1:-1;;;33951:68:0;;;;;;;:::i;:::-;41769:11:::1;::::0;37517:4:::1;41799:20;41808:11:::0;41769;41799:20:::1;:::i;:::-;:34;;41791:94;;;;-1:-1:-1::0;;;41791:94:0::1;;;;;;;:::i;:::-;41913:1;41896:103;41921:11;41916:1;:16;41896:103;;41954:33;41964:10;41976;41985:1:::0;41976:6;:10:::1;:::i;41954:33::-;41934:3:::0;::::1;::::0;::::1;:::i;:::-;;;;41896:103;;;;42024:11;42009;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;41684:359:0:o;34639:192::-;33812:6;;-1:-1:-1;;;;;33812:6:0;19180:10;33959:23;33951:68;;;;-1:-1:-1;;;33951:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34728:22:0;::::1;34720:73;;;::::0;-1:-1:-1;;;34720:73:0;;10589:2:1;34720:73:0::1;::::0;::::1;10571:21:1::0;10628:2;10608:18;;;10601:30;10667:34;10647:18;;;10640:62;-1:-1:-1;;;10718:18:1;;;10711:36;10764:19;;34720:73:0::1;10387:402:1::0;34720:73:0::1;34804:19;34814:8;34804:9;:19::i;30506:174::-:0;30581:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30581:29:0;-1:-1:-1;;;;;30581:29:0;;;;;;;;:24;;30635:23;30581:24;30635:14;:23::i;:::-;-1:-1:-1;;;;;30626:46:0;;;;;;;;;;;30506:174;;:::o;26818:348::-;26911:4;26613:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26613:16:0;26928:73;;;;-1:-1:-1;;;26928:73:0;;13653:2:1;26928:73:0;;;13635:21:1;13692:2;13672:18;;;13665:30;13731:34;13711:18;;;13704:62;-1:-1:-1;;;13782:18:1;;;13775:42;13834:19;;26928:73:0;13451:408:1;26928:73:0;27012:13;27028:23;27043:7;27028:14;:23::i;:::-;27012:39;;27081:5;-1:-1:-1;;;;;27070:16:0;:7;-1:-1:-1;;;;;27070:16:0;;:51;;;;27114:7;-1:-1:-1;;;;;27090:31:0;:20;27102:7;27090:11;:20::i;:::-;-1:-1:-1;;;;;27090:31:0;;27070:51;:87;;;-1:-1:-1;;;;;;23910:25:0;;;23886:4;23910:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27125:32;27062:96;26818:348;-1:-1:-1;;;;26818:348:0:o;29810:578::-;29969:4;-1:-1:-1;;;;;29942:31:0;:23;29957:7;29942:14;:23::i;:::-;-1:-1:-1;;;;;29942:31:0;;29934:85;;;;-1:-1:-1;;;29934:85:0;;17976:2:1;29934:85:0;;;17958:21:1;18015:2;17995:18;;;17988:30;18054:34;18034:18;;;18027:62;-1:-1:-1;;;18105:18:1;;;18098:39;18154:19;;29934:85:0;17774:405:1;29934:85:0;-1:-1:-1;;;;;30038:16:0;;30030:65;;;;-1:-1:-1;;;30030:65:0;;11766:2:1;30030:65:0;;;11748:21:1;11805:2;11785:18;;;11778:30;11844:34;11824:18;;;11817:62;-1:-1:-1;;;11895:18:1;;;11888:34;11939:19;;30030:65:0;11564:400:1;30030:65:0;30212:29;30229:1;30233:7;30212:8;:29::i;:::-;-1:-1:-1;;;;;30254:15:0;;;;;;:9;:15;;;;;:20;;30273:1;;30254:15;:20;;30273:1;;30254:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30285:13:0;;;;;;:9;:13;;;;;:18;;30302:1;;30285:13;:18;;30302:1;;30285:18;:::i;:::-;;;;-1:-1:-1;;30314:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30314:21:0;-1:-1:-1;;;;;30314:21:0;;;;;;;;;30353:27;;30314:16;;30353:27;;;;;;;29810:578;;;:::o;35754:190::-;35879:4;35932;35903:25;35916:5;35923:4;35903:12;:25::i;:::-;:33;;35754:190;-1:-1:-1;;;;35754:190:0:o;27508:110::-;27584:26;27594:2;27598:7;27584:26;;;;;;;;;;;;:9;:26::i;:::-;27508:110;;:::o;34839:173::-;34914:6;;;-1:-1:-1;;;;;34931:17:0;;;-1:-1:-1;;;;;;34931:17:0;;;;;;;34964:40;;34914:6;;;34931:17;34914:6;;34964:40;;34895:16;;34964:40;34884:128;34839:173;:::o;25896:315::-;26053:28;26063:4;26069:2;26073:7;26053:9;:28::i;:::-;26100:48;26123:4;26129:2;26133:7;26142:5;26100:22;:48::i;:::-;26092:111;;;;-1:-1:-1;;;26092:111:0;;;;;;;:::i;6932:723::-;6988:13;7209:10;7205:53;;-1:-1:-1;;7236:10:0;;;;;;;;;;;;-1:-1:-1;;;7236:10:0;;;;;6932:723::o;7205:53::-;7283:5;7268:12;7324:78;7331:9;;7324:78;;7357:8;;;;:::i;:::-;;-1:-1:-1;7380:10:0;;-1:-1:-1;7388:2:0;7380:10;;:::i;:::-;;;7324:78;;;7412:19;7444:6;7434:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7434:17:0;;7412:39;;7462:154;7469:10;;7462:154;;7496:11;7506:1;7496:11;;:::i;:::-;;-1:-1:-1;7565:10:0;7573:2;7565:5;:10;:::i;:::-;7552:24;;:2;:24;:::i;:::-;7539:39;;7522:6;7529;7522:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;7522:56:0;;;;;;;;-1:-1:-1;7593:11:0;7602:2;7593:11;;:::i;:::-;;;7462:154;;36306:675;36389:7;36432:4;36389:7;36447:497;36471:5;:12;36467:1;:16;36447:497;;;36505:20;36528:5;36534:1;36528:8;;;;;;;;:::i;:::-;;;;;;;36505:31;;36571:12;36555;:28;36551:382;;37057:13;37107:15;;;37143:4;37136:15;;;37190:4;37174:21;;36683:57;;36551:382;;;37057:13;37107:15;;;37143:4;37136:15;;;37190:4;37174:21;;36860:57;;36551:382;-1:-1:-1;36485:3:0;;;;:::i;:::-;;;;36447:497;;;-1:-1:-1;36961:12:0;36306:675;-1:-1:-1;;;36306:675:0:o;27845:321::-;27975:18;27981:2;27985:7;27975:5;:18::i;:::-;28026:54;28057:1;28061:2;28065:7;28074:5;28026:22;:54::i;:::-;28004:154;;;;-1:-1:-1;;;28004:154:0;;;;;;;:::i;31245:799::-;31400:4;-1:-1:-1;;;;;31421:13:0;;9780:20;9828:8;31417:620;;31457:72;;-1:-1:-1;;;31457:72:0;;-1:-1:-1;;;;;31457:36:0;;;;;:72;;19180:10;;31508:4;;31514:7;;31523:5;;31457:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31457:72:0;;;;;;;;-1:-1:-1;;31457:72:0;;;;;;;;;;;;:::i;:::-;;;31453:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31699:13:0;;31695:272;;31742:60;;-1:-1:-1;;;31742:60:0;;;;;;;:::i;31695:272::-;31917:6;31911:13;31902:6;31898:2;31894:15;31887:38;31453:529;-1:-1:-1;;;;;;31580:51:0;-1:-1:-1;;;31580:51:0;;-1:-1:-1;31573:58:0;;31417:620;-1:-1:-1;32021:4:0;31245:799;;;;;;:::o;28502:382::-;-1:-1:-1;;;;;28582:16:0;;28574:61;;;;-1:-1:-1;;;28574:61:0;;16422:2:1;28574:61:0;;;16404:21:1;;;16441:18;;;16434:30;16500:34;16480:18;;;16473:62;16552:18;;28574:61:0;16220:356:1;28574:61:0;26589:4;26613:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26613:16:0;:30;28646:58;;;;-1:-1:-1;;;28646:58:0;;10996:2:1;28646:58:0;;;10978:21:1;11035:2;11015:18;;;11008:30;11074;11054:18;;;11047:58;11122:18;;28646:58:0;10794:352:1;28646:58:0;-1:-1:-1;;;;;28775:13:0;;;;;;:9;:13;;;;;:18;;28792:1;;28775:13;:18;;28792:1;;28775:18;:::i;:::-;;;;-1:-1:-1;;28804:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28804:21:0;-1:-1:-1;;;;;28804:21:0;;;;;;;;28843:33;;28804:16;;;28843:33;;28804:16;;28843:33;28502:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;603:160;668:20;;724:13;;717:21;707:32;;697:60;;753:1;750;743:12;768:221;811:5;864:3;857:4;849:6;845:17;841:27;831:55;;882:1;879;872:12;831:55;904:79;979:3;970:6;957:20;950:4;942:6;938:17;904:79;:::i;994:186::-;1053:6;1106:2;1094:9;1085:7;1081:23;1077:32;1074:52;;;1122:1;1119;1112:12;1074:52;1145:29;1164:9;1145:29;:::i;1185:260::-;1253:6;1261;1314:2;1302:9;1293:7;1289:23;1285:32;1282:52;;;1330:1;1327;1320:12;1282:52;1353:29;1372:9;1353:29;:::i;:::-;1343:39;;1401:38;1435:2;1424:9;1420:18;1401:38;:::i;:::-;1391:48;;1185:260;;;;;:::o;1450:328::-;1527:6;1535;1543;1596:2;1584:9;1575:7;1571:23;1567:32;1564:52;;;1612:1;1609;1602:12;1564:52;1635:29;1654:9;1635:29;:::i;:::-;1625:39;;1683:38;1717:2;1706:9;1702:18;1683:38;:::i;:::-;1673:48;;1768:2;1757:9;1753:18;1740:32;1730:42;;1450:328;;;;;:::o;1783:666::-;1878:6;1886;1894;1902;1955:3;1943:9;1934:7;1930:23;1926:33;1923:53;;;1972:1;1969;1962:12;1923:53;1995:29;2014:9;1995:29;:::i;:::-;1985:39;;2043:38;2077:2;2066:9;2062:18;2043:38;:::i;:::-;2033:48;;2128:2;2117:9;2113:18;2100:32;2090:42;;2183:2;2172:9;2168:18;2155:32;2210:18;2202:6;2199:30;2196:50;;;2242:1;2239;2232:12;2196:50;2265:22;;2318:4;2310:13;;2306:27;-1:-1:-1;2296:55:1;;2347:1;2344;2337:12;2296:55;2370:73;2435:7;2430:2;2417:16;2412:2;2408;2404:11;2370:73;:::i;:::-;2360:83;;;1783:666;;;;;;;:::o;2454:254::-;2519:6;2527;2580:2;2568:9;2559:7;2555:23;2551:32;2548:52;;;2596:1;2593;2586:12;2548:52;2619:29;2638:9;2619:29;:::i;:::-;2609:39;;2667:35;2698:2;2687:9;2683:18;2667:35;:::i;2713:254::-;2781:6;2789;2842:2;2830:9;2821:7;2817:23;2813:32;2810:52;;;2858:1;2855;2848:12;2810:52;2881:29;2900:9;2881:29;:::i;:::-;2871:39;2957:2;2942:18;;;;2929:32;;-1:-1:-1;;;2713:254:1:o;2972:689::-;3067:6;3075;3083;3136:2;3124:9;3115:7;3111:23;3107:32;3104:52;;;3152:1;3149;3142:12;3104:52;3192:9;3179:23;3221:18;3262:2;3254:6;3251:14;3248:34;;;3278:1;3275;3268:12;3248:34;3316:6;3305:9;3301:22;3291:32;;3361:7;3354:4;3350:2;3346:13;3342:27;3332:55;;3383:1;3380;3373:12;3332:55;3423:2;3410:16;3449:2;3441:6;3438:14;3435:34;;;3465:1;3462;3455:12;3435:34;3520:7;3513:4;3503:6;3500:1;3496:14;3492:2;3488:23;3484:34;3481:47;3478:67;;;3541:1;3538;3531:12;3478:67;3572:4;3564:13;;;;3596:6;;-1:-1:-1;3634:20:1;;;;3621:34;;2972:689;-1:-1:-1;;;;2972:689:1:o;3666:957::-;3750:6;3781:2;3824;3812:9;3803:7;3799:23;3795:32;3792:52;;;3840:1;3837;3830:12;3792:52;3880:9;3867:23;3909:18;3950:2;3942:6;3939:14;3936:34;;;3966:1;3963;3956:12;3936:34;4004:6;3993:9;3989:22;3979:32;;4049:7;4042:4;4038:2;4034:13;4030:27;4020:55;;4071:1;4068;4061:12;4020:55;4107:2;4094:16;4129:2;4125;4122:10;4119:36;;;4135:18;;:::i;:::-;4181:2;4178:1;4174:10;4164:20;;4204:28;4228:2;4224;4220:11;4204:28;:::i;:::-;4266:15;;;4297:12;;;;4329:11;;;4359;;;4355:20;;4352:33;-1:-1:-1;4349:53:1;;;4398:1;4395;4388:12;4349:53;4420:1;4411:10;;4430:163;4444:2;4441:1;4438:9;4430:163;;;4501:17;;4489:30;;4462:1;4455:9;;;;;4539:12;;;;4571;;4430:163;;;-1:-1:-1;4612:5:1;3666:957;-1:-1:-1;;;;;;;;3666:957:1:o;4628:180::-;4684:6;4737:2;4725:9;4716:7;4712:23;4708:32;4705:52;;;4753:1;4750;4743:12;4705:52;4776:26;4792:9;4776:26;:::i;4813:180::-;4872:6;4925:2;4913:9;4904:7;4900:23;4896:32;4893:52;;;4941:1;4938;4931:12;4893:52;-1:-1:-1;4964:23:1;;4813:180;-1:-1:-1;4813:180:1:o;4998:245::-;5056:6;5109:2;5097:9;5088:7;5084:23;5080:32;5077:52;;;5125:1;5122;5115:12;5077:52;5164:9;5151:23;5183:30;5207:5;5183:30;:::i;5248:249::-;5317:6;5370:2;5358:9;5349:7;5345:23;5341:32;5338:52;;;5386:1;5383;5376:12;5338:52;5418:9;5412:16;5437:30;5461:5;5437:30;:::i;5502:543::-;5590:6;5598;5651:2;5639:9;5630:7;5626:23;5622:32;5619:52;;;5667:1;5664;5657:12;5619:52;5707:9;5694:23;5736:18;5777:2;5769:6;5766:14;5763:34;;;5793:1;5790;5783:12;5763:34;5816:50;5858:7;5849:6;5838:9;5834:22;5816:50;:::i;:::-;5806:60;;5919:2;5908:9;5904:18;5891:32;5875:48;;5948:2;5938:8;5935:16;5932:36;;;5964:1;5961;5954:12;5932:36;;5987:52;6031:7;6020:8;6009:9;6005:24;5987:52;:::i;:::-;5977:62;;;5502:543;;;;;:::o;6235:257::-;6276:3;6314:5;6308:12;6341:6;6336:3;6329:19;6357:63;6413:6;6406:4;6401:3;6397:14;6390:4;6383:5;6379:16;6357:63;:::i;:::-;6474:2;6453:15;-1:-1:-1;;6449:29:1;6440:39;;;;6481:4;6436:50;;6235:257;-1:-1:-1;;6235:257:1:o;6497:973::-;6582:12;;6547:3;;6637:1;6657:18;;;;6710;;;;6737:61;;6791:4;6783:6;6779:17;6769:27;;6737:61;6817:2;6865;6857:6;6854:14;6834:18;6831:38;6828:161;;;6911:10;6906:3;6902:20;6899:1;6892:31;6946:4;6943:1;6936:15;6974:4;6971:1;6964:15;6828:161;7005:18;7032:104;;;;7150:1;7145:319;;;;6998:466;;7032:104;-1:-1:-1;;7065:24:1;;7053:37;;7110:16;;;;-1:-1:-1;7032:104:1;;7145:319;21066:1;21059:14;;;21103:4;21090:18;;7239:1;7253:165;7267:6;7264:1;7261:13;7253:165;;;7345:14;;7332:11;;;7325:35;7388:16;;;;7282:10;;7253:165;;;7257:3;;7447:6;7442:3;7438:16;7431:23;;6998:466;;;;;;;6497:973;;;;:::o;7709:197::-;7837:3;7862:38;7896:3;7888:6;7862:38;:::i;7911:543::-;8188:3;8216:38;8250:3;8242:6;8216:38;:::i;:::-;8283:6;8277:13;8299:52;8344:6;8340:2;8333:4;8325:6;8321:17;8299:52;:::i;:::-;-1:-1:-1;;;8373:15:1;;8397:22;;;8446:1;8435:13;;7911:543;-1:-1:-1;;;;7911:543:1:o;8877:488::-;-1:-1:-1;;;;;9146:15:1;;;9128:34;;9198:15;;9193:2;9178:18;;9171:43;9245:2;9230:18;;9223:34;;;9293:3;9288:2;9273:18;;9266:31;;;9071:4;;9314:45;;9339:19;;9331:6;9314:45;:::i;:::-;9306:53;8877:488;-1:-1:-1;;;;;;8877:488:1:o;9744:219::-;9893:2;9882:9;9875:21;9856:4;9913:44;9953:2;9942:9;9938:18;9930:6;9913:44;:::i;9968:414::-;10170:2;10152:21;;;10209:2;10189:18;;;10182:30;10248:34;10243:2;10228:18;;10221:62;-1:-1:-1;;;10314:2:1;10299:18;;10292:48;10372:3;10357:19;;9968:414::o;14216:400::-;14418:2;14400:21;;;14457:2;14437:18;;;14430:30;14496:34;14491:2;14476:18;;14469:62;-1:-1:-1;;;14562:2:1;14547:18;;14540:34;14606:3;14591:19;;14216:400::o;16994:414::-;17196:2;17178:21;;;17235:2;17215:18;;;17208:30;17274:34;17269:2;17254:18;;17247:62;-1:-1:-1;;;17340:2:1;17325:18;;17318:48;17398:3;17383:19;;16994:414::o;17413:356::-;17615:2;17597:21;;;17634:18;;;17627:30;17693:34;17688:2;17673:18;;17666:62;17760:2;17745:18;;17413:356::o;19002:411::-;19204:2;19186:21;;;19243:2;19223:18;;;19216:30;19282:34;19277:2;19262:18;;19255:62;-1:-1:-1;;;19348:2:1;19333:18;;19326:45;19403:3;19388:19;;19002:411::o;19418:413::-;19620:2;19602:21;;;19659:2;19639:18;;;19632:30;19698:34;19693:2;19678:18;;19671:62;-1:-1:-1;;;19764:2:1;19749:18;;19742:47;19821:3;19806:19;;19418:413::o;20713:275::-;20784:2;20778:9;20849:2;20830:13;;-1:-1:-1;;20826:27:1;20814:40;;20884:18;20869:34;;20905:22;;;20866:62;20863:88;;;20931:18;;:::i;:::-;20967:2;20960:22;20713:275;;-1:-1:-1;20713:275:1:o;21119:128::-;21159:3;21190:1;21186:6;21183:1;21180:13;21177:39;;;21196:18;;:::i;:::-;-1:-1:-1;21232:9:1;;21119:128::o;21252:120::-;21292:1;21318;21308:35;;21323:18;;:::i;:::-;-1:-1:-1;21357:9:1;;21252:120::o;21377:168::-;21417:7;21483:1;21479;21475:6;21471:14;21468:1;21465:21;21460:1;21453:9;21446:17;21442:45;21439:71;;;21490:18;;:::i;:::-;-1:-1:-1;21530:9:1;;21377:168::o;21550:125::-;21590:4;21618:1;21615;21612:8;21609:34;;;21623:18;;:::i;:::-;-1:-1:-1;21660:9:1;;21550:125::o;21680:258::-;21752:1;21762:113;21776:6;21773:1;21770:13;21762:113;;;21852:11;;;21846:18;21833:11;;;21826:39;21798:2;21791:10;21762:113;;;21893:6;21890:1;21887:13;21884:48;;;-1:-1:-1;;21928:1:1;21910:16;;21903:27;21680:258::o;21943:380::-;22022:1;22018:12;;;;22065;;;22086:61;;22140:4;22132:6;22128:17;22118:27;;22086:61;22193:2;22185:6;22182:14;22162:18;22159:38;22156:161;;;22239:10;22234:3;22230:20;22227:1;22220:31;22274:4;22271:1;22264:15;22302:4;22299:1;22292:15;22156:161;;21943:380;;;:::o;22328:135::-;22367:3;-1:-1:-1;;22388:17:1;;22385:43;;;22408:18;;:::i;:::-;-1:-1:-1;22455:1:1;22444:13;;22328:135::o;22468:112::-;22500:1;22526;22516:35;;22531:18;;:::i;:::-;-1:-1:-1;22565:9:1;;22468:112::o;22585:127::-;22646:10;22641:3;22637:20;22634:1;22627:31;22677:4;22674:1;22667:15;22701:4;22698:1;22691:15;22717:127;22778:10;22773:3;22769:20;22766:1;22759:31;22809:4;22806:1;22799:15;22833:4;22830:1;22823:15;22849:127;22910:10;22905:3;22901:20;22898:1;22891:31;22941:4;22938:1;22931:15;22965:4;22962:1;22955:15;22981:127;23042:10;23037:3;23033:20;23030:1;23023:31;23073:4;23070:1;23063:15;23097:4;23094:1;23087:15;23113:131;-1:-1:-1;;;;;;23187:32:1;;23177:43;;23167:71;;23234:1;23231;23224:12
Swarm Source
ipfs://486af4843c2362fc108606ecdb7996bc44bc995da6d6dcecbbe4a84fd0e1c87c
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.