Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
6,666 The Mysterious World
Holders
2,380
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 The Mysterious WorldLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MysteriousWorld
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-04 */ // SPDX-License-Identifier: MIT // # MysteriousWorld // Read more at https://www.themysterious.world/utility 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); } /** * @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; } /** * @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); } /** * @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); } /** * @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); } } } } /** * @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; } } /** * @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); } } /** * @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; } } /** * @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 {} } /** * @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); } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // The Creature World and Superlative Secret Society is used so we check who holds a nft // for the free mint claim system interface Creature { function ownerOf(uint256 token) external view returns(address); function tokenOfOwnerByIndex(address inhabitant, uint256 index) external view returns(uint256); function balanceOf(address inhabitant) external view returns(uint256); } interface Superlative { function ownerOf(uint256 token) external view returns(address); function tokenOfOwnerByIndex(address inhabitant, uint256 index) external view returns(uint256); function balanceOf(address inhabitant) external view returns(uint256); } // The runes contract is used to burn for sacrifices and update balances on transfers interface IRunes { function burn(address inhabitant, uint256 cost) external; function updateRunes(address from, address to) external; } // Allows us to mint with $LOOKS instead of ETH interface Looks { function transferFrom(address from, address to, uint256 amount) external; function balanceOf(address owner) external view returns(uint256); } /* * o . ___---___ . * . .--\ --. . . . * ./.;_.\ __/~ \. * /; / `-' __\ . \ * . . / ,--' / . .; \ | * | .| / __ | -O- . * |__/ __ | . ; \ | . | | * | / \\_ . ;| \___| * . o | \ .~\\___,--' | . * | | . ; ~~~~\_ __| * | \ \ . . ; \ /_/ . * -O- . \ / . | ~/ . * | . ~\ \ . / /~ o * . ~--___ ; ___--~ * . --- . MYSTERIOUS WORLD */ contract MysteriousWorld is ERC721, Ownable { using Address for address; using Counters for Counters.Counter; Counters.Counter private Population; Counters.Counter private sacrificed; // tracks the amount of rituals performed Counters.Counter private sacred; // tracks the 1/1s created from rituals Creature public creature; Superlative public superlative; IRunes public runes; Looks public looks; string private baseURI; uint256 constant public maxInhabitants = 6666; uint256 constant public maxRituals = 3333; // max amount of rituals that can be performed uint256 constant public teamInhabitants = 66; // the amount of inhabitants that will be reserved to the teams wallet uint256 constant public maxWInhabitants = 900; // the amount of free inhabitants given to the community uint256 constant public maxFInhabitants = 100; // the amount of free inhabitants given to holders of superlative & creatureworld - fcfs basis uint256 constant public maxPerTxn = 6; uint256 public whitelistInhabitantsClaimed; // tracks the amount of mints claimed from giveaway winners uint256 public freeInhabitantsClaimed; // tracks the amount of free mints claimed from superlative & creatureworld holders uint256 public teamInhabitantsClaimed; // tracks the amount reserved for the team wallet uint256 public saleActive = 0; // the period for when public mint starts uint256 public claimActive = 0; // the period for free mint claiming - once the claimActive timestamp is reached, remaing supply goes to public fcfs uint256 public mintPrice = 0.06 ether; uint256 public ritualPrice = 100 ether; // base price for rituals is 100 $RUNES uint256 public ritualRate = 0.5 ether; // the rate increases the ritualPrice by the amount of rituals performed address public ritualWallet; // where the ritualized tokens go when u perform a ritual on them uint256 public looksPrice = 37 ether; // will be updated once contract is deployed if price difference is to high address public looksWallet; bool public templeAvailable = false; // once revealed, the temple will be available for rituals to be performed mapping(uint256 => bool) public ritualizedInhabitants; // tracks the tokens that survived the ritual process mapping(uint256 => bool) public uniqueInhabitants; // tracks the tokens that became gods mapping(address => uint256) public claimedW; // tracks to see what wallets claimed their whitelisted free mints mapping(address => uint256) public claimedF; // tracks to see what wallets claimed the free mints for the superlative & creatureworld event performRitualEvent(address caller, uint256 vessel, uint256 sacrifice); event performSacredRitualEvent(address caller, uint256 vessel, uint256 sacrifice); /* * # isTempleOpen * only allows you to perform a ritual if its enabled - this will be set after reveal */ modifier isTempleOpen() { require(templeAvailable, "The temple is not ready yet"); _; } /* * # inhabitantOwner * checks if you own the tokens your sacrificing */ modifier inhabitantOwner(uint256 inhabitant) { require(ownerOf(inhabitant) == msg.sender, "You can't use another persons inhabitants"); _; } /* * # ascendedOwner * checks if the inhabitant passed is ascended */ modifier ascendedOwner(uint256 inhabitant) { require(ritualizedInhabitants[inhabitant], "This inhabitant needs to sacrifice another inhabitant to ascend"); _; } /* * # isSaleActive * allows inhabitants to be sold... */ modifier isSaleActive() { require(block.timestamp > saleActive, "Inhabitants aren't born yet"); _; } /* * # isClaimActive * allows inhabitants to be taken for free... use this for the greater good */ modifier isClaimActive() { require(block.timestamp < claimActive, "All inhabitants are gone"); _; } constructor(address burner, address rare) ERC721("The Mysterious World", "The Mysterious World") { ritualWallet = burner; looksWallet = rare; } /* * # getAmountOfCreaturesHeld * returns the total amount of creature world nfts a wallet holds */ function getAmountOfCreaturesHeld(address holder) public view returns(uint256) { return creature.balanceOf(holder); } /* * # getAmountOfSuperlativesHeld * returns the total amount of superlatives nfts a wallet holds */ function getAmountOfSuperlativesHeld(address holder) public view returns(uint256) { return superlative.balanceOf(holder); } /* * # checkIfClaimedW * checks if the giveaway winners minted their tokens */ function checkIfClaimedW(address holder) public view returns(uint256) { return claimedW[holder]; } /* * # checkIfClaimedF * checks if the superlative and creature holders minted their free tokens */ function checkIfClaimedF(address holder) public view returns(uint256) { return claimedF[holder]; } /* * # addWhitelistWallets * adds the addresses to claimedW while setting the amount each address can claim */ function addWhitelistWallets(address[] calldata winners) external payable onlyOwner { for (uint256 wallet;wallet < winners.length;wallet++) { claimedW[winners[wallet]] = 1; } } /* * # mint * mints a inhabitant - godspeed */ function mint(uint256 amount) public payable isSaleActive { require(tx.origin == msg.sender, "Can't mint from other contracts!"); require(amount > 0 && amount <= maxPerTxn, "Your amount must be between 1 and 6"); if (block.timestamp <= claimActive) { require(Population.current() + amount <= (maxInhabitants - (maxWInhabitants + maxFInhabitants)), "Not enough inhabitants for that"); } else { require(Population.current() + amount <= maxInhabitants, "Not enough inhabitants for that"); } require(mintPrice * amount == msg.value, "Mint Price is not correct"); for (uint256 i = 0;i < amount;i++) { _safeMint(msg.sender, Population.current()); Population.increment(); } } /* * # mintWhitelist * mints a free inhabitant from the whitelist wallets */ function mintWhitelist() public payable isSaleActive isClaimActive { uint256 currentInhabitants = Population.current(); require(tx.origin == msg.sender, "Can't mint from other contracts!"); require(currentInhabitants + 1 <= maxInhabitants, "No inhabitants left"); require(whitelistInhabitantsClaimed + 1 <= maxWInhabitants, "No inhabitants left"); require(claimedW[msg.sender] == 1, "You don't have permission to be here outsider"); _safeMint(msg.sender, currentInhabitants); Population.increment(); claimedW[msg.sender] = 0; whitelistInhabitantsClaimed++; delete currentInhabitants; } /* * # mintFList * mints a free inhabitant if your holding a creature world or superlative token - can only be claimed once fcfs */ function mintFList() public payable isSaleActive isClaimActive { uint256 currentInhabitants = Population.current(); require(tx.origin == msg.sender, "Can't mint from other contracts!"); require(currentInhabitants + 1 <= maxInhabitants, "No inhabitants left"); require(freeInhabitantsClaimed + 1 <= maxFInhabitants, "No inhabitants left"); require(getAmountOfCreaturesHeld(msg.sender) >= 1 || getAmountOfSuperlativesHeld(msg.sender) >= 1, "You don't have permission to be here outsider"); require(claimedF[msg.sender] < 1, "You already took a inhabitant"); _safeMint(msg.sender, currentInhabitants); Population.increment(); claimedF[msg.sender] = 1; freeInhabitantsClaimed++; delete currentInhabitants; } /* * # mintWithLooks * allows you to mint with $LOOKS token - still need to pay gas :( */ function mintWithLooks(uint256 amount) public payable isSaleActive { uint256 currentInhabitants = Population.current(); require(tx.origin == msg.sender, "Can't mint from other contracts!"); require(amount > 0 && amount <= maxPerTxn, "Your amount must be between 1 and 6"); if (block.timestamp <= claimActive) { require(currentInhabitants + amount <= (maxInhabitants - (maxWInhabitants + maxFInhabitants)), "Not enough inhabitants for that"); } else { require(currentInhabitants + amount <= maxInhabitants, "Not enough inhabitants for that"); } require(looks.balanceOf(msg.sender) >= looksPrice * amount, "Not enough $LOOKS to buy a inhabitant"); looks.transferFrom(msg.sender, looksWallet, looksPrice * amount); for (uint256 i = 0;i < amount;i++) { _safeMint(msg.sender, currentInhabitants + i); Population.increment(); } delete currentInhabitants; } /* * # reserveInhabitants * mints the amount provided for the team wallet - the amount is capped by teamInhabitants */ function reserveInhabitants(uint256 amount) public payable onlyOwner { uint256 currentInhabitants = Population.current(); require(teamInhabitantsClaimed + amount < teamInhabitants, "We've run out of inhabitants for the team"); for (uint256 i = 0;i < amount;i++) { _safeMint(msg.sender, currentInhabitants + i); Population.increment(); teamInhabitantsClaimed++; } delete currentInhabitants; } /* * # performRitual * performing the ritual will burn one of the tokens passed and upgrade the first token passed. upgrading will * change the metadata of the image and add to the sacrifice goals for the project. */ function performRitual(uint256 vessel, uint256 sacrifice) public payable inhabitantOwner(vessel) inhabitantOwner(sacrifice) isTempleOpen { require(vessel != sacrifice, "You can't sacrifice the same inhabitants"); require(!ritualizedInhabitants[vessel] && !ritualizedInhabitants[sacrifice], "You can't sacrifice ascended inhabitants with those of the lower class"); // burn the $RUNES and transfer the sacrificed token to the burn wallet runes.burn(msg.sender, ritualPrice + (ritualRate * sacrificed.current())); safeTransferFrom(msg.sender, ritualWallet, sacrifice, ""); // track the tokens that ascended & add to the global goal sacrificed.increment(); ritualizedInhabitants[vessel] = true; emit performRitualEvent(msg.sender, vessel, sacrifice); } /* * # performSacredRight * this is performed during the 10% sacrifical goals for the 1/1s. check the utility page for more info */ function performSacredRitual(uint256 vessel, uint256 sacrifice) public payable inhabitantOwner(vessel) inhabitantOwner(sacrifice) ascendedOwner(vessel) ascendedOwner(sacrifice) isTempleOpen { uint256 currentGoal = 333 * sacred.current(); // 10% of maxRituals require(vessel != sacrifice, "You can't sacrifice the same inhabitants"); require(sacrificed.current() >= currentGoal, "Not enough sacrifices to discover a God!"); // burn the $RUNES and transfer the sacrificed token to the burn wallet runes.burn(msg.sender, ritualPrice + (ritualRate * sacrificed.current())); safeTransferFrom(msg.sender, ritualWallet, sacrifice, ""); ritualizedInhabitants[vessel] = false; uniqueInhabitants[vessel] = true; sacrificed.increment(); sacred.increment(); emit performSacredRitualEvent(msg.sender, vessel, sacrifice); } /* * # getCaptives * returns all the tokens a wallet holds */ function getCaptives(address inhabitant) public view returns(uint256[] memory) { uint256 population = Population.current(); uint256 amount = balanceOf(inhabitant); uint256 selector = 0; uint256[] memory inhabitants = new uint256[](amount); for (uint256 i = 0;i < population;i++) { if (ownerOf(i) == inhabitant) { inhabitants[selector] = i; selector++; } } return inhabitants; } /* * # totalSupply */ function totalSupply() external view returns(uint256) { return Population.current(); } /* * # getSacrificed */ function getSacrificed() external view returns(uint256) { return sacrificed.current(); } /* * # getSacred */ function getSacred() external view returns(uint256) { return sacred.current(); } /* * # _baseURI */ function _baseURI() internal view override returns (string memory) { return baseURI; } /* * # setBaseURI */ function setBaseURI(string memory metadataUrl) public payable onlyOwner { baseURI = metadataUrl; } /* * # withdraw * withdraws the funds from the smart contract to the owner */ function withdraw() public payable onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); delete balance; } /* * # setSaleSettings * sets the drop time and the claimimg time */ function setSaleSettings(uint256 saleTime, uint256 claimTime) public payable onlyOwner { saleActive = saleTime; claimActive = claimTime; } /* * # setMintPrice * sets the mint price for the sale incase we need to change it */ function setMintPrice(uint256 price) public payable onlyOwner { mintPrice = price; } /* * # setLooksPrice * sets the price of $LOOKS to mint with incase we need to set it multiple times */ function setLooksPrice(uint256 price) public payable onlyOwner { looksPrice = price; } /* * # setRitualSettings * allows us to change the ritual price, rate, and whether ritual is enabled or not */ function setRitualSettings(uint256 price, uint256 rate, bool available) public payable onlyOwner { ritualPrice = price; ritualRate = rate; templeAvailable = available; } /* * # setCollectionInterfaces * sets the interfaces for creatureworld, superlative, and runes */ function setCollectionInterfaces(address creatureContract, address superlativeContract, address runesContract, address looksContract) public payable onlyOwner { creature = Creature(creatureContract); superlative = Superlative(superlativeContract); runes = IRunes(runesContract); looks = Looks(looksContract); } /* * # transferFrom */ function transferFrom(address from, address to, uint256 inhabitant) public override { runes.updateRunes(from, to); ERC721.transferFrom(from, to, inhabitant); } /* * # safeTransferFrom */ function safeTransferFrom(address from, address to, uint256 inhabitant) public override { safeTransferFrom(from, to, inhabitant, ""); } function safeTransferFrom(address from, address to, uint256 inhabitant, bytes memory data) public override { runes.updateRunes(from, to); ERC721.safeTransferFrom(from, to, inhabitant, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"burner","type":"address"},{"internalType":"address","name":"rare","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"vessel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sacrifice","type":"uint256"}],"name":"performRitualEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"vessel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sacrifice","type":"uint256"}],"name":"performSacredRitualEvent","type":"event"},{"inputs":[{"internalType":"address[]","name":"winners","type":"address[]"}],"name":"addWhitelistWallets","outputs":[],"stateMutability":"payable","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":"address","name":"holder","type":"address"}],"name":"checkIfClaimedF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIfClaimedW","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimActive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedW","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creature","outputs":[{"internalType":"contract Creature","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeInhabitantsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"getAmountOfCreaturesHeld","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"getAmountOfSuperlativesHeld","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":"inhabitant","type":"address"}],"name":"getCaptives","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSacred","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSacrificed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"looks","outputs":[{"internalType":"contract Looks","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"looksPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"looksWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFInhabitants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxInhabitants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRituals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWInhabitants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintFList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintWithLooks","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vessel","type":"uint256"},{"internalType":"uint256","name":"sacrifice","type":"uint256"}],"name":"performRitual","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vessel","type":"uint256"},{"internalType":"uint256","name":"sacrifice","type":"uint256"}],"name":"performSacredRitual","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reserveInhabitants","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ritualPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ritualRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ritualWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ritualizedInhabitants","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"runes","outputs":[{"internalType":"contract IRunes","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"inhabitant","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":"inhabitant","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"metadataUrl","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"creatureContract","type":"address"},{"internalType":"address","name":"superlativeContract","type":"address"},{"internalType":"address","name":"runesContract","type":"address"},{"internalType":"address","name":"looksContract","type":"address"}],"name":"setCollectionInterfaces","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setLooksPrice","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"bool","name":"available","type":"bool"}],"name":"setRitualSettings","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"saleTime","type":"uint256"},{"internalType":"uint256","name":"claimTime","type":"uint256"}],"name":"setSaleSettings","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"superlative","outputs":[{"internalType":"contract Superlative","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamInhabitants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamInhabitantsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"templeAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"inhabitant","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":"uint256","name":"","type":"uint256"}],"name":"uniqueInhabitants","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistInhabitantsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000601281905560135566d529ae9e86000060145568056bc75e2d631000006015556706f05b59d3b200006016556802017a67f7317400006018556019805460ff60a01b191690553480156200005957600080fd5b5060405162003914380380620039148339810160408190526200007c9162000252565b60408051808201825260148082527f546865204d7973746572696f757320576f726c64000000000000000000000000602080840182815285518087019096529285528401528151919291620000d4916000916200018f565b508051620000ea9060019060208401906200018f565b50505062000107620001016200013960201b60201c565b6200013d565b601780546001600160a01b039384166001600160a01b03199182161790915560198054929093169116179055620002c7565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200019d906200028a565b90600052602060002090601f016020900481019282620001c157600085556200020c565b82601f10620001dc57805160ff19168380011785556200020c565b828001600101855582156200020c579182015b828111156200020c578251825591602001919060010190620001ef565b506200021a9291506200021e565b5090565b5b808211156200021a57600081556001016200021f565b80516001600160a01b03811681146200024d57600080fd5b919050565b600080604083850312156200026657600080fd5b620002718362000235565b9150620002816020840162000235565b90509250929050565b600181811c908216806200029f57607f821691505b60208210811415620002c157634e487b7160e01b600052602260045260246000fd5b50919050565b61363d80620002d76000396000f3fe6080604052600436106103ce5760003560e01c806370a08231116101fd578063b4ff922611610118578063dac13f6d116100ab578063e985e9c51161007a578063e985e9c514610a72578063f2fde38b14610abb578063f4a0a52814610adb578063f4d2656d14610aee578063f600456f14610b0457600080fd5b8063dac13f6d14610a0a578063dcb066cf14610a2a578063e7663f5914610a3d578063e901366f14610a6a57600080fd5b8063bcd18b7c116100e7578063bcd18b7c146109a8578063c87b56dd146109be578063c9247403146109de578063d4a6a2fd146109f457600080fd5b8063b4ff922614610928578063b549a45014610948578063b88d4fde1461095b578063b8ec6a3e1461097b57600080fd5b806396c56399116101905780639f39d4191161015f5780639f39d419146108b5578063a0712d68146108d5578063a22cb465146108e8578063af9666b41461090857600080fd5b806396c563991461083f57806397901f9c1461086f57806399bb35af146108825780639dd33ae9146108a257600080fd5b80638233de99116101cc5780638233de99146107e35780638da5cb5b146107f6578063915992b21461081457806395d89b411461082a57600080fd5b806370a0823114610784578063715018a6146107a45780637df9f718146107b95780637f2a9d6a146107ce57600080fd5b80632a9fd3e4116102ed578063530136d6116102805780636817c76c1161024f5780636817c76c1461071857806368428a1b1461072e578063697f2c7914610744578063699d4dc91461075757600080fd5b8063530136d61461068f57806355f804b3146106c5578063630b5f41146106d85780636352211e146106f857600080fd5b806342842e0e116102bc57806342842e0e146106195780634e0ea0b21461063957806350d7c9bc146106595780635177068a1461067a57600080fd5b80632a9fd3e4146105e15780632d3df31f146105f45780633cb51994146105fc5780633ccfd60b1461061157600080fd5b806318160ddd1161036557806323b872dd1161033457806323b872dd146105455780632475fc3214610565578063255f66131461059b578063281af86e146105b157600080fd5b806318160ddd146104e75780631a38f777146104fc5780631cf72c141461051257806320db28c21461053257600080fd5b80630c48063d116103a15780630c48063d146104845780630ca69012146104a85780630fc12313146104be578063105c338d146104d157600080fd5b806301ffc9a7146103d357806306fdde0314610408578063081812fc1461042a578063095ea7b314610462575b600080fd5b3480156103df57600080fd5b506103f36103ee366004612f80565b610b19565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610b6b565b6040516103ff9190613168565b34801561043657600080fd5b5061044a610445366004613003565b610bfd565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b5061048261047d366004612ee1565b610c97565b005b34801561049057600080fd5b5061049a60185481565b6040519081526020016103ff565b3480156104b457600080fd5b5061049a60115481565b6104826104cc366004612f0b565b610dad565b3480156104dd57600080fd5b5061049a60165481565b3480156104f357600080fd5b5061049a610e3b565b34801561050857600080fd5b5061049a60105481565b34801561051e57600080fd5b50600c5461044a906001600160a01b031681565b610482610540366004613003565b610e4b565b34801561055157600080fd5b50610482610560366004612dff565b6110f4565b34801561057157600080fd5b5061049a610580366004612d5d565b6001600160a01b03166000908152601d602052604090205490565b3480156105a757600080fd5b5061049a60155481565b3480156105bd57600080fd5b506103f36105cc366004613003565b601a6020526000908152604090205460ff1681565b6104826105ef366004612dab565b611166565b6104826111e0565b34801561060857600080fd5b5061049a600681565b610482611344565b34801561062557600080fd5b50610482610634366004612dff565b6113a1565b34801561064557600080fd5b50600d5461044a906001600160a01b031681565b34801561066557600080fd5b506019546103f390600160a01b900460ff1681565b34801561068657600080fd5b5061049a606481565b34801561069b57600080fd5b5061049a6106aa366004612d5d565b6001600160a01b03166000908152601c602052604090205490565b6104826106d3366004612fba565b6113bc565b3480156106e457600080fd5b5061049a6106f3366004612d5d565b6113f9565b34801561070457600080fd5b5061044a610713366004613003565b611478565b34801561072457600080fd5b5061049a60145481565b34801561073a57600080fd5b5061049a60125481565b610482610752366004613057565b6114ef565b34801561076357600080fd5b50610777610772366004612d5d565b611540565b6040516103ff9190613124565b34801561079057600080fd5b5061049a61079f366004612d5d565b611619565b3480156107b057600080fd5b506104826116a0565b3480156107c557600080fd5b5061049a604281565b3480156107da57600080fd5b5061049a6116d6565b6104826107f1366004613035565b6116e1565b34801561080257600080fd5b506006546001600160a01b031661044a565b34801561082057600080fd5b5061049a610d0581565b34801561083657600080fd5b5061041d611716565b34801561084b57600080fd5b506103f361085a366004613003565b601b6020526000908152604090205460ff1681565b61048261087d366004613003565b611725565b34801561088e57600080fd5b5060175461044a906001600160a01b031681565b6104826108b0366004613035565b61181a565b3480156108c157600080fd5b5060195461044a906001600160a01b031681565b6104826108e3366004613003565b611b29565b3480156108f457600080fd5b50610482610903366004612eb7565b611cb8565b34801561091457600080fd5b50600b5461044a906001600160a01b031681565b34801561093457600080fd5b5061049a610943366004612d5d565b611d7d565b610482610956366004613003565b611db0565b34801561096757600080fd5b50610482610976366004612e3b565b611ddf565b34801561098757600080fd5b5061049a610996366004612d5d565b601c6020526000908152604090205481565b3480156109b457600080fd5b5061049a61038481565b3480156109ca57600080fd5b5061041d6109d9366004613003565b611e58565b3480156109ea57600080fd5b5061049a600f5481565b348015610a0057600080fd5b5061049a60135481565b348015610a1657600080fd5b50600a5461044a906001600160a01b031681565b610482610a38366004613035565b611f33565b348015610a4957600080fd5b5061049a610a58366004612d5d565b601d6020526000908152604090205481565b6104826121ea565b348015610a7e57600080fd5b506103f3610a8d366004612d78565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610ac757600080fd5b50610482610ad6366004612d5d565b6123b3565b610482610ae9366004613003565b61244e565b348015610afa57600080fd5b5061049a611a0a81565b348015610b1057600080fd5b5061049a61247d565b60006001600160e01b031982166380ac58cd60e01b1480610b4a57506001600160e01b03198216635b5e139f60e01b145b80610b6557506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008054610b7a9061352f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba69061352f565b8015610bf35780601f10610bc857610100808354040283529160200191610bf3565b820191906000526020600020905b815481529060010190602001808311610bd657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c7b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ca282611478565b9050806001600160a01b0316836001600160a01b03161415610d105760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c72565b336001600160a01b0382161480610d2c5750610d2c8133610a8d565b610d9e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c72565b610da88383612488565b505050565b6006546001600160a01b03163314610dd75760405162461bcd60e51b8152600401610c72906132b5565b60005b81811015610da8576001601c6000858585818110610dfa57610dfa6135c5565b9050602002016020810190610e0f9190612d5d565b6001600160a01b0316815260208101919091526040016000205580610e338161356a565b915050610dda565b6000610e4660075490565b905090565b6012544211610e6c5760405162461bcd60e51b8152600401610c72906132ea565b6000610e7760075490565b9050323314610e985760405162461bcd60e51b8152600401610c72906133a5565b600082118015610ea9575060068211155b610ec55760405162461bcd60e51b8152600401610c729061317b565b6013544211610f1457610edb60646103846134a1565b610ee790611a0a6134ec565b610ef183836134a1565b1115610f0f5760405162461bcd60e51b8152600401610c729061336e565b610f3f565b611a0a610f2183836134a1565b1115610f3f5760405162461bcd60e51b8152600401610c729061336e565b81601854610f4d91906134cd565b600d546040516370a0823160e01b81523360048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610f9057600080fd5b505afa158015610fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc8919061301c565b10156110245760405162461bcd60e51b815260206004820152602560248201527f4e6f7420656e6f75676820244c4f4f4b5320746f20627579206120696e6861626044820152641a5d185b9d60da1b6064820152608401610c72565b600d546019546018546001600160a01b03928316926323b872dd92339291169061104f9087906134cd565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561109e57600080fd5b505af11580156110b2573d6000803e3d6000fd5b5050505060005b82811015610da8576110d4336110cf83856134a1565b6124f6565b6110e2600780546001019055565b806110ec8161356a565b9150506110b9565b600c54604051635febb1e560e11b81526001600160a01b03858116600483015284811660248301529091169063bfd763ca90604401600060405180830381600087803b15801561114357600080fd5b505af1158015611157573d6000803e3d6000fd5b50505050610da8838383612510565b6006546001600160a01b031633146111905760405162461bcd60e51b8152600401610c72906132b5565b600a80546001600160a01b039586166001600160a01b031991821617909155600b805494861694821694909417909355600c805492851692841692909217909155600d8054919093169116179055565b60125442116112015760405162461bcd60e51b8152600401610c72906132ea565b601354421061124d5760405162461bcd60e51b8152602060048201526018602482015277416c6c20696e6861626974616e74732061726520676f6e6560401b6044820152606401610c72565b600061125860075490565b90503233146112795760405162461bcd60e51b8152600401610c72906133a5565b611a0a6112878260016134a1565b11156112a55760405162461bcd60e51b8152600401610c7290613474565b610384600f5460016112b791906134a1565b11156112d55760405162461bcd60e51b8152600401610c7290613474565b336000908152601c60205260409020546001146113045760405162461bcd60e51b8152600401610c7290613321565b61130e33826124f6565b61131c600780546001019055565b336000908152601c60205260408120819055600f80549161133c8361356a565b909155505050565b6006546001600160a01b0316331461136e5760405162461bcd60e51b8152600401610c72906132b5565b6040514790339082156108fc029083906000818181858888f1935050505015801561139d573d6000803e3d6000fd5b5050565b610da883838360405180602001604052806000815250611ddf565b6006546001600160a01b031633146113e65760405162461bcd60e51b8152600401610c72906132b5565b805161139d90600e906020840190612c22565b600a546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b60206040518083038186803b15801561144057600080fd5b505afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b65919061301c565b6000818152600260205260408120546001600160a01b031680610b655760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610c72565b6006546001600160a01b031633146115195760405162461bcd60e51b8152600401610c72906132b5565b60159290925560165560198054911515600160a01b0260ff60a01b19909216919091179055565b6060600061154d60075490565b9050600061155a84611619565b90506000808267ffffffffffffffff811115611578576115786135db565b6040519080825280602002602001820160405280156115a1578160200160208202803683370190505b50905060005b8481101561160f57866001600160a01b03166115c282611478565b6001600160a01b031614156115fd57808284815181106115e4576115e46135c5565b6020908102919091010152826115f98161356a565b9350505b806116078161356a565b9150506115a7565b5095945050505050565b60006001600160a01b0382166116845760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c72565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146116ca5760405162461bcd60e51b8152600401610c72906132b5565b6116d46000612541565b565b6000610e4660095490565b6006546001600160a01b0316331461170b5760405162461bcd60e51b8152600401610c72906132b5565b601291909155601355565b606060018054610b7a9061352f565b6006546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610c72906132b5565b600061175a60075490565b905060428260115461176c91906134a1565b106117cb5760405162461bcd60e51b815260206004820152602960248201527f57652776652072756e206f7574206f6620696e6861626974616e747320666f7260448201526820746865207465616d60b81b6064820152608401610c72565b60005b82811015610da8576117e4336110cf83856134a1565b6117f2600780546001019055565b601180549060006118028361356a565b919050555080806118129061356a565b9150506117ce565b813361182582611478565b6001600160a01b03161461184b5760405162461bcd60e51b8152600401610c72906133da565b813361185682611478565b6001600160a01b03161461187c5760405162461bcd60e51b8152600401610c72906133da565b6000848152601a6020526040902054849060ff166118ac5760405162461bcd60e51b8152600401610c7290613258565b6000848152601a6020526040902054849060ff166118dc5760405162461bcd60e51b8152600401610c7290613258565b601954600160a01b900460ff166119355760405162461bcd60e51b815260206004820152601b60248201527f5468652074656d706c65206973206e6f742072656164792079657400000000006044820152606401610c72565b600061194060095490565b61194c9061014d6134cd565b90508587141561196e5760405162461bcd60e51b8152600401610c7290613210565b8061197860085490565b10156119d75760405162461bcd60e51b815260206004820152602860248201527f4e6f7420656e6f756768207361637269666963657320746f20646973636f766560448201526772206120476f642160c01b6064820152608401610c72565b600c546001600160a01b0316639dc29fac336119f260085490565b6016546119ff91906134cd565b601554611a0c91906134a1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611a5257600080fd5b505af1158015611a66573d6000803e3d6000fd5b5050601754604080516020810190915260008152611a9593503392506001600160a01b03909116908990611ddf565b6000878152601a60209081526040808320805460ff19908116909155601b90925290912080549091166001179055611ad1600880546001019055565b611adf600980546001019055565b60408051338152602081018990529081018790527f7b7727ca544d30c05dd4ded330efc4026ba6ac4eb2ea01a7fec9d292516266f99060600160405180910390a150505050505050565b6012544211611b4a5760405162461bcd60e51b8152600401610c72906132ea565b323314611b695760405162461bcd60e51b8152600401610c72906133a5565b600081118015611b7a575060068111155b611b965760405162461bcd60e51b8152600401610c729061317b565b6013544211611bef57611bac60646103846134a1565b611bb890611a0a6134ec565b81611bc260075490565b611bcc91906134a1565b1115611bea5760405162461bcd60e51b8152600401610c729061336e565b611c24565b611a0a81611bfc60075490565b611c0691906134a1565b1115611c245760405162461bcd60e51b8152600401610c729061336e565b3481601454611c3391906134cd565b14611c805760405162461bcd60e51b815260206004820152601960248201527f4d696e74205072696365206973206e6f7420636f7272656374000000000000006044820152606401610c72565b60005b8181101561139d57611c98336110cf60075490565b611ca6600780546001019055565b80611cb08161356a565b915050611c83565b6001600160a01b038216331415611d115760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c72565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600b546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a0823190602401611428565b6006546001600160a01b03163314611dda5760405162461bcd60e51b8152600401610c72906132b5565b601855565b600c54604051635febb1e560e11b81526001600160a01b03868116600483015285811660248301529091169063bfd763ca90604401600060405180830381600087803b158015611e2e57600080fd5b505af1158015611e42573d6000803e3d6000fd5b50505050611e5284848484612593565b50505050565b6000818152600260205260409020546060906001600160a01b0316611ed75760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610c72565b6000611ee16125c5565b90506000815111611f015760405180602001604052806000815250611f2c565b80611f0b846125d4565b604051602001611f1c9291906130b8565b6040516020818303038152906040525b9392505050565b8133611f3e82611478565b6001600160a01b031614611f645760405162461bcd60e51b8152600401610c72906133da565b8133611f6f82611478565b6001600160a01b031614611f955760405162461bcd60e51b8152600401610c72906133da565b601954600160a01b900460ff16611fee5760405162461bcd60e51b815260206004820152601b60248201527f5468652074656d706c65206973206e6f742072656164792079657400000000006044820152606401610c72565b8284141561200e5760405162461bcd60e51b8152600401610c7290613210565b6000848152601a602052604090205460ff1615801561203c57506000838152601a602052604090205460ff16155b6120bd5760405162461bcd60e51b815260206004820152604660248201527f596f752063616e27742073616372696669636520617363656e64656420696e6860448201527f61626974616e747320776974682074686f7365206f6620746865206c6f77657260648201526520636c61737360d01b608482015260a401610c72565b600c546001600160a01b0316639dc29fac336120d860085490565b6016546120e591906134cd565b6015546120f291906134a1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561213857600080fd5b505af115801561214c573d6000803e3d6000fd5b505060175460408051602081019091526000815261217b93503392506001600160a01b03909116908690611ddf565b612189600880546001019055565b6000848152601a6020908152604091829020805460ff1916600117905581513381529081018690529081018490527f9c1ab6710b9ccf1f4b31f657591d40bdfbed5dcb9d5b714185456e7d258a80659060600160405180910390a150505050565b601254421161220b5760405162461bcd60e51b8152600401610c72906132ea565b60135442106122575760405162461bcd60e51b8152602060048201526018602482015277416c6c20696e6861626974616e74732061726520676f6e6560401b6044820152606401610c72565b600061226260075490565b90503233146122835760405162461bcd60e51b8152600401610c72906133a5565b611a0a6122918260016134a1565b11156122af5760405162461bcd60e51b8152600401610c7290613474565b606460105460016122c091906134a1565b11156122de5760405162461bcd60e51b8152600401610c7290613474565b60016122e9336113f9565b1015806122ff575060016122fc33611d7d565b10155b61231b5760405162461bcd60e51b8152600401610c7290613321565b336000908152601d602052604090205460011161237a5760405162461bcd60e51b815260206004820152601d60248201527f596f7520616c726561647920746f6f6b206120696e6861626974616e740000006044820152606401610c72565b61238433826124f6565b612392600780546001019055565b336000908152601d6020526040812060019055601080549161133c8361356a565b6006546001600160a01b031633146123dd5760405162461bcd60e51b8152600401610c72906132b5565b6001600160a01b0381166124425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c72565b61244b81612541565b50565b6006546001600160a01b031633146124785760405162461bcd60e51b8152600401610c72906132b5565b601455565b6000610e4660085490565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906124bd82611478565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61139d8282604051806020016040528060008152506126da565b61251a338261270d565b6125365760405162461bcd60e51b8152600401610c7290613423565b610da8838383612800565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61259d338361270d565b6125b95760405162461bcd60e51b8152600401610c7290613423565b611e52848484846129a0565b6060600e8054610b7a9061352f565b6060816125f85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612622578061260c8161356a565b915061261b9050600a836134b9565b91506125fc565b60008167ffffffffffffffff81111561263d5761263d6135db565b6040519080825280601f01601f191660200182016040528015612667576020820181803683370190505b5090505b84156126d25761267c6001836134ec565b9150612689600a86613585565b6126949060306134a1565b60f81b8183815181106126a9576126a96135c5565b60200101906001600160f81b031916908160001a9053506126cb600a866134b9565b945061266b565b949350505050565b6126e483836129d3565b6126f16000848484612b15565b610da85760405162461bcd60e51b8152600401610c72906131be565b6000818152600260205260408120546001600160a01b03166127865760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c72565b600061279183611478565b9050806001600160a01b0316846001600160a01b031614806127cc5750836001600160a01b03166127c184610bfd565b6001600160a01b0316145b806126d257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166126d2565b826001600160a01b031661281382611478565b6001600160a01b03161461287b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c72565b6001600160a01b0382166128dd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c72565b6128e8600082612488565b6001600160a01b03831660009081526003602052604081208054600192906129119084906134ec565b90915550506001600160a01b038216600090815260036020526040812080546001929061293f9084906134a1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6129ab848484612800565b6129b784848484612b15565b611e525760405162461bcd60e51b8152600401610c72906131be565b6001600160a01b038216612a295760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c72565b6000818152600260205260409020546001600160a01b031615612a8e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c72565b6001600160a01b0382166000908152600360205260408120805460019290612ab79084906134a1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15612c1757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612b599033908990889088906004016130e7565b602060405180830381600087803b158015612b7357600080fd5b505af1925050508015612ba3575060408051601f3d908101601f19168201909252612ba091810190612f9d565b60015b612bfd573d808015612bd1576040519150601f19603f3d011682016040523d82523d6000602084013e612bd6565b606091505b508051612bf55760405162461bcd60e51b8152600401610c72906131be565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506126d2565b506001949350505050565b828054612c2e9061352f565b90600052602060002090601f016020900481019282612c505760008555612c96565b82601f10612c6957805160ff1916838001178555612c96565b82800160010185558215612c96579182015b82811115612c96578251825591602001919060010190612c7b565b50612ca2929150612ca6565b5090565b5b80821115612ca25760008155600101612ca7565b600067ffffffffffffffff80841115612cd657612cd66135db565b604051601f8501601f19908116603f01168101908282118183101715612cfe57612cfe6135db565b81604052809350858152868686011115612d1757600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612d4857600080fd5b919050565b80358015158114612d4857600080fd5b600060208284031215612d6f57600080fd5b611f2c82612d31565b60008060408385031215612d8b57600080fd5b612d9483612d31565b9150612da260208401612d31565b90509250929050565b60008060008060808587031215612dc157600080fd5b612dca85612d31565b9350612dd860208601612d31565b9250612de660408601612d31565b9150612df460608601612d31565b905092959194509250565b600080600060608486031215612e1457600080fd5b612e1d84612d31565b9250612e2b60208501612d31565b9150604084013590509250925092565b60008060008060808587031215612e5157600080fd5b612e5a85612d31565b9350612e6860208601612d31565b925060408501359150606085013567ffffffffffffffff811115612e8b57600080fd5b8501601f81018713612e9c57600080fd5b612eab87823560208401612cbb565b91505092959194509250565b60008060408385031215612eca57600080fd5b612ed383612d31565b9150612da260208401612d4d565b60008060408385031215612ef457600080fd5b612efd83612d31565b946020939093013593505050565b60008060208385031215612f1e57600080fd5b823567ffffffffffffffff80821115612f3657600080fd5b818501915085601f830112612f4a57600080fd5b813581811115612f5957600080fd5b8660208260051b8501011115612f6e57600080fd5b60209290920196919550909350505050565b600060208284031215612f9257600080fd5b8135611f2c816135f1565b600060208284031215612faf57600080fd5b8151611f2c816135f1565b600060208284031215612fcc57600080fd5b813567ffffffffffffffff811115612fe357600080fd5b8201601f81018413612ff457600080fd5b6126d284823560208401612cbb565b60006020828403121561301557600080fd5b5035919050565b60006020828403121561302e57600080fd5b5051919050565b6000806040838503121561304857600080fd5b50508035926020909101359150565b60008060006060848603121561306c57600080fd5b833592506020840135915061308360408501612d4d565b90509250925092565b600081518084526130a4816020860160208601613503565b601f01601f19169290920160200192915050565b600083516130ca818460208801613503565b8351908301906130de818360208801613503565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061311a9083018461308c565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561315c57835183529284019291840191600101613140565b50909695505050505050565b602081526000611f2c602083018461308c565b60208082526023908201527f596f757220616d6f756e74206d757374206265206265747765656e203120616e60408201526232101b60e91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526028908201527f596f752063616e277420736163726966696365207468652073616d6520696e6860408201526761626974616e747360c01b606082015260800190565b6020808252603f908201527f5468697320696e6861626974616e74206e6565647320746f207361637269666960408201527f636520616e6f7468657220696e6861626974616e7420746f20617363656e6400606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601b908201527f496e6861626974616e7473206172656e277420626f726e207965740000000000604082015260600190565b6020808252602d908201527f596f7520646f6e27742068617665207065726d697373696f6e20746f2062652060408201526c3432b9329037baba39b4b232b960991b606082015260800190565b6020808252601f908201527f4e6f7420656e6f75676820696e6861626974616e747320666f72207468617400604082015260600190565b6020808252818101527f43616e2774206d696e742066726f6d206f7468657220636f6e74726163747321604082015260600190565b60208082526029908201527f596f752063616e27742075736520616e6f7468657220706572736f6e7320696e6040820152686861626974616e747360b81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260139082015272139bc81a5b9a18589a5d185b9d1cc81b19599d606a1b604082015260600190565b600082198211156134b4576134b4613599565b500190565b6000826134c8576134c86135af565b500490565b60008160001904831182151516156134e7576134e7613599565b500290565b6000828210156134fe576134fe613599565b500390565b60005b8381101561351e578181015183820152602001613506565b83811115611e525750506000910152565b600181811c9082168061354357607f821691505b6020821081141561356457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561357e5761357e613599565b5060010190565b600082613594576135946135af565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461244b57600080fdfea26469706673582212205e7f2f09f9a8127a8e22ad349a3197e03e784bac43a52e7563c352ce9070485664736f6c634300080700330000000000000000000000000eef7755d5148effbdded74f33b14ac4e4098526000000000000000000000000838e4c6c7b697fc8beb8f51ea0dedc7523c8dbf4
Deployed Bytecode
0x6080604052600436106103ce5760003560e01c806370a08231116101fd578063b4ff922611610118578063dac13f6d116100ab578063e985e9c51161007a578063e985e9c514610a72578063f2fde38b14610abb578063f4a0a52814610adb578063f4d2656d14610aee578063f600456f14610b0457600080fd5b8063dac13f6d14610a0a578063dcb066cf14610a2a578063e7663f5914610a3d578063e901366f14610a6a57600080fd5b8063bcd18b7c116100e7578063bcd18b7c146109a8578063c87b56dd146109be578063c9247403146109de578063d4a6a2fd146109f457600080fd5b8063b4ff922614610928578063b549a45014610948578063b88d4fde1461095b578063b8ec6a3e1461097b57600080fd5b806396c56399116101905780639f39d4191161015f5780639f39d419146108b5578063a0712d68146108d5578063a22cb465146108e8578063af9666b41461090857600080fd5b806396c563991461083f57806397901f9c1461086f57806399bb35af146108825780639dd33ae9146108a257600080fd5b80638233de99116101cc5780638233de99146107e35780638da5cb5b146107f6578063915992b21461081457806395d89b411461082a57600080fd5b806370a0823114610784578063715018a6146107a45780637df9f718146107b95780637f2a9d6a146107ce57600080fd5b80632a9fd3e4116102ed578063530136d6116102805780636817c76c1161024f5780636817c76c1461071857806368428a1b1461072e578063697f2c7914610744578063699d4dc91461075757600080fd5b8063530136d61461068f57806355f804b3146106c5578063630b5f41146106d85780636352211e146106f857600080fd5b806342842e0e116102bc57806342842e0e146106195780634e0ea0b21461063957806350d7c9bc146106595780635177068a1461067a57600080fd5b80632a9fd3e4146105e15780632d3df31f146105f45780633cb51994146105fc5780633ccfd60b1461061157600080fd5b806318160ddd1161036557806323b872dd1161033457806323b872dd146105455780632475fc3214610565578063255f66131461059b578063281af86e146105b157600080fd5b806318160ddd146104e75780631a38f777146104fc5780631cf72c141461051257806320db28c21461053257600080fd5b80630c48063d116103a15780630c48063d146104845780630ca69012146104a85780630fc12313146104be578063105c338d146104d157600080fd5b806301ffc9a7146103d357806306fdde0314610408578063081812fc1461042a578063095ea7b314610462575b600080fd5b3480156103df57600080fd5b506103f36103ee366004612f80565b610b19565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610b6b565b6040516103ff9190613168565b34801561043657600080fd5b5061044a610445366004613003565b610bfd565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b5061048261047d366004612ee1565b610c97565b005b34801561049057600080fd5b5061049a60185481565b6040519081526020016103ff565b3480156104b457600080fd5b5061049a60115481565b6104826104cc366004612f0b565b610dad565b3480156104dd57600080fd5b5061049a60165481565b3480156104f357600080fd5b5061049a610e3b565b34801561050857600080fd5b5061049a60105481565b34801561051e57600080fd5b50600c5461044a906001600160a01b031681565b610482610540366004613003565b610e4b565b34801561055157600080fd5b50610482610560366004612dff565b6110f4565b34801561057157600080fd5b5061049a610580366004612d5d565b6001600160a01b03166000908152601d602052604090205490565b3480156105a757600080fd5b5061049a60155481565b3480156105bd57600080fd5b506103f36105cc366004613003565b601a6020526000908152604090205460ff1681565b6104826105ef366004612dab565b611166565b6104826111e0565b34801561060857600080fd5b5061049a600681565b610482611344565b34801561062557600080fd5b50610482610634366004612dff565b6113a1565b34801561064557600080fd5b50600d5461044a906001600160a01b031681565b34801561066557600080fd5b506019546103f390600160a01b900460ff1681565b34801561068657600080fd5b5061049a606481565b34801561069b57600080fd5b5061049a6106aa366004612d5d565b6001600160a01b03166000908152601c602052604090205490565b6104826106d3366004612fba565b6113bc565b3480156106e457600080fd5b5061049a6106f3366004612d5d565b6113f9565b34801561070457600080fd5b5061044a610713366004613003565b611478565b34801561072457600080fd5b5061049a60145481565b34801561073a57600080fd5b5061049a60125481565b610482610752366004613057565b6114ef565b34801561076357600080fd5b50610777610772366004612d5d565b611540565b6040516103ff9190613124565b34801561079057600080fd5b5061049a61079f366004612d5d565b611619565b3480156107b057600080fd5b506104826116a0565b3480156107c557600080fd5b5061049a604281565b3480156107da57600080fd5b5061049a6116d6565b6104826107f1366004613035565b6116e1565b34801561080257600080fd5b506006546001600160a01b031661044a565b34801561082057600080fd5b5061049a610d0581565b34801561083657600080fd5b5061041d611716565b34801561084b57600080fd5b506103f361085a366004613003565b601b6020526000908152604090205460ff1681565b61048261087d366004613003565b611725565b34801561088e57600080fd5b5060175461044a906001600160a01b031681565b6104826108b0366004613035565b61181a565b3480156108c157600080fd5b5060195461044a906001600160a01b031681565b6104826108e3366004613003565b611b29565b3480156108f457600080fd5b50610482610903366004612eb7565b611cb8565b34801561091457600080fd5b50600b5461044a906001600160a01b031681565b34801561093457600080fd5b5061049a610943366004612d5d565b611d7d565b610482610956366004613003565b611db0565b34801561096757600080fd5b50610482610976366004612e3b565b611ddf565b34801561098757600080fd5b5061049a610996366004612d5d565b601c6020526000908152604090205481565b3480156109b457600080fd5b5061049a61038481565b3480156109ca57600080fd5b5061041d6109d9366004613003565b611e58565b3480156109ea57600080fd5b5061049a600f5481565b348015610a0057600080fd5b5061049a60135481565b348015610a1657600080fd5b50600a5461044a906001600160a01b031681565b610482610a38366004613035565b611f33565b348015610a4957600080fd5b5061049a610a58366004612d5d565b601d6020526000908152604090205481565b6104826121ea565b348015610a7e57600080fd5b506103f3610a8d366004612d78565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610ac757600080fd5b50610482610ad6366004612d5d565b6123b3565b610482610ae9366004613003565b61244e565b348015610afa57600080fd5b5061049a611a0a81565b348015610b1057600080fd5b5061049a61247d565b60006001600160e01b031982166380ac58cd60e01b1480610b4a57506001600160e01b03198216635b5e139f60e01b145b80610b6557506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008054610b7a9061352f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba69061352f565b8015610bf35780601f10610bc857610100808354040283529160200191610bf3565b820191906000526020600020905b815481529060010190602001808311610bd657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c7b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610ca282611478565b9050806001600160a01b0316836001600160a01b03161415610d105760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c72565b336001600160a01b0382161480610d2c5750610d2c8133610a8d565b610d9e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c72565b610da88383612488565b505050565b6006546001600160a01b03163314610dd75760405162461bcd60e51b8152600401610c72906132b5565b60005b81811015610da8576001601c6000858585818110610dfa57610dfa6135c5565b9050602002016020810190610e0f9190612d5d565b6001600160a01b0316815260208101919091526040016000205580610e338161356a565b915050610dda565b6000610e4660075490565b905090565b6012544211610e6c5760405162461bcd60e51b8152600401610c72906132ea565b6000610e7760075490565b9050323314610e985760405162461bcd60e51b8152600401610c72906133a5565b600082118015610ea9575060068211155b610ec55760405162461bcd60e51b8152600401610c729061317b565b6013544211610f1457610edb60646103846134a1565b610ee790611a0a6134ec565b610ef183836134a1565b1115610f0f5760405162461bcd60e51b8152600401610c729061336e565b610f3f565b611a0a610f2183836134a1565b1115610f3f5760405162461bcd60e51b8152600401610c729061336e565b81601854610f4d91906134cd565b600d546040516370a0823160e01b81523360048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610f9057600080fd5b505afa158015610fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc8919061301c565b10156110245760405162461bcd60e51b815260206004820152602560248201527f4e6f7420656e6f75676820244c4f4f4b5320746f20627579206120696e6861626044820152641a5d185b9d60da1b6064820152608401610c72565b600d546019546018546001600160a01b03928316926323b872dd92339291169061104f9087906134cd565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561109e57600080fd5b505af11580156110b2573d6000803e3d6000fd5b5050505060005b82811015610da8576110d4336110cf83856134a1565b6124f6565b6110e2600780546001019055565b806110ec8161356a565b9150506110b9565b600c54604051635febb1e560e11b81526001600160a01b03858116600483015284811660248301529091169063bfd763ca90604401600060405180830381600087803b15801561114357600080fd5b505af1158015611157573d6000803e3d6000fd5b50505050610da8838383612510565b6006546001600160a01b031633146111905760405162461bcd60e51b8152600401610c72906132b5565b600a80546001600160a01b039586166001600160a01b031991821617909155600b805494861694821694909417909355600c805492851692841692909217909155600d8054919093169116179055565b60125442116112015760405162461bcd60e51b8152600401610c72906132ea565b601354421061124d5760405162461bcd60e51b8152602060048201526018602482015277416c6c20696e6861626974616e74732061726520676f6e6560401b6044820152606401610c72565b600061125860075490565b90503233146112795760405162461bcd60e51b8152600401610c72906133a5565b611a0a6112878260016134a1565b11156112a55760405162461bcd60e51b8152600401610c7290613474565b610384600f5460016112b791906134a1565b11156112d55760405162461bcd60e51b8152600401610c7290613474565b336000908152601c60205260409020546001146113045760405162461bcd60e51b8152600401610c7290613321565b61130e33826124f6565b61131c600780546001019055565b336000908152601c60205260408120819055600f80549161133c8361356a565b909155505050565b6006546001600160a01b0316331461136e5760405162461bcd60e51b8152600401610c72906132b5565b6040514790339082156108fc029083906000818181858888f1935050505015801561139d573d6000803e3d6000fd5b5050565b610da883838360405180602001604052806000815250611ddf565b6006546001600160a01b031633146113e65760405162461bcd60e51b8152600401610c72906132b5565b805161139d90600e906020840190612c22565b600a546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b60206040518083038186803b15801561144057600080fd5b505afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b65919061301c565b6000818152600260205260408120546001600160a01b031680610b655760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610c72565b6006546001600160a01b031633146115195760405162461bcd60e51b8152600401610c72906132b5565b60159290925560165560198054911515600160a01b0260ff60a01b19909216919091179055565b6060600061154d60075490565b9050600061155a84611619565b90506000808267ffffffffffffffff811115611578576115786135db565b6040519080825280602002602001820160405280156115a1578160200160208202803683370190505b50905060005b8481101561160f57866001600160a01b03166115c282611478565b6001600160a01b031614156115fd57808284815181106115e4576115e46135c5565b6020908102919091010152826115f98161356a565b9350505b806116078161356a565b9150506115a7565b5095945050505050565b60006001600160a01b0382166116845760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c72565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146116ca5760405162461bcd60e51b8152600401610c72906132b5565b6116d46000612541565b565b6000610e4660095490565b6006546001600160a01b0316331461170b5760405162461bcd60e51b8152600401610c72906132b5565b601291909155601355565b606060018054610b7a9061352f565b6006546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610c72906132b5565b600061175a60075490565b905060428260115461176c91906134a1565b106117cb5760405162461bcd60e51b815260206004820152602960248201527f57652776652072756e206f7574206f6620696e6861626974616e747320666f7260448201526820746865207465616d60b81b6064820152608401610c72565b60005b82811015610da8576117e4336110cf83856134a1565b6117f2600780546001019055565b601180549060006118028361356a565b919050555080806118129061356a565b9150506117ce565b813361182582611478565b6001600160a01b03161461184b5760405162461bcd60e51b8152600401610c72906133da565b813361185682611478565b6001600160a01b03161461187c5760405162461bcd60e51b8152600401610c72906133da565b6000848152601a6020526040902054849060ff166118ac5760405162461bcd60e51b8152600401610c7290613258565b6000848152601a6020526040902054849060ff166118dc5760405162461bcd60e51b8152600401610c7290613258565b601954600160a01b900460ff166119355760405162461bcd60e51b815260206004820152601b60248201527f5468652074656d706c65206973206e6f742072656164792079657400000000006044820152606401610c72565b600061194060095490565b61194c9061014d6134cd565b90508587141561196e5760405162461bcd60e51b8152600401610c7290613210565b8061197860085490565b10156119d75760405162461bcd60e51b815260206004820152602860248201527f4e6f7420656e6f756768207361637269666963657320746f20646973636f766560448201526772206120476f642160c01b6064820152608401610c72565b600c546001600160a01b0316639dc29fac336119f260085490565b6016546119ff91906134cd565b601554611a0c91906134a1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611a5257600080fd5b505af1158015611a66573d6000803e3d6000fd5b5050601754604080516020810190915260008152611a9593503392506001600160a01b03909116908990611ddf565b6000878152601a60209081526040808320805460ff19908116909155601b90925290912080549091166001179055611ad1600880546001019055565b611adf600980546001019055565b60408051338152602081018990529081018790527f7b7727ca544d30c05dd4ded330efc4026ba6ac4eb2ea01a7fec9d292516266f99060600160405180910390a150505050505050565b6012544211611b4a5760405162461bcd60e51b8152600401610c72906132ea565b323314611b695760405162461bcd60e51b8152600401610c72906133a5565b600081118015611b7a575060068111155b611b965760405162461bcd60e51b8152600401610c729061317b565b6013544211611bef57611bac60646103846134a1565b611bb890611a0a6134ec565b81611bc260075490565b611bcc91906134a1565b1115611bea5760405162461bcd60e51b8152600401610c729061336e565b611c24565b611a0a81611bfc60075490565b611c0691906134a1565b1115611c245760405162461bcd60e51b8152600401610c729061336e565b3481601454611c3391906134cd565b14611c805760405162461bcd60e51b815260206004820152601960248201527f4d696e74205072696365206973206e6f7420636f7272656374000000000000006044820152606401610c72565b60005b8181101561139d57611c98336110cf60075490565b611ca6600780546001019055565b80611cb08161356a565b915050611c83565b6001600160a01b038216331415611d115760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c72565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600b546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a0823190602401611428565b6006546001600160a01b03163314611dda5760405162461bcd60e51b8152600401610c72906132b5565b601855565b600c54604051635febb1e560e11b81526001600160a01b03868116600483015285811660248301529091169063bfd763ca90604401600060405180830381600087803b158015611e2e57600080fd5b505af1158015611e42573d6000803e3d6000fd5b50505050611e5284848484612593565b50505050565b6000818152600260205260409020546060906001600160a01b0316611ed75760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610c72565b6000611ee16125c5565b90506000815111611f015760405180602001604052806000815250611f2c565b80611f0b846125d4565b604051602001611f1c9291906130b8565b6040516020818303038152906040525b9392505050565b8133611f3e82611478565b6001600160a01b031614611f645760405162461bcd60e51b8152600401610c72906133da565b8133611f6f82611478565b6001600160a01b031614611f955760405162461bcd60e51b8152600401610c72906133da565b601954600160a01b900460ff16611fee5760405162461bcd60e51b815260206004820152601b60248201527f5468652074656d706c65206973206e6f742072656164792079657400000000006044820152606401610c72565b8284141561200e5760405162461bcd60e51b8152600401610c7290613210565b6000848152601a602052604090205460ff1615801561203c57506000838152601a602052604090205460ff16155b6120bd5760405162461bcd60e51b815260206004820152604660248201527f596f752063616e27742073616372696669636520617363656e64656420696e6860448201527f61626974616e747320776974682074686f7365206f6620746865206c6f77657260648201526520636c61737360d01b608482015260a401610c72565b600c546001600160a01b0316639dc29fac336120d860085490565b6016546120e591906134cd565b6015546120f291906134a1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561213857600080fd5b505af115801561214c573d6000803e3d6000fd5b505060175460408051602081019091526000815261217b93503392506001600160a01b03909116908690611ddf565b612189600880546001019055565b6000848152601a6020908152604091829020805460ff1916600117905581513381529081018690529081018490527f9c1ab6710b9ccf1f4b31f657591d40bdfbed5dcb9d5b714185456e7d258a80659060600160405180910390a150505050565b601254421161220b5760405162461bcd60e51b8152600401610c72906132ea565b60135442106122575760405162461bcd60e51b8152602060048201526018602482015277416c6c20696e6861626974616e74732061726520676f6e6560401b6044820152606401610c72565b600061226260075490565b90503233146122835760405162461bcd60e51b8152600401610c72906133a5565b611a0a6122918260016134a1565b11156122af5760405162461bcd60e51b8152600401610c7290613474565b606460105460016122c091906134a1565b11156122de5760405162461bcd60e51b8152600401610c7290613474565b60016122e9336113f9565b1015806122ff575060016122fc33611d7d565b10155b61231b5760405162461bcd60e51b8152600401610c7290613321565b336000908152601d602052604090205460011161237a5760405162461bcd60e51b815260206004820152601d60248201527f596f7520616c726561647920746f6f6b206120696e6861626974616e740000006044820152606401610c72565b61238433826124f6565b612392600780546001019055565b336000908152601d6020526040812060019055601080549161133c8361356a565b6006546001600160a01b031633146123dd5760405162461bcd60e51b8152600401610c72906132b5565b6001600160a01b0381166124425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c72565b61244b81612541565b50565b6006546001600160a01b031633146124785760405162461bcd60e51b8152600401610c72906132b5565b601455565b6000610e4660085490565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906124bd82611478565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61139d8282604051806020016040528060008152506126da565b61251a338261270d565b6125365760405162461bcd60e51b8152600401610c7290613423565b610da8838383612800565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61259d338361270d565b6125b95760405162461bcd60e51b8152600401610c7290613423565b611e52848484846129a0565b6060600e8054610b7a9061352f565b6060816125f85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612622578061260c8161356a565b915061261b9050600a836134b9565b91506125fc565b60008167ffffffffffffffff81111561263d5761263d6135db565b6040519080825280601f01601f191660200182016040528015612667576020820181803683370190505b5090505b84156126d25761267c6001836134ec565b9150612689600a86613585565b6126949060306134a1565b60f81b8183815181106126a9576126a96135c5565b60200101906001600160f81b031916908160001a9053506126cb600a866134b9565b945061266b565b949350505050565b6126e483836129d3565b6126f16000848484612b15565b610da85760405162461bcd60e51b8152600401610c72906131be565b6000818152600260205260408120546001600160a01b03166127865760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c72565b600061279183611478565b9050806001600160a01b0316846001600160a01b031614806127cc5750836001600160a01b03166127c184610bfd565b6001600160a01b0316145b806126d257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff166126d2565b826001600160a01b031661281382611478565b6001600160a01b03161461287b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c72565b6001600160a01b0382166128dd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c72565b6128e8600082612488565b6001600160a01b03831660009081526003602052604081208054600192906129119084906134ec565b90915550506001600160a01b038216600090815260036020526040812080546001929061293f9084906134a1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6129ab848484612800565b6129b784848484612b15565b611e525760405162461bcd60e51b8152600401610c72906131be565b6001600160a01b038216612a295760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c72565b6000818152600260205260409020546001600160a01b031615612a8e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c72565b6001600160a01b0382166000908152600360205260408120805460019290612ab79084906134a1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15612c1757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612b599033908990889088906004016130e7565b602060405180830381600087803b158015612b7357600080fd5b505af1925050508015612ba3575060408051601f3d908101601f19168201909252612ba091810190612f9d565b60015b612bfd573d808015612bd1576040519150601f19603f3d011682016040523d82523d6000602084013e612bd6565b606091505b508051612bf55760405162461bcd60e51b8152600401610c72906131be565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506126d2565b506001949350505050565b828054612c2e9061352f565b90600052602060002090601f016020900481019282612c505760008555612c96565b82601f10612c6957805160ff1916838001178555612c96565b82800160010185558215612c96579182015b82811115612c96578251825591602001919060010190612c7b565b50612ca2929150612ca6565b5090565b5b80821115612ca25760008155600101612ca7565b600067ffffffffffffffff80841115612cd657612cd66135db565b604051601f8501601f19908116603f01168101908282118183101715612cfe57612cfe6135db565b81604052809350858152868686011115612d1757600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612d4857600080fd5b919050565b80358015158114612d4857600080fd5b600060208284031215612d6f57600080fd5b611f2c82612d31565b60008060408385031215612d8b57600080fd5b612d9483612d31565b9150612da260208401612d31565b90509250929050565b60008060008060808587031215612dc157600080fd5b612dca85612d31565b9350612dd860208601612d31565b9250612de660408601612d31565b9150612df460608601612d31565b905092959194509250565b600080600060608486031215612e1457600080fd5b612e1d84612d31565b9250612e2b60208501612d31565b9150604084013590509250925092565b60008060008060808587031215612e5157600080fd5b612e5a85612d31565b9350612e6860208601612d31565b925060408501359150606085013567ffffffffffffffff811115612e8b57600080fd5b8501601f81018713612e9c57600080fd5b612eab87823560208401612cbb565b91505092959194509250565b60008060408385031215612eca57600080fd5b612ed383612d31565b9150612da260208401612d4d565b60008060408385031215612ef457600080fd5b612efd83612d31565b946020939093013593505050565b60008060208385031215612f1e57600080fd5b823567ffffffffffffffff80821115612f3657600080fd5b818501915085601f830112612f4a57600080fd5b813581811115612f5957600080fd5b8660208260051b8501011115612f6e57600080fd5b60209290920196919550909350505050565b600060208284031215612f9257600080fd5b8135611f2c816135f1565b600060208284031215612faf57600080fd5b8151611f2c816135f1565b600060208284031215612fcc57600080fd5b813567ffffffffffffffff811115612fe357600080fd5b8201601f81018413612ff457600080fd5b6126d284823560208401612cbb565b60006020828403121561301557600080fd5b5035919050565b60006020828403121561302e57600080fd5b5051919050565b6000806040838503121561304857600080fd5b50508035926020909101359150565b60008060006060848603121561306c57600080fd5b833592506020840135915061308360408501612d4d565b90509250925092565b600081518084526130a4816020860160208601613503565b601f01601f19169290920160200192915050565b600083516130ca818460208801613503565b8351908301906130de818360208801613503565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061311a9083018461308c565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561315c57835183529284019291840191600101613140565b50909695505050505050565b602081526000611f2c602083018461308c565b60208082526023908201527f596f757220616d6f756e74206d757374206265206265747765656e203120616e60408201526232101b60e91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526028908201527f596f752063616e277420736163726966696365207468652073616d6520696e6860408201526761626974616e747360c01b606082015260800190565b6020808252603f908201527f5468697320696e6861626974616e74206e6565647320746f207361637269666960408201527f636520616e6f7468657220696e6861626974616e7420746f20617363656e6400606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601b908201527f496e6861626974616e7473206172656e277420626f726e207965740000000000604082015260600190565b6020808252602d908201527f596f7520646f6e27742068617665207065726d697373696f6e20746f2062652060408201526c3432b9329037baba39b4b232b960991b606082015260800190565b6020808252601f908201527f4e6f7420656e6f75676820696e6861626974616e747320666f72207468617400604082015260600190565b6020808252818101527f43616e2774206d696e742066726f6d206f7468657220636f6e74726163747321604082015260600190565b60208082526029908201527f596f752063616e27742075736520616e6f7468657220706572736f6e7320696e6040820152686861626974616e747360b81b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260139082015272139bc81a5b9a18589a5d185b9d1cc81b19599d606a1b604082015260600190565b600082198211156134b4576134b4613599565b500190565b6000826134c8576134c86135af565b500490565b60008160001904831182151516156134e7576134e7613599565b500290565b6000828210156134fe576134fe613599565b500390565b60005b8381101561351e578181015183820152602001613506565b83811115611e525750506000910152565b600181811c9082168061354357607f821691505b6020821081141561356457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561357e5761357e613599565b5060010190565b600082613594576135946135af565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461244b57600080fdfea26469706673582212205e7f2f09f9a8127a8e22ad349a3197e03e784bac43a52e7563c352ce9070485664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000eef7755d5148effbdded74f33b14ac4e4098526000000000000000000000000838e4c6c7b697fc8beb8f51ea0dedc7523c8dbf4
-----Decoded View---------------
Arg [0] : burner (address): 0x0eEf7755d5148effbdDeD74f33B14Ac4e4098526
Arg [1] : rare (address): 0x838E4c6C7b697Fc8bEB8f51EA0dEdC7523C8DbF4
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000eef7755d5148effbdded74f33b14ac4e4098526
Arg [1] : 000000000000000000000000838e4c6c7b697fc8beb8f51ea0dedc7523c8dbf4
Deployed Bytecode Sourcemap
44467:16184:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19936:305;;;;;;;;;;-1:-1:-1;19936:305:0;;;;;:::i;:::-;;:::i;:::-;;;9470:14:1;;9463:22;9445:41;;9433:2;9418:18;19936:305:0;;;;;;;;20881:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22440:221::-;;;;;;;;;;-1:-1:-1;22440:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6813:32:1;;;6795:51;;6783:2;6768:18;22440:221:0;6649:203:1;21963:411:0;;;;;;;;;;-1:-1:-1;21963:411:0;;;;;:::i;:::-;;:::i;:::-;;46450:36;;;;;;;;;;;;;;;;;;;23766:25:1;;;23754:2;23739:18;46450:36:0;23620:177:1;45773:37:0;;;;;;;;;;;;;;;;49936:212;;;;;;:::i;:::-;;:::i;46232:38::-;;;;;;;;;;;;;;;;57448:100;;;;;;;;;;;;;:::i;45645:37::-;;;;;;;;;;;;;;;;44869:19;;;;;;;;;;-1:-1:-1;44869:19:0;;;;-1:-1:-1;;;;;44869:19:0;;;52944:1028;;;;;;:::i;:::-;;:::i;60034:184::-;;;;;;;;;;-1:-1:-1;60034:184:0;;;;;:::i;:::-;;:::i;49682:112::-;;;;;;;;;;-1:-1:-1;49682:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;49770:16:0;49743:7;49770:16;;;:8;:16;;;;;;;49682:112;46147:38;;;;;;;;;;;;;;;;46723:56;;;;;;;;;;-1:-1:-1;46723:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;59620:366;;;;;;:::i;:::-;;:::i;51149:696::-;;;:::i;45484:43::-;;;;;;;;;;;;45526:1;45484:43;;58249:178;;;:::i;60270:149::-;;;;;;;;;;-1:-1:-1;60270:149:0;;;;;:::i;:::-;;:::i;44895:18::-;;;;;;;;;;-1:-1:-1;44895:18:0;;;;-1:-1:-1;;;;;44895:18:0;;;46604:35;;;;;;;;;;-1:-1:-1;46604:35:0;;;;-1:-1:-1;;;46604:35:0;;;;;;45337:45;;;;;;;;;;;;45379:3;45337:45;;49439:112;;;;;;;;;;-1:-1:-1;49439:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;49527:16:0;49500:7;49527:16;;;:8;:16;;;;;;;49439:112;58028;;;;;;:::i;:::-;;:::i;48929:131::-;;;;;;;;;;-1:-1:-1;48929:131:0;;;;;:::i;:::-;;:::i;20575:239::-;;;;;;;;;;-1:-1:-1;20575:239:0;;;;;:::i;:::-;;:::i;46101:39::-;;;;;;;;;;;;;;;;45867:29;;;;;;;;;;;;;;;;59281:210;;;;;;:::i;:::-;;:::i;56884:517::-;;;;;;;;;;-1:-1:-1;56884:517:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20305:208::-;;;;;;;;;;-1:-1:-1;20305:208:0;;;;;:::i;:::-;;:::i;33622:94::-;;;;;;;;;;;;;:::i;45106:44::-;;;;;;;;;;;;45148:2;45106:44;;57744:94;;;;;;;;;;;;;:::i;58527:162::-;;;;;;:::i;:::-;;:::i;32971:87::-;;;;;;;;;;-1:-1:-1;33044:6:0;;-1:-1:-1;;;;;33044:6:0;32971:87;;45006:46;;;;;;;;;;;;45048:4;45006:46;;21050:104;;;;;;;;;;;;;:::i;46840:52::-;;;;;;;;;;-1:-1:-1;46840:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;54122:488;;;;;;:::i;:::-;;:::i;46350:27::-;;;;;;;;;;-1:-1:-1;46350:27:0;;;;-1:-1:-1;;;;;46350:27:0;;;55868:923;;;;;;:::i;:::-;;:::i;46569:26::-;;;;;;;;;;-1:-1:-1;46569:26:0;;;;-1:-1:-1;;;;;46569:26:0;;;50230:811;;;;;;:::i;:::-;;:::i;22733:295::-;;;;;;;;;;-1:-1:-1;22733:295:0;;;;;:::i;:::-;;:::i;44832:30::-;;;;;;;;;;-1:-1:-1;44832:30:0;;;;-1:-1:-1;;;;;44832:30:0;;;49192:137;;;;;;;;;;-1:-1:-1;49192:137:0;;;;;:::i;:::-;;:::i;59039:100::-;;;;;;:::i;:::-;;:::i;60431:217::-;;;;;;;;;;-1:-1:-1;60431:217:0;;;;;:::i;:::-;;:::i;46937:43::-;;;;;;;;;;-1:-1:-1;46937:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;45228:45;;;;;;;;;;;;45270:3;45228:45;;21225:334;;;;;;;;;;-1:-1:-1;21225:334:0;;;;;:::i;:::-;;:::i;45536:42::-;;;;;;;;;;;;;;;;45945:30;;;;;;;;;;;;;;;;44801:24;;;;;;;;;;-1:-1:-1;44801:24:0;;;;-1:-1:-1;;;;;44801:24:0;;;54864:841;;;;;;:::i;:::-;;:::i;47054:43::-;;;;;;;;;;-1:-1:-1;47054:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;52008:815;;;:::i;23099:164::-;;;;;;;;;;-1:-1:-1;23099:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;23220:25:0;;;23196:4;23220:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23099:164;33871:192;;;;;;;;;;-1:-1:-1;33871:192:0;;;;;:::i;:::-;;:::i;58806:98::-;;;;;;:::i;:::-;;:::i;44953:46::-;;;;;;;;;;;;44995:4;44953:46;;57597:102;;;;;;;;;;;;;:::i;19936:305::-;20038:4;-1:-1:-1;;;;;;20075:40:0;;-1:-1:-1;;;20075:40:0;;:105;;-1:-1:-1;;;;;;;20132:48:0;;-1:-1:-1;;;20132:48:0;20075:105;:158;;;-1:-1:-1;;;;;;;;;;18652:40:0;;;20197:36;20055:178;19936:305;-1:-1:-1;;19936:305:0:o;20881:100::-;20935:13;20968:5;20961:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20881:100;:::o;22440:221::-;22516:7;25923:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25923:16:0;22536:73;;;;-1:-1:-1;;;22536:73:0;;17558:2:1;22536:73:0;;;17540:21:1;17597:2;17577:18;;;17570:30;17636:34;17616:18;;;17609:62;-1:-1:-1;;;17687:18:1;;;17680:42;17739:19;;22536:73:0;;;;;;;;;-1:-1:-1;22629:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22629:24:0;;22440:221::o;21963:411::-;22044:13;22060:23;22075:7;22060:14;:23::i;:::-;22044:39;;22108:5;-1:-1:-1;;;;;22102:11:0;:2;-1:-1:-1;;;;;22102:11:0;;;22094:57;;;;-1:-1:-1;;;22094:57:0;;19928:2:1;22094:57:0;;;19910:21:1;19967:2;19947:18;;;19940:30;20006:34;19986:18;;;19979:62;-1:-1:-1;;;20057:18:1;;;20050:31;20098:19;;22094:57:0;19726:397:1;22094:57:0;15722:10;-1:-1:-1;;;;;22186:21:0;;;;:62;;-1:-1:-1;22211:37:0;22228:5;15722:10;23099:164;:::i;22211:37::-;22164:168;;;;-1:-1:-1;;;22164:168:0;;15113:2:1;22164:168:0;;;15095:21:1;15152:2;15132:18;;;15125:30;15191:34;15171:18;;;15164:62;15262:26;15242:18;;;15235:54;15306:19;;22164:168:0;14911:420:1;22164:168:0;22345:21;22354:2;22358:7;22345:8;:21::i;:::-;22033:341;21963:411;;:::o;49936:212::-;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;50036:14:::1;50031:110;50051:23:::0;;::::1;50031:110;;;50128:1;50100:8;:25;50109:7;;50117:6;50109:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50100:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;50100:25:0;:29;50075:8;::::1;::::0;::::1;:::i;:::-;;;;50031:110;;57448:100:::0;57493:7;57520:20;:10;41942:14;;41850:114;57520:20;57513:27;;57448:100;:::o;52944:1028::-;48310:10;;48292:15;:28;48284:68;;;;-1:-1:-1;;;48284:68:0;;;;;;;:::i;:::-;53022:26:::1;53051:20;:10;41942:14:::0;;41850:114;53051:20:::1;53022:49:::0;-1:-1:-1;53092:9:0::1;53105:10;53092:23;53084:68;;;;-1:-1:-1::0;;;53084:68:0::1;;;;;;;:::i;:::-;53180:1;53171:6;:10;:33;;;;;45526:1;53185:6;:19;;53171:33;53163:81;;;;-1:-1:-1::0;;;53163:81:0::1;;;;;;;:::i;:::-;53280:11;;53261:15;:30;53257:314;;53366:33;45379:3;45270;53366:33;:::i;:::-;53348:52;::::0;44995:4:::1;53348:52;:::i;:::-;53316:27;53337:6:::0;53316:18;:27:::1;:::i;:::-;:85;;53308:129;;;;-1:-1:-1::0;;;53308:129:0::1;;;;;;;:::i;:::-;53257:314;;;44995:4;53478:27;53499:6:::0;53478:18;:27:::1;:::i;:::-;:45;;53470:89;;;;-1:-1:-1::0;;;53470:89:0::1;;;;;;;:::i;:::-;53635:6;53622:10;;:19;;;;:::i;:::-;53591:5;::::0;:27:::1;::::0;-1:-1:-1;;;53591:27:0;;53607:10:::1;53591:27;::::0;::::1;6795:51:1::0;-1:-1:-1;;;;;53591:5:0;;::::1;::::0;:15:::1;::::0;6768:18:1;;53591:27:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;53583:100;;;::::0;-1:-1:-1;;;53583:100:0;;16359:2:1;53583:100:0::1;::::0;::::1;16341:21:1::0;16398:2;16378:18;;;16371:30;16437:34;16417:18;;;16410:62;-1:-1:-1;;;16488:18:1;;;16481:35;16533:19;;53583:100:0::1;16157:401:1::0;53583:100:0::1;53704:5;::::0;53735:11:::1;::::0;53748:10:::1;::::0;-1:-1:-1;;;;;53704:5:0;;::::1;::::0;:18:::1;::::0;53723:10:::1;::::0;53735:11;::::1;::::0;53748:19:::1;::::0;53761:6;;53748:19:::1;:::i;:::-;53704:64;::::0;-1:-1:-1;;;;;;53704:64:0::1;::::0;;;;;;-1:-1:-1;;;;;7424:15:1;;;53704:64:0::1;::::0;::::1;7406:34:1::0;7476:15;;;;7456:18;;;7449:43;7508:18;;;7501:34;7341:18;;53704:64:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;53786:9;53781:146;53804:6;53800:1;:10;53781:146;;;53831:45;53841:10;53853:22;53874:1:::0;53853:18;:22:::1;:::i;:::-;53831:9;:45::i;:::-;53893:22;:10;42061:19:::0;;42079:1;42061:19;;;41972:127;53893:22:::1;53811:3:::0;::::1;::::0;::::1;:::i;:::-;;;;53781:146;;60034:184:::0;60129:5;;:27;;-1:-1:-1;;;60129:27:0;;-1:-1:-1;;;;;7087:15:1;;;60129:27:0;;;7069:34:1;7139:15;;;7119:18;;;7112:43;60129:5:0;;;;:17;;7004:18:1;;60129:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60169:41;60189:4;60195:2;60199:10;60169:19;:41::i;59620:366::-;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;59790:8:::1;:40:::0;;-1:-1:-1;;;;;59790:40:0;;::::1;-1:-1:-1::0;;;;;;59790:40:0;;::::1;;::::0;;;59841:11:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;59898:5:::1;:35:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;59944:5:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;59620:366::o;51149:696::-;48310:10;;48292:15;:28;48284:68;;;;-1:-1:-1;;;48284:68:0;;;;;;;:::i;:::-;48564:11:::1;;48546:15;:29;48538:66;;;::::0;-1:-1:-1;;;48538:66:0;;22358:2:1;48538:66:0::1;::::0;::::1;22340:21:1::0;22397:2;22377:18;;;22370:30;-1:-1:-1;;;22416:18:1;;;22409:54;22480:18;;48538:66:0::1;22156:348:1::0;48538:66:0::1;51227:26:::2;51256:20;:10;41942:14:::0;;41850:114;51256:20:::2;51227:49:::0;-1:-1:-1;51297:9:0::2;51310:10;51297:23;51289:68;;;;-1:-1:-1::0;;;51289:68:0::2;;;;;;;:::i;:::-;44995:4;51376:22;:18:::0;51397:1:::2;51376:22;:::i;:::-;:40;;51368:72;;;;-1:-1:-1::0;;;51368:72:0::2;;;;;;;:::i;:::-;45270:3;51459:27;;51489:1;51459:31;;;;:::i;:::-;:50;;51451:82;;;;-1:-1:-1::0;;;51451:82:0::2;;;;;;;:::i;:::-;51561:10;51552:20;::::0;;;:8:::2;:20;::::0;;;;;51576:1:::2;51552:25;51544:83;;;;-1:-1:-1::0;;;51544:83:0::2;;;;;;;:::i;:::-;51640:41;51650:10;51662:18;51640:9;:41::i;:::-;51702:22;:10;42061:19:::0;;42079:1;42061:19;;;41972:127;51702:22:::2;51744:10;51758:1;51735:20:::0;;;:8:::2;:20;::::0;;;;:24;;;51770:27:::2;:29:::0;;;::::2;::::0;::::2;:::i;:::-;::::0;;;-1:-1:-1;;;51149:696:0:o;58249:178::-;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;58355:37:::1;::::0;58323:21:::1;::::0;58363:10:::1;::::0;58355:37;::::1;;;::::0;58323:21;;58305:15:::1;58355:37:::0;58305:15;58355:37;58323:21;58363:10;58355:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;58249:178:0:o;60270:149::-;60369:42;60386:4;60392:2;60396:10;60369:42;;;;;;;;;;;;:16;:42::i;58028:112::-;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;58111:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;48929:131::-:0;49026:8;;:26;;-1:-1:-1;;;49026:26:0;;-1:-1:-1;;;;;6813:32:1;;;49026:26:0;;;6795:51:1;48999:7:0;;49026:8;;:18;;6768::1;;49026:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20575:239::-;20647:7;20683:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20683:16:0;20718:19;20710:73;;;;-1:-1:-1;;;20710:73:0;;15949:2:1;20710:73:0;;;15931:21:1;15988:2;15968:18;;;15961:30;16027:34;16007:18;;;16000:62;-1:-1:-1;;;16078:18:1;;;16071:39;16127:19;;20710:73:0;15747:405:1;59281:210:0;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;59389:11:::1;:23:::0;;;;59423:10:::1;:22:::0;59456:15:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;59456:27:0::1;-1:-1:-1::0;;;;59456:27:0;;::::1;::::0;;;::::1;::::0;;59281:210::o;56884:517::-;56945:16;56974:18;56995:20;:10;41942:14;;41850:114;56995:20;56974:41;;57026:14;57047:21;57057:10;57047:9;:21::i;:::-;57026:42;;57079:16;57114:28;57159:6;57145:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57145:21:0;;57114:52;;57184:9;57179:184;57202:10;57198:1;:14;57179:184;;;57251:10;-1:-1:-1;;;;;57237:24:0;:10;57245:1;57237:7;:10::i;:::-;-1:-1:-1;;;;;57237:24:0;;57233:119;;;57306:1;57282:11;57294:8;57282:21;;;;;;;;:::i;:::-;;;;;;;;;;:25;57326:10;;;;:::i;:::-;;;;57233:119;57213:3;;;;:::i;:::-;;;;57179:184;;;-1:-1:-1;57382:11:0;56884:517;-1:-1:-1;;;;;56884:517:0:o;20305:208::-;20377:7;-1:-1:-1;;;;;20405:19:0;;20397:74;;;;-1:-1:-1;;;20397:74:0;;15538:2:1;20397:74:0;;;15520:21:1;15577:2;15557:18;;;15550:30;15616:34;15596:18;;;15589:62;-1:-1:-1;;;15667:18:1;;;15660:40;15717:19;;20397:74:0;15336:406:1;20397:74:0;-1:-1:-1;;;;;;20489:16:0;;;;;:9;:16;;;;;;;20305:208::o;33622:94::-;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;33687:21:::1;33705:1;33687:9;:21::i;:::-;33622:94::o:0;57744:::-;57787:7;57814:16;:6;41942:14;;41850:114;58527:162;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;58625:10:::1;:22:::0;;;;58658:11:::1;:23:::0;58527:162::o;21050:104::-;21106:13;21139:7;21132:14;;;;;:::i;54122:488::-;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;54202:26:::1;54231:20;:10;41942:14:::0;;41850:114;54231:20:::1;54202:49;;45148:2;54297:6;54272:22;;:31;;;;:::i;:::-;:49;54264:103;;;::::0;-1:-1:-1;;;54264:103:0;;11179:2:1;54264:103:0::1;::::0;::::1;11161:21:1::0;11218:2;11198:18;;;11191:30;11257:34;11237:18;;;11230:62;-1:-1:-1;;;11308:18:1;;;11301:39;11357:19;;54264:103:0::1;10977:405:1::0;54264:103:0::1;54385:9;54380:185;54403:6;54399:1;:10;54380:185;;;54430:45;54440:10;54452:22;54473:1:::0;54452:18;:22:::1;:::i;54430:45::-;54492:22;:10;42061:19:::0;;42079:1;42061:19;;;41972:127;54492:22:::1;54529;:24:::0;;;:22:::1;:24;::::0;::::1;:::i;:::-;;;;;;54410:3;;;;;:::i;:::-;;;;54380:185;;55868:923:::0;55963:6;47800:10;47777:19;55963:6;47777:7;:19::i;:::-;-1:-1:-1;;;;;47777:33:0;;47769:87;;;;-1:-1:-1;;;47769:87:0;;;;;;;:::i;:::-;55987:9;47800:10:::1;47777:19;55987:9:::0;47777:7:::1;:19::i;:::-;-1:-1:-1::0;;;;;47777:33:0::1;;47769:87;;;;-1:-1:-1::0;;;47769:87:0::1;;;;;;;:::i;:::-;48039:33:::2;::::0;;;:21:::2;:33;::::0;;;;;56012:6;;48039:33:::2;;48031:109;;;;-1:-1:-1::0;;;48031:109:0::2;;;;;;;:::i;:::-;48039:33:::3;::::0;;;:21:::3;:33;::::0;;;;;56034:9;;48039:33:::3;;48031:109;;;;-1:-1:-1::0;;;48031:109:0::3;;;;;;;:::i;:::-;47541:15:::4;::::0;-1:-1:-1;;;47541:15:0;::::4;;;47533:55;;;::::0;-1:-1:-1;;;47533:55:0;;12819:2:1;47533:55:0::4;::::0;::::4;12801:21:1::0;12858:2;12838:18;;;12831:30;12897:29;12877:18;;;12870:57;12944:18;;47533:55:0::4;12617:351:1::0;47533:55:0::4;56069:19:::5;56097:16;:6;41942:14:::0;;41850:114;56097:16:::5;56091:22;::::0;:3:::5;:22;:::i;:::-;56069:44;;56166:9;56156:6;:19;;56148:72;;;;-1:-1:-1::0;;;56148:72:0::5;;;;;;;:::i;:::-;56263:11;56239:20;:10;41942:14:::0;;41850:114;56239:20:::5;:35;;56231:88;;;::::0;-1:-1:-1;;;56231:88:0;;23413:2:1;56231:88:0::5;::::0;::::5;23395:21:1::0;23452:2;23432:18;;;23425:30;23491:34;23471:18;;;23464:62;-1:-1:-1;;;23542:18:1;;;23535:38;23590:19;;56231:88:0::5;23211:404:1::0;56231:88:0::5;56414:5;::::0;-1:-1:-1;;;;;56414:5:0::5;:10;56425;56465:20;:10;41942:14:::0;;41850:114;56465:20:::5;56452:10;;:33;;;;:::i;:::-;56437:11;;:49;;;;:::i;:::-;56414:73;::::0;-1:-1:-1;;;;;;56414:73:0::5;::::0;;;;;;-1:-1:-1;;;;;8231:32:1;;;56414:73:0::5;::::0;::::5;8213:51:1::0;8280:18;;;8273:34;8186:18;;56414:73:0::5;;;;;;;;;;;;;;;;;::::0;::::5;;;;;;;;;;;;::::0;::::5;;;;;-1:-1:-1::0;;56527:12:0::5;::::0;56498:57:::5;::::0;;::::5;::::0;::::5;::::0;;;56527:12:::5;56498:57:::0;;::::5;::::0;-1:-1:-1;56515:10:0::5;::::0;-1:-1:-1;;;;;;56527:12:0;;::::5;::::0;56541:9;;56498:16:::5;:57::i;:::-;56600:5;56568:29:::0;;;:21:::5;:29;::::0;;;;;;;:37;;-1:-1:-1;;56568:37:0;;::::5;::::0;;;56616:17:::5;:25:::0;;;;;;:32;;;;::::5;56568:37:::0;56616:32:::5;::::0;;56659:22:::5;:10;42061:19:::0;;42079:1;42061:19;;;41972:127;56659:22:::5;56692:18;:6;42061:19:::0;;42079:1;42061:19;;;41972:127;56692:18:::5;56728:55;::::0;;56753:10:::5;8520:51:1::0;;8602:2;8587:18;;8580:34;;;8630:18;;;8623:34;;;56728:55:0::5;::::0;8508:2:1;8493:18;56728:55:0::5;;;;;;;56058:733;48151:1:::3;47867::::2;::::1;55868:923:::0;;;:::o;50230:811::-;48310:10;;48292:15;:28;48284:68;;;;-1:-1:-1;;;48284:68:0;;;;;;;:::i;:::-;50307:9:::1;50320:10;50307:23;50299:68;;;;-1:-1:-1::0;;;50299:68:0::1;;;;;;;:::i;:::-;50395:1;50386:6;:10;:33;;;;;45526:1;50400:6;:19;;50386:33;50378:81;;;;-1:-1:-1::0;;;50378:81:0::1;;;;;;;:::i;:::-;50495:11;;50476:15;:30;50472:318;;50583:33;45379:3;45270;50583:33;:::i;:::-;50565:52;::::0;44995:4:::1;50565:52;:::i;:::-;50554:6;50531:20;:10;41942:14:::0;;41850:114;50531:20:::1;:29;;;;:::i;:::-;:87;;50523:131;;;;-1:-1:-1::0;;;50523:131:0::1;;;;;;;:::i;:::-;50472:318;;;44995:4;50718:6;50695:20;:10;41942:14:::0;;41850:114;50695:20:::1;:29;;;;:::i;:::-;:47;;50687:91;;;;-1:-1:-1::0;;;50687:91:0::1;;;;;;;:::i;:::-;50832:9;50822:6;50810:9;;:18;;;;:::i;:::-;:31;50802:69;;;::::0;-1:-1:-1;;;50802:69:0;;23059:2:1;50802:69:0::1;::::0;::::1;23041:21:1::0;23098:2;23078:18;;;23071:30;23137:27;23117:18;;;23110:55;23182:18;;50802:69:0::1;22857:349:1::0;50802:69:0::1;50897:9;50892:142;50915:6;50911:1;:10;50892:142;;;50942:43;50952:10;50964:20;:10;41942:14:::0;;41850:114;50942:43:::1;51000:22;:10;42061:19:::0;;42079:1;42061:19;;;41972:127;51000:22:::1;50922:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50892:142;;22733:295:::0;-1:-1:-1;;;;;22836:24:0;;15722:10;22836:24;;22828:62;;;;-1:-1:-1;;;22828:62:0;;13937:2:1;22828:62:0;;;13919:21:1;13976:2;13956:18;;;13949:30;14015:27;13995:18;;;13988:55;14060:18;;22828:62:0;13735:349:1;22828:62:0;15722:10;22903:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22903:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22903:53:0;;;;;;;;;;22972:48;;9445:41:1;;;22903:42:0;;15722:10;22972:48;;9418:18:1;22972:48:0;;;;;;;22733:295;;:::o;49192:137::-;49292:11;;:29;;-1:-1:-1;;;49292:29:0;;-1:-1:-1;;;;;6813:32:1;;;49292:29:0;;;6795:51:1;49265:7:0;;49292:11;;:21;;6768:18:1;;49292:29:0;6649:203:1;59039:100:0;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;59113:10:::1;:18:::0;59039:100::o;60431:217::-;60549:5;;:27;;-1:-1:-1;;;60549:27:0;;-1:-1:-1;;;;;7087:15:1;;;60549:27:0;;;7069:34:1;7139:15;;;7119:18;;;7112:43;60549:5:0;;;;:17;;7004:18:1;;60549:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60589:51;60613:4;60619:2;60623:10;60635:4;60589:23;:51::i;:::-;60431:217;;;;:::o;21225:334::-;25899:4;25923:16;;;:7;:16;;;;;;21298:13;;-1:-1:-1;;;;;25923:16:0;21324:76;;;;-1:-1:-1;;;21324:76:0;;18742:2:1;21324:76:0;;;18724:21:1;18781:2;18761:18;;;18754:30;18820:34;18800:18;;;18793:62;-1:-1:-1;;;18871:18:1;;;18864:45;18926:19;;21324:76:0;18540:411:1;21324:76:0;21413:21;21437:10;:8;:10::i;:::-;21413:34;;21489:1;21471:7;21465:21;:25;:86;;;;;;;;;;;;;;;;;21517:7;21526:18;:7;:16;:18::i;:::-;21500:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21465:86;21458:93;21225:334;-1:-1:-1;;;21225:334:0:o;54864:841::-;54953:6;47800:10;47777:19;54953:6;47777:7;:19::i;:::-;-1:-1:-1;;;;;47777:33:0;;47769:87;;;;-1:-1:-1;;;47769:87:0;;;;;;;:::i;:::-;54977:9;47800:10:::1;47777:19;54977:9:::0;47777:7:::1;:19::i;:::-;-1:-1:-1::0;;;;;47777:33:0::1;;47769:87;;;;-1:-1:-1::0;;;47769:87:0::1;;;;;;;:::i;:::-;47541:15:::2;::::0;-1:-1:-1;;;47541:15:0;::::2;;;47533:55;;;::::0;-1:-1:-1;;;47533:55:0;;12819:2:1;47533:55:0::2;::::0;::::2;12801:21:1::0;12858:2;12838:18;;;12831:30;12897:29;12877:18;;;12870:57;12944:18;;47533:55:0::2;12617:351:1::0;47533:55:0::2;55030:9:::3;55020:6;:19;;55012:72;;;;-1:-1:-1::0;;;55012:72:0::3;;;;;;;:::i;:::-;55104:29;::::0;;;:21:::3;:29;::::0;;;;;::::3;;55103:30;:67:::0;::::3;;;-1:-1:-1::0;55138:32:0::3;::::0;;;:21:::3;:32;::::0;;;;;::::3;;55137:33;55103:67;55095:150;;;::::0;-1:-1:-1;;;55095:150:0;;21461:2:1;55095:150:0::3;::::0;::::3;21443:21:1::0;21500:2;21480:18;;;21473:30;21539:34;21519:18;;;21512:62;21610:34;21590:18;;;21583:62;-1:-1:-1;;;21661:19:1;;;21654:37;21708:19;;55095:150:0::3;21259:474:1::0;55095:150:0::3;55339:5;::::0;-1:-1:-1;;;;;55339:5:0::3;:10;55350;55390:20;:10;41942:14:::0;;41850:114;55390:20:::3;55377:10;;:33;;;;:::i;:::-;55362:11;;:49;;;;:::i;:::-;55339:73;::::0;-1:-1:-1;;;;;;55339:73:0::3;::::0;;;;;;-1:-1:-1;;;;;8231:32:1;;;55339:73:0::3;::::0;::::3;8213:51:1::0;8280:18;;;8273:34;8186:18;;55339:73:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;55452:12:0::3;::::0;55423:57:::3;::::0;;::::3;::::0;::::3;::::0;;;55452:12:::3;55423:57:::0;;::::3;::::0;-1:-1:-1;55440:10:0::3;::::0;-1:-1:-1;;;;;;55452:12:0;;::::3;::::0;55466:9;;55423:16:::3;:57::i;:::-;55561:22;:10;42061:19:::0;;42079:1;42061:19;;;41972:127;55561:22:::3;55594:29;::::0;;;:21:::3;:29;::::0;;;;;;;;:36;;-1:-1:-1;;55594:36:0::3;55626:4;55594:36;::::0;;55648:49;;55667:10:::3;8520:51:1::0;;8587:18;;;8580:34;;;8630:18;;;8623:34;;;55648:49:0::3;::::0;8508:2:1;8493:18;55648:49:0::3;;;;;;;47867:1:::1;54864:841:::0;;;:::o;52008:815::-;48310:10;;48292:15;:28;48284:68;;;;-1:-1:-1;;;48284:68:0;;;;;;;:::i;:::-;48564:11:::1;;48546:15;:29;48538:66;;;::::0;-1:-1:-1;;;48538:66:0;;22358:2:1;48538:66:0::1;::::0;::::1;22340:21:1::0;22397:2;22377:18;;;22370:30;-1:-1:-1;;;22416:18:1;;;22409:54;22480:18;;48538:66:0::1;22156:348:1::0;48538:66:0::1;52082:26:::2;52111:20;:10;41942:14:::0;;41850:114;52111:20:::2;52082:49:::0;-1:-1:-1;52152:9:0::2;52165:10;52152:23;52144:68;;;;-1:-1:-1::0;;;52144:68:0::2;;;;;;;:::i;:::-;44995:4;52231:22;:18:::0;52252:1:::2;52231:22;:::i;:::-;:40;;52223:72;;;;-1:-1:-1::0;;;52223:72:0::2;;;;;;;:::i;:::-;45379:3;52314:22;;52339:1;52314:26;;;;:::i;:::-;:45;;52306:77;;;;-1:-1:-1::0;;;52306:77:0::2;;;;;;;:::i;:::-;52442:1;52402:36;52427:10;52402:24;:36::i;:::-;:41;;:89;;;;52490:1;52447:39;52475:10;52447:27;:39::i;:::-;:44;;52402:89;52394:147;;;;-1:-1:-1::0;;;52394:147:0::2;;;;;;;:::i;:::-;52569:10;52560:20;::::0;;;:8:::2;:20;::::0;;;;;52583:1:::2;-1:-1:-1::0;52552:66:0::2;;;::::0;-1:-1:-1;;;52552:66:0;;10821:2:1;52552:66:0::2;::::0;::::2;10803:21:1::0;10860:2;10840:18;;;10833:30;10899:31;10879:18;;;10872:59;10948:18;;52552:66:0::2;10619:353:1::0;52552:66:0::2;52631:41;52641:10;52653:18;52631:9;:41::i;:::-;52685:22;:10;42061:19:::0;;42079:1;42061:19;;;41972:127;52685:22:::2;52727:10;52718:20;::::0;;;:8:::2;:20;::::0;;;;52741:1:::2;52718:24:::0;;52753:22:::2;:24:::0;;;::::2;::::0;::::2;:::i;33871:192::-:0;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33960:22:0;::::1;33952:73;;;::::0;-1:-1:-1;;;33952:73:0;;12412:2:1;33952:73:0::1;::::0;::::1;12394:21:1::0;12451:2;12431:18;;;12424:30;12490:34;12470:18;;;12463:62;-1:-1:-1;;;12541:18:1;;;12534:36;12587:19;;33952:73:0::1;12210:402:1::0;33952:73:0::1;34036:19;34046:8;34036:9;:19::i;:::-;33871:192:::0;:::o;58806:98::-;33044:6;;-1:-1:-1;;;;;33044:6:0;15722:10;33191:23;33183:68;;;;-1:-1:-1;;;33183:68:0;;;;;;;:::i;:::-;58879:9:::1;:17:::0;58806:98::o;57597:102::-;57644:7;57671:20;:10;41942:14;;41850:114;29816:174;29891:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;29891:29:0;-1:-1:-1;;;;;29891:29:0;;;;;;;;:24;;29945:23;29891:24;29945:14;:23::i;:::-;-1:-1:-1;;;;;29936:46:0;;;;;;;;;;;29816:174;;:::o;26818:110::-;26894:26;26904:2;26908:7;26894:26;;;;;;;;;;;;:9;:26::i;23330:339::-;23525:41;15722:10;23558:7;23525:18;:41::i;:::-;23517:103;;;;-1:-1:-1;;;23517:103:0;;;;;;;:::i;:::-;23633:28;23643:4;23649:2;23653:7;23633:9;:28::i;34071:173::-;34146:6;;;-1:-1:-1;;;;;34163:17:0;;;-1:-1:-1;;;;;;34163:17:0;;;;;;;34196:40;;34146:6;;;34163:17;34146:6;;34196:40;;34127:16;;34196:40;34116:128;34071:173;:::o;23996:328::-;24171:41;15722:10;24204:7;24171:18;:41::i;:::-;24163:103;;;;-1:-1:-1;;;24163:103:0;;;;;;;:::i;:::-;24277:39;24291:4;24297:2;24301:7;24310:5;24277:13;:39::i;57882:100::-;57934:13;57967:7;57960:14;;;;;:::i;16084:723::-;16140:13;16361:10;16357:53;;-1:-1:-1;;16388:10:0;;;;;;;;;;;;-1:-1:-1;;;16388:10:0;;;;;16084:723::o;16357:53::-;16435:5;16420:12;16476:78;16483:9;;16476:78;;16509:8;;;;:::i;:::-;;-1:-1:-1;16532:10:0;;-1:-1:-1;16540:2:0;16532:10;;:::i;:::-;;;16476:78;;;16564:19;16596:6;16586:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16586:17:0;;16564:39;;16614:154;16621:10;;16614:154;;16648:11;16658:1;16648:11;;:::i;:::-;;-1:-1:-1;16717:10:0;16725:2;16717:5;:10;:::i;:::-;16704:24;;:2;:24;:::i;:::-;16691:39;;16674:6;16681;16674:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;16674:56:0;;;;;;;;-1:-1:-1;16745:11:0;16754:2;16745:11;;:::i;:::-;;;16614:154;;;16792:6;16084:723;-1:-1:-1;;;;16084:723:0:o;27155:321::-;27285:18;27291:2;27295:7;27285:5;:18::i;:::-;27336:54;27367:1;27371:2;27375:7;27384:5;27336:22;:54::i;:::-;27314:154;;;;-1:-1:-1;;;27314:154:0;;;;;;;:::i;26128:348::-;26221:4;25923:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25923:16:0;26238:73;;;;-1:-1:-1;;;26238:73:0;;14700:2:1;26238:73:0;;;14682:21:1;14739:2;14719:18;;;14712:30;14778:34;14758:18;;;14751:62;-1:-1:-1;;;14829:18:1;;;14822:42;14881:19;;26238:73:0;14498:408:1;26238:73:0;26322:13;26338:23;26353:7;26338:14;:23::i;:::-;26322:39;;26391:5;-1:-1:-1;;;;;26380:16:0;:7;-1:-1:-1;;;;;26380:16:0;;:51;;;;26424:7;-1:-1:-1;;;;;26400:31:0;:20;26412:7;26400:11;:20::i;:::-;-1:-1:-1;;;;;26400:31:0;;26380:51;:87;;;-1:-1:-1;;;;;;23220:25:0;;;23196:4;23220:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;26435:32;23099:164;29120:578;29279:4;-1:-1:-1;;;;;29252:31:0;:23;29267:7;29252:14;:23::i;:::-;-1:-1:-1;;;;;29252:31:0;;29244:85;;;;-1:-1:-1;;;29244:85:0;;18332:2:1;29244:85:0;;;18314:21:1;18371:2;18351:18;;;18344:30;18410:34;18390:18;;;18383:62;-1:-1:-1;;;18461:18:1;;;18454:39;18510:19;;29244:85:0;18130:405:1;29244:85:0;-1:-1:-1;;;;;29348:16:0;;29340:65;;;;-1:-1:-1;;;29340:65:0;;13532:2:1;29340:65:0;;;13514:21:1;13571:2;13551:18;;;13544:30;13610:34;13590:18;;;13583:62;-1:-1:-1;;;13661:18:1;;;13654:34;13705:19;;29340:65:0;13330:400:1;29340:65:0;29522:29;29539:1;29543:7;29522:8;:29::i;:::-;-1:-1:-1;;;;;29564:15:0;;;;;;:9;:15;;;;;:20;;29583:1;;29564:15;:20;;29583:1;;29564:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29595:13:0;;;;;;:9;:13;;;;;:18;;29612:1;;29595:13;:18;;29612:1;;29595:18;:::i;:::-;;;;-1:-1:-1;;29624:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29624:21:0;-1:-1:-1;;;;;29624:21:0;;;;;;;;;29663:27;;29624:16;;29663:27;;;;;;;29120:578;;;:::o;25206:315::-;25363:28;25373:4;25379:2;25383:7;25363:9;:28::i;:::-;25410:48;25433:4;25439:2;25443:7;25452:5;25410:22;:48::i;:::-;25402:111;;;;-1:-1:-1;;;25402:111:0;;;;;;;:::i;27812:382::-;-1:-1:-1;;;;;27892:16:0;;27884:61;;;;-1:-1:-1;;;27884:61:0;;17197:2:1;27884:61:0;;;17179:21:1;;;17216:18;;;17209:30;17275:34;17255:18;;;17248:62;17327:18;;27884:61:0;16995:356:1;27884:61:0;25899:4;25923:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25923:16:0;:30;27956:58;;;;-1:-1:-1;;;27956:58:0;;13175:2:1;27956:58:0;;;13157:21:1;13214:2;13194:18;;;13187:30;13253;13233:18;;;13226:58;13301:18;;27956:58:0;12973:352:1;27956:58:0;-1:-1:-1;;;;;28085:13:0;;;;;;:9;:13;;;;;:18;;28102:1;;28085:13;:18;;28102:1;;28085:18;:::i;:::-;;;;-1:-1:-1;;28114:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28114:21:0;-1:-1:-1;;;;;28114:21:0;;;;;;;;28153:33;;28114:16;;;28153:33;;28114:16;;28153:33;27812:382;;:::o;30555:799::-;30710:4;-1:-1:-1;;;;;30731:13:0;;8092:20;8140:8;30727:620;;30767:72;;-1:-1:-1;;;30767:72:0;;-1:-1:-1;;;;;30767:36:0;;;;;:72;;15722:10;;30818:4;;30824:7;;30833:5;;30767:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30767:72:0;;;;;;;;-1:-1:-1;;30767:72:0;;;;;;;;;;;;:::i;:::-;;;30763:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31009:13:0;;31005:272;;31052:60;;-1:-1:-1;;;31052:60:0;;;;;;;:::i;31005:272::-;31227:6;31221:13;31212:6;31208:2;31204:15;31197:38;30763:529;-1:-1:-1;;;;;;30890:51:0;-1:-1:-1;;;30890:51:0;;-1:-1:-1;30883:58:0;;30727:620;-1:-1:-1;31331:4:0;30555:799;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:186;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:409::-;1535:6;1543;1551;1559;1612:3;1600:9;1591:7;1587:23;1583:33;1580:53;;;1629:1;1626;1619:12;1580:53;1652:29;1671:9;1652:29;:::i;:::-;1642:39;;1700:38;1734:2;1723:9;1719:18;1700:38;:::i;:::-;1690:48;;1757:38;1791:2;1780:9;1776:18;1757:38;:::i;:::-;1747:48;;1814:38;1848:2;1837:9;1833:18;1814:38;:::i;:::-;1804:48;;1449:409;;;;;;;:::o;1863:328::-;1940:6;1948;1956;2009:2;1997:9;1988:7;1984:23;1980:32;1977:52;;;2025:1;2022;2015:12;1977:52;2048:29;2067:9;2048:29;:::i;:::-;2038:39;;2096:38;2130:2;2119:9;2115:18;2096:38;:::i;:::-;2086:48;;2181:2;2170:9;2166:18;2153:32;2143:42;;1863:328;;;;;:::o;2196:666::-;2291:6;2299;2307;2315;2368:3;2356:9;2347:7;2343:23;2339:33;2336:53;;;2385:1;2382;2375:12;2336:53;2408:29;2427:9;2408:29;:::i;:::-;2398:39;;2456:38;2490:2;2479:9;2475:18;2456:38;:::i;:::-;2446:48;;2541:2;2530:9;2526:18;2513:32;2503:42;;2596:2;2585:9;2581:18;2568:32;2623:18;2615:6;2612:30;2609:50;;;2655:1;2652;2645:12;2609:50;2678:22;;2731:4;2723:13;;2719:27;-1:-1:-1;2709:55:1;;2760:1;2757;2750:12;2709:55;2783:73;2848:7;2843:2;2830:16;2825:2;2821;2817:11;2783:73;:::i;:::-;2773:83;;;2196:666;;;;;;;:::o;2867:254::-;2932:6;2940;2993:2;2981:9;2972:7;2968:23;2964:32;2961:52;;;3009:1;3006;2999:12;2961:52;3032:29;3051:9;3032:29;:::i;:::-;3022:39;;3080:35;3111:2;3100:9;3096:18;3080:35;:::i;3126:254::-;3194:6;3202;3255:2;3243:9;3234:7;3230:23;3226:32;3223:52;;;3271:1;3268;3261:12;3223:52;3294:29;3313:9;3294:29;:::i;:::-;3284:39;3370:2;3355:18;;;;3342:32;;-1:-1:-1;;;3126:254:1:o;3385:615::-;3471:6;3479;3532:2;3520:9;3511:7;3507:23;3503:32;3500:52;;;3548:1;3545;3538:12;3500:52;3588:9;3575:23;3617:18;3658:2;3650:6;3647:14;3644:34;;;3674:1;3671;3664:12;3644:34;3712:6;3701:9;3697:22;3687:32;;3757:7;3750:4;3746:2;3742:13;3738:27;3728:55;;3779:1;3776;3769:12;3728:55;3819:2;3806:16;3845:2;3837:6;3834:14;3831:34;;;3861:1;3858;3851:12;3831:34;3914:7;3909:2;3899:6;3896:1;3892:14;3888:2;3884:23;3880:32;3877:45;3874:65;;;3935:1;3932;3925:12;3874:65;3966:2;3958:11;;;;;3988:6;;-1:-1:-1;3385:615:1;;-1:-1:-1;;;;3385:615:1:o;4005:245::-;4063:6;4116:2;4104:9;4095:7;4091:23;4087:32;4084:52;;;4132:1;4129;4122:12;4084:52;4171:9;4158:23;4190:30;4214:5;4190:30;:::i;4255:249::-;4324:6;4377:2;4365:9;4356:7;4352:23;4348:32;4345:52;;;4393:1;4390;4383:12;4345:52;4425:9;4419:16;4444:30;4468:5;4444:30;:::i;4509:450::-;4578:6;4631:2;4619:9;4610:7;4606:23;4602:32;4599:52;;;4647:1;4644;4637:12;4599:52;4687:9;4674:23;4720:18;4712:6;4709:30;4706:50;;;4752:1;4749;4742:12;4706:50;4775:22;;4828:4;4820:13;;4816:27;-1:-1:-1;4806:55:1;;4857:1;4854;4847:12;4806:55;4880:73;4945:7;4940:2;4927:16;4922:2;4918;4914:11;4880:73;:::i;4964:180::-;5023:6;5076:2;5064:9;5055:7;5051:23;5047:32;5044:52;;;5092:1;5089;5082:12;5044:52;-1:-1:-1;5115:23:1;;4964:180;-1:-1:-1;4964:180:1:o;5149:184::-;5219:6;5272:2;5260:9;5251:7;5247:23;5243:32;5240:52;;;5288:1;5285;5278:12;5240:52;-1:-1:-1;5311:16:1;;5149:184;-1:-1:-1;5149:184:1:o;5338:248::-;5406:6;5414;5467:2;5455:9;5446:7;5442:23;5438:32;5435:52;;;5483:1;5480;5473:12;5435:52;-1:-1:-1;;5506:23:1;;;5576:2;5561:18;;;5548:32;;-1:-1:-1;5338:248:1:o;5591:316::-;5665:6;5673;5681;5734:2;5722:9;5713:7;5709:23;5705:32;5702:52;;;5750:1;5747;5740:12;5702:52;5786:9;5773:23;5763:33;;5843:2;5832:9;5828:18;5815:32;5805:42;;5866:35;5897:2;5886:9;5882:18;5866:35;:::i;:::-;5856:45;;5591:316;;;;;:::o;5912:257::-;5953:3;5991:5;5985:12;6018:6;6013:3;6006:19;6034:63;6090:6;6083:4;6078:3;6074:14;6067:4;6060:5;6056:16;6034:63;:::i;:::-;6151:2;6130:15;-1:-1:-1;;6126:29:1;6117:39;;;;6158:4;6113:50;;5912:257;-1:-1:-1;;5912:257:1:o;6174:470::-;6353:3;6391:6;6385:13;6407:53;6453:6;6448:3;6441:4;6433:6;6429:17;6407:53;:::i;:::-;6523:13;;6482:16;;;;6545:57;6523:13;6482:16;6579:4;6567:17;;6545:57;:::i;:::-;6618:20;;6174:470;-1:-1:-1;;;;6174:470:1:o;7546:488::-;-1:-1:-1;;;;;7815:15:1;;;7797:34;;7867:15;;7862:2;7847:18;;7840:43;7914:2;7899:18;;7892:34;;;7962:3;7957:2;7942:18;;7935:31;;;7740:4;;7983:45;;8008:19;;8000:6;7983:45;:::i;:::-;7975:53;7546:488;-1:-1:-1;;;;;;7546:488:1:o;8668:632::-;8839:2;8891:21;;;8961:13;;8864:18;;;8983:22;;;8810:4;;8839:2;9062:15;;;;9036:2;9021:18;;;8810:4;9105:169;9119:6;9116:1;9113:13;9105:169;;;9180:13;;9168:26;;9249:15;;;;9214:12;;;;9141:1;9134:9;9105:169;;;-1:-1:-1;9291:3:1;;8668:632;-1:-1:-1;;;;;;8668:632:1:o;10395:219::-;10544:2;10533:9;10526:21;10507:4;10564:44;10604:2;10593:9;10589:18;10581:6;10564:44;:::i;11387:399::-;11589:2;11571:21;;;11628:2;11608:18;;;11601:30;11667:34;11662:2;11647:18;;11640:62;-1:-1:-1;;;11733:2:1;11718:18;;11711:33;11776:3;11761:19;;11387:399::o;11791:414::-;11993:2;11975:21;;;12032:2;12012:18;;;12005:30;12071:34;12066:2;12051:18;;12044:62;-1:-1:-1;;;12137:2:1;12122:18;;12115:48;12195:3;12180:19;;11791:414::o;14089:404::-;14291:2;14273:21;;;14330:2;14310:18;;;14303:30;14369:34;14364:2;14349:18;;14342:62;-1:-1:-1;;;14435:2:1;14420:18;;14413:38;14483:3;14468:19;;14089:404::o;16563:427::-;16765:2;16747:21;;;16804:2;16784:18;;;16777:30;16843:34;16838:2;16823:18;;16816:62;16914:33;16909:2;16894:18;;16887:61;16980:3;16965:19;;16563:427::o;17769:356::-;17971:2;17953:21;;;17990:18;;;17983:30;18049:34;18044:2;18029:18;;18022:62;18116:2;18101:18;;17769:356::o;18956:351::-;19158:2;19140:21;;;19197:2;19177:18;;;19170:30;19236:29;19231:2;19216:18;;19209:57;19298:2;19283:18;;18956:351::o;19312:409::-;19514:2;19496:21;;;19553:2;19533:18;;;19526:30;19592:34;19587:2;19572:18;;19565:62;-1:-1:-1;;;19658:2:1;19643:18;;19636:43;19711:3;19696:19;;19312:409::o;20128:355::-;20330:2;20312:21;;;20369:2;20349:18;;;20342:30;20408:33;20403:2;20388:18;;20381:61;20474:2;20459:18;;20128:355::o;20488:356::-;20690:2;20672:21;;;20709:18;;;20702:30;20768:34;20763:2;20748:18;;20741:62;20835:2;20820:18;;20488:356::o;20849:405::-;21051:2;21033:21;;;21090:2;21070:18;;;21063:30;21129:34;21124:2;21109:18;;21102:62;-1:-1:-1;;;21195:2:1;21180:18;;21173:39;21244:3;21229:19;;20849:405::o;21738:413::-;21940:2;21922:21;;;21979:2;21959:18;;;21952:30;22018:34;22013:2;21998:18;;21991:62;-1:-1:-1;;;22084:2:1;22069:18;;22062:47;22141:3;22126:19;;21738:413::o;22509:343::-;22711:2;22693:21;;;22750:2;22730:18;;;22723:30;-1:-1:-1;;;22784:2:1;22769:18;;22762:49;22843:2;22828:18;;22509:343::o;23802:128::-;23842:3;23873:1;23869:6;23866:1;23863:13;23860:39;;;23879:18;;:::i;:::-;-1:-1:-1;23915:9:1;;23802:128::o;23935:120::-;23975:1;24001;23991:35;;24006:18;;:::i;:::-;-1:-1:-1;24040:9:1;;23935:120::o;24060:168::-;24100:7;24166:1;24162;24158:6;24154:14;24151:1;24148:21;24143:1;24136:9;24129:17;24125:45;24122:71;;;24173:18;;:::i;:::-;-1:-1:-1;24213:9:1;;24060:168::o;24233:125::-;24273:4;24301:1;24298;24295:8;24292:34;;;24306:18;;:::i;:::-;-1:-1:-1;24343:9:1;;24233:125::o;24363:258::-;24435:1;24445:113;24459:6;24456:1;24453:13;24445:113;;;24535:11;;;24529:18;24516:11;;;24509:39;24481:2;24474:10;24445:113;;;24576:6;24573:1;24570:13;24567:48;;;-1:-1:-1;;24611:1:1;24593:16;;24586:27;24363:258::o;24626:380::-;24705:1;24701:12;;;;24748;;;24769:61;;24823:4;24815:6;24811:17;24801:27;;24769:61;24876:2;24868:6;24865:14;24845:18;24842:38;24839:161;;;24922:10;24917:3;24913:20;24910:1;24903:31;24957:4;24954:1;24947:15;24985:4;24982:1;24975:15;24839:161;;24626:380;;;:::o;25011:135::-;25050:3;-1:-1:-1;;25071:17:1;;25068:43;;;25091:18;;:::i;:::-;-1:-1:-1;25138:1:1;25127:13;;25011:135::o;25151:112::-;25183:1;25209;25199:35;;25214:18;;:::i;:::-;-1:-1:-1;25248:9:1;;25151:112::o;25268:127::-;25329:10;25324:3;25320:20;25317:1;25310:31;25360:4;25357:1;25350:15;25384:4;25381:1;25374:15;25400:127;25461:10;25456:3;25452:20;25449:1;25442:31;25492:4;25489:1;25482:15;25516:4;25513:1;25506:15;25532:127;25593:10;25588:3;25584:20;25581:1;25574:31;25624:4;25621:1;25614:15;25648:4;25645:1;25638:15;25664:127;25725:10;25720:3;25716:20;25713:1;25706:31;25756:4;25753:1;25746:15;25780:4;25777:1;25770:15;25796:131;-1:-1:-1;;;;;;25870:32:1;;25860:43;;25850:71;;25917:1;25914;25907:12
Swarm Source
ipfs://5e7f2f09f9a8127a8e22ad349a3197e03e784bac43a52e7563c352ce90704856
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.