ERC-721
Overview
Max Total Supply
28 ZODTIGER
Holders
21
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ZODTIGERLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ZodiacTigers
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-09 */ // SPDX-License-Identifier: MIT // Amended by LeZig with RAWRRRR /** ___..........__ _,...._ _."'_,.++8n.n8898n.`"._ _....._ .' `". _.'_.'" _.98n.68n. `"88n. `'. ," `. / . `. ,'. " -'" __.68`""'""=._`+8. `.' . `. . ` . `. ,d86+889" 8"""+898n, j8 9 ," . \ : ' ., ,d"'" _..d88b..__ `"868' .' . ' : : . . _ ,n8""88":8"888."8. " ' : \ , ' , . .88" ,8P' ,d8. _ `"8n `+. `. . ' `. .. . d89' " _..n689+^'8n88n.._ `+ . ` . , ' ,' `. . , ' 8' .d88+" j:""' `886n. b`. ' .' . ." ' , .j ,d'8. ` ."8.`. `. ': . .' n8 ,_ .f A 6. ,.. `8b, '. .'_ .' _ ,88' :8"8 6'.d`i.`b. d8"8 688. ". `' ," .88 .d868 _ ,9:' `8.`8 "' ` _ 8+"" b `, _. d8P d' .d :88. .8'`j ;+. " n888b 8 . ,88. . ` :68' ,8 88 `. ' : l ` .' `" jb .` 688b. ', .' .688 6P 98 =+""`. ` ' ,-"`+"'+88b 'b. 8689 ` ' ; .'"888 .8; ."+b. : `" ; .: "' ; ,n `8 q8, '88: \ . . 898 8: : `.`--"8. d8`--' ' .d' ;8 898 ' , 689 9: 8._ ,68 . . :89 ..n88+' 89 689,' ` . : ,88' 88 `+88n - . . . " _. 6: `868 ' ' , ' .68h. 68 `" . . . . . . ,8' 8P' . . . '88 'q. _.f . . . ' .._,. .8" .889 , .' `898 _8hnd8p' , . .. . . ._ `89,8P j"' _ ` \ ` .88, `q9868' ,9 .. . . . 8n .8 d8' +' n8. , ' ,' ,+"88n `"8 .8' . .. . . `8688P" 9' ,d868' . . . . `86b. " . . .. 68' _.698689; : . ' ,889_.n8. , ` . .___ ___. .n" `86n8b._ `8988'b .,6 ' q8689'`68. . ` `:. `.__,' .:' , + +88 `"688n `q8 q8. 88 , . ' " `+8 n . `:. .;' . ' . ,89 " `q, `8 . . , . + c , `:.,:" , " d8' d8. : . ' 8n ` , . :: . ' " . .68h. .8'`8`. 6 , 8b.__. , .n8688b., . .;:._ .___nn898868n. n868b "` 8 `. `6889868n8898886888688898"' "+89n88898868868889' 688898b .8 : q68 `""+8688898P ` " ' . ` ' ' `+688988P" d8+8P' `. .d8 , 88b. `+88. ` ` ' .889"' ,.88' .,88 : '988b "88b.._ ,_ . n8p' .d8"' ' 689 '. "888n._, `"8"+88888n.8,88:`8 . _ .n88P' . ` ;88' :8. "q888. . "+888P" "+888n,8n8'" . . ,d986 :.`8: `88986 `q8" , :688" ;. '8, "88b .d ' ,889' :.. `6n '8988 b.89p :. . '8. `88b 988' :. . 8b `q8. ' . ' .d89 ' . . `8: `86n,. " . , , " ,98P , .. . '6n. +86b. . . _,.n88' . . `"8b. 'q98n. , . _..n868688' . ' . . `"98. `8868. . _.n688868898p" d . . '88. "688. q89888688868" ,86 mh '. . 88. `8898 " .889"' .988 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } interface IZodiacEnvelopes { function _wallet_of_owner(address _owner) external view returns (uint256[] memory); function _is_gold(uint256 _token_id) external view returns (bool); } pragma solidity >=0.7.0 <0.9.0; contract ZodiacTigers is ERC721Enumerable, Ownable { using Strings for uint256; using Counters for Counters.Counter; // metadata values string public _standard_base_uri; // costs tiers uint256 public _standard_cost = 0.06 ether; uint256 public _discounted_cost = 0.02 ether; mapping(uint256 => bool) public _was_gold_token_id_used; // economics Counters.Counter private _supply; uint256 constant public _max_supply = 8888; uint256 public _max_mint_amount_per_tx = 20; uint256 public _tiger_reserve = 50; // mint conditions bool public _paused; // interface to packet contract IZodiacEnvelopes private _zodiac_envelopes_interface; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor( string memory standard_base_uri_, address zodiac_envelopes_address_, string memory name_, string memory symbol_ ) ERC721(name_, symbol_) { _set_standard_base_uri(standard_base_uri_); _zodiac_envelopes_interface = IZodiacEnvelopes(zodiac_envelopes_address_); } function _total_supply() public view returns (uint256) { return _supply.current(); } // to be accessed externally by a client wanting to know about the cost with its membership passes function _get_mint_cost(address _to, uint256 _mint_amount) public view returns (uint256) { // get the Zodiac envelopes tokens of the address uint256[] memory _owned_token_ids = _zodiac_envelopes_interface._wallet_of_owner(_to); // if there is no pass, we pay the full price if(_owned_token_ids.length == 0){ return _mint_amount * _standard_cost; } // we have to iterate over all passes to make sure we don't skip a gold that wasn't still used bool _found_red = false; for (uint256 i = 0; i < _owned_token_ids.length; i++){ uint256 _current_token_id = _owned_token_ids[i]; if (_zodiac_envelopes_interface._is_gold(_current_token_id)){ // if it's not used yet, 1 free mint is given for this gold one and recorded if (!_was_gold_token_id_used[_current_token_id]){ if (_mint_amount == 1) return 0; else _mint_amount--; } } else _found_red = true; } // it is sufficient to find 1 red to mint for the discounted cost all that wasn't free with gold return _found_red ? _mint_amount * _discounted_cost : _mint_amount * _standard_cost; } function _get_record_mint_cost(address _to, uint256 _mint_amount) internal returns (uint256) { // get the Zodiac envelopes tokens of the address uint256[] memory _owned_token_ids = _zodiac_envelopes_interface._wallet_of_owner(_to); // if there is no pass, we pay the full price if(_owned_token_ids.length == 0){ return _mint_amount * _standard_cost; } // we have to iterate over all passes to make sure we don't skip a gold that wasn't still used bool _found_red = false; for (uint256 i = 0; i < _owned_token_ids.length; i++){ uint256 _current_token_id = _owned_token_ids[i]; if (_zodiac_envelopes_interface._is_gold(_current_token_id)){ // if it's not used yet, 1 free mint is given for this gold one and recorded if (!_was_gold_token_id_used[_current_token_id]){ _was_gold_token_id_used[_current_token_id] = true; if (_mint_amount == 1) return 0; else _mint_amount--; } } else _found_red = true; } // it is sufficient to find 1 red to mint for the discounted cost all that wasn't free with gold return _found_red ? _mint_amount * _discounted_cost : _mint_amount * _standard_cost; } function _mint_loop(address _to, uint256 _mint_amount) internal { for (uint256 i = 0; i < _mint_amount; i++) { _supply.increment(); _safeMint(_to, _total_supply()); } } function _mint(uint256 _mint_amount) public payable { require(_mint_amount > 0 && _mint_amount <= _max_mint_amount_per_tx, "Invalid mint amount"); require(_total_supply() + _mint_amount <= _max_supply, "Max supply exceeded"); require(!_paused, "Public sale has not started"); require(msg.sender == tx.origin, "Only EOA mint"); uint256 _mint_total_cost = _get_record_mint_cost(msg.sender, _mint_amount); require(msg.value >= _mint_total_cost, "Insufficient value sent for minting"); _mint_loop(msg.sender, _mint_amount); } function _mint_reserved_tokens(uint256 _mint_amount) public onlyOwner { require(_mint_amount > 0 && _mint_amount <= _tiger_reserve, "Team reserve down"); require(_total_supply() + _mint_amount <= _max_supply, "Max supply exceeded"); _mint_loop(msg.sender, _mint_amount); _tiger_reserve -= _mint_amount; } function _wallet_of_owner(address _owner) public view returns (uint256[] memory) { uint256 _owner_token_count = balanceOf(_owner); uint256[] memory _owned_token_ids = new uint256[](_owner_token_count); for (uint256 i; i < _owner_token_count; i++) { _owned_token_ids[i] = tokenOfOwnerByIndex(_owner, i); } return _owned_token_ids; } function tokenURI(uint256 _token_id) public view virtual override returns (string memory) { require(_exists(_token_id), "ERC721Metadata: URI query for nonexistent token"); return bytes(_standard_base_uri).length > 0 ? string(abi.encodePacked(_standard_base_uri, _token_id.toString(), ".json")) : ""; } function _was_gold_envelope_used(uint256 _token_id) public view returns (bool) { require(_zodiac_envelopes_interface._is_gold(_token_id), "Token id is not a gold envelope"); return _was_gold_token_id_used[_token_id]; } function _set_standard_base_uri(string memory standard_base_uri_) public onlyOwner { _standard_base_uri = standard_base_uri_; } function _set_paused(bool _state) public onlyOwner { _paused = _state; } function _set_max_mint_per_txn(uint256 max_mint_amount_per_tx_) public onlyOwner { _max_mint_amount_per_tx = max_mint_amount_per_tx_; } function _set_discounted_cost(uint256 discounted_cost_) public onlyOwner { _discounted_cost = discounted_cost_; } function _set_standard_cost(uint256 standard_cost_) public onlyOwner { _standard_cost = standard_cost_; } function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"standard_base_uri_","type":"string"},{"internalType":"address","name":"zodiac_envelopes_address_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_discounted_cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mint_amount","type":"uint256"}],"name":"_get_mint_cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_max_mint_amount_per_tx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_max_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mint_amount","type":"uint256"}],"name":"_mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mint_amount","type":"uint256"}],"name":"_mint_reserved_tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"discounted_cost_","type":"uint256"}],"name":"_set_discounted_cost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max_mint_amount_per_tx_","type":"uint256"}],"name":"_set_max_mint_per_txn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"_set_paused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"standard_base_uri_","type":"string"}],"name":"_set_standard_base_uri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"standard_cost_","type":"uint256"}],"name":"_set_standard_cost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_standard_base_uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_standard_cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tiger_reserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_total_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"_wallet_of_owner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_token_id","type":"uint256"}],"name":"_was_gold_envelope_used","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_was_gold_token_id_used","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_token_id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266d529ae9e860000600c5566470de4df820000600d55601460105560326011553480156200003157600080fd5b506040516200567c3803806200567c8339818101604052810190620000579190620003f1565b8181816000908051906020019062000071929190620002ac565b5080600190805190602001906200008a929190620002ac565b505050620000ad620000a16200010960201b60201c565b6200011160201b60201c565b620000be84620001d760201b60201c565b82601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000715565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001e76200010960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200020d6200028260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025d90620004e7565b60405180910390fd5b80600b90805190602001906200027e929190620002ac565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002ba90620005e3565b90600052602060002090601f016020900481019282620002de57600085556200032a565b82601f10620002f957805160ff19168380011785556200032a565b828001600101855582156200032a579182015b82811115620003295782518255916020019190600101906200030c565b5b5090506200033991906200033d565b5090565b5b80821115620003585760008160009055506001016200033e565b5090565b6000620003736200036d8462000532565b62000509565b905082815260208101848484011115620003925762000391620006b2565b5b6200039f848285620005ad565b509392505050565b600081519050620003b881620006fb565b92915050565b600082601f830112620003d657620003d5620006ad565b5b8151620003e88482602086016200035c565b91505092915050565b600080600080608085870312156200040e576200040d620006bc565b5b600085015167ffffffffffffffff8111156200042f576200042e620006b7565b5b6200043d87828801620003be565b94505060206200045087828801620003a7565b935050604085015167ffffffffffffffff811115620004745762000473620006b7565b5b6200048287828801620003be565b925050606085015167ffffffffffffffff811115620004a657620004a5620006b7565b5b620004b487828801620003be565b91505092959194509250565b6000620004cf60208362000568565b9150620004dc82620006d2565b602082019050919050565b600060208201905081810360008301526200050281620004c0565b9050919050565b60006200051562000528565b905062000523828262000619565b919050565b6000604051905090565b600067ffffffffffffffff82111562000550576200054f6200067e565b5b6200055b82620006c1565b9050602081019050919050565b600082825260208201905092915050565b600062000586826200058d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620005cd578082015181840152602081019050620005b0565b83811115620005dd576000848401525b50505050565b60006002820490506001821680620005fc57607f821691505b602082108114156200061357620006126200064f565b5b50919050565b6200062482620006c1565b810181811067ffffffffffffffff821117156200064657620006456200067e565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620007068162000579565b81146200071257600080fd5b50565b614f5780620007256000396000f3fe60806040526004361061022f5760003560e01c80634d3cfc831161012e5780638da5cb5b116100ab578063b88d4fde1161006f578063b88d4fde14610855578063c1db8a801461087e578063c87b56dd146108a7578063e985e9c5146108e4578063f2fde38b146109215761022f565b80638da5cb5b1461076e57806394de23ad1461079957806395d89b41146107d6578063a22cb46514610801578063a6e585ae1461082a5761022f565b80636b9bd2f8116100f25780636b9bd2f81461067557806370a08231146106b2578063715018a6146106ef578063881b136e146107065780638cdd1446146107315761022f565b80634d3cfc831461057e5780634f6ccce7146105a95780636352211e146105e657806367564183146106235780636b44cf1f1461064c5761022f565b80631ee35b79116101bc5780632f5c97b8116101805780632f5c97b8146104ad5780632f745c59146104d85780633ccfd60b1461051557806342842e0e1461052c57806346114e0e146105555761022f565b80631ee35b79146103d7578063225939f81461041457806323b872dd1461043d5780632b2c011b146104665780632c526196146104915761022f565b8063081812fc11610203578063081812fc146102f0578063095ea7b31461032d57806309677ba31461035657806316c61ccc1461038157806318160ddd146103ac5761022f565b806233131b1461023457806301ffc9a71461025f57806305530b621461029c57806306fdde03146102c5575b600080fd5b34801561024057600080fd5b5061024961094a565b60405161025691906142de565b60405180910390f35b34801561026b57600080fd5b506102866004803603810190610281919061385f565b610950565b6040516102939190613f81565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613902565b6109ca565b005b3480156102d157600080fd5b506102da610a50565b6040516102e79190613f9c565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613902565b610ae2565b6040516103249190613ef8565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061377c565b610b67565b005b34801561036257600080fd5b5061036b610c7f565b60405161037891906142de565b60405180910390f35b34801561038d57600080fd5b50610396610c85565b6040516103a39190613f81565b60405180910390f35b3480156103b857600080fd5b506103c1610c98565b6040516103ce91906142de565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190613902565b610ca5565b60405161040b9190613f81565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190613902565b610db9565b005b34801561044957600080fd5b50610464600480360381019061045f9190613666565b610e3f565b005b34801561047257600080fd5b5061047b610e9f565b60405161048891906142de565b60405180910390f35b6104ab60048036038101906104a69190613902565b610ea5565b005b3480156104b957600080fd5b506104c261106a565b6040516104cf9190613f9c565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa919061377c565b6110f8565b60405161050c91906142de565b60405180910390f35b34801561052157600080fd5b5061052a61119d565b005b34801561053857600080fd5b50610553600480360381019061054e9190613666565b611299565b005b34801561056157600080fd5b5061057c60048036038101906105779190613805565b6112b9565b005b34801561058a57600080fd5b50610593611352565b6040516105a091906142de565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190613902565b611363565b6040516105dd91906142de565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190613902565b6113d4565b60405161061a9190613ef8565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906138b9565b611486565b005b34801561065857600080fd5b50610673600480360381019061066e9190613902565b61151c565b005b34801561068157600080fd5b5061069c600480360381019061069791906135f9565b611666565b6040516106a99190613f5f565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d491906135f9565b611714565b6040516106e691906142de565b60405180910390f35b3480156106fb57600080fd5b506107046117cc565b005b34801561071257600080fd5b5061071b611854565b60405161072891906142de565b60405180910390f35b34801561073d57600080fd5b506107586004803603810190610753919061377c565b61185a565b60405161076591906142de565b60405180910390f35b34801561077a57600080fd5b50610783611aa6565b6040516107909190613ef8565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb9190613902565b611ad0565b6040516107cd9190613f81565b60405180910390f35b3480156107e257600080fd5b506107eb611af0565b6040516107f89190613f9c565b60405180910390f35b34801561080d57600080fd5b506108286004803603810190610823919061373c565b611b82565b005b34801561083657600080fd5b5061083f611d03565b60405161084c91906142de565b60405180910390f35b34801561086157600080fd5b5061087c600480360381019061087791906136b9565b611d09565b005b34801561088a57600080fd5b506108a560048036038101906108a09190613902565b611d6b565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613902565b611df1565b6040516108db9190613f9c565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613626565b611e99565b6040516109189190613f81565b60405180910390f35b34801561092d57600080fd5b50610948600480360381019061094391906135f9565b611f2d565b005b6122b881565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c357506109c282612025565b5b9050919050565b6109d2612107565b73ffffffffffffffffffffffffffffffffffffffff166109f0611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d9061419e565b60405180910390fd5b80600d8190555050565b606060008054610a5f9061463d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b9061463d565b8015610ad85780601f10610aad57610100808354040283529160200191610ad8565b820191906000526020600020905b815481529060010190602001808311610abb57829003601f168201915b5050505050905090565b6000610aed8261210f565b610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b239061417e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b72826113d4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda9061421e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c02612107565b73ffffffffffffffffffffffffffffffffffffffff161480610c315750610c3081610c2b612107565b611e99565b5b610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c67906140fe565b60405180910390fd5b610c7a838361217b565b505050565b600d5481565b601260009054906101000a900460ff1681565b6000600880549050905090565b6000601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4f59d3836040518263ffffffff1660e01b8152600401610d0291906142de565b60206040518083038186803b158015610d1a57600080fd5b505afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190613832565b610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d889061427e565b60405180910390fd5b600e600083815260200190815260200160002060009054906101000a900460ff169050919050565b610dc1612107565b73ffffffffffffffffffffffffffffffffffffffff16610ddf611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c9061419e565b60405180910390fd5b8060108190555050565b610e50610e4a612107565b82612234565b610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061425e565b60405180910390fd5b610e9a838383612312565b505050565b600c5481565b600081118015610eb757506010548111155b610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed9061429e565b60405180910390fd5b6122b881610f02611352565b610f0c9190614448565b1115610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4490613fde565b60405180910390fd5b601260009054906101000a900460ff1615610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f949061407e565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110029061423e565b60405180910390fd5b6000611017338361256e565b90508034101561105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613fbe565b60405180910390fd5b61106633836127e6565b5050565b600b80546110779061463d565b80601f01602080910402602001604051908101604052809291908181526020018280546110a39061463d565b80156110f05780601f106110c5576101008083540402835291602001916110f0565b820191906000526020600020905b8154815290600101906020018083116110d357829003601f168201915b505050505081565b600061110383611714565b8210611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613ffe565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6111a5612107565b73ffffffffffffffffffffffffffffffffffffffff166111c3611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112109061419e565b60405180910390fd5b6000611223611aa6565b73ffffffffffffffffffffffffffffffffffffffff164760405161124690613ee3565b60006040518083038185875af1925050503d8060008114611283576040519150601f19603f3d011682016040523d82523d6000602084013e611288565b606091505b505090508061129657600080fd5b50565b6112b483838360405180602001604052806000815250611d09565b505050565b6112c1612107565b73ffffffffffffffffffffffffffffffffffffffff166112df611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c9061419e565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b600061135e600f612824565b905090565b600061136d610c98565b82106113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a5906142be565b60405180910390fd5b600882815481106113c2576113c16147d6565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561147d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114749061413e565b60405180910390fd5b80915050919050565b61148e612107565b73ffffffffffffffffffffffffffffffffffffffff166114ac611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f99061419e565b60405180910390fd5b80600b9080519060200190611518929190613345565b5050565b611524612107565b73ffffffffffffffffffffffffffffffffffffffff16611542611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f9061419e565b60405180910390fd5b6000811180156115aa57506011548111155b6115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e0906141fe565b60405180910390fd5b6122b8816115f5611352565b6115ff9190614448565b1115611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163790613fde565b60405180910390fd5b61164a33826127e6565b806011600082825461165c9190614529565b9250508190555050565b6060600061167383611714565b905060008167ffffffffffffffff81111561169157611690614805565b5b6040519080825280602002602001820160405280156116bf5781602001602082028036833780820191505090505b50905060005b82811015611709576116d785826110f8565b8282815181106116ea576116e96147d6565b5b6020026020010181815250508080611701906146a0565b9150506116c5565b508092505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c9061411e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117d4612107565b73ffffffffffffffffffffffffffffffffffffffff166117f2611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f9061419e565b60405180910390fd5b6118526000612832565b565b60105481565b600080601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b9bd2f8856040518263ffffffff1660e01b81526004016118b89190613ef8565b60006040518083038186803b1580156118d057600080fd5b505afa1580156118e4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061190d91906137bc565b905060008151141561192f57600c548361192791906144cf565b915050611aa0565b6000805b8251811015611a73576000838281518110611951576119506147d6565b5b60200260200101519050601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4f59d3826040518263ffffffff1660e01b81526004016119b691906142de565b60206040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a069190613832565b15611a5a57600e600082815260200190815260200160002060009054906101000a900460ff16611a55576001861415611a46576000945050505050611aa0565b8580611a5190614613565b9650505b611a5f565b600192505b508080611a6b906146a0565b915050611933565b5080611a8c57600c5484611a8791906144cf565b611a9b565b600d5484611a9a91906144cf565b5b925050505b92915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b606060018054611aff9061463d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2b9061463d565b8015611b785780601f10611b4d57610100808354040283529160200191611b78565b820191906000526020600020905b815481529060010190602001808311611b5b57829003601f168201915b5050505050905090565b611b8a612107565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef906140be565b60405180910390fd5b8060056000611c05612107565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cb2612107565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf79190613f81565b60405180910390a35050565b60115481565b611d1a611d14612107565b83612234565b611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d509061425e565b60405180910390fd5b611d65848484846128f8565b50505050565b611d73612107565b73ffffffffffffffffffffffffffffffffffffffff16611d91611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde9061419e565b60405180910390fd5b80600c8190555050565b6060611dfc8261210f565b611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e32906141de565b60405180910390fd5b6000600b8054611e4a9061463d565b905011611e665760405180602001604052806000815250611e92565b600b611e7183612954565b604051602001611e82929190613eb4565b6040516020818303038152906040525b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f35612107565b73ffffffffffffffffffffffffffffffffffffffff16611f53611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa09061419e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120109061403e565b60405180910390fd5b61202281612832565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120f057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061210057506120ff82612ab5565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121ee836113d4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061223f8261210f565b61227e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275906140de565b60405180910390fd5b6000612289836113d4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122f857508373ffffffffffffffffffffffffffffffffffffffff166122e084610ae2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061230957506123088185611e99565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612332826113d4565b73ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f906141be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ef9061409e565b60405180910390fd5b612403838383612b1f565b61240e60008261217b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245e9190614529565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124b59190614448565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b9bd2f8856040518263ffffffff1660e01b81526004016125cc9190613ef8565b60006040518083038186803b1580156125e457600080fd5b505afa1580156125f8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061262191906137bc565b905060008151141561264357600c548361263b91906144cf565b9150506127e0565b6000805b82518110156127b3576000838281518110612665576126646147d6565b5b60200260200101519050601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4f59d3826040518263ffffffff1660e01b81526004016126ca91906142de565b60206040518083038186803b1580156126e257600080fd5b505afa1580156126f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271a9190613832565b1561279a57600e600082815260200190815260200160002060009054906101000a900460ff16612795576001600e600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060018614156127865760009450505050506127e0565b858061279190614613565b9650505b61279f565b600192505b5080806127ab906146a0565b915050612647565b50806127cc57600c54846127c791906144cf565b6127db565b600d54846127da91906144cf565b5b925050505b92915050565b60005b8181101561281f576127fb600f612c33565b61280c83612807611352565b612c49565b8080612817906146a0565b9150506127e9565b505050565b600081600001549050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612903848484612312565b61290f84848484612c67565b61294e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129459061401e565b60405180910390fd5b50505050565b6060600082141561299c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ab0565b600082905060005b600082146129ce5780806129b7906146a0565b915050600a826129c7919061449e565b91506129a4565b60008167ffffffffffffffff8111156129ea576129e9614805565b5b6040519080825280601f01601f191660200182016040528015612a1c5781602001600182028036833780820191505090505b5090505b60008514612aa957600182612a359190614529565b9150600a85612a4491906146e9565b6030612a509190614448565b60f81b818381518110612a6657612a656147d6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612aa2919061449e565b9450612a20565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b2a838383612dfe565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b6d57612b6881612e03565b612bac565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bab57612baa8382612e4c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bef57612bea81612fb9565b612c2e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c2d57612c2c828261308a565b5b5b505050565b6001816000016000828254019250508190555050565b612c63828260405180602001604052806000815250613109565b5050565b6000612c888473ffffffffffffffffffffffffffffffffffffffff16613164565b15612df1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cb1612107565b8786866040518563ffffffff1660e01b8152600401612cd39493929190613f13565b602060405180830381600087803b158015612ced57600080fd5b505af1925050508015612d1e57506040513d601f19601f82011682018060405250810190612d1b919061388c565b60015b612da1573d8060008114612d4e576040519150601f19603f3d011682016040523d82523d6000602084013e612d53565b606091505b50600081511415612d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d909061401e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612df6565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e5984611714565b612e639190614529565b9050600060076000848152602001908152602001600020549050818114612f48576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fcd9190614529565b9050600060096000848152602001908152602001600020549050600060088381548110612ffd57612ffc6147d6565b5b90600052602060002001549050806008838154811061301f5761301e6147d6565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061306e5761306d6147a7565b5b6001900381819060005260206000200160009055905550505050565b600061309583611714565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6131138383613177565b6131206000848484612c67565b61315f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131569061401e565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131de9061415e565b60405180910390fd5b6131f08161210f565b15613230576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132279061405e565b60405180910390fd5b61323c60008383612b1f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461328c9190614448565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546133519061463d565b90600052602060002090601f01602090048101928261337357600085556133ba565b82601f1061338c57805160ff19168380011785556133ba565b828001600101855582156133ba579182015b828111156133b957825182559160200191906001019061339e565b5b5090506133c791906133cb565b5090565b5b808211156133e45760008160009055506001016133cc565b5090565b60006133fb6133f68461431e565b6142f9565b9050808382526020820190508285602086028201111561341e5761341d614839565b5b60005b8581101561344e578161343488826135e4565b845260208401935060208301925050600181019050613421565b5050509392505050565b600061346b6134668461434a565b6142f9565b9050828152602081018484840111156134875761348661483e565b5b6134928482856145d1565b509392505050565b60006134ad6134a88461437b565b6142f9565b9050828152602081018484840111156134c9576134c861483e565b5b6134d48482856145d1565b509392505050565b6000813590506134eb81614ec5565b92915050565b600082601f83011261350657613505614834565b5b81516135168482602086016133e8565b91505092915050565b60008135905061352e81614edc565b92915050565b60008151905061354381614edc565b92915050565b60008135905061355881614ef3565b92915050565b60008151905061356d81614ef3565b92915050565b600082601f83011261358857613587614834565b5b8135613598848260208601613458565b91505092915050565b600082601f8301126135b6576135b5614834565b5b81356135c684826020860161349a565b91505092915050565b6000813590506135de81614f0a565b92915050565b6000815190506135f381614f0a565b92915050565b60006020828403121561360f5761360e614848565b5b600061361d848285016134dc565b91505092915050565b6000806040838503121561363d5761363c614848565b5b600061364b858286016134dc565b925050602061365c858286016134dc565b9150509250929050565b60008060006060848603121561367f5761367e614848565b5b600061368d868287016134dc565b935050602061369e868287016134dc565b92505060406136af868287016135cf565b9150509250925092565b600080600080608085870312156136d3576136d2614848565b5b60006136e1878288016134dc565b94505060206136f2878288016134dc565b9350506040613703878288016135cf565b925050606085013567ffffffffffffffff81111561372457613723614843565b5b61373087828801613573565b91505092959194509250565b6000806040838503121561375357613752614848565b5b6000613761858286016134dc565b92505060206137728582860161351f565b9150509250929050565b6000806040838503121561379357613792614848565b5b60006137a1858286016134dc565b92505060206137b2858286016135cf565b9150509250929050565b6000602082840312156137d2576137d1614848565b5b600082015167ffffffffffffffff8111156137f0576137ef614843565b5b6137fc848285016134f1565b91505092915050565b60006020828403121561381b5761381a614848565b5b60006138298482850161351f565b91505092915050565b60006020828403121561384857613847614848565b5b600061385684828501613534565b91505092915050565b60006020828403121561387557613874614848565b5b600061388384828501613549565b91505092915050565b6000602082840312156138a2576138a1614848565b5b60006138b08482850161355e565b91505092915050565b6000602082840312156138cf576138ce614848565b5b600082013567ffffffffffffffff8111156138ed576138ec614843565b5b6138f9848285016135a1565b91505092915050565b60006020828403121561391857613917614848565b5b6000613926848285016135cf565b91505092915050565b600061393b8383613e96565b60208301905092915050565b6139508161455d565b82525050565b6000613961826143d1565b61396b81856143ff565b9350613976836143ac565b8060005b838110156139a757815161398e888261392f565b9750613999836143f2565b92505060018101905061397a565b5085935050505092915050565b6139bd8161456f565b82525050565b60006139ce826143dc565b6139d88185614410565b93506139e88185602086016145e0565b6139f18161484d565b840191505092915050565b6000613a07826143e7565b613a11818561442c565b9350613a218185602086016145e0565b613a2a8161484d565b840191505092915050565b6000613a40826143e7565b613a4a818561443d565b9350613a5a8185602086016145e0565b80840191505092915050565b60008154613a738161463d565b613a7d818661443d565b94506001821660008114613a985760018114613aa957613adc565b60ff19831686528186019350613adc565b613ab2856143bc565b60005b83811015613ad457815481890152600182019150602081019050613ab5565b838801955050505b50505092915050565b6000613af260238361442c565b9150613afd8261485e565b604082019050919050565b6000613b1560138361442c565b9150613b20826148ad565b602082019050919050565b6000613b38602b8361442c565b9150613b43826148d6565b604082019050919050565b6000613b5b60328361442c565b9150613b6682614925565b604082019050919050565b6000613b7e60268361442c565b9150613b8982614974565b604082019050919050565b6000613ba1601c8361442c565b9150613bac826149c3565b602082019050919050565b6000613bc4601b8361442c565b9150613bcf826149ec565b602082019050919050565b6000613be760248361442c565b9150613bf282614a15565b604082019050919050565b6000613c0a60198361442c565b9150613c1582614a64565b602082019050919050565b6000613c2d602c8361442c565b9150613c3882614a8d565b604082019050919050565b6000613c5060388361442c565b9150613c5b82614adc565b604082019050919050565b6000613c73602a8361442c565b9150613c7e82614b2b565b604082019050919050565b6000613c9660298361442c565b9150613ca182614b7a565b604082019050919050565b6000613cb960208361442c565b9150613cc482614bc9565b602082019050919050565b6000613cdc602c8361442c565b9150613ce782614bf2565b604082019050919050565b6000613cff60058361443d565b9150613d0a82614c41565b600582019050919050565b6000613d2260208361442c565b9150613d2d82614c6a565b602082019050919050565b6000613d4560298361442c565b9150613d5082614c93565b604082019050919050565b6000613d68602f8361442c565b9150613d7382614ce2565b604082019050919050565b6000613d8b60118361442c565b9150613d9682614d31565b602082019050919050565b6000613dae60218361442c565b9150613db982614d5a565b604082019050919050565b6000613dd1600d8361442c565b9150613ddc82614da9565b602082019050919050565b6000613df4600083614421565b9150613dff82614dd2565b600082019050919050565b6000613e1760318361442c565b9150613e2282614dd5565b604082019050919050565b6000613e3a601f8361442c565b9150613e4582614e24565b602082019050919050565b6000613e5d60138361442c565b9150613e6882614e4d565b602082019050919050565b6000613e80602c8361442c565b9150613e8b82614e76565b604082019050919050565b613e9f816145c7565b82525050565b613eae816145c7565b82525050565b6000613ec08285613a66565b9150613ecc8284613a35565b9150613ed782613cf2565b91508190509392505050565b6000613eee82613de7565b9150819050919050565b6000602082019050613f0d6000830184613947565b92915050565b6000608082019050613f286000830187613947565b613f356020830186613947565b613f426040830185613ea5565b8181036060830152613f5481846139c3565b905095945050505050565b60006020820190508181036000830152613f798184613956565b905092915050565b6000602082019050613f9660008301846139b4565b92915050565b60006020820190508181036000830152613fb681846139fc565b905092915050565b60006020820190508181036000830152613fd781613ae5565b9050919050565b60006020820190508181036000830152613ff781613b08565b9050919050565b6000602082019050818103600083015261401781613b2b565b9050919050565b6000602082019050818103600083015261403781613b4e565b9050919050565b6000602082019050818103600083015261405781613b71565b9050919050565b6000602082019050818103600083015261407781613b94565b9050919050565b6000602082019050818103600083015261409781613bb7565b9050919050565b600060208201905081810360008301526140b781613bda565b9050919050565b600060208201905081810360008301526140d781613bfd565b9050919050565b600060208201905081810360008301526140f781613c20565b9050919050565b6000602082019050818103600083015261411781613c43565b9050919050565b6000602082019050818103600083015261413781613c66565b9050919050565b6000602082019050818103600083015261415781613c89565b9050919050565b6000602082019050818103600083015261417781613cac565b9050919050565b6000602082019050818103600083015261419781613ccf565b9050919050565b600060208201905081810360008301526141b781613d15565b9050919050565b600060208201905081810360008301526141d781613d38565b9050919050565b600060208201905081810360008301526141f781613d5b565b9050919050565b6000602082019050818103600083015261421781613d7e565b9050919050565b6000602082019050818103600083015261423781613da1565b9050919050565b6000602082019050818103600083015261425781613dc4565b9050919050565b6000602082019050818103600083015261427781613e0a565b9050919050565b6000602082019050818103600083015261429781613e2d565b9050919050565b600060208201905081810360008301526142b781613e50565b9050919050565b600060208201905081810360008301526142d781613e73565b9050919050565b60006020820190506142f36000830184613ea5565b92915050565b6000614303614314565b905061430f828261466f565b919050565b6000604051905090565b600067ffffffffffffffff82111561433957614338614805565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561436557614364614805565b5b61436e8261484d565b9050602081019050919050565b600067ffffffffffffffff82111561439657614395614805565b5b61439f8261484d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614453826145c7565b915061445e836145c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144935761449261471a565b5b828201905092915050565b60006144a9826145c7565b91506144b4836145c7565b9250826144c4576144c3614749565b5b828204905092915050565b60006144da826145c7565b91506144e5836145c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561451e5761451d61471a565b5b828202905092915050565b6000614534826145c7565b915061453f836145c7565b9250828210156145525761455161471a565b5b828203905092915050565b6000614568826145a7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145fe5780820151818401526020810190506145e3565b8381111561460d576000848401525b50505050565b600061461e826145c7565b915060008214156146325761463161471a565b5b600182039050919050565b6000600282049050600182168061465557607f821691505b6020821081141561466957614668614778565b5b50919050565b6146788261484d565b810181811067ffffffffffffffff8211171561469757614696614805565b5b80604052505050565b60006146ab826145c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146de576146dd61471a565b5b600182019050919050565b60006146f4826145c7565b91506146ff836145c7565b92508261470f5761470e614749565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e73756666696369656e742076616c75652073656e7420666f72206d696e7460008201527f696e670000000000000000000000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5075626c69632073616c6520686173206e6f7420737461727465640000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f5465616d207265736572766520646f776e000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c7920454f41206d696e7400000000000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f546f6b656e206964206973206e6f74206120676f6c6420656e76656c6f706500600082015250565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614ece8161455d565b8114614ed957600080fd5b50565b614ee58161456f565b8114614ef057600080fd5b50565b614efc8161457b565b8114614f0757600080fd5b50565b614f13816145c7565b8114614f1e57600080fd5b5056fea2646970667358221220d5231754a688c2b7cc94883477b8b9deb888eae401716c1b860c73819daf42fe64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000016b40e539d56cbbdc6b8765f9dcfbeb6cd8eeeac00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6234355a395454663773546935714b5459785262524437787246546a4e65764872724b4e6a566548676f4b772f00000000000000000000000000000000000000000000000000000000000000000000000000000000000d5a6f64696163205469676572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085a4f445449474552000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061022f5760003560e01c80634d3cfc831161012e5780638da5cb5b116100ab578063b88d4fde1161006f578063b88d4fde14610855578063c1db8a801461087e578063c87b56dd146108a7578063e985e9c5146108e4578063f2fde38b146109215761022f565b80638da5cb5b1461076e57806394de23ad1461079957806395d89b41146107d6578063a22cb46514610801578063a6e585ae1461082a5761022f565b80636b9bd2f8116100f25780636b9bd2f81461067557806370a08231146106b2578063715018a6146106ef578063881b136e146107065780638cdd1446146107315761022f565b80634d3cfc831461057e5780634f6ccce7146105a95780636352211e146105e657806367564183146106235780636b44cf1f1461064c5761022f565b80631ee35b79116101bc5780632f5c97b8116101805780632f5c97b8146104ad5780632f745c59146104d85780633ccfd60b1461051557806342842e0e1461052c57806346114e0e146105555761022f565b80631ee35b79146103d7578063225939f81461041457806323b872dd1461043d5780632b2c011b146104665780632c526196146104915761022f565b8063081812fc11610203578063081812fc146102f0578063095ea7b31461032d57806309677ba31461035657806316c61ccc1461038157806318160ddd146103ac5761022f565b806233131b1461023457806301ffc9a71461025f57806305530b621461029c57806306fdde03146102c5575b600080fd5b34801561024057600080fd5b5061024961094a565b60405161025691906142de565b60405180910390f35b34801561026b57600080fd5b506102866004803603810190610281919061385f565b610950565b6040516102939190613f81565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613902565b6109ca565b005b3480156102d157600080fd5b506102da610a50565b6040516102e79190613f9c565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613902565b610ae2565b6040516103249190613ef8565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061377c565b610b67565b005b34801561036257600080fd5b5061036b610c7f565b60405161037891906142de565b60405180910390f35b34801561038d57600080fd5b50610396610c85565b6040516103a39190613f81565b60405180910390f35b3480156103b857600080fd5b506103c1610c98565b6040516103ce91906142de565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190613902565b610ca5565b60405161040b9190613f81565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190613902565b610db9565b005b34801561044957600080fd5b50610464600480360381019061045f9190613666565b610e3f565b005b34801561047257600080fd5b5061047b610e9f565b60405161048891906142de565b60405180910390f35b6104ab60048036038101906104a69190613902565b610ea5565b005b3480156104b957600080fd5b506104c261106a565b6040516104cf9190613f9c565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa919061377c565b6110f8565b60405161050c91906142de565b60405180910390f35b34801561052157600080fd5b5061052a61119d565b005b34801561053857600080fd5b50610553600480360381019061054e9190613666565b611299565b005b34801561056157600080fd5b5061057c60048036038101906105779190613805565b6112b9565b005b34801561058a57600080fd5b50610593611352565b6040516105a091906142de565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190613902565b611363565b6040516105dd91906142de565b60405180910390f35b3480156105f257600080fd5b5061060d60048036038101906106089190613902565b6113d4565b60405161061a9190613ef8565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906138b9565b611486565b005b34801561065857600080fd5b50610673600480360381019061066e9190613902565b61151c565b005b34801561068157600080fd5b5061069c600480360381019061069791906135f9565b611666565b6040516106a99190613f5f565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d491906135f9565b611714565b6040516106e691906142de565b60405180910390f35b3480156106fb57600080fd5b506107046117cc565b005b34801561071257600080fd5b5061071b611854565b60405161072891906142de565b60405180910390f35b34801561073d57600080fd5b506107586004803603810190610753919061377c565b61185a565b60405161076591906142de565b60405180910390f35b34801561077a57600080fd5b50610783611aa6565b6040516107909190613ef8565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb9190613902565b611ad0565b6040516107cd9190613f81565b60405180910390f35b3480156107e257600080fd5b506107eb611af0565b6040516107f89190613f9c565b60405180910390f35b34801561080d57600080fd5b506108286004803603810190610823919061373c565b611b82565b005b34801561083657600080fd5b5061083f611d03565b60405161084c91906142de565b60405180910390f35b34801561086157600080fd5b5061087c600480360381019061087791906136b9565b611d09565b005b34801561088a57600080fd5b506108a560048036038101906108a09190613902565b611d6b565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190613902565b611df1565b6040516108db9190613f9c565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613626565b611e99565b6040516109189190613f81565b60405180910390f35b34801561092d57600080fd5b50610948600480360381019061094391906135f9565b611f2d565b005b6122b881565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c357506109c282612025565b5b9050919050565b6109d2612107565b73ffffffffffffffffffffffffffffffffffffffff166109f0611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d9061419e565b60405180910390fd5b80600d8190555050565b606060008054610a5f9061463d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b9061463d565b8015610ad85780601f10610aad57610100808354040283529160200191610ad8565b820191906000526020600020905b815481529060010190602001808311610abb57829003601f168201915b5050505050905090565b6000610aed8261210f565b610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b239061417e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b72826113d4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda9061421e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c02612107565b73ffffffffffffffffffffffffffffffffffffffff161480610c315750610c3081610c2b612107565b611e99565b5b610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c67906140fe565b60405180910390fd5b610c7a838361217b565b505050565b600d5481565b601260009054906101000a900460ff1681565b6000600880549050905090565b6000601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4f59d3836040518263ffffffff1660e01b8152600401610d0291906142de565b60206040518083038186803b158015610d1a57600080fd5b505afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d529190613832565b610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d889061427e565b60405180910390fd5b600e600083815260200190815260200160002060009054906101000a900460ff169050919050565b610dc1612107565b73ffffffffffffffffffffffffffffffffffffffff16610ddf611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c9061419e565b60405180910390fd5b8060108190555050565b610e50610e4a612107565b82612234565b610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061425e565b60405180910390fd5b610e9a838383612312565b505050565b600c5481565b600081118015610eb757506010548111155b610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed9061429e565b60405180910390fd5b6122b881610f02611352565b610f0c9190614448565b1115610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4490613fde565b60405180910390fd5b601260009054906101000a900460ff1615610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f949061407e565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110029061423e565b60405180910390fd5b6000611017338361256e565b90508034101561105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390613fbe565b60405180910390fd5b61106633836127e6565b5050565b600b80546110779061463d565b80601f01602080910402602001604051908101604052809291908181526020018280546110a39061463d565b80156110f05780601f106110c5576101008083540402835291602001916110f0565b820191906000526020600020905b8154815290600101906020018083116110d357829003601f168201915b505050505081565b600061110383611714565b8210611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b90613ffe565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6111a5612107565b73ffffffffffffffffffffffffffffffffffffffff166111c3611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611219576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112109061419e565b60405180910390fd5b6000611223611aa6565b73ffffffffffffffffffffffffffffffffffffffff164760405161124690613ee3565b60006040518083038185875af1925050503d8060008114611283576040519150601f19603f3d011682016040523d82523d6000602084013e611288565b606091505b505090508061129657600080fd5b50565b6112b483838360405180602001604052806000815250611d09565b505050565b6112c1612107565b73ffffffffffffffffffffffffffffffffffffffff166112df611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c9061419e565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b600061135e600f612824565b905090565b600061136d610c98565b82106113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a5906142be565b60405180910390fd5b600882815481106113c2576113c16147d6565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561147d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114749061413e565b60405180910390fd5b80915050919050565b61148e612107565b73ffffffffffffffffffffffffffffffffffffffff166114ac611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f99061419e565b60405180910390fd5b80600b9080519060200190611518929190613345565b5050565b611524612107565b73ffffffffffffffffffffffffffffffffffffffff16611542611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f9061419e565b60405180910390fd5b6000811180156115aa57506011548111155b6115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e0906141fe565b60405180910390fd5b6122b8816115f5611352565b6115ff9190614448565b1115611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163790613fde565b60405180910390fd5b61164a33826127e6565b806011600082825461165c9190614529565b9250508190555050565b6060600061167383611714565b905060008167ffffffffffffffff81111561169157611690614805565b5b6040519080825280602002602001820160405280156116bf5781602001602082028036833780820191505090505b50905060005b82811015611709576116d785826110f8565b8282815181106116ea576116e96147d6565b5b6020026020010181815250508080611701906146a0565b9150506116c5565b508092505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c9061411e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117d4612107565b73ffffffffffffffffffffffffffffffffffffffff166117f2611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f9061419e565b60405180910390fd5b6118526000612832565b565b60105481565b600080601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b9bd2f8856040518263ffffffff1660e01b81526004016118b89190613ef8565b60006040518083038186803b1580156118d057600080fd5b505afa1580156118e4573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061190d91906137bc565b905060008151141561192f57600c548361192791906144cf565b915050611aa0565b6000805b8251811015611a73576000838281518110611951576119506147d6565b5b60200260200101519050601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4f59d3826040518263ffffffff1660e01b81526004016119b691906142de565b60206040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a069190613832565b15611a5a57600e600082815260200190815260200160002060009054906101000a900460ff16611a55576001861415611a46576000945050505050611aa0565b8580611a5190614613565b9650505b611a5f565b600192505b508080611a6b906146a0565b915050611933565b5080611a8c57600c5484611a8791906144cf565b611a9b565b600d5484611a9a91906144cf565b5b925050505b92915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b606060018054611aff9061463d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2b9061463d565b8015611b785780601f10611b4d57610100808354040283529160200191611b78565b820191906000526020600020905b815481529060010190602001808311611b5b57829003601f168201915b5050505050905090565b611b8a612107565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef906140be565b60405180910390fd5b8060056000611c05612107565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cb2612107565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf79190613f81565b60405180910390a35050565b60115481565b611d1a611d14612107565b83612234565b611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d509061425e565b60405180910390fd5b611d65848484846128f8565b50505050565b611d73612107565b73ffffffffffffffffffffffffffffffffffffffff16611d91611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde9061419e565b60405180910390fd5b80600c8190555050565b6060611dfc8261210f565b611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e32906141de565b60405180910390fd5b6000600b8054611e4a9061463d565b905011611e665760405180602001604052806000815250611e92565b600b611e7183612954565b604051602001611e82929190613eb4565b6040516020818303038152906040525b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f35612107565b73ffffffffffffffffffffffffffffffffffffffff16611f53611aa6565b73ffffffffffffffffffffffffffffffffffffffff1614611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa09061419e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120109061403e565b60405180910390fd5b61202281612832565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120f057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061210057506120ff82612ab5565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121ee836113d4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061223f8261210f565b61227e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612275906140de565b60405180910390fd5b6000612289836113d4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122f857508373ffffffffffffffffffffffffffffffffffffffff166122e084610ae2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061230957506123088185611e99565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612332826113d4565b73ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f906141be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ef9061409e565b60405180910390fd5b612403838383612b1f565b61240e60008261217b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245e9190614529565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124b59190614448565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b9bd2f8856040518263ffffffff1660e01b81526004016125cc9190613ef8565b60006040518083038186803b1580156125e457600080fd5b505afa1580156125f8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061262191906137bc565b905060008151141561264357600c548361263b91906144cf565b9150506127e0565b6000805b82518110156127b3576000838281518110612665576126646147d6565b5b60200260200101519050601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc4f59d3826040518263ffffffff1660e01b81526004016126ca91906142de565b60206040518083038186803b1580156126e257600080fd5b505afa1580156126f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271a9190613832565b1561279a57600e600082815260200190815260200160002060009054906101000a900460ff16612795576001600e600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060018614156127865760009450505050506127e0565b858061279190614613565b9650505b61279f565b600192505b5080806127ab906146a0565b915050612647565b50806127cc57600c54846127c791906144cf565b6127db565b600d54846127da91906144cf565b5b925050505b92915050565b60005b8181101561281f576127fb600f612c33565b61280c83612807611352565b612c49565b8080612817906146a0565b9150506127e9565b505050565b600081600001549050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612903848484612312565b61290f84848484612c67565b61294e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129459061401e565b60405180910390fd5b50505050565b6060600082141561299c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ab0565b600082905060005b600082146129ce5780806129b7906146a0565b915050600a826129c7919061449e565b91506129a4565b60008167ffffffffffffffff8111156129ea576129e9614805565b5b6040519080825280601f01601f191660200182016040528015612a1c5781602001600182028036833780820191505090505b5090505b60008514612aa957600182612a359190614529565b9150600a85612a4491906146e9565b6030612a509190614448565b60f81b818381518110612a6657612a656147d6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612aa2919061449e565b9450612a20565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612b2a838383612dfe565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b6d57612b6881612e03565b612bac565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612bab57612baa8382612e4c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bef57612bea81612fb9565b612c2e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c2d57612c2c828261308a565b5b5b505050565b6001816000016000828254019250508190555050565b612c63828260405180602001604052806000815250613109565b5050565b6000612c888473ffffffffffffffffffffffffffffffffffffffff16613164565b15612df1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cb1612107565b8786866040518563ffffffff1660e01b8152600401612cd39493929190613f13565b602060405180830381600087803b158015612ced57600080fd5b505af1925050508015612d1e57506040513d601f19601f82011682018060405250810190612d1b919061388c565b60015b612da1573d8060008114612d4e576040519150601f19603f3d011682016040523d82523d6000602084013e612d53565b606091505b50600081511415612d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d909061401e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612df6565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e5984611714565b612e639190614529565b9050600060076000848152602001908152602001600020549050818114612f48576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fcd9190614529565b9050600060096000848152602001908152602001600020549050600060088381548110612ffd57612ffc6147d6565b5b90600052602060002001549050806008838154811061301f5761301e6147d6565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061306e5761306d6147a7565b5b6001900381819060005260206000200160009055905550505050565b600061309583611714565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6131138383613177565b6131206000848484612c67565b61315f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131569061401e565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131de9061415e565b60405180910390fd5b6131f08161210f565b15613230576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132279061405e565b60405180910390fd5b61323c60008383612b1f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461328c9190614448565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546133519061463d565b90600052602060002090601f01602090048101928261337357600085556133ba565b82601f1061338c57805160ff19168380011785556133ba565b828001600101855582156133ba579182015b828111156133b957825182559160200191906001019061339e565b5b5090506133c791906133cb565b5090565b5b808211156133e45760008160009055506001016133cc565b5090565b60006133fb6133f68461431e565b6142f9565b9050808382526020820190508285602086028201111561341e5761341d614839565b5b60005b8581101561344e578161343488826135e4565b845260208401935060208301925050600181019050613421565b5050509392505050565b600061346b6134668461434a565b6142f9565b9050828152602081018484840111156134875761348661483e565b5b6134928482856145d1565b509392505050565b60006134ad6134a88461437b565b6142f9565b9050828152602081018484840111156134c9576134c861483e565b5b6134d48482856145d1565b509392505050565b6000813590506134eb81614ec5565b92915050565b600082601f83011261350657613505614834565b5b81516135168482602086016133e8565b91505092915050565b60008135905061352e81614edc565b92915050565b60008151905061354381614edc565b92915050565b60008135905061355881614ef3565b92915050565b60008151905061356d81614ef3565b92915050565b600082601f83011261358857613587614834565b5b8135613598848260208601613458565b91505092915050565b600082601f8301126135b6576135b5614834565b5b81356135c684826020860161349a565b91505092915050565b6000813590506135de81614f0a565b92915050565b6000815190506135f381614f0a565b92915050565b60006020828403121561360f5761360e614848565b5b600061361d848285016134dc565b91505092915050565b6000806040838503121561363d5761363c614848565b5b600061364b858286016134dc565b925050602061365c858286016134dc565b9150509250929050565b60008060006060848603121561367f5761367e614848565b5b600061368d868287016134dc565b935050602061369e868287016134dc565b92505060406136af868287016135cf565b9150509250925092565b600080600080608085870312156136d3576136d2614848565b5b60006136e1878288016134dc565b94505060206136f2878288016134dc565b9350506040613703878288016135cf565b925050606085013567ffffffffffffffff81111561372457613723614843565b5b61373087828801613573565b91505092959194509250565b6000806040838503121561375357613752614848565b5b6000613761858286016134dc565b92505060206137728582860161351f565b9150509250929050565b6000806040838503121561379357613792614848565b5b60006137a1858286016134dc565b92505060206137b2858286016135cf565b9150509250929050565b6000602082840312156137d2576137d1614848565b5b600082015167ffffffffffffffff8111156137f0576137ef614843565b5b6137fc848285016134f1565b91505092915050565b60006020828403121561381b5761381a614848565b5b60006138298482850161351f565b91505092915050565b60006020828403121561384857613847614848565b5b600061385684828501613534565b91505092915050565b60006020828403121561387557613874614848565b5b600061388384828501613549565b91505092915050565b6000602082840312156138a2576138a1614848565b5b60006138b08482850161355e565b91505092915050565b6000602082840312156138cf576138ce614848565b5b600082013567ffffffffffffffff8111156138ed576138ec614843565b5b6138f9848285016135a1565b91505092915050565b60006020828403121561391857613917614848565b5b6000613926848285016135cf565b91505092915050565b600061393b8383613e96565b60208301905092915050565b6139508161455d565b82525050565b6000613961826143d1565b61396b81856143ff565b9350613976836143ac565b8060005b838110156139a757815161398e888261392f565b9750613999836143f2565b92505060018101905061397a565b5085935050505092915050565b6139bd8161456f565b82525050565b60006139ce826143dc565b6139d88185614410565b93506139e88185602086016145e0565b6139f18161484d565b840191505092915050565b6000613a07826143e7565b613a11818561442c565b9350613a218185602086016145e0565b613a2a8161484d565b840191505092915050565b6000613a40826143e7565b613a4a818561443d565b9350613a5a8185602086016145e0565b80840191505092915050565b60008154613a738161463d565b613a7d818661443d565b94506001821660008114613a985760018114613aa957613adc565b60ff19831686528186019350613adc565b613ab2856143bc565b60005b83811015613ad457815481890152600182019150602081019050613ab5565b838801955050505b50505092915050565b6000613af260238361442c565b9150613afd8261485e565b604082019050919050565b6000613b1560138361442c565b9150613b20826148ad565b602082019050919050565b6000613b38602b8361442c565b9150613b43826148d6565b604082019050919050565b6000613b5b60328361442c565b9150613b6682614925565b604082019050919050565b6000613b7e60268361442c565b9150613b8982614974565b604082019050919050565b6000613ba1601c8361442c565b9150613bac826149c3565b602082019050919050565b6000613bc4601b8361442c565b9150613bcf826149ec565b602082019050919050565b6000613be760248361442c565b9150613bf282614a15565b604082019050919050565b6000613c0a60198361442c565b9150613c1582614a64565b602082019050919050565b6000613c2d602c8361442c565b9150613c3882614a8d565b604082019050919050565b6000613c5060388361442c565b9150613c5b82614adc565b604082019050919050565b6000613c73602a8361442c565b9150613c7e82614b2b565b604082019050919050565b6000613c9660298361442c565b9150613ca182614b7a565b604082019050919050565b6000613cb960208361442c565b9150613cc482614bc9565b602082019050919050565b6000613cdc602c8361442c565b9150613ce782614bf2565b604082019050919050565b6000613cff60058361443d565b9150613d0a82614c41565b600582019050919050565b6000613d2260208361442c565b9150613d2d82614c6a565b602082019050919050565b6000613d4560298361442c565b9150613d5082614c93565b604082019050919050565b6000613d68602f8361442c565b9150613d7382614ce2565b604082019050919050565b6000613d8b60118361442c565b9150613d9682614d31565b602082019050919050565b6000613dae60218361442c565b9150613db982614d5a565b604082019050919050565b6000613dd1600d8361442c565b9150613ddc82614da9565b602082019050919050565b6000613df4600083614421565b9150613dff82614dd2565b600082019050919050565b6000613e1760318361442c565b9150613e2282614dd5565b604082019050919050565b6000613e3a601f8361442c565b9150613e4582614e24565b602082019050919050565b6000613e5d60138361442c565b9150613e6882614e4d565b602082019050919050565b6000613e80602c8361442c565b9150613e8b82614e76565b604082019050919050565b613e9f816145c7565b82525050565b613eae816145c7565b82525050565b6000613ec08285613a66565b9150613ecc8284613a35565b9150613ed782613cf2565b91508190509392505050565b6000613eee82613de7565b9150819050919050565b6000602082019050613f0d6000830184613947565b92915050565b6000608082019050613f286000830187613947565b613f356020830186613947565b613f426040830185613ea5565b8181036060830152613f5481846139c3565b905095945050505050565b60006020820190508181036000830152613f798184613956565b905092915050565b6000602082019050613f9660008301846139b4565b92915050565b60006020820190508181036000830152613fb681846139fc565b905092915050565b60006020820190508181036000830152613fd781613ae5565b9050919050565b60006020820190508181036000830152613ff781613b08565b9050919050565b6000602082019050818103600083015261401781613b2b565b9050919050565b6000602082019050818103600083015261403781613b4e565b9050919050565b6000602082019050818103600083015261405781613b71565b9050919050565b6000602082019050818103600083015261407781613b94565b9050919050565b6000602082019050818103600083015261409781613bb7565b9050919050565b600060208201905081810360008301526140b781613bda565b9050919050565b600060208201905081810360008301526140d781613bfd565b9050919050565b600060208201905081810360008301526140f781613c20565b9050919050565b6000602082019050818103600083015261411781613c43565b9050919050565b6000602082019050818103600083015261413781613c66565b9050919050565b6000602082019050818103600083015261415781613c89565b9050919050565b6000602082019050818103600083015261417781613cac565b9050919050565b6000602082019050818103600083015261419781613ccf565b9050919050565b600060208201905081810360008301526141b781613d15565b9050919050565b600060208201905081810360008301526141d781613d38565b9050919050565b600060208201905081810360008301526141f781613d5b565b9050919050565b6000602082019050818103600083015261421781613d7e565b9050919050565b6000602082019050818103600083015261423781613da1565b9050919050565b6000602082019050818103600083015261425781613dc4565b9050919050565b6000602082019050818103600083015261427781613e0a565b9050919050565b6000602082019050818103600083015261429781613e2d565b9050919050565b600060208201905081810360008301526142b781613e50565b9050919050565b600060208201905081810360008301526142d781613e73565b9050919050565b60006020820190506142f36000830184613ea5565b92915050565b6000614303614314565b905061430f828261466f565b919050565b6000604051905090565b600067ffffffffffffffff82111561433957614338614805565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561436557614364614805565b5b61436e8261484d565b9050602081019050919050565b600067ffffffffffffffff82111561439657614395614805565b5b61439f8261484d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614453826145c7565b915061445e836145c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144935761449261471a565b5b828201905092915050565b60006144a9826145c7565b91506144b4836145c7565b9250826144c4576144c3614749565b5b828204905092915050565b60006144da826145c7565b91506144e5836145c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561451e5761451d61471a565b5b828202905092915050565b6000614534826145c7565b915061453f836145c7565b9250828210156145525761455161471a565b5b828203905092915050565b6000614568826145a7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145fe5780820151818401526020810190506145e3565b8381111561460d576000848401525b50505050565b600061461e826145c7565b915060008214156146325761463161471a565b5b600182039050919050565b6000600282049050600182168061465557607f821691505b6020821081141561466957614668614778565b5b50919050565b6146788261484d565b810181811067ffffffffffffffff8211171561469757614696614805565b5b80604052505050565b60006146ab826145c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146de576146dd61471a565b5b600182019050919050565b60006146f4826145c7565b91506146ff836145c7565b92508261470f5761470e614749565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e73756666696369656e742076616c75652073656e7420666f72206d696e7460008201527f696e670000000000000000000000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7920657863656564656400000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5075626c69632073616c6520686173206e6f7420737461727465640000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f5465616d207265736572766520646f776e000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c7920454f41206d696e7400000000000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f546f6b656e206964206973206e6f74206120676f6c6420656e76656c6f706500600082015250565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614ece8161455d565b8114614ed957600080fd5b50565b614ee58161456f565b8114614ef057600080fd5b50565b614efc8161457b565b8114614f0757600080fd5b50565b614f13816145c7565b8114614f1e57600080fd5b5056fea2646970667358221220d5231754a688c2b7cc94883477b8b9deb888eae401716c1b860c73819daf42fe64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000016b40e539d56cbbdc6b8765f9dcfbeb6cd8eeeac00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6234355a395454663773546935714b5459785262524437787246546a4e65764872724b4e6a566548676f4b772f00000000000000000000000000000000000000000000000000000000000000000000000000000000000d5a6f64696163205469676572730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085a4f445449474552000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : standard_base_uri_ (string): ipfs://Qmb45Z9TTf7sTi5qKTYxRbRD7xrFTjNevHrrKNjVeHgoKw/
Arg [1] : zodiac_envelopes_address_ (address): 0x16B40e539d56cbBDc6B8765F9DcfBEB6Cd8EEeac
Arg [2] : name_ (string): Zodiac Tigers
Arg [3] : symbol_ (string): ZODTIGER
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000016b40e539d56cbbdc6b8765f9dcfbeb6cd8eeeac
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [5] : 697066733a2f2f516d6234355a395454663773546935714b5459785262524437
Arg [6] : 787246546a4e65764872724b4e6a566548676f4b772f00000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [8] : 5a6f646961632054696765727300000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [10] : 5a4f445449474552000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43816:7128:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44264:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34725:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50532:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24186:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25553:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25150:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44092:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44430:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35310:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49883:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50375:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26350:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44043:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48123:589;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43978:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35009:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50794:147;;;;;;;;;;;;;:::i;:::-;;26698:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50281:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45016:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35476:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23918:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50132:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48720:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49074:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23679:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41784:84;;;;;;;;;;;;;:::i;:::-;;44313:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45226:1290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41204:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44143:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24331:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25815:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44363:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26906:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50667:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49491:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26143:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42005:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44264:42;44302:4;44264:42;:::o;34725:214::-;34827:4;34859:35;34844:50;;;:11;:50;;;;:90;;;;34898:36;34922:11;34898:23;:36::i;:::-;34844:90;34837:97;;34725:214;;;:::o;50532:127::-;41404:12;:10;:12::i;:::-;41393:23;;:7;:5;:7::i;:::-;:23;;;41385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50635:16:::1;50616;:35;;;;50532:127:::0;:::o;24186:90::-;24240:13;24266:5;24259:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24186:90;:::o;25553:204::-;25629:7;25650:16;25658:7;25650;:16::i;:::-;25642:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25728:15;:24;25744:7;25728:24;;;;;;;;;;;;;;;;;;;;;25721:31;;25553:204;;;:::o;25150:351::-;25224:13;25240:23;25255:7;25240:14;:23::i;:::-;25224:39;;25281:5;25275:11;;:2;:11;;;;25267:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25357:5;25341:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25366:37;25383:5;25390:12;:10;:12::i;:::-;25366:16;:37::i;:::-;25341:62;25330:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;25475:21;25484:2;25488:7;25475:8;:21::i;:::-;25220:281;25150:351;;:::o;44092:44::-;;;;:::o;44430:19::-;;;;;;;;;;;;;:::o;35310:103::-;35371:7;35391:10;:17;;;;35384:24;;35310:103;:::o;49883:241::-;49956:4;49981:27;;;;;;;;;;;:36;;;50018:9;49981:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49973:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;50082:23;:34;50106:9;50082:34;;;;;;;;;;;;;;;;;;;;;50075:41;;49883:241;;;:::o;50375:149::-;41404:12;:10;:12::i;:::-;41393:23;;:7;:5;:7::i;:::-;:23;;;41385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50493:23:::1;50467;:49;;;;50375:149:::0;:::o;26350:291::-;26507:41;26526:12;:10;:12::i;:::-;26540:7;26507:18;:41::i;:::-;26499:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26608:28;26618:4;26624:2;26628:7;26608:9;:28::i;:::-;26350:291;;;:::o;44043:42::-;;;;:::o;48123:589::-;48209:1;48194:12;:16;:59;;;;;48230:23;;48214:12;:39;;48194:59;48186:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;44302:4;48314:12;48296:15;:13;:15::i;:::-;:30;;;;:::i;:::-;:45;;48288:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48385:7;;;;;;;;;;;48384:8;48376:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;48457:9;48443:23;;:10;:23;;;48435:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;48495:24;48522:47;48544:10;48556:12;48522:21;:47::i;:::-;48495:74;;48601:16;48588:9;:29;;48580:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48668:36;48679:10;48691:12;48668:10;:36::i;:::-;48175:537;48123:589;:::o;43978:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35009:239::-;35106:7;35135:23;35152:5;35135:16;:23::i;:::-;35127:5;:31;35119:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35217:12;:19;35230:5;35217:19;;;;;;;;;;;;;;;:26;35237:5;35217:26;;;;;;;;;;;;35210:33;;35009:239;;;;:::o;50794:147::-;41404:12;:10;:12::i;:::-;41393:23;;:7;:5;:7::i;:::-;:23;;;41385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50843:7:::1;50864;:5;:7::i;:::-;50856:21;;50885;50856:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50842:69;;;50930:2;50922:11;;;::::0;::::1;;50831:110;50794:147::o:0;26698:151::-;26805:39;26822:4;26828:2;26832:7;26805:39;;;;;;;;;;;;:16;:39::i;:::-;26698:151;;;:::o;50281:86::-;41404:12;:10;:12::i;:::-;41393:23;;:7;:5;:7::i;:::-;:23;;;41385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50353:6:::1;50343:7;;:16;;;;;;;;;;;;;;;;;;50281:86:::0;:::o;45016:98::-;45062:7;45089:17;:7;:15;:17::i;:::-;45082:24;;45016:98;:::o;35476:216::-;35551:7;35580:30;:28;:30::i;:::-;35572:5;:38;35564:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35670:10;35681:5;35670:17;;;;;;;;:::i;:::-;;;;;;;;;;35663:24;;35476:216;;;:::o;23918:215::-;23990:7;24003:13;24019:7;:16;24027:7;24019:16;;;;;;;;;;;;;;;;;;;;;24003:32;;24064:1;24047:19;;:5;:19;;;;24039:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24123:5;24116:12;;;23918:215;;;:::o;50132:141::-;41404:12;:10;:12::i;:::-;41393:23;;:7;:5;:7::i;:::-;:23;;;41385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50247:18:::1;50226;:39;;;;;;;;;;;;:::i;:::-;;50132:141:::0;:::o;48720:346::-;41404:12;:10;:12::i;:::-;41393:23;;:7;:5;:7::i;:::-;:23;;;41385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48825:1:::1;48810:12;:16;:50;;;;;48846:14;;48830:12;:30;;48810:50;48802:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44302:4;48919:12;48901:15;:13;:15::i;:::-;:30;;;;:::i;:::-;:45;;48893:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48981:36;48992:10;49004:12;48981:10;:36::i;:::-;49046:12;49028:14;;:30;;;;;;;:::i;:::-;;;;;;;;48720:346:::0;:::o;49074:409::-;49152:16;49181:26;49210:17;49220:6;49210:9;:17::i;:::-;49181:46;;49238:33;49288:18;49274:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49238:69;;49323:9;49318:124;49338:18;49334:1;:22;49318:124;;;49400:30;49420:6;49428:1;49400:19;:30::i;:::-;49378:16;49395:1;49378:19;;;;;;;;:::i;:::-;;;;;;;:52;;;;;49358:3;;;;;:::i;:::-;;;;49318:124;;;;49459:16;49452:23;;;;49074:409;;;:::o;23679:191::-;23751:7;23789:1;23772:19;;:5;:19;;;;23764:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23849:9;:16;23859:5;23849:16;;;;;;;;;;;;;;;;23842:23;;23679:191;;;:::o;41784:84::-;41404:12;:10;:12::i;:::-;41393:23;;:7;:5;:7::i;:::-;:23;;;41385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41842:21:::1;41860:1;41842:9;:21::i;:::-;41784:84::o:0;44313:43::-;;;;:::o;45226:1290::-;45306:7;45385:33;45421:27;;;;;;;;;;;:44;;;45466:3;45421:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45385:85;;45566:1;45539:16;:23;:28;45536:95;;;45605:14;;45590:12;:29;;;;:::i;:::-;45583:36;;;;;45536:95;45745:15;45784:9;45779:530;45803:16;:23;45799:1;:27;45779:530;;;45847:25;45875:16;45892:1;45875:19;;;;;;;;:::i;:::-;;;;;;;;45847:47;;45913:27;;;;;;;;;;;:36;;;45950:17;45913:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45909:388;;;46087:23;:42;46111:17;46087:42;;;;;;;;;;;;;;;;;;;;;46082:164;;46173:1;46157:12;:17;46153:73;;;46183:1;46176:8;;;;;;;;46153:73;46212:14;;;;;:::i;:::-;;;;46082:164;45909:388;;;46293:4;46280:17;;45909:388;45832:477;45828:3;;;;;:::i;:::-;;;;45779:530;;;;46432:10;:76;;46494:14;;46479:12;:29;;;;:::i;:::-;46432:76;;;46460:16;;46445:12;:31;;;;:::i;:::-;46432:76;46425:83;;;;45226:1290;;;;;:::o;41204:77::-;41250:7;41270:6;;;;;;;;;;;41263:13;;41204:77;:::o;44143:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;24331:94::-;24387:13;24413:7;24406:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24331:94;:::o;25815:271::-;25923:12;:10;:12::i;:::-;25911:24;;:8;:24;;;;25903:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26016:8;25971:18;:32;25990:12;:10;:12::i;:::-;25971:32;;;;;;;;;;;;;;;:42;26004:8;25971:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26062:8;26033:48;;26048:12;:10;:12::i;:::-;26033:48;;;26072:8;26033:48;;;;;;:::i;:::-;;;;;;;;25815:271;;:::o;44363:34::-;;;;:::o;26906:280::-;27043:41;27062:12;:10;:12::i;:::-;27076:7;27043:18;:41::i;:::-;27035:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27142:39;27156:4;27162:2;27166:7;27175:5;27142:13;:39::i;:::-;26906:280;;;;:::o;50667:119::-;41404:12;:10;:12::i;:::-;41393:23;;:7;:5;:7::i;:::-;:23;;;41385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50764:14:::1;50747;:31;;;;50667:119:::0;:::o;49491:384::-;49591:13;49630:18;49638:9;49630:7;:18::i;:::-;49622:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;49757:1;49728:18;49722:32;;;;;:::i;:::-;;;:36;:145;;;;;;;;;;;;;;;;;49798:18;49818:20;:9;:18;:20::i;:::-;49781:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49722:145;49715:152;;49491:384;;;:::o;26143:154::-;26240:4;26257:18;:25;26276:5;26257:25;;;;;;;;;;;;;;;:35;26283:8;26257:35;;;;;;;;;;;;;;;;;;;;;;;;;26250:42;;26143:154;;;;:::o;42005:175::-;41404:12;:10;:12::i;:::-;41393:23;;:7;:5;:7::i;:::-;:23;;;41385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42107:1:::1;42087:22;;:8;:22;;;;42079:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42156:19;42166:8;42156:9;:19::i;:::-;42005:175:::0;:::o;23367:262::-;23469:4;23503:25;23488:40;;;:11;:40;;;;:94;;;;23549:33;23534:48;;;:11;:48;;;;23488:94;:136;;;;23588:36;23612:11;23588:23;:36::i;:::-;23488:136;23479:145;;23367:262;;;:::o;21951:88::-;22004:7;22024:10;22017:17;;21951:88;:::o;28540:117::-;28605:4;28650:1;28622:30;;:7;:16;28630:7;28622:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28615:37;;28540:117;;;:::o;31970:157::-;32065:2;32038:15;:24;32054:7;32038:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32114:7;32110:2;32076:46;;32085:23;32100:7;32085:14;:23::i;:::-;32076:46;;;;;;;;;;;;31970:157;;:::o;28794:324::-;28887:4;28905:16;28913:7;28905;:16::i;:::-;28897:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28974:13;28990:23;29005:7;28990:14;:23::i;:::-;28974:39;;29036:5;29025:16;;:7;:16;;;:51;;;;29069:7;29045:31;;:20;29057:7;29045:11;:20::i;:::-;:31;;;29025:51;:87;;;;29080:32;29097:5;29104:7;29080:16;:32::i;:::-;29025:87;29017:96;;;28794:324;;;;:::o;31386:488::-;31514:4;31487:31;;:23;31502:7;31487:14;:23::i;:::-;:31;;;31479:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31590:1;31576:16;;:2;:16;;;;31568:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31639:39;31660:4;31666:2;31670:7;31639:20;:39::i;:::-;31729:29;31746:1;31750:7;31729:8;:29::i;:::-;31783:1;31764:9;:15;31774:4;31764:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31805:1;31788:9;:13;31798:2;31788:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31829:2;31810:7;:16;31818:7;31810:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31861:7;31857:2;31842:27;;31851:4;31842:27;;;;;;;;;;;;31386:488;;;:::o;46524:1366::-;46608:7;46687:33;46723:27;;;;;;;;;;;:44;;;46768:3;46723:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46687:85;;46868:1;46841:16;:23;:28;46838:95;;;46907:14;;46892:12;:29;;;;:::i;:::-;46885:36;;;;;46838:95;47047:15;47086:9;47081:602;47105:16;:23;47101:1;:27;47081:602;;;47149:25;47177:16;47194:1;47177:19;;;;;;;;:::i;:::-;;;;;;;;47149:47;;47215:27;;;;;;;;;;;:36;;;47252:17;47215:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47211:460;;;47389:23;:42;47413:17;47389:42;;;;;;;;;;;;;;;;;;;;;47384:236;;47500:4;47455:23;:42;47479:17;47455:42;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;47547:1;47531:12;:17;47527:73;;;47557:1;47550:8;;;;;;;;47527:73;47586:14;;;;;:::i;:::-;;;;47384:236;47211:460;;;47667:4;47654:17;;47211:460;47134:549;47130:3;;;;;:::i;:::-;;;;47081:602;;;;47806:10;:76;;47868:14;;47853:12;:29;;;;:::i;:::-;47806:76;;;47834:16;;47819:12;:31;;;;:::i;:::-;47806:76;47799:83;;;;46524:1366;;;;;:::o;47898:217::-;47978:9;47973:135;47997:12;47993:1;:16;47973:135;;;48031:19;:7;:17;:19::i;:::-;48065:31;48075:3;48080:15;:13;:15::i;:::-;48065:9;:31::i;:::-;48011:3;;;;;:::i;:::-;;;;47973:135;;;;47898:217;;:::o;43062:104::-;43127:7;43147;:14;;;43140:21;;43062:104;;;:::o;42185:149::-;42234:16;42253:6;;;;;;;;;;;42234:25;;42272:8;42263:6;;:17;;;;;;;;;;;;;;;;;;42320:8;42289:40;;42310:8;42289:40;;;;;;;;;;;;42230:104;42185:149;:::o;27994:267::-;28113:28;28123:4;28129:2;28133:7;28113:9;:28::i;:::-;28153:48;28176:4;28182:2;28186:7;28195:5;28153:22;:48::i;:::-;28145:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27994:267;;;;:::o;11223:570::-;11279:13;11488:1;11479:5;:10;11475:35;;;11495:10;;;;;;;;;;;;;;;;;;;;;11475:35;11513:12;11528:5;11513:20;;11537:14;11555:49;11570:1;11562:4;:9;11555:49;;11577:8;;;;;:::i;:::-;;;;11597:2;11589:10;;;;;:::i;:::-;;;11555:49;;;11607:19;11639:6;11629:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11607:39;;11650:114;11666:1;11657:5;:10;11650:114;;11683:1;11673:11;;;;;:::i;:::-;;;11739:2;11731:5;:10;;;;:::i;:::-;11718:2;:24;;;;:::i;:::-;11705:39;;11688:6;11695;11688:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11757:2;11748:11;;;;;:::i;:::-;;;11650:114;;;11781:6;11767:21;;;;;11223:570;;;;:::o;10775:147::-;10860:4;10892:25;10877:40;;;:11;:40;;;;10870:47;;10775:147;;;:::o;36243:469::-;36356:45;36383:4;36389:2;36393:7;36356:26;:45::i;:::-;36427:1;36411:18;;:4;:18;;;36407:151;;;36435:40;36467:7;36435:31;:40::i;:::-;36407:151;;;36498:2;36490:10;;:4;:10;;;36486:72;;36506:47;36539:4;36545:7;36506:32;:47::i;:::-;36486:72;36407:151;36579:1;36565:16;;:2;:16;;;36561:147;;;36587:45;36624:7;36587:36;:45::i;:::-;36561:147;;;36653:4;36647:10;;:2;:10;;;36643:65;;36663:40;36691:2;36695:7;36663:27;:40::i;:::-;36643:65;36561:147;36243:469;;;:::o;43171:99::-;43260:1;43242:7;:14;;;:19;;;;;;;;;;;43171:99;:::o;29418:100::-;29487:26;29497:2;29501:7;29487:26;;;;;;;;;;;;:9;:26::i;:::-;29418:100;;:::o;32650:560::-;32774:4;32788:15;:2;:13;;;:15::i;:::-;32784:422;;;32829:2;32813:36;;;32850:12;:10;:12::i;:::-;32864:4;32870:7;32879:5;32813:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32809:367;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33031:1;33014:6;:13;:18;33010:162;;;33038:60;;;;;;;;;;:::i;:::-;;;;;;;;33010:162;33156:6;33150:13;33141:6;33137:2;33133:15;33126:38;32809:367;32931:41;;;32921:51;;;:6;:51;;;;32914:58;;;;;32784:422;33197:4;33190:11;;32650:560;;;;;;;:::o;33724:102::-;;;;:::o;37371:147::-;37468:10;:17;;;;37441:15;:24;37457:7;37441:24;;;;;;;;;;;:44;;;;37489:10;37505:7;37489:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37371:147;:::o;38111:882::-;38356:22;38406:1;38381:22;38398:4;38381:16;:22::i;:::-;:26;;;;:::i;:::-;38356:51;;38411:18;38432:17;:26;38450:7;38432:26;;;;;;;;;;;;38411:47;;38565:14;38551:10;:28;38547:288;;38585:19;38607:12;:18;38620:4;38607:18;;;;;;;;;;;;;;;:34;38626:14;38607:34;;;;;;;;;;;;38585:56;;38680:11;38647:12;:18;38660:4;38647:18;;;;;;;;;;;;;;;:30;38666:10;38647:30;;;;;;;;;;;:44;;;;38786:10;38753:17;:30;38771:11;38753:30;;;;;;;;;;;:43;;;;38581:254;38547:288;38917:17;:26;38935:7;38917:26;;;;;;;;;;;38910:33;;;38954:12;:18;38967:4;38954:18;;;;;;;;;;;;;;;:34;38973:14;38954:34;;;;;;;;;;;38947:41;;;38192:801;;38111:882;;:::o;39266:985::-;39498:22;39543:1;39523:10;:17;;;;:21;;;;:::i;:::-;39498:46;;39548:18;39569:15;:24;39585:7;39569:24;;;;;;;;;;;;39548:45;;39892:19;39914:10;39925:14;39914:26;;;;;;;;:::i;:::-;;;;;;;;;;39892:48;;39971:11;39946:10;39957;39946:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40075:10;40044:15;:28;40060:11;40044:28;;;;;;;;;;;:41;;;;40202:15;:24;40218:7;40202:24;;;;;;;;;;;40195:31;;;40230:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39337:914;;;39266:985;:::o;36991:197::-;37069:14;37086:20;37103:2;37086:16;:20::i;:::-;37069:37;;37137:7;37110:12;:16;37123:2;37110:16;;;;;;;;;;;;;;;:24;37127:6;37110:24;;;;;;;;;;;:34;;;;37177:6;37148:17;:26;37166:7;37148:26;;;;;;;;;;;:35;;;;37065:123;36991:197;;:::o;29727:251::-;29826:18;29832:2;29836:7;29826:5;:18::i;:::-;29859:54;29890:1;29894:2;29898:7;29907:5;29859:22;:54::i;:::-;29848:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;29727:251;;;:::o;13334:324::-;13394:4;13574:12;13623:7;13611:20;13603:28;;13652:1;13645:4;:8;13638:15;;;13334:324;;;:::o;30264:337::-;30351:1;30337:16;;:2;:16;;;;30329:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30403:16;30411:7;30403;:16::i;:::-;30402:17;30394:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30458:45;30487:1;30491:2;30495:7;30458:20;:45::i;:::-;30526:1;30509:9;:13;30519:2;30509:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30550:2;30531:7;:16;30539:7;30531:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30588:7;30584:2;30563:33;;30580:1;30563:33;;;;;;;;;;;;30264:337;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:744:1:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:143;;;415:79;;:::i;:::-;361:143;528:1;513:249;538:6;535:1;532:13;513:249;;;606:3;635:48;679:3;667:10;635:48;:::i;:::-;630:3;623:61;713:4;708:3;704:14;697:21;;747:4;742:3;738:14;731:21;;573:189;560:1;557;553:9;548:14;;513:249;;;517:14;137:631;;24:744;;;;;:::o;774:410::-;851:5;876:65;892:48;933:6;892:48;:::i;:::-;876:65;:::i;:::-;867:74;;964:6;957:5;950:21;1002:4;995:5;991:16;1040:3;1031:6;1026:3;1022:16;1019:25;1016:112;;;1047:79;;:::i;:::-;1016:112;1137:41;1171:6;1166:3;1161;1137:41;:::i;:::-;857:327;774:410;;;;;:::o;1190:412::-;1268:5;1293:66;1309:49;1351:6;1309:49;:::i;:::-;1293:66;:::i;:::-;1284:75;;1382:6;1375:5;1368:21;1420:4;1413:5;1409:16;1458:3;1449:6;1444:3;1440:16;1437:25;1434:112;;;1465:79;;:::i;:::-;1434:112;1555:41;1589:6;1584:3;1579;1555:41;:::i;:::-;1274:328;1190:412;;;;;:::o;1608:139::-;1654:5;1692:6;1679:20;1670:29;;1708:33;1735:5;1708:33;:::i;:::-;1608:139;;;;:::o;1770:385::-;1852:5;1901:3;1894:4;1886:6;1882:17;1878:27;1868:122;;1909:79;;:::i;:::-;1868:122;2019:6;2013:13;2044:105;2145:3;2137:6;2130:4;2122:6;2118:17;2044:105;:::i;:::-;2035:114;;1858:297;1770:385;;;;:::o;2161:133::-;2204:5;2242:6;2229:20;2220:29;;2258:30;2282:5;2258:30;:::i;:::-;2161:133;;;;:::o;2300:137::-;2354:5;2385:6;2379:13;2370:22;;2401:30;2425:5;2401:30;:::i;:::-;2300:137;;;;:::o;2443:::-;2488:5;2526:6;2513:20;2504:29;;2542:32;2568:5;2542:32;:::i;:::-;2443:137;;;;:::o;2586:141::-;2642:5;2673:6;2667:13;2658:22;;2689:32;2715:5;2689:32;:::i;:::-;2586:141;;;;:::o;2746:338::-;2801:5;2850:3;2843:4;2835:6;2831:17;2827:27;2817:122;;2858:79;;:::i;:::-;2817:122;2975:6;2962:20;3000:78;3074:3;3066:6;3059:4;3051:6;3047:17;3000:78;:::i;:::-;2991:87;;2807:277;2746:338;;;;:::o;3104:340::-;3160:5;3209:3;3202:4;3194:6;3190:17;3186:27;3176:122;;3217:79;;:::i;:::-;3176:122;3334:6;3321:20;3359:79;3434:3;3426:6;3419:4;3411:6;3407:17;3359:79;:::i;:::-;3350:88;;3166:278;3104:340;;;;:::o;3450:139::-;3496:5;3534:6;3521:20;3512:29;;3550:33;3577:5;3550:33;:::i;:::-;3450:139;;;;:::o;3595:143::-;3652:5;3683:6;3677:13;3668:22;;3699:33;3726:5;3699:33;:::i;:::-;3595:143;;;;:::o;3744:329::-;3803:6;3852:2;3840:9;3831:7;3827:23;3823:32;3820:119;;;3858:79;;:::i;:::-;3820:119;3978:1;4003:53;4048:7;4039:6;4028:9;4024:22;4003:53;:::i;:::-;3993:63;;3949:117;3744:329;;;;:::o;4079:474::-;4147:6;4155;4204:2;4192:9;4183:7;4179:23;4175:32;4172:119;;;4210:79;;:::i;:::-;4172:119;4330:1;4355:53;4400:7;4391:6;4380:9;4376:22;4355:53;:::i;:::-;4345:63;;4301:117;4457:2;4483:53;4528:7;4519:6;4508:9;4504:22;4483:53;:::i;:::-;4473:63;;4428:118;4079:474;;;;;:::o;4559:619::-;4636:6;4644;4652;4701:2;4689:9;4680:7;4676:23;4672:32;4669:119;;;4707:79;;:::i;:::-;4669:119;4827:1;4852:53;4897:7;4888:6;4877:9;4873:22;4852:53;:::i;:::-;4842:63;;4798:117;4954:2;4980:53;5025:7;5016:6;5005:9;5001:22;4980:53;:::i;:::-;4970:63;;4925:118;5082:2;5108:53;5153:7;5144:6;5133:9;5129:22;5108:53;:::i;:::-;5098:63;;5053:118;4559:619;;;;;:::o;5184:943::-;5279:6;5287;5295;5303;5352:3;5340:9;5331:7;5327:23;5323:33;5320:120;;;5359:79;;:::i;:::-;5320:120;5479:1;5504:53;5549:7;5540:6;5529:9;5525:22;5504:53;:::i;:::-;5494:63;;5450:117;5606:2;5632:53;5677:7;5668:6;5657:9;5653:22;5632:53;:::i;:::-;5622:63;;5577:118;5734:2;5760:53;5805:7;5796:6;5785:9;5781:22;5760:53;:::i;:::-;5750:63;;5705:118;5890:2;5879:9;5875:18;5862:32;5921:18;5913:6;5910:30;5907:117;;;5943:79;;:::i;:::-;5907:117;6048:62;6102:7;6093:6;6082:9;6078:22;6048:62;:::i;:::-;6038:72;;5833:287;5184:943;;;;;;;:::o;6133:468::-;6198:6;6206;6255:2;6243:9;6234:7;6230:23;6226:32;6223:119;;;6261:79;;:::i;:::-;6223:119;6381:1;6406:53;6451:7;6442:6;6431:9;6427:22;6406:53;:::i;:::-;6396:63;;6352:117;6508:2;6534:50;6576:7;6567:6;6556:9;6552:22;6534:50;:::i;:::-;6524:60;;6479:115;6133:468;;;;;:::o;6607:474::-;6675:6;6683;6732:2;6720:9;6711:7;6707:23;6703:32;6700:119;;;6738:79;;:::i;:::-;6700:119;6858:1;6883:53;6928:7;6919:6;6908:9;6904:22;6883:53;:::i;:::-;6873:63;;6829:117;6985:2;7011:53;7056:7;7047:6;7036:9;7032:22;7011:53;:::i;:::-;7001:63;;6956:118;6607:474;;;;;:::o;7087:554::-;7182:6;7231:2;7219:9;7210:7;7206:23;7202:32;7199:119;;;7237:79;;:::i;:::-;7199:119;7378:1;7367:9;7363:17;7357:24;7408:18;7400:6;7397:30;7394:117;;;7430:79;;:::i;:::-;7394:117;7535:89;7616:7;7607:6;7596:9;7592:22;7535:89;:::i;:::-;7525:99;;7328:306;7087:554;;;;:::o;7647:323::-;7703:6;7752:2;7740:9;7731:7;7727:23;7723:32;7720:119;;;7758:79;;:::i;:::-;7720:119;7878:1;7903:50;7945:7;7936:6;7925:9;7921:22;7903:50;:::i;:::-;7893:60;;7849:114;7647:323;;;;:::o;7976:345::-;8043:6;8092:2;8080:9;8071:7;8067:23;8063:32;8060:119;;;8098:79;;:::i;:::-;8060:119;8218:1;8243:61;8296:7;8287:6;8276:9;8272:22;8243:61;:::i;:::-;8233:71;;8189:125;7976:345;;;;:::o;8327:327::-;8385:6;8434:2;8422:9;8413:7;8409:23;8405:32;8402:119;;;8440:79;;:::i;:::-;8402:119;8560:1;8585:52;8629:7;8620:6;8609:9;8605:22;8585:52;:::i;:::-;8575:62;;8531:116;8327:327;;;;:::o;8660:349::-;8729:6;8778:2;8766:9;8757:7;8753:23;8749:32;8746:119;;;8784:79;;:::i;:::-;8746:119;8904:1;8929:63;8984:7;8975:6;8964:9;8960:22;8929:63;:::i;:::-;8919:73;;8875:127;8660:349;;;;:::o;9015:509::-;9084:6;9133:2;9121:9;9112:7;9108:23;9104:32;9101:119;;;9139:79;;:::i;:::-;9101:119;9287:1;9276:9;9272:17;9259:31;9317:18;9309:6;9306:30;9303:117;;;9339:79;;:::i;:::-;9303:117;9444:63;9499:7;9490:6;9479:9;9475:22;9444:63;:::i;:::-;9434:73;;9230:287;9015:509;;;;:::o;9530:329::-;9589:6;9638:2;9626:9;9617:7;9613:23;9609:32;9606:119;;;9644:79;;:::i;:::-;9606:119;9764:1;9789:53;9834:7;9825:6;9814:9;9810:22;9789:53;:::i;:::-;9779:63;;9735:117;9530:329;;;;:::o;9865:179::-;9934:10;9955:46;9997:3;9989:6;9955:46;:::i;:::-;10033:4;10028:3;10024:14;10010:28;;9865:179;;;;:::o;10050:118::-;10137:24;10155:5;10137:24;:::i;:::-;10132:3;10125:37;10050:118;;:::o;10204:732::-;10323:3;10352:54;10400:5;10352:54;:::i;:::-;10422:86;10501:6;10496:3;10422:86;:::i;:::-;10415:93;;10532:56;10582:5;10532:56;:::i;:::-;10611:7;10642:1;10627:284;10652:6;10649:1;10646:13;10627:284;;;10728:6;10722:13;10755:63;10814:3;10799:13;10755:63;:::i;:::-;10748:70;;10841:60;10894:6;10841:60;:::i;:::-;10831:70;;10687:224;10674:1;10671;10667:9;10662:14;;10627:284;;;10631:14;10927:3;10920:10;;10328:608;;;10204:732;;;;:::o;10942:109::-;11023:21;11038:5;11023:21;:::i;:::-;11018:3;11011:34;10942:109;;:::o;11057:360::-;11143:3;11171:38;11203:5;11171:38;:::i;:::-;11225:70;11288:6;11283:3;11225:70;:::i;:::-;11218:77;;11304:52;11349:6;11344:3;11337:4;11330:5;11326:16;11304:52;:::i;:::-;11381:29;11403:6;11381:29;:::i;:::-;11376:3;11372:39;11365:46;;11147:270;11057:360;;;;:::o;11423:364::-;11511:3;11539:39;11572:5;11539:39;:::i;:::-;11594:71;11658:6;11653:3;11594:71;:::i;:::-;11587:78;;11674:52;11719:6;11714:3;11707:4;11700:5;11696:16;11674:52;:::i;:::-;11751:29;11773:6;11751:29;:::i;:::-;11746:3;11742:39;11735:46;;11515:272;11423:364;;;;:::o;11793:377::-;11899:3;11927:39;11960:5;11927:39;:::i;:::-;11982:89;12064:6;12059:3;11982:89;:::i;:::-;11975:96;;12080:52;12125:6;12120:3;12113:4;12106:5;12102:16;12080:52;:::i;:::-;12157:6;12152:3;12148:16;12141:23;;11903:267;11793:377;;;;:::o;12200:845::-;12303:3;12340:5;12334:12;12369:36;12395:9;12369:36;:::i;:::-;12421:89;12503:6;12498:3;12421:89;:::i;:::-;12414:96;;12541:1;12530:9;12526:17;12557:1;12552:137;;;;12703:1;12698:341;;;;12519:520;;12552:137;12636:4;12632:9;12621;12617:25;12612:3;12605:38;12672:6;12667:3;12663:16;12656:23;;12552:137;;12698:341;12765:38;12797:5;12765:38;:::i;:::-;12825:1;12839:154;12853:6;12850:1;12847:13;12839:154;;;12927:7;12921:14;12917:1;12912:3;12908:11;12901:35;12977:1;12968:7;12964:15;12953:26;;12875:4;12872:1;12868:12;12863:17;;12839:154;;;13022:6;13017:3;13013:16;13006:23;;12705:334;;12519:520;;12307:738;;12200:845;;;;:::o;13051:366::-;13193:3;13214:67;13278:2;13273:3;13214:67;:::i;:::-;13207:74;;13290:93;13379:3;13290:93;:::i;:::-;13408:2;13403:3;13399:12;13392:19;;13051:366;;;:::o;13423:::-;13565:3;13586:67;13650:2;13645:3;13586:67;:::i;:::-;13579:74;;13662:93;13751:3;13662:93;:::i;:::-;13780:2;13775:3;13771:12;13764:19;;13423:366;;;:::o;13795:::-;13937:3;13958:67;14022:2;14017:3;13958:67;:::i;:::-;13951:74;;14034:93;14123:3;14034:93;:::i;:::-;14152:2;14147:3;14143:12;14136:19;;13795:366;;;:::o;14167:::-;14309:3;14330:67;14394:2;14389:3;14330:67;:::i;:::-;14323:74;;14406:93;14495:3;14406:93;:::i;:::-;14524:2;14519:3;14515:12;14508:19;;14167:366;;;:::o;14539:::-;14681:3;14702:67;14766:2;14761:3;14702:67;:::i;:::-;14695:74;;14778:93;14867:3;14778:93;:::i;:::-;14896:2;14891:3;14887:12;14880:19;;14539:366;;;:::o;14911:::-;15053:3;15074:67;15138:2;15133:3;15074:67;:::i;:::-;15067:74;;15150:93;15239:3;15150:93;:::i;:::-;15268:2;15263:3;15259:12;15252:19;;14911:366;;;:::o;15283:::-;15425:3;15446:67;15510:2;15505:3;15446:67;:::i;:::-;15439:74;;15522:93;15611:3;15522:93;:::i;:::-;15640:2;15635:3;15631:12;15624:19;;15283:366;;;:::o;15655:::-;15797:3;15818:67;15882:2;15877:3;15818:67;:::i;:::-;15811:74;;15894:93;15983:3;15894:93;:::i;:::-;16012:2;16007:3;16003:12;15996:19;;15655:366;;;:::o;16027:::-;16169:3;16190:67;16254:2;16249:3;16190:67;:::i;:::-;16183:74;;16266:93;16355:3;16266:93;:::i;:::-;16384:2;16379:3;16375:12;16368:19;;16027:366;;;:::o;16399:::-;16541:3;16562:67;16626:2;16621:3;16562:67;:::i;:::-;16555:74;;16638:93;16727:3;16638:93;:::i;:::-;16756:2;16751:3;16747:12;16740:19;;16399:366;;;:::o;16771:::-;16913:3;16934:67;16998:2;16993:3;16934:67;:::i;:::-;16927:74;;17010:93;17099:3;17010:93;:::i;:::-;17128:2;17123:3;17119:12;17112:19;;16771:366;;;:::o;17143:::-;17285:3;17306:67;17370:2;17365:3;17306:67;:::i;:::-;17299:74;;17382:93;17471:3;17382:93;:::i;:::-;17500:2;17495:3;17491:12;17484:19;;17143:366;;;:::o;17515:::-;17657:3;17678:67;17742:2;17737:3;17678:67;:::i;:::-;17671:74;;17754:93;17843:3;17754:93;:::i;:::-;17872:2;17867:3;17863:12;17856:19;;17515:366;;;:::o;17887:::-;18029:3;18050:67;18114:2;18109:3;18050:67;:::i;:::-;18043:74;;18126:93;18215:3;18126:93;:::i;:::-;18244:2;18239:3;18235:12;18228:19;;17887:366;;;:::o;18259:::-;18401:3;18422:67;18486:2;18481:3;18422:67;:::i;:::-;18415:74;;18498:93;18587:3;18498:93;:::i;:::-;18616:2;18611:3;18607:12;18600:19;;18259:366;;;:::o;18631:400::-;18791:3;18812:84;18894:1;18889:3;18812:84;:::i;:::-;18805:91;;18905:93;18994:3;18905:93;:::i;:::-;19023:1;19018:3;19014:11;19007:18;;18631:400;;;:::o;19037:366::-;19179:3;19200:67;19264:2;19259:3;19200:67;:::i;:::-;19193:74;;19276:93;19365:3;19276:93;:::i;:::-;19394:2;19389:3;19385:12;19378:19;;19037:366;;;:::o;19409:::-;19551:3;19572:67;19636:2;19631:3;19572:67;:::i;:::-;19565:74;;19648:93;19737:3;19648:93;:::i;:::-;19766:2;19761:3;19757:12;19750:19;;19409:366;;;:::o;19781:::-;19923:3;19944:67;20008:2;20003:3;19944:67;:::i;:::-;19937:74;;20020:93;20109:3;20020:93;:::i;:::-;20138:2;20133:3;20129:12;20122:19;;19781:366;;;:::o;20153:::-;20295:3;20316:67;20380:2;20375:3;20316:67;:::i;:::-;20309:74;;20392:93;20481:3;20392:93;:::i;:::-;20510:2;20505:3;20501:12;20494:19;;20153:366;;;:::o;20525:::-;20667:3;20688:67;20752:2;20747:3;20688:67;:::i;:::-;20681:74;;20764:93;20853:3;20764:93;:::i;:::-;20882:2;20877:3;20873:12;20866:19;;20525:366;;;:::o;20897:::-;21039:3;21060:67;21124:2;21119:3;21060:67;:::i;:::-;21053:74;;21136:93;21225:3;21136:93;:::i;:::-;21254:2;21249:3;21245:12;21238:19;;20897:366;;;:::o;21269:398::-;21428:3;21449:83;21530:1;21525:3;21449:83;:::i;:::-;21442:90;;21541:93;21630:3;21541:93;:::i;:::-;21659:1;21654:3;21650:11;21643:18;;21269:398;;;:::o;21673:366::-;21815:3;21836:67;21900:2;21895:3;21836:67;:::i;:::-;21829:74;;21912:93;22001:3;21912:93;:::i;:::-;22030:2;22025:3;22021:12;22014:19;;21673:366;;;:::o;22045:::-;22187:3;22208:67;22272:2;22267:3;22208:67;:::i;:::-;22201:74;;22284:93;22373:3;22284:93;:::i;:::-;22402:2;22397:3;22393:12;22386:19;;22045:366;;;:::o;22417:::-;22559:3;22580:67;22644:2;22639:3;22580:67;:::i;:::-;22573:74;;22656:93;22745:3;22656:93;:::i;:::-;22774:2;22769:3;22765:12;22758:19;;22417:366;;;:::o;22789:::-;22931:3;22952:67;23016:2;23011:3;22952:67;:::i;:::-;22945:74;;23028:93;23117:3;23028:93;:::i;:::-;23146:2;23141:3;23137:12;23130:19;;22789:366;;;:::o;23161:108::-;23238:24;23256:5;23238:24;:::i;:::-;23233:3;23226:37;23161:108;;:::o;23275:118::-;23362:24;23380:5;23362:24;:::i;:::-;23357:3;23350:37;23275:118;;:::o;23399:695::-;23677:3;23699:92;23787:3;23778:6;23699:92;:::i;:::-;23692:99;;23808:95;23899:3;23890:6;23808:95;:::i;:::-;23801:102;;23920:148;24064:3;23920:148;:::i;:::-;23913:155;;24085:3;24078:10;;23399:695;;;;;:::o;24100:379::-;24284:3;24306:147;24449:3;24306:147;:::i;:::-;24299:154;;24470:3;24463:10;;24100:379;;;:::o;24485:222::-;24578:4;24616:2;24605:9;24601:18;24593:26;;24629:71;24697:1;24686:9;24682:17;24673:6;24629:71;:::i;:::-;24485:222;;;;:::o;24713:640::-;24908:4;24946:3;24935:9;24931:19;24923:27;;24960:71;25028:1;25017:9;25013:17;25004:6;24960:71;:::i;:::-;25041:72;25109:2;25098:9;25094:18;25085:6;25041:72;:::i;:::-;25123;25191:2;25180:9;25176:18;25167:6;25123:72;:::i;:::-;25242:9;25236:4;25232:20;25227:2;25216:9;25212:18;25205:48;25270:76;25341:4;25332:6;25270:76;:::i;:::-;25262:84;;24713:640;;;;;;;:::o;25359:373::-;25502:4;25540:2;25529:9;25525:18;25517:26;;25589:9;25583:4;25579:20;25575:1;25564:9;25560:17;25553:47;25617:108;25720:4;25711:6;25617:108;:::i;:::-;25609:116;;25359:373;;;;:::o;25738:210::-;25825:4;25863:2;25852:9;25848:18;25840:26;;25876:65;25938:1;25927:9;25923:17;25914:6;25876:65;:::i;:::-;25738:210;;;;:::o;25954:313::-;26067:4;26105:2;26094:9;26090:18;26082:26;;26154:9;26148:4;26144:20;26140:1;26129:9;26125:17;26118:47;26182:78;26255:4;26246:6;26182:78;:::i;:::-;26174:86;;25954:313;;;;:::o;26273:419::-;26439:4;26477:2;26466:9;26462:18;26454:26;;26526:9;26520:4;26516:20;26512:1;26501:9;26497:17;26490:47;26554:131;26680:4;26554:131;:::i;:::-;26546:139;;26273:419;;;:::o;26698:::-;26864:4;26902:2;26891:9;26887:18;26879:26;;26951:9;26945:4;26941:20;26937:1;26926:9;26922:17;26915:47;26979:131;27105:4;26979:131;:::i;:::-;26971:139;;26698:419;;;:::o;27123:::-;27289:4;27327:2;27316:9;27312:18;27304:26;;27376:9;27370:4;27366:20;27362:1;27351:9;27347:17;27340:47;27404:131;27530:4;27404:131;:::i;:::-;27396:139;;27123:419;;;:::o;27548:::-;27714:4;27752:2;27741:9;27737:18;27729:26;;27801:9;27795:4;27791:20;27787:1;27776:9;27772:17;27765:47;27829:131;27955:4;27829:131;:::i;:::-;27821:139;;27548:419;;;:::o;27973:::-;28139:4;28177:2;28166:9;28162:18;28154:26;;28226:9;28220:4;28216:20;28212:1;28201:9;28197:17;28190:47;28254:131;28380:4;28254:131;:::i;:::-;28246:139;;27973:419;;;:::o;28398:::-;28564:4;28602:2;28591:9;28587:18;28579:26;;28651:9;28645:4;28641:20;28637:1;28626:9;28622:17;28615:47;28679:131;28805:4;28679:131;:::i;:::-;28671:139;;28398:419;;;:::o;28823:::-;28989:4;29027:2;29016:9;29012:18;29004:26;;29076:9;29070:4;29066:20;29062:1;29051:9;29047:17;29040:47;29104:131;29230:4;29104:131;:::i;:::-;29096:139;;28823:419;;;:::o;29248:::-;29414:4;29452:2;29441:9;29437:18;29429:26;;29501:9;29495:4;29491:20;29487:1;29476:9;29472:17;29465:47;29529:131;29655:4;29529:131;:::i;:::-;29521:139;;29248:419;;;:::o;29673:::-;29839:4;29877:2;29866:9;29862:18;29854:26;;29926:9;29920:4;29916:20;29912:1;29901:9;29897:17;29890:47;29954:131;30080:4;29954:131;:::i;:::-;29946:139;;29673:419;;;:::o;30098:::-;30264:4;30302:2;30291:9;30287:18;30279:26;;30351:9;30345:4;30341:20;30337:1;30326:9;30322:17;30315:47;30379:131;30505:4;30379:131;:::i;:::-;30371:139;;30098:419;;;:::o;30523:::-;30689:4;30727:2;30716:9;30712:18;30704:26;;30776:9;30770:4;30766:20;30762:1;30751:9;30747:17;30740:47;30804:131;30930:4;30804:131;:::i;:::-;30796:139;;30523:419;;;:::o;30948:::-;31114:4;31152:2;31141:9;31137:18;31129:26;;31201:9;31195:4;31191:20;31187:1;31176:9;31172:17;31165:47;31229:131;31355:4;31229:131;:::i;:::-;31221:139;;30948:419;;;:::o;31373:::-;31539:4;31577:2;31566:9;31562:18;31554:26;;31626:9;31620:4;31616:20;31612:1;31601:9;31597:17;31590:47;31654:131;31780:4;31654:131;:::i;:::-;31646:139;;31373:419;;;:::o;31798:::-;31964:4;32002:2;31991:9;31987:18;31979:26;;32051:9;32045:4;32041:20;32037:1;32026:9;32022:17;32015:47;32079:131;32205:4;32079:131;:::i;:::-;32071:139;;31798:419;;;:::o;32223:::-;32389:4;32427:2;32416:9;32412:18;32404:26;;32476:9;32470:4;32466:20;32462:1;32451:9;32447:17;32440:47;32504:131;32630:4;32504:131;:::i;:::-;32496:139;;32223:419;;;:::o;32648:::-;32814:4;32852:2;32841:9;32837:18;32829:26;;32901:9;32895:4;32891:20;32887:1;32876:9;32872:17;32865:47;32929:131;33055:4;32929:131;:::i;:::-;32921:139;;32648:419;;;:::o;33073:::-;33239:4;33277:2;33266:9;33262:18;33254:26;;33326:9;33320:4;33316:20;33312:1;33301:9;33297:17;33290:47;33354:131;33480:4;33354:131;:::i;:::-;33346:139;;33073:419;;;:::o;33498:::-;33664:4;33702:2;33691:9;33687:18;33679:26;;33751:9;33745:4;33741:20;33737:1;33726:9;33722:17;33715:47;33779:131;33905:4;33779:131;:::i;:::-;33771:139;;33498:419;;;:::o;33923:::-;34089:4;34127:2;34116:9;34112:18;34104:26;;34176:9;34170:4;34166:20;34162:1;34151:9;34147:17;34140:47;34204:131;34330:4;34204:131;:::i;:::-;34196:139;;33923:419;;;:::o;34348:::-;34514:4;34552:2;34541:9;34537:18;34529:26;;34601:9;34595:4;34591:20;34587:1;34576:9;34572:17;34565:47;34629:131;34755:4;34629:131;:::i;:::-;34621:139;;34348:419;;;:::o;34773:::-;34939:4;34977:2;34966:9;34962:18;34954:26;;35026:9;35020:4;35016:20;35012:1;35001:9;34997:17;34990:47;35054:131;35180:4;35054:131;:::i;:::-;35046:139;;34773:419;;;:::o;35198:::-;35364:4;35402:2;35391:9;35387:18;35379:26;;35451:9;35445:4;35441:20;35437:1;35426:9;35422:17;35415:47;35479:131;35605:4;35479:131;:::i;:::-;35471:139;;35198:419;;;:::o;35623:::-;35789:4;35827:2;35816:9;35812:18;35804:26;;35876:9;35870:4;35866:20;35862:1;35851:9;35847:17;35840:47;35904:131;36030:4;35904:131;:::i;:::-;35896:139;;35623:419;;;:::o;36048:::-;36214:4;36252:2;36241:9;36237:18;36229:26;;36301:9;36295:4;36291:20;36287:1;36276:9;36272:17;36265:47;36329:131;36455:4;36329:131;:::i;:::-;36321:139;;36048:419;;;:::o;36473:::-;36639:4;36677:2;36666:9;36662:18;36654:26;;36726:9;36720:4;36716:20;36712:1;36701:9;36697:17;36690:47;36754:131;36880:4;36754:131;:::i;:::-;36746:139;;36473:419;;;:::o;36898:222::-;36991:4;37029:2;37018:9;37014:18;37006:26;;37042:71;37110:1;37099:9;37095:17;37086:6;37042:71;:::i;:::-;36898:222;;;;:::o;37126:129::-;37160:6;37187:20;;:::i;:::-;37177:30;;37216:33;37244:4;37236:6;37216:33;:::i;:::-;37126:129;;;:::o;37261:75::-;37294:6;37327:2;37321:9;37311:19;;37261:75;:::o;37342:311::-;37419:4;37509:18;37501:6;37498:30;37495:56;;;37531:18;;:::i;:::-;37495:56;37581:4;37573:6;37569:17;37561:25;;37641:4;37635;37631:15;37623:23;;37342:311;;;:::o;37659:307::-;37720:4;37810:18;37802:6;37799:30;37796:56;;;37832:18;;:::i;:::-;37796:56;37870:29;37892:6;37870:29;:::i;:::-;37862:37;;37954:4;37948;37944:15;37936:23;;37659:307;;;:::o;37972:308::-;38034:4;38124:18;38116:6;38113:30;38110:56;;;38146:18;;:::i;:::-;38110:56;38184:29;38206:6;38184:29;:::i;:::-;38176:37;;38268:4;38262;38258:15;38250:23;;37972:308;;;:::o;38286:132::-;38353:4;38376:3;38368:11;;38406:4;38401:3;38397:14;38389:22;;38286:132;;;:::o;38424:141::-;38473:4;38496:3;38488:11;;38519:3;38516:1;38509:14;38553:4;38550:1;38540:18;38532:26;;38424:141;;;:::o;38571:114::-;38638:6;38672:5;38666:12;38656:22;;38571:114;;;:::o;38691:98::-;38742:6;38776:5;38770:12;38760:22;;38691:98;;;:::o;38795:99::-;38847:6;38881:5;38875:12;38865:22;;38795:99;;;:::o;38900:113::-;38970:4;39002;38997:3;38993:14;38985:22;;38900:113;;;:::o;39019:184::-;39118:11;39152:6;39147:3;39140:19;39192:4;39187:3;39183:14;39168:29;;39019:184;;;;:::o;39209:168::-;39292:11;39326:6;39321:3;39314:19;39366:4;39361:3;39357:14;39342:29;;39209:168;;;;:::o;39383:147::-;39484:11;39521:3;39506:18;;39383:147;;;;:::o;39536:169::-;39620:11;39654:6;39649:3;39642:19;39694:4;39689:3;39685:14;39670:29;;39536:169;;;;:::o;39711:148::-;39813:11;39850:3;39835:18;;39711:148;;;;:::o;39865:305::-;39905:3;39924:20;39942:1;39924:20;:::i;:::-;39919:25;;39958:20;39976:1;39958:20;:::i;:::-;39953:25;;40112:1;40044:66;40040:74;40037:1;40034:81;40031:107;;;40118:18;;:::i;:::-;40031:107;40162:1;40159;40155:9;40148:16;;39865:305;;;;:::o;40176:185::-;40216:1;40233:20;40251:1;40233:20;:::i;:::-;40228:25;;40267:20;40285:1;40267:20;:::i;:::-;40262:25;;40306:1;40296:35;;40311:18;;:::i;:::-;40296:35;40353:1;40350;40346:9;40341:14;;40176:185;;;;:::o;40367:348::-;40407:7;40430:20;40448:1;40430:20;:::i;:::-;40425:25;;40464:20;40482:1;40464:20;:::i;:::-;40459:25;;40652:1;40584:66;40580:74;40577:1;40574:81;40569:1;40562:9;40555:17;40551:105;40548:131;;;40659:18;;:::i;:::-;40548:131;40707:1;40704;40700:9;40689:20;;40367:348;;;;:::o;40721:191::-;40761:4;40781:20;40799:1;40781:20;:::i;:::-;40776:25;;40815:20;40833:1;40815:20;:::i;:::-;40810:25;;40854:1;40851;40848:8;40845:34;;;40859:18;;:::i;:::-;40845:34;40904:1;40901;40897:9;40889:17;;40721:191;;;;:::o;40918:96::-;40955:7;40984:24;41002:5;40984:24;:::i;:::-;40973:35;;40918:96;;;:::o;41020:90::-;41054:7;41097:5;41090:13;41083:21;41072:32;;41020:90;;;:::o;41116:149::-;41152:7;41192:66;41185:5;41181:78;41170:89;;41116:149;;;:::o;41271:126::-;41308:7;41348:42;41341:5;41337:54;41326:65;;41271:126;;;:::o;41403:77::-;41440:7;41469:5;41458:16;;41403:77;;;:::o;41486:154::-;41570:6;41565:3;41560;41547:30;41632:1;41623:6;41618:3;41614:16;41607:27;41486:154;;;:::o;41646:307::-;41714:1;41724:113;41738:6;41735:1;41732:13;41724:113;;;41823:1;41818:3;41814:11;41808:18;41804:1;41799:3;41795:11;41788:39;41760:2;41757:1;41753:10;41748:15;;41724:113;;;41855:6;41852:1;41849:13;41846:101;;;41935:1;41926:6;41921:3;41917:16;41910:27;41846:101;41695:258;41646:307;;;:::o;41959:171::-;41998:3;42021:24;42039:5;42021:24;:::i;:::-;42012:33;;42067:4;42060:5;42057:15;42054:41;;;42075:18;;:::i;:::-;42054:41;42122:1;42115:5;42111:13;42104:20;;41959:171;;;:::o;42136:320::-;42180:6;42217:1;42211:4;42207:12;42197:22;;42264:1;42258:4;42254:12;42285:18;42275:81;;42341:4;42333:6;42329:17;42319:27;;42275:81;42403:2;42395:6;42392:14;42372:18;42369:38;42366:84;;;42422:18;;:::i;:::-;42366:84;42187:269;42136:320;;;:::o;42462:281::-;42545:27;42567:4;42545:27;:::i;:::-;42537:6;42533:40;42675:6;42663:10;42660:22;42639:18;42627:10;42624:34;42621:62;42618:88;;;42686:18;;:::i;:::-;42618:88;42726:10;42722:2;42715:22;42505:238;42462:281;;:::o;42749:233::-;42788:3;42811:24;42829:5;42811:24;:::i;:::-;42802:33;;42857:66;42850:5;42847:77;42844:103;;;42927:18;;:::i;:::-;42844:103;42974:1;42967:5;42963:13;42956:20;;42749:233;;;:::o;42988:176::-;43020:1;43037:20;43055:1;43037:20;:::i;:::-;43032:25;;43071:20;43089:1;43071:20;:::i;:::-;43066:25;;43110:1;43100:35;;43115:18;;:::i;:::-;43100:35;43156:1;43153;43149:9;43144:14;;42988:176;;;;:::o;43170:180::-;43218:77;43215:1;43208:88;43315:4;43312:1;43305:15;43339:4;43336:1;43329:15;43356:180;43404:77;43401:1;43394:88;43501:4;43498:1;43491:15;43525:4;43522:1;43515:15;43542:180;43590:77;43587:1;43580:88;43687:4;43684:1;43677:15;43711:4;43708:1;43701:15;43728:180;43776:77;43773:1;43766:88;43873:4;43870:1;43863:15;43897:4;43894:1;43887:15;43914:180;43962:77;43959:1;43952:88;44059:4;44056:1;44049:15;44083:4;44080:1;44073:15;44100:180;44148:77;44145:1;44138:88;44245:4;44242:1;44235:15;44269:4;44266:1;44259:15;44286:117;44395:1;44392;44385:12;44409:117;44518:1;44515;44508:12;44532:117;44641:1;44638;44631:12;44655:117;44764:1;44761;44754:12;44778:117;44887:1;44884;44877:12;44901:102;44942:6;44993:2;44989:7;44984:2;44977:5;44973:14;44969:28;44959:38;;44901:102;;;:::o;45009:222::-;45149:34;45145:1;45137:6;45133:14;45126:58;45218:5;45213:2;45205:6;45201:15;45194:30;45009:222;:::o;45237:169::-;45377:21;45373:1;45365:6;45361:14;45354:45;45237:169;:::o;45412:230::-;45552:34;45548:1;45540:6;45536:14;45529:58;45621:13;45616:2;45608:6;45604:15;45597:38;45412:230;:::o;45648:237::-;45788:34;45784:1;45776:6;45772:14;45765:58;45857:20;45852:2;45844:6;45840:15;45833:45;45648:237;:::o;45891:225::-;46031:34;46027:1;46019:6;46015:14;46008:58;46100:8;46095:2;46087:6;46083:15;46076:33;45891:225;:::o;46122:178::-;46262:30;46258:1;46250:6;46246:14;46239:54;46122:178;:::o;46306:177::-;46446:29;46442:1;46434:6;46430:14;46423:53;46306:177;:::o;46489:223::-;46629:34;46625:1;46617:6;46613:14;46606:58;46698:6;46693:2;46685:6;46681:15;46674:31;46489:223;:::o;46718:175::-;46858:27;46854:1;46846:6;46842:14;46835:51;46718:175;:::o;46899:231::-;47039:34;47035:1;47027:6;47023:14;47016:58;47108:14;47103:2;47095:6;47091:15;47084:39;46899:231;:::o;47136:243::-;47276:34;47272:1;47264:6;47260:14;47253:58;47345:26;47340:2;47332:6;47328:15;47321:51;47136:243;:::o;47385:229::-;47525:34;47521:1;47513:6;47509:14;47502:58;47594:12;47589:2;47581:6;47577:15;47570:37;47385:229;:::o;47620:228::-;47760:34;47756:1;47748:6;47744:14;47737:58;47829:11;47824:2;47816:6;47812:15;47805:36;47620:228;:::o;47854:182::-;47994:34;47990:1;47982:6;47978:14;47971:58;47854:182;:::o;48042:231::-;48182:34;48178:1;48170:6;48166:14;48159:58;48251:14;48246:2;48238:6;48234:15;48227:39;48042:231;:::o;48279:155::-;48419:7;48415:1;48407:6;48403:14;48396:31;48279:155;:::o;48440:182::-;48580:34;48576:1;48568:6;48564:14;48557:58;48440:182;:::o;48628:228::-;48768:34;48764:1;48756:6;48752:14;48745:58;48837:11;48832:2;48824:6;48820:15;48813:36;48628:228;:::o;48862:234::-;49002:34;48998:1;48990:6;48986:14;48979:58;49071:17;49066:2;49058:6;49054:15;49047:42;48862:234;:::o;49102:167::-;49242:19;49238:1;49230:6;49226:14;49219:43;49102:167;:::o;49275:220::-;49415:34;49411:1;49403:6;49399:14;49392:58;49484:3;49479:2;49471:6;49467:15;49460:28;49275:220;:::o;49501:163::-;49641:15;49637:1;49629:6;49625:14;49618:39;49501:163;:::o;49670:114::-;;:::o;49790:236::-;49930:34;49926:1;49918:6;49914:14;49907:58;49999:19;49994:2;49986:6;49982:15;49975:44;49790:236;:::o;50032:181::-;50172:33;50168:1;50160:6;50156:14;50149:57;50032:181;:::o;50219:169::-;50359:21;50355:1;50347:6;50343:14;50336:45;50219:169;:::o;50394:231::-;50534:34;50530:1;50522:6;50518:14;50511:58;50603:14;50598:2;50590:6;50586:15;50579:39;50394:231;:::o;50631:122::-;50704:24;50722:5;50704:24;:::i;:::-;50697:5;50694:35;50684:63;;50743:1;50740;50733:12;50684:63;50631:122;:::o;50759:116::-;50829:21;50844:5;50829:21;:::i;:::-;50822:5;50819:32;50809:60;;50865:1;50862;50855:12;50809:60;50759:116;:::o;50881:120::-;50953:23;50970:5;50953:23;:::i;:::-;50946:5;50943:34;50933:62;;50991:1;50988;50981:12;50933:62;50881:120;:::o;51007:122::-;51080:24;51098:5;51080:24;:::i;:::-;51073:5;51070:35;51060:63;;51119:1;51116;51109:12;51060:63;51007:122;:::o
Swarm Source
ipfs://d5231754a688c2b7cc94883477b8b9deb888eae401716c1b860c73819daf42fe
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.