Contract
0x939b90c529f0e3a2c187e1b190ca966a95881fde
3
Contract Overview
Balance:
0 CRO
CRO Value:
$0.00
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x4c076cea86967c9257938662167def9089656bb11e2a157bf1ea9cb419ff89e7 | Safe Transfer Fr... | 11384490 | 9 days 5 hrs ago | 0xe06e6df9a66a2a631ea5e8fd587a59e13cc36750 | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.412184134576 | |
0x2e11a53a838884ed9978fc839e92a4f30c432ea1cc5307f81cc84324501afe9a | Set Approval For... | 11221778 | 19 days 18 hrs ago | 0x28d09a828a2b683c02295eaef8c4434fb9ee4e1b | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.2132214937 | |
0x7aacaaa762a9b201e7f22a87b75c51ab964e4f0aca877eeb6fa53380dcc079f2 | Set Approval For... | 11128092 | 25 days 20 hrs ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.213481904251 | ||
0x74570d2cb0249cf584b756b89cc2ef3db3df161f0c92cec6b0ba57918c39b5ab | Set Approval For... | 11124746 | 26 days 2 hrs ago | 0x767d957ea7f5d78b611eaeb84c3bf2443d26c9c5 | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.213433222734 | |
0xd6da37c115953bc6d63d31e3a8e6959db59607bad9294d5b5e9fa95be087fbd5 | Set Approval For... | 11095862 | 27 days 23 hrs ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.213490414 | ||
0x2edea50a8a350c91f92fb62d564d7f347b663670eb35cd325ed74c622524b5f2 | Set Approval For... | 11069340 | 29 days 16 hrs ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.21354356327 | ||
0xf04d23f1584d4a04f6f7cc97d58ada679d73c370d7d1ed2b5523c90434b7f542 | Safe Transfer Fr... | 11064605 | 30 days 4 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 1.258695287522 | ||
0xec9ce782d467c3d5689645a30e7ff326617064d167964cedf4f797abea024038 | Safe Transfer Fr... | 11064597 | 30 days 5 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 1.279450436223 | ||
0x075f41e46c351452390692a271f5b2f969ca82e53dfeeb761279d9bec6d94aff | Safe Transfer Fr... | 11064591 | 30 days 5 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 1.195662656999 | ||
0x49d0f206d15cabf589adde11409ddd0aff34a2fef777a19196959388768cc29a | Safe Transfer Fr... | 11064582 | 30 days 6 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 1.168868007173 | ||
0xda5c04d526ab1d94b8786815f324e1ea5dc80825c3ed6159462d23d8a54d3bb4 | Safe Transfer Fr... | 11064569 | 30 days 7 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 1.142017931445 | ||
0xb9ad71424dd446da68609ee71fc9ff1c3e1a5717044d1c3c45eaccc4b94627c1 | Safe Transfer Fr... | 11064553 | 30 days 9 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 1.11516786966 | ||
0x301be54990283308adf715c1ea748a43220162dd430c3102b8153e94e7fc57a2 | Safe Transfer Fr... | 11064542 | 30 days 10 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 1.088262234884 | ||
0x4750346319512868d3fa214e2284d19b9d90be7b3b2b4ac0292906038433abb3 | Safe Transfer Fr... | 11064535 | 30 days 10 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 1.013862283829 | ||
0xe4457e086a53f56f9baeb59e33021a0c94582da2717e98a3e8d945e909eca470 | Safe Transfer Fr... | 11064528 | 30 days 11 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 1.034561919535 | ||
0x5d058c9f3053eb7839628a7521fa3fc1ccc5b22c7f7539255bf0a859d8296b3b | Safe Transfer Fr... | 11064517 | 30 days 12 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 1.007711773021 | ||
0x14cf618c779d5b4de5d27c2d57f407afc0555256bde3e9d3471e6ca02a723b93 | Safe Transfer Fr... | 11064504 | 30 days 13 mins ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.924007208968 | ||
0x7065b3a4a2c9b10a100ec5288e70cfb0ca5f7bc7111c30be7fbc98226f1d3661 | Set Approval For... | 11061501 | 30 days 4 hrs ago | 0x363c7e093190cac2fce4a44f1867fb4a30d0bd2e | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.213490073569 | |
0x0b29edc1b978a57fb598873fd7ad289e7ffe4742b42ab29b2bf0ea01b846a4fd | Set Approval For... | 11061004 | 30 days 5 hrs ago | 0x363c7e093190cac2fce4a44f1867fb4a30d0bd2e | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.213546601954 | |
0x41ba5db99ef211824d1559752def02f9cd8b6ca11ce18a21199c60289cc065ad | Set Approval For... | 11051426 | 30 days 20 hrs ago | 0x37f0f05dbecf5d9a0c65d249262741eb5189fe93 | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.213510705685 | |
0x0c3b7e9da5dc25297c9facf5417c1d02e46ce2d7162b73486f444456ec738d37 | Set Approval For... | 11045971 | 31 days 5 hrs ago | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.213577392428 | ||
0x2493ac4814fe680fbea56db06403b1e1e91b2cc4c2e21d10c550af1120a0e8ad | Set Approval For... | 10974106 | 35 days 21 hrs ago | 0x634a5dc4cda63ea8d0699d9387cdcfffc6408b84 | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.213669809993 | |
0x52b7b612e05cc09f013dccd4225bd2186191f13a75a7a734eb756257306789a4 | Set Approval For... | 10909157 | 40 days 2 hrs ago | 0x1963763a2a612e34b24f9fd92f5b501d121a732e | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.213928865011 | |
0x2258518a1d791e0d35d75a346943f6f0fbfca6b3a4ad68d8ce098612d25fc291 | Set Approval For... | 10896871 | 40 days 21 hrs ago | 0x132081678d8c365d18a4067db6eb0128cb83a116 | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.428696039956 | |
0x249bd248214ad05b70b99edbb2b04ff32ef95722cab1fcb47919c75734e3f2f5 | Safe Transfer Fr... | 10726410 | 52 days 1 hr ago | 0xc6d1bd5003de5fb4d725530f4b455cad0df24980 | IN | 0x939b90c529f0e3a2c187e1b190ca966a95881fde | 0 CRO | 0.414712295876 |
[ Download CSV Export ]
Latest 6 internal transactions
[ Download CSV Export ]
Contract Name:
CronosMonkeyBusiness
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-03-22 */ // SPDX-License-Identifier: MIT 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); } } /** * @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); } } } } 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; } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @title 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); } /** * @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); } /** * @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); } /** * @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 Edit for rawOwnerOf token */ function rawOwnerOf(uint256 tokenId) public view returns (address) { return _owners[tokenId]; } /** * @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); address to = address(0); _beforeTokenTransfer(owner, to, tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, to, 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @dev 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(); } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } contract Withdraw is Ownable { using SafeMath for uint256; struct Part { address wallet; uint256 salePart; uint256 royaltiesPart; } Part[] public parts; constructor(){ parts.push(Part(0xd2ace13fD5AdA4351a31Cd8a1206C2da3377634D, 400, 500)); parts.push(Part(0x9822e949A4193EA5442F640A2e3c92C31569ACec, 300, 250)); parts.push(Part(0xfA4805894DC939A8a0f32176a01f827BA7B405df, 300, 250)); } function shareSalesPart() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "Sales Balance = 0"); for(uint8 i = 0; i < parts.length; i++){ if(parts[i].salePart > 0){ _withdraw(parts[i].wallet, balance.mul(parts[i].salePart).div(1000)); } } _withdraw(owner(), address(this).balance); } function shareRoyaltiesPart() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "Contract Balance = 0"); for(uint8 i = 0; i < parts.length; i++){ if(parts[i].royaltiesPart > 0){ _withdraw(parts[i].wallet, balance.mul(parts[i].royaltiesPart).div(1000)); } } _withdraw(owner(), address(this).balance); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } receive() external payable {} } // @author: Querty //////////////////////////////////////////////////////////////////////////////////////////////////////// // // // // // , // // ,,,@@@#@&, // // ,@&@&&&&@@@&&&%#%%%&&%@,, // // ,@&&%%%##@@&&&##%%%%%&&&%(, // // ,@&&&%%%%%%%%%%%%%%%%%&&&&%@,, // // ,,,,@&&&&%%%%#%%%%%%%%%%%%&&&&&&@@@@@@@,,,, // // ,,(@@@@@@@%&&&&%%%%%%%%%%%#%%%%%&&&&&&@ @@@@@@@*,, // // ,@@@ .//@&&&&&&%%%%%%%%%%%%%%&&&&@%&&&@&&&&&%%@@@@@, // // ,,@@ *(##@&&&&&&&&&&&&&&&&@@%%%%%%%%&&&@&&&&&&&%@ @@,. // // ,,@@@ %%@@&@&&&%%%%%%%%%%%%%%%%%%%%%&&@&&%%%%%%#@%# @@@,, // // ,,,,,,,,,@@@@@ @%&&&&&@&&&&&%%%%%%%%%%%%&&@@&&%%%%%%##@@@@@#%#/ @@@@&,,,,,,,,, // // ,@@@@@@@@@ /@%&&&&%%%%%%&&&&&&&&%%%%%%%%%%##%@@# .@&%@(#%%(@%*/* @@@@@@@@@, // // ,@@##********###@@####%%%%#######%@@@@@*..** ...*. .&&&&((&%@####********#@@@, // // ,@@#%%%#%%%#@@@@@@%*..*@%&..@@ (@(.*@*...*@* %@% @@..&%@*..*%@@@@@@#%%%#%%%&@@, // // &,@@#%#%#%@@@@@@&&@%@...%&&@..*. *%*******@. .*.,@&&%...@%@&&@@@@@@%#%#%&@@, // // ,,@@#%%&#%@@@@@@&&@&%@.@@%%&&@****@.,,.....*,.@***&@&&%%@&.&%@@&&@@@@@@%#%%%%@@, // // ,,@@###&##@@@@@@%%%@@#%@&%%%#%&&@....@@#.@@@....&&&%%%%%@&%%@@%%%@@@@@@##&##%@@, // // ,,@@#%%&#%@@@&@@%%%%%%%@@@(&(%&@.. ... ..@&%(%(@@@%%%%%%%@@@@@@%#&%%%@@, // // ,,@@#%&&#%@@@&@@%%%%%%%%%@@&%&@... .*. ...@&@&@@%%%%%%%%%@@@@@@%#&&%%@@, // // ,@@#%&&#%@@@@@@%%%%%%%%%%%@@@@&.@@@.........@@@.&@@@@%%%%%%%%%%%@@@@@@%%&&%&@@, // // ,@@%#&&##@@@@@@@%%%%%%%%%%%%@@&......@@@@@......%@@%%%%%%%%%%%%@@@@@@@#&&&#@@@, // // ,@@@%&&@%@@@@&@@%%%%%%%%%%@@@@&%...............%&@@@%%%%%%%%%%%@@&@@@@%@&&%@@@, // // ,@@@%&&@%@@@@&@@@%%%%%%%%%@ ,@@(%%%.. ..%%##@@, @%%%%%%%%%@@@&@@@@%@&&%@@@, // // ,@@@%&&@%@@@@&&@@@%%%%%@@@#@@ ,*@@@@((#((@@@@*, #@#@@@%%%%%@@@&&@@@@%@&&%@@&, // // ,,@@#&&&%#@@@@&&@@@@@#&@#%&&/,, ,/@@@@@@, ,,,@&&%#@&#@@@@@&&@@@@#&&&&&@@, // // ,@@@&&&@%@@@@@###%%%&@#&&&&@*, **@ @&&&&&@ @** **@&&&&#@&%%%##@@@@@@%@&&&@@@, // // ,@@@&&@@%@@#%%%&&&&&&@#%&&&@*, ,*@@@@@*, ,*@&&&%#@&&&&&&%%%#@@%@&&&@@@, // // ,,@@%&&@@#@@#%%%%%%%%&&@#%&&@,* @&%%%&@ *,@&&%%@&&%%%%%%%%#@@#@@&&(@@,, // // ,%@@*&&@@#@@#%%%%%%&&@%%%&&&&@,,,@%%%%%@,,,@&&&&%#@@&&%%%%%%#@@#@@&&*@@,, // // ,*@@/&&@@%@@%%#%%%%&&@#%%&&&&&@,@%%%%%@,@&&&&&%%#@&&%%%%%%&@@%@@&&&@@,, // // ,,@@@/&@@%#@@%%%%%%&&@#%%%&&&&&@@&&&@&&&&&&%%#@&&&%%%%%%@@#%@&&/@@@,, // // ,@@@*&&@@%&@@%%%%%&&&@#%%%&&&&&&@&&&&&&%%%#@&&&%%%%%@@%%@@&%*@@@, // // ,,@@@*&&@@#@@&%%%%%&&&@#%%%%&&&@&&&%%%%#@&&&%%%%%@@@#@@&&*@@@,, // // ,@@@@*&@@@%@@&%%%%%&%&@@%%%%&@%%%%%@&&%&%%%%%@@@%@@@&*@@@&, // // ,@@@(*&@@@%@@@#%%%%%%&&@@%%@%%@@&&%%%%%%#@@@%@@@%*@@@@, // // .,@@@#*/@@@%&@@##%%%%&&&&@@&&&&&%%%%##@@%%@@@/*@@@@, // // .,@@@@**@@@##@@%%#%%&&&&@&&&&%%%%&@@##@@@**@@@@, // // ,@@@@*//@@@%%@@@@@@@@@@@@@@@@@%%@@@//*@@@&, // // ,,@@@#/*@@@#%@@@@@@@@@@@@%%&@@@*/@@@@,, // // .,@@@@///@@@&#%@@@@@%#@@@@///@@@@, // // ,,@@@@***@@@@###@@@@**/@@@@,, // // ,,@@@@@*//@@@//*@@@@@,, // // ,,,@@@@&/@@@@@,,. // // ,,,@@@,,, // // // // // //////////////////////////////////////////////////////////////////////////////////////////////////////// contract CronosMonkeyBusiness is ERC721Enumerable, Ownable, Withdraw { using SafeMath for uint256; using Strings for uint256; uint256 public monkeysRemaining; int8 public constant MAX_WL = 3; int8 public constant MAX_PUBLIC = 5; string public baseURI; address[] public whitelistedAddresses; struct Sale { uint64 start; uint64 end; int16 maxPerWallet; uint8 maxPerTx; uint256 price; bool paused; } mapping(string => Sale) public sales; mapping(string => mapping(address => uint16)) balanceSale; mapping(uint256 => uint256) private assignOrders; event EventSaleChange(string _name, Sale _sale); event EventCMBMinted(uint[] tokenIds, address buyer); constructor(string memory _initBaseURI, uint256 _maxSupply) ERC721("CronosMonkeyBusiness", "CMB") { setBaseURI(_initBaseURI); monkeysRemaining = _maxSupply; setSale("PRESALES", Sale(1641240000, 1641243599, MAX_WL, 3, 250 ether, false)); setSale("PUBLIC", Sale(1641243600, 1956776400, MAX_PUBLIC, 3, 300 ether, false)); } //**************************// // MODIFIER // //**************************// modifier isOpen(string memory _name, uint8 _count) { require(saleIsOpen(_name), "Sales not open"); require(_count > 0, "Can not mint 0 NFT"); require( _count <= monkeysRemaining, "Exceeds maximum supply. Try to mint less NFTs."); require(monkeysRemaining > 0, "Collection is SoldOut"); require(_count <= sales[_name].maxPerTx, "Max per tx limit"); require(int16(balanceSale[_name][_msgSender()] + uint16(_count)) <= int16(sales[_name].maxPerWallet), "Max per wallet limit"); require(msg.value >= sales[_name].price * _count, "Insuficient funds"); balanceSale[_name][_msgSender()] += uint16(_count); _; } //**************************// // SALES // //**************************// function setSale(string memory _name, Sale memory _sale) public onlyOwner { sales[_name] = _sale; emit EventSaleChange(_name, _sale); } function pauseSale(string memory _name, bool _pause) public onlyOwner() { sales[_name].paused = _pause; } function saleIsOpen(string memory _name) public view returns(bool) { return sales[_name].start > 0 && block.timestamp >= sales[_name].start && block.timestamp <= sales[_name].end && !sales[_name].paused; } //**************************// // GETTERS // //**************************// function isWhitelisted(address _user) public view returns (bool) { for (uint256 i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } function getWalletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function getBalanceOfOwner(address _owner) public view returns (uint256) { uint256[] memory tokenIds = getWalletOfOwner(_owner); uint256 numberOfMonkeys = tokenIds.length; return numberOfMonkeys; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function minted(string memory _name, address _wallet) public view returns(uint16) { return balanceSale[_name][_wallet]; } //**************************// // SETTERS // //**************************// function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(_baseURI(), tokenId.toString(), ".json")); } function setWhitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } //**************************// // MINT // //**************************// function preSalesMint(uint8 _count) public payable isOpen("PRESALES", _count) { require(isWhitelisted(_msgSender()), "User not whitelisted"); require(int16(balanceSale["PRESALES"][_msgSender()]) <= MAX_WL, "Max per wallet limit (PRESALES)"); _mintCMB(_count, false); } function publicSalesMint(uint8 _count) public payable isOpen("PUBLIC", _count){ if(isWhitelisted(_msgSender())) { require(int16(balanceSale["PRESALES"][_msgSender()] + balanceSale["PUBLIC"][_msgSender()]) <= MAX_PUBLIC, "Max per wallet limit"); } _mintCMB(_count, false); } function teamMint(uint256 _amount) public onlyOwner { require(block.timestamp < sales["PRESALES"].start, "Must be executed before presales mint"); _mintCMB(_amount, true); } function _mintCMB(uint256 _amount, bool _admin) private { uint[] memory tokenIdsBought = new uint[](_amount); for (uint i = 0; i < _amount; i++) { uint256 randIndex = (!_admin ? _random() : totalSupply()) % monkeysRemaining; uint256 monkeyIndex = _fillAssignOrder(--monkeysRemaining, randIndex); _safeMint(_msgSender(), monkeyIndex + 1); tokenIdsBought[i] = monkeyIndex; } emit EventCMBMinted(tokenIdsBought, _msgSender()); } //**************************// // RANDOM // //**************************// function _random() internal view returns(uint256) { return uint256( keccak256(abi.encodePacked(block.timestamp + block.difficulty + block.gaslimit + block.number + ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / block.timestamp) + ((uint256(keccak256(abi.encodePacked(_msgSender())))) / block.timestamp) ))) / monkeysRemaining; } function _fillAssignOrder(uint256 orderA, uint256 orderB) internal returns(uint256) { uint256 temp = orderA; if (assignOrders[orderA] > 0) temp = assignOrders[orderA]; assignOrders[orderA] = orderB; if (assignOrders[orderB] > 0) assignOrders[orderA] = assignOrders[orderB]; assignOrders[orderB] = temp; return assignOrders[orderA]; } }
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"}],"name":"EventCMBMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_name","type":"string"},{"components":[{"internalType":"uint64","name":"start","type":"uint64"},{"internalType":"uint64","name":"end","type":"uint64"},{"internalType":"int16","name":"maxPerWallet","type":"int16"},{"internalType":"uint8","name":"maxPerTx","type":"uint8"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"paused","type":"bool"}],"indexed":false,"internalType":"struct CronosMonkeyBusiness.Sale","name":"_sale","type":"tuple"}],"name":"EventSaleChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PUBLIC","outputs":[{"internalType":"int8","name":"","type":"int8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WL","outputs":[{"internalType":"int8","name":"","type":"int8"}],"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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getBalanceOfOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getWalletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"address","name":"_wallet","type":"address"}],"name":"minted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"monkeysRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"parts","outputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"salePart","type":"uint256"},{"internalType":"uint256","name":"royaltiesPart","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_count","type":"uint8"}],"name":"preSalesMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_count","type":"uint8"}],"name":"publicSalesMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"rawOwnerOf","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":"string","name":"_name","type":"string"}],"name":"saleIsOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"sales","outputs":[{"internalType":"uint64","name":"start","type":"uint64"},{"internalType":"uint64","name":"end","type":"uint64"},{"internalType":"int16","name":"maxPerWallet","type":"int16"},{"internalType":"uint8","name":"maxPerTx","type":"uint8"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"paused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"components":[{"internalType":"uint64","name":"start","type":"uint64"},{"internalType":"uint64","name":"end","type":"uint64"},{"internalType":"int16","name":"maxPerWallet","type":"int16"},{"internalType":"uint8","name":"maxPerTx","type":"uint8"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"paused","type":"bool"}],"internalType":"struct CronosMonkeyBusiness.Sale","name":"_sale","type":"tuple"}],"name":"setSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"setWhitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shareRoyaltiesPart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shareSalesPart","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":"_amount","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200419c3803806200419c833981016040819052620000349162000667565b604080518082018252601481527f43726f6e6f734d6f6e6b6579427573696e65737300000000000000000000000060208083019182528351808501909452600384526221a6a160e91b9084015281519192916200009491600091620005c1565b508051620000aa906001906020840190620005c1565b505050620000c7620000c1620003bb60201b60201c565b620003bf565b600b604051806060016040528073d2ace13fd5ada4351a31cd8a1206c2da3377634d6001600160a01b0316815260200161019081526020016101f4815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010155604082015181600201555050600b6040518060600160405280739822e949a4193ea5442f640a2e3c92c31569acec6001600160a01b0316815260200161012c815260200160fa815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010155604082015181600201555050600b604051806060016040528073fa4805894dc939a8a0f32176a01f827ba7b405df6001600160a01b0316815260200161012c815260200160fa815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010155604082015181600201555050620002d4826200041160201b60201c565b600c819055604080518082018252600881526750524553414c455360c01b602080830191909152825160c0810184526361d355c081526361d363cf9181019190915260039281018390526060810192909252680d8d726b7177a800006080830152600060a0830152620003479162000479565b60408051808201825260068152655055424c494360d01b602080830191909152825160c0810184526361d363d081526374a209d09181019190915260059281019290925260036060830152681043561a88293000006080830152600060a0830152620003b39162000479565b505062000854565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620004605760405162461bcd60e51b815260206004820181905260248201526000805160206200417c83398151915260448201526064015b60405180910390fd5b80516200047590600d906020840190620005c1565b5050565b600a546001600160a01b03163314620004c45760405162461bcd60e51b815260206004820181905260248201526000805160206200417c833981519152604482015260640162000457565b80600f83604051620004d7919062000729565b908152604080516020928190038301812084518154948601519386015160608701516001600160401b039283166001600160801b0319909716969096176801000000000000000092909516919091029390931762ffffff60801b1916600160801b61ffff600195860b160260ff60901b191617600160901b60ff9095169490940293909317835560808401519183019190915560a0909201516002909101805460ff19169115159190911790557ffb31df2ce2b2b740f8fb39d618d9828a7cbe8ab00d233ac24e9b200d65b1c98190620005b5908490849062000747565b60405180910390a15050565b828054620005cf9062000801565b90600052602060002090601f016020900481019282620005f357600085556200063e565b82601f106200060e57805160ff19168380011785556200063e565b828001600101855582156200063e579182015b828111156200063e57825182559160200191906001019062000621565b506200064c92915062000650565b5090565b5b808211156200064c576000815560010162000651565b600080604083850312156200067b57600080fd5b82516001600160401b03808211156200069357600080fd5b818501915085601f830112620006a857600080fd5b815181811115620006bd57620006bd6200083e565b604051601f8201601f19908116603f01168101908382118183101715620006e857620006e86200083e565b816040528281528860208487010111156200070257600080fd5b62000715836020830160208801620007ce565b602097909701519698969750505050505050565b600082516200073d818460208701620007ce565b9190910192915050565b60e08152600083518060e08401526101006200076a8282860160208901620007ce565b80601f19601f8401168501019250505060018060401b0380845116602084015280602085015116604084015250604083015160010b606083015260ff6060840151166080830152608083015160a083015260a0830151151560c08301529392505050565b60005b83811015620007eb578181015183820152602001620007d1565b83811115620007fb576000848401525b50505050565b600181811c908216806200081657607f821691505b602082108114156200083857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61391880620008646000396000f3fe60806040526004361061024a5760003560e01c80636c0360eb11610139578063a22cb465116100b6578063c9eb46621161007a578063c9eb4662146106bc578063d052a17a14610701578063e2310ef214610721578063e985e9c514610741578063f2fde38b1461078a578063fbb37cf2146107aa57600080fd5b8063a22cb46514610627578063b88d4fde14610647578063ba4e5c4914610667578063c87b56dd14610687578063c91d5f97146106a757600080fd5b80638b167178116100fd5780638b167178146105865780638da5cb5b146105b957806395d89b41146105d75780639753eac0146105ec578063a05751c51461061457600080fd5b80636c0360eb146104f357806370a0823114610508578063715018a61461052857806375de52951461053d5780637f81be691461055057600080fd5b80632fbba115116101c75780634f6ccce71161018b5780634f6ccce71461045057806355f804b314610470578063627fdeab146104905780636352211e146104bd5780636ba01f5f146104dd57600080fd5b80632fbba115146103c65780633af32abf146103e657806340f9bbe21461040657806342842e0e1461041b57806346002b061461043b57600080fd5b806318160ddd1161020e57806318160ddd14610327578063194944db1461034657806323b872dd146103665780632beab4b7146103865780632f745c59146103a657600080fd5b806301cacbc81461025657806301ffc9a71461027857806306fdde03146102ad578063081812fc146102cf578063095ea7b31461030757600080fd5b3661025157005b600080fd5b34801561026257600080fd5b506102766102713660046132dd565b610865565b005b34801561028457600080fd5b506102986102933660046131e7565b610995565b60405190151581526020015b60405180910390f35b3480156102b957600080fd5b506102c26109c0565b6040516102a49190613510565b3480156102db57600080fd5b506102ef6102ea3660046133a0565b610a52565b6040516001600160a01b0390911681526020016102a4565b34801561031357600080fd5b50610276610322366004613149565b610ae7565b34801561033357600080fd5b506008545b6040519081526020016102a4565b34801561035257600080fd5b50610298610361366004613221565b610bfd565b34801561037257600080fd5b50610276610381366004613068565b610cce565b34801561039257600080fd5b506102766103a1366004613173565b610cff565b3480156103b257600080fd5b506103386103c1366004613149565b610d41565b3480156103d257600080fd5b506102766103e13660046133a0565b610dd7565b3480156103f257600080fd5b5061029861040136600461301a565b610e9b565b34801561041257600080fd5b50610276610f05565b34801561042757600080fd5b50610276610436366004613068565b611068565b34801561044757600080fd5b50610276611083565b34801561045c57600080fd5b5061033861046b3660046133a0565b6111c2565b34801561047c57600080fd5b5061027661048b366004613221565b611255565b34801561049c57600080fd5b506104b06104ab36600461301a565b611296565b6040516102a491906134d3565b3480156104c957600080fd5b506102ef6104d83660046133a0565b611337565b3480156104e957600080fd5b50610338600c5481565b3480156104ff57600080fd5b506102c26113ae565b34801561051457600080fd5b5061033861052336600461301a565b61143c565b34801561053457600080fd5b506102766114c3565b61027661054b3660046133b9565b6114f9565b34801561055c57600080fd5b506102ef61056b3660046133a0565b6000908152600260205260409020546001600160a01b031690565b34801561059257600080fd5b506105a66105a1366004613255565b6118c2565b60405161ffff90911681526020016102a4565b3480156105c557600080fd5b50600a546001600160a01b03166102ef565b3480156105e357600080fd5b506102c2611907565b3480156105f857600080fd5b50610601600581565b60405160009190910b81526020016102a4565b6102766106223660046133b9565b611916565b34801561063357600080fd5b5061027661064236600461311f565b611d06565b34801561065357600080fd5b506102766106623660046130a4565b611dcb565b34801561067357600080fd5b506102ef6106823660046133a0565b611e03565b34801561069357600080fd5b506102c26106a23660046133a0565b611e2d565b3480156106b357600080fd5b50610601600381565b3480156106c857600080fd5b506106dc6106d73660046133a0565b611ee4565b604080516001600160a01b0390941684526020840192909252908201526060016102a4565b34801561070d57600080fd5b5061027661071c366004613299565b611f21565b34801561072d57600080fd5b5061033861073c36600461301a565b611f83565b34801561074d57600080fd5b5061029861075c366004613035565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561079657600080fd5b506102766107a536600461301a565b611f97565b3480156107b657600080fd5b5061081f6107c5366004613221565b8051602081830181018051600f82529282019190930120915280546001808301546002909301546001600160401b0380841694600160401b850490911693600160801b810490930b92600160901b900460ff908116921686565b604080516001600160401b03978816815296909516602087015260019390930b9385019390935260ff1660608401526080830191909152151560a082015260c0016102a4565b600a546001600160a01b031633146108985760405162461bcd60e51b815260040161088f9061360d565b60405180910390fd5b80600f836040516108a9919061343b565b908152604080516020928190038301812084518154948601519386015160608701516001600160401b039283166fffffffffffffffffffffffffffffffff1990971696909617600160401b92909516919091029390931762ffffff60801b1916600160801b61ffff600195860b160260ff60901b191617600160901b60ff9095169490940293909317835560808401519183019190915560a0909201516002909101805460ff19169115159190911790557ffb31df2ce2b2b740f8fb39d618d9828a7cbe8ab00d233ac24e9b200d65b1c981906109899084908490613523565b60405180910390a15050565b60006001600160e01b0319821663780e9d6360e01b14806109ba57506109ba8261202f565b92915050565b6060600080546109cf906137d4565b80601f01602080910402602001604051908101604052809291908181526020018280546109fb906137d4565b8015610a485780601f10610a1d57610100808354040283529160200191610a48565b820191906000526020600020905b815481529060010190602001808311610a2b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610acb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161088f565b506000908152600460205260409020546001600160a01b031690565b6000610af282611337565b9050806001600160a01b0316836001600160a01b03161415610b605760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161088f565b336001600160a01b0382161480610b7c5750610b7c813361075c565b610bee5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161088f565b610bf8838361207f565b505050565b600080600f83604051610c10919061343b565b908152604051908190036020019020546001600160401b0316118015610c5e5750600f82604051610c41919061343b565b908152604051908190036020019020546001600160401b03164210155b8015610c9a5750600f82604051610c75919061343b565b908152604051908190036020019020546001600160401b03600160401b909104164211155b80156109ba5750600f82604051610cb1919061343b565b9081526040519081900360200190206002015460ff161592915050565b610cd833826120ed565b610cf45760405162461bcd60e51b815260040161088f90613642565b610bf88383836121e4565b600a546001600160a01b03163314610d295760405162461bcd60e51b815260040161088f9061360d565b610d35600e6000612e27565b610bf8600e8383612e45565b6000610d4c8361143c565b8210610dae5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161088f565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610e015760405162461bcd60e51b815260040161088f9061360d565b6040516750524553414c455360c01b8152600f90600801908152604051908190036020019020546001600160401b03164210610e8d5760405162461bcd60e51b815260206004820152602560248201527f4d757374206265206578656375746564206265666f72652070726573616c6573604482015264081b5a5b9d60da1b606482015260840161088f565b610e9881600161238f565b50565b6000805b600e54811015610efc57826001600160a01b0316600e8281548110610ec657610ec66138a0565b6000918252602090912001546001600160a01b03161415610eea5750600192915050565b80610ef48161380f565b915050610e9f565b50600092915050565b600a546001600160a01b03163314610f2f5760405162461bcd60e51b815260040161088f9061360d565b4780610f715760405162461bcd60e51b8152602060048201526011602482015270053616c65732042616c616e6365203d203607c1b604482015260640161088f565b60005b600b5460ff8216101561104c576000600b8260ff1681548110610f9957610f996138a0565b906000526020600020906003020160010154111561103a5761103a600b8260ff1681548110610fca57610fca6138a0565b906000526020600020906003020160000160009054906101000a90046001600160a01b03166110356103e861102f600b8660ff168154811061100e5761100e6138a0565b906000526020600020906003020160010154876124af90919063ffffffff16565b90612535565b612590565b806110448161382a565b915050610f74565b50610e98611062600a546001600160a01b031690565b47612590565b610bf883838360405180602001604052806000815250611dcb565b600a546001600160a01b031633146110ad5760405162461bcd60e51b815260040161088f9061360d565b47806110f25760405162461bcd60e51b81526020600482015260146024820152730436f6e74726163742042616c616e6365203d20360641b604482015260640161088f565b60005b600b5460ff8216101561104c576000600b8260ff168154811061111a5761111a6138a0565b90600052602060002090600302016002015411156111b0576111b0600b8260ff168154811061114b5761114b6138a0565b906000526020600020906003020160000160009054906101000a90046001600160a01b03166110356103e861102f600b8660ff168154811061118f5761118f6138a0565b906000526020600020906003020160020154876124af90919063ffffffff16565b806111ba8161382a565b9150506110f5565b60006111cd60085490565b82106112305760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161088f565b60088281548110611243576112436138a0565b90600052602060002001549050919050565b600a546001600160a01b0316331461127f5760405162461bcd60e51b815260040161088f9061360d565b805161129290600d906020840190612ea8565b5050565b606060006112a38361143c565b90506000816001600160401b038111156112bf576112bf6138b6565b6040519080825280602002602001820160405280156112e8578160200160208202803683370190505b50905060005b8281101561132f576113008582610d41565b828281518110611312576113126138a0565b6020908102919091010152806113278161380f565b9150506112ee565b509392505050565b6000818152600260205260408120546001600160a01b0316806109ba5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161088f565b600d80546113bb906137d4565b80601f01602080910402602001604051908101604052809291908181526020018280546113e7906137d4565b80156114345780601f1061140957610100808354040283529160200191611434565b820191906000526020600020905b81548152906001019060200180831161141757829003601f168201915b505050505081565b60006001600160a01b0382166114a75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161088f565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146114ed5760405162461bcd60e51b815260040161088f9061360d565b6114f76000612626565b565b604051806040016040528060068152602001655055424c494360d01b8152508161152282610bfd565b61155f5760405162461bcd60e51b815260206004820152600e60248201526d29b0b632b9903737ba1037b832b760911b604482015260640161088f565b60008160ff16116115a75760405162461bcd60e51b815260206004820152601260248201527110d85b881b9bdd081b5a5b9d080c0813919560721b604482015260640161088f565b600c548160ff1611156115cc5760405162461bcd60e51b815260040161088f90613693565b6000600c54116116165760405162461bcd60e51b815260206004820152601560248201527410dbdb1b1958dd1a5bdb881a5cc814dbdb1913dd5d605a1b604482015260640161088f565b600f82604051611626919061343b565b9081526040519081900360200190205460ff600160901b909104811690821611156116865760405162461bcd60e51b815260206004820152601060248201526f13585e081c195c881d1e081b1a5b5a5d60821b604482015260640161088f565b600f82604051611696919061343b565b90815260405190819003602001812054600160801b9004600190810b900b9060ff8316906010906116c890869061343b565b908152602001604051809103902060006116df3390565b6001600160a01b03168152602081019190915260400160002054611707919061ffff16613709565b60010b13156117285760405162461bcd60e51b815260040161088f9061358d565b8060ff16600f8360405161173c919061343b565b908152602001604051809103902060010154611758919061375b565b34101561179b5760405162461bcd60e51b8152602060048201526011602482015270496e737566696369656e742066756e647360781b604482015260640161088f565b8060ff166010836040516117af919061343b565b908152602001604051809103902060006117c63390565b6001600160a01b031681526020810191909152604001600090812080549091906117f590849061ffff16613709565b92506101000a81548161ffff021916908361ffff1602179055506118196104013390565b156118b45760408051655055424c494360d01b815260106006820181905282519182900360260182203360008181526020928352858120546750524553414c455360c01b865260088601949094528551602895819003959095019094209084529052919020546005916118939161ffff9182169116613709565b60010b13156118b45760405162461bcd60e51b815260040161088f9061358d565b610bf88360ff16600061238f565b60006010836040516118d4919061343b565b908152604080519182900360209081019092206001600160a01b0385166000908152925290205461ffff16905092915050565b6060600180546109cf906137d4565b6040518060400160405280600881526020016750524553414c455360c01b8152508161194182610bfd565b61197e5760405162461bcd60e51b815260206004820152600e60248201526d29b0b632b9903737ba1037b832b760911b604482015260640161088f565b60008160ff16116119c65760405162461bcd60e51b815260206004820152601260248201527110d85b881b9bdd081b5a5b9d080c0813919560721b604482015260640161088f565b600c548160ff1611156119eb5760405162461bcd60e51b815260040161088f90613693565b6000600c5411611a355760405162461bcd60e51b815260206004820152601560248201527410dbdb1b1958dd1a5bdb881a5cc814dbdb1913dd5d605a1b604482015260640161088f565b600f82604051611a45919061343b565b9081526040519081900360200190205460ff600160901b90910481169082161115611aa55760405162461bcd60e51b815260206004820152601060248201526f13585e081c195c881d1e081b1a5b5a5d60821b604482015260640161088f565b600f82604051611ab5919061343b565b90815260405190819003602001812054600160801b9004600190810b900b9060ff831690601090611ae790869061343b565b90815260200160405180910390206000611afe3390565b6001600160a01b03168152602081019190915260400160002054611b26919061ffff16613709565b60010b1315611b475760405162461bcd60e51b815260040161088f9061358d565b8060ff16600f83604051611b5b919061343b565b908152602001604051809103902060010154611b77919061375b565b341015611bba5760405162461bcd60e51b8152602060048201526011602482015270496e737566696369656e742066756e647360781b604482015260640161088f565b8060ff16601083604051611bce919061343b565b90815260200160405180910390206000611be53390565b6001600160a01b03168152602081019190915260400160009081208054909190611c1490849061ffff16613709565b92506101000a81548161ffff021916908361ffff160217905550611c386104013390565b611c7b5760405162461bcd60e51b8152602060048201526014602482015273155cd95c881b9bdd081dda1a5d195b1a5cdd195960621b604482015260640161088f565b604080516750524553414c455360c01b81526010600882015281519081900360280190203360009081526020919091522054600361ffff90911660010b13156118b45760405162461bcd60e51b815260206004820152601f60248201527f4d6178207065722077616c6c6574206c696d6974202850524553414c45532900604482015260640161088f565b6001600160a01b038216331415611d5f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161088f565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611dd533836120ed565b611df15760405162461bcd60e51b815260040161088f90613642565b611dfd84848484612678565b50505050565b600e8181548110611e1357600080fd5b6000918252602090912001546001600160a01b0316905081565b6000818152600260205260409020546060906001600160a01b0316611eac5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161088f565b611eb46126ab565b611ebd836126ba565b604051602001611ece929190613457565b6040516020818303038152906040529050919050565b600b8181548110611ef457600080fd5b60009182526020909120600390910201805460018201546002909201546001600160a01b03909116925083565b600a546001600160a01b03163314611f4b5760405162461bcd60e51b815260040161088f9061360d565b80600f83604051611f5c919061343b565b908152604051908190036020019020600201805491151560ff199092169190911790555050565b600080611f8f83611296565b519392505050565b600a546001600160a01b03163314611fc15760405162461bcd60e51b815260040161088f9061360d565b6001600160a01b0381166120265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161088f565b610e9881612626565b60006001600160e01b031982166380ac58cd60e01b148061206057506001600160e01b03198216635b5e139f60e01b145b806109ba57506301ffc9a760e01b6001600160e01b03198316146109ba565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906120b482611337565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166121665760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161088f565b600061217183611337565b9050806001600160a01b0316846001600160a01b031614806121ac5750836001600160a01b03166121a184610a52565b6001600160a01b0316145b806121dc57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166121f782611337565b6001600160a01b03161461225f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161088f565b6001600160a01b0382166122c15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161088f565b6122cc8383836127b7565b6122d760008261207f565b6001600160a01b038316600090815260036020526040812080546001929061230090849061377a565b90915550506001600160a01b038216600090815260036020526040812080546001929061232e90849061372f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000826001600160401b038111156123a9576123a96138b6565b6040519080825280602002602001820160405280156123d2578160200160208202803683370190505b50905060005b83811015612470576000600c5484156123f3576008546123fb565b6123fb61286f565b612405919061384a565b90506000612426600c6000815461241b906137bd565b918290555083612978565b905061243c3361243783600161372f565b6129ef565b8084848151811061244f5761244f6138a0565b602002602001018181525050505080806124689061380f565b9150506123d8565b507f50bb959c79f473fbb4c43fd5ac0008d5504c573f5657eb7152d42c60148efcc081336040516124a29291906134e6565b60405180910390a1505050565b6000826124be575060006109ba565b60006124ca838561375b565b9050826124d78583613747565b1461252e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161088f565b9392505050565b60008082116125865760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161088f565b61252e8284613747565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146125dd576040519150601f19603f3d011682016040523d82523d6000602084013e6125e2565b606091505b5050905080610bf85760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161088f565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6126838484846121e4565b61268f84848484612a09565b611dfd5760405162461bcd60e51b815260040161088f906135bb565b6060600d80546109cf906137d4565b6060816126de5750506040805180820190915260018152600360fc1b602082015290565b8160005b811561270857806126f28161380f565b91506127019050600a83613747565b91506126e2565b6000816001600160401b03811115612722576127226138b6565b6040519080825280601f01601f19166020018201604052801561274c576020820181803683370190505b5090505b84156121dc5761276160018361377a565b915061276e600a8661384a565b61277990603061372f565b60f81b81838151811061278e5761278e6138a0565b60200101906001600160f81b031916908160001a9053506127b0600a86613747565b9450612750565b6001600160a01b0383166128125761280d81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612835565b816001600160a01b0316836001600160a01b031614612835576128358382612b16565b6001600160a01b03821661284c57610bf881612bb3565b826001600160a01b0316826001600160a01b031614610bf857610bf88282612c62565b6000600c544261287c3390565b6040516020016128a4919060609190911b6bffffffffffffffffffffffff1916815260140190565b6040516020818303038152906040528051906020012060001c6128c79190613747565b6040516bffffffffffffffffffffffff194160601b16602082015242906034016040516020818303038152906040528051906020012060001c61290a9190613747565b4345612916444261372f565b612920919061372f565b61292a919061372f565b612934919061372f565b61293e919061372f565b60405160200161295091815260200190565b6040516020818303038152906040528051906020012060001c6129739190613747565b905090565b60008281526011602052604081205483901561299f57506000838152601160205260409020545b600084815260116020526040808220859055848252902054156129d357600083815260116020526040808220548683529120555b6000928352601160205260408084209190915592825250205490565b611292828260405180602001604052806000815250612ca6565b60006001600160a01b0384163b15612b0b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a4d903390899088908890600401613496565b602060405180830381600087803b158015612a6757600080fd5b505af1925050508015612a97575060408051601f3d908101601f19168201909252612a9491810190613204565b60015b612af1573d808015612ac5576040519150601f19603f3d011682016040523d82523d6000602084013e612aca565b606091505b508051612ae95760405162461bcd60e51b815260040161088f906135bb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121dc565b506001949350505050565b60006001612b238461143c565b612b2d919061377a565b600083815260076020526040902054909150808214612b80576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612bc59060019061377a565b60008381526009602052604081205460088054939450909284908110612bed57612bed6138a0565b906000526020600020015490508060088381548110612c0e57612c0e6138a0565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612c4657612c4661388a565b6001900381819060005260206000200160009055905550505050565b6000612c6d8361143c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b612cb08383612cd9565b612cbd6000848484612a09565b610bf85760405162461bcd60e51b815260040161088f906135bb565b6001600160a01b038216612d2f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161088f565b6000818152600260205260409020546001600160a01b031615612d945760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161088f565b612da0600083836127b7565b6001600160a01b0382166000908152600360205260408120805460019290612dc990849061372f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5080546000825590600052602060002090810190610e989190612f1c565b828054828255906000526020600020908101928215612e98579160200282015b82811115612e985781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190612e65565b50612ea4929150612f1c565b5090565b828054612eb4906137d4565b90600052602060002090601f016020900481019282612ed65760008555612e98565b82601f10612eef57805160ff1916838001178555612e98565b82800160010185558215612e98579182015b82811115612e98578251825591602001919060010190612f01565b5b80821115612ea45760008155600101612f1d565b60006001600160401b0380841115612f4b57612f4b6138b6565b604051601f8501601f19908116603f01168101908282118183101715612f7357612f736138b6565b81604052809350858152868686011115612f8c57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612fbd57600080fd5b919050565b80358015158114612fbd57600080fd5b600082601f830112612fe357600080fd5b61252e83833560208501612f31565b80356001600160401b0381168114612fbd57600080fd5b803560ff81168114612fbd57600080fd5b60006020828403121561302c57600080fd5b61252e82612fa6565b6000806040838503121561304857600080fd5b61305183612fa6565b915061305f60208401612fa6565b90509250929050565b60008060006060848603121561307d57600080fd5b61308684612fa6565b925061309460208501612fa6565b9150604084013590509250925092565b600080600080608085870312156130ba57600080fd5b6130c385612fa6565b93506130d160208601612fa6565b92506040850135915060608501356001600160401b038111156130f357600080fd5b8501601f8101871361310457600080fd5b61311387823560208401612f31565b91505092959194509250565b6000806040838503121561313257600080fd5b61313b83612fa6565b915061305f60208401612fc2565b6000806040838503121561315c57600080fd5b61316583612fa6565b946020939093013593505050565b6000806020838503121561318657600080fd5b82356001600160401b038082111561319d57600080fd5b818501915085601f8301126131b157600080fd5b8135818111156131c057600080fd5b8660208260051b85010111156131d557600080fd5b60209290920196919550909350505050565b6000602082840312156131f957600080fd5b813561252e816138cc565b60006020828403121561321657600080fd5b815161252e816138cc565b60006020828403121561323357600080fd5b81356001600160401b0381111561324957600080fd5b6121dc84828501612fd2565b6000806040838503121561326857600080fd5b82356001600160401b0381111561327e57600080fd5b61328a85828601612fd2565b92505061305f60208401612fa6565b600080604083850312156132ac57600080fd5b82356001600160401b038111156132c257600080fd5b6132ce85828601612fd2565b92505061305f60208401612fc2565b60008082840360e08112156132f157600080fd5b83356001600160401b0381111561330757600080fd5b61331386828701612fd2565b93505060c0601f198201121561332857600080fd5b506133316136e1565b61333d60208501612ff2565b815261334b60408501612ff2565b602082015260608401358060010b811461336457600080fd5b604082015261337560808501613009565b606082015260a0840135608082015261339060c08501612fc2565b60a0820152809150509250929050565b6000602082840312156133b257600080fd5b5035919050565b6000602082840312156133cb57600080fd5b61252e82613009565b600081518084526020808501945080840160005b83811015613404578151875295820195908201906001016133e8565b509495945050505050565b60008151808452613427816020860160208601613791565b601f01601f19169290920160200192915050565b6000825161344d818460208701613791565b9190910192915050565b60008351613469818460208801613791565b83519083019061347d818360208801613791565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906134c99083018461340f565b9695505050505050565b60208152600061252e60208301846133d4565b6040815260006134f960408301856133d4565b905060018060a01b03831660208301529392505050565b60208152600061252e602083018461340f565b60e08152600061353660e083018561340f565b90506001600160401b0380845116602084015280602085015116604084015250604083015160010b606083015260ff6060840151166080830152608083015160a083015260a0830151151560c08301529392505050565b60208082526014908201527313585e081c195c881dd85b1b195d081b1a5b5a5d60621b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f45786365656473206d6178696d756d20737570706c792e2054727920746f206d60408201526d34b73a103632b9b99027232a399760911b606082015260800190565b60405160c081016001600160401b0381118282101715613703576137036138b6565b60405290565b600061ffff8083168185168083038211156137265761372661385e565b01949350505050565b600082198211156137425761374261385e565b500190565b60008261375657613756613874565b500490565b60008160001904831182151516156137755761377561385e565b500290565b60008282101561378c5761378c61385e565b500390565b60005b838110156137ac578181015183820152602001613794565b83811115611dfd5750506000910152565b6000816137cc576137cc61385e565b506000190190565b600181811c908216806137e857607f821691505b6020821081141561380957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156138235761382361385e565b5060010190565b600060ff821660ff8114156138415761384161385e565b60010192915050565b60008261385957613859613874565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610e9857600080fdfea264697066735822122029c85afa46ea9769ebd2b98e207e0fa660e2ac286f3ed3d9fda0dd8b2a064ac364736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://
Arg [1] : _maxSupply (uint256): 1000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [3] : 697066733a2f2f00000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
56480:6889:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58556:158;;;;;;;;;;-1:-1:-1;58556:158:0;;;;;:::i;:::-;;:::i;:::-;;33867:224;;;;;;;;;;-1:-1:-1;33867:224:0;;;;;:::i;:::-;;:::i;:::-;;;12042:14:1;;12035:22;12017:41;;12005:2;11990:18;33867:224:0;;;;;;;;21853:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23412:221::-;;;;;;;;;;-1:-1:-1;23412:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;10361:32:1;;;10343:51;;10331:2;10316:18;23412:221:0;10197:203:1;22935:411:0;;;;;;;;;;-1:-1:-1;22935:411:0;;;;;:::i;:::-;;:::i;34507:113::-;;;;;;;;;;-1:-1:-1;34595:10:0;:17;34507:113;;;26182:25:1;;;26170:2;26155:18;34507:113:0;26036:177:1;58849:219:0;;;;;;;;;;-1:-1:-1;58849:219:0;;;;;:::i;:::-;;:::i;24302:339::-;;;;;;;;;;-1:-1:-1;24302:339:0;;;;;:::i;:::-;;:::i;60821:157::-;;;;;;;;;;-1:-1:-1;60821:157:0;;;;;:::i;:::-;;:::i;34175:256::-;;;;;;;;;;-1:-1:-1;34175:256:0;;;;;:::i;:::-;;:::i;61728:196::-;;;;;;;;;;-1:-1:-1;61728:196:0;;;;;:::i;:::-;;:::i;59184:274::-;;;;;;;;;;-1:-1:-1;59184:274:0;;;;;:::i;:::-;;:::i;50059:412::-;;;;;;;;;;;;;:::i;24712:185::-;;;;;;;;;;-1:-1:-1;24712:185:0;;;;;:::i;:::-;;:::i;50479:429::-;;;;;;;;;;;;;:::i;34697:233::-;;;;;;;;;;-1:-1:-1;34697:233:0;;;;;:::i;:::-;;:::i;60443:104::-;;;;;;;;;;-1:-1:-1;60443:104:0;;;;;:::i;:::-;;:::i;59466:361::-;;;;;;;;;;-1:-1:-1;59466:361:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21373:239::-;;;;;;;;;;-1:-1:-1;21373:239:0;;;;;:::i;:::-;;:::i;56623:31::-;;;;;;;;;;;;;;;;56747:21;;;;;;;;;;;;;:::i;21103:208::-;;;;;;;;;;-1:-1:-1;21103:208:0;;;;;:::i;:::-;;:::i;41576:94::-;;;;;;;;;;;;;:::i;61402:318::-;;;;;;:::i;:::-;;:::i;21677:109::-;;;;;;;;;;-1:-1:-1;21677:109:0;;;;;:::i;:::-;21735:7;21762:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21762:16:0;;21677:109;60192:135;;;;;;;;;;-1:-1:-1;60192:135:0;;;;;:::i;:::-;;:::i;:::-;;;26017:6:1;26005:19;;;25987:38;;25975:2;25960:18;60192:135:0;25843:188:1;40925:87:0;;;;;;;;;;-1:-1:-1;40998:6:0;;-1:-1:-1;;;;;40998:6:0;40925:87;;22022:104;;;;;;;;;;;;;:::i;56699:35::-;;;;;;;;;;;;56733:1;56699:35;;;;;12155:4:1;12227:21;;;;12209:40;;12197:2;12182:18;56699:35:0;12069:186:1;61094:300:0;;;;;;:::i;:::-;;:::i;23705:295::-;;;;;;;;;;-1:-1:-1;23705:295:0;;;;;:::i;:::-;;:::i;24968:328::-;;;;;;;;;;-1:-1:-1;24968:328:0;;;;;:::i;:::-;;:::i;56777:37::-;;;;;;;;;;-1:-1:-1;56777:37:0;;;;;:::i;:::-;;:::i;60555:258::-;;;;;;;;;;-1:-1:-1;60555:258:0;;;;;:::i;:::-;;:::i;56661:31::-;;;;;;;;;;;;56691:1;56661:31;;49759:19;;;;;;;;;;-1:-1:-1;49759:19:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;11118:32:1;;;11100:51;;11182:2;11167:18;;11160:34;;;;11210:18;;;11203:34;11088:2;11073:18;49759:19:0;10898:345:1;58722:119:0;;;;;;;;;;-1:-1:-1;58722:119:0;;;;;:::i;:::-;;:::i;59835:229::-;;;;;;;;;;-1:-1:-1;59835:229:0;;;;;:::i;:::-;;:::i;24071:164::-;;;;;;;;;;-1:-1:-1;24071:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24192:25:0;;;24168:4;24192:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24071:164;41825:192;;;;;;;;;;-1:-1:-1;41825:192:0;;;;;:::i;:::-;;:::i;56995:36::-;;;;;;;;;;-1:-1:-1;56995:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56995:36:0;;;;-1:-1:-1;;;56995:36:0;;;;;;-1:-1:-1;;;56995:36:0;;;;;;-1:-1:-1;;;56995:36:0;;;;;;;;;;;;;;-1:-1:-1;;;;;26542:15:1;;;26524:34;;26594:15;;;;26589:2;26574:18;;26567:43;26657:1;26646:21;;;;26626:18;;;26619:49;;;;26716:4;26704:17;26699:2;26684:18;;26677:45;26753:3;26738:19;;26731:35;;;;26810:14;26803:22;26797:3;26782:19;;26775:51;26474:3;26459:19;56995:36:0;26218:614:1;58556:158:0;40998:6;;-1:-1:-1;;;;;40998:6:0;10708:10;41145:23;41137:68;;;;-1:-1:-1;;;41137:68:0;;;;;;;:::i;:::-;;;;;;;;;58656:5:::1;58641;58647;58641:12;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;:20;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;58641:20:0;;::::1;-1:-1:-1::0;;58641:20:0;;;;;;;-1:-1:-1;;;58641:20:0;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;58641:20:0;-1:-1:-1;;;58641:20:0::1;::::0;;;::::1;;;-1:-1:-1::0;;;;58641:20:0;;-1:-1:-1;;;58641:20:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;58641:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;58677:29:::1;::::0;::::1;::::0;58693:5;;58700;;58677:29:::1;:::i;:::-;;;;;;;;58556:158:::0;;:::o;33867:224::-;33969:4;-1:-1:-1;;;;;;33993:50:0;;-1:-1:-1;;;33993:50:0;;:90;;;34047:36;34071:11;34047:23;:36::i;:::-;33986:97;33867:224;-1:-1:-1;;33867:224:0:o;21853:100::-;21907:13;21940:5;21933:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21853:100;:::o;23412:221::-;23488:7;26895:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26895:16:0;23508:73;;;;-1:-1:-1;;;23508:73:0;;19953:2:1;23508:73:0;;;19935:21:1;19992:2;19972:18;;;19965:30;20031:34;20011:18;;;20004:62;-1:-1:-1;;;20082:18:1;;;20075:42;20134:19;;23508:73:0;19751:408:1;23508:73:0;-1:-1:-1;23601:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23601:24:0;;23412:221::o;22935:411::-;23016:13;23032:23;23047:7;23032:14;:23::i;:::-;23016:39;;23080:5;-1:-1:-1;;;;;23074:11:0;:2;-1:-1:-1;;;;;23074:11:0;;;23066:57;;;;-1:-1:-1;;;23066:57:0;;21959:2:1;23066:57:0;;;21941:21:1;21998:2;21978:18;;;21971:30;22037:34;22017:18;;;22010:62;-1:-1:-1;;;22088:18:1;;;22081:31;22129:19;;23066:57:0;21757:397:1;23066:57:0;10708:10;-1:-1:-1;;;;;23158:21:0;;;;:62;;-1:-1:-1;23183:37:0;23200:5;10708:10;24071:164;:::i;23183:37::-;23136:168;;;;-1:-1:-1;;;23136:168:0;;17594:2:1;23136:168:0;;;17576:21:1;17633:2;17613:18;;;17606:30;17672:34;17652:18;;;17645:62;17743:26;17723:18;;;17716:54;17787:19;;23136:168:0;17392:420:1;23136:168:0;23317:21;23326:2;23330:7;23317:8;:21::i;:::-;23005:341;22935:411;;:::o;58849:219::-;58910:4;58955:1;58934:5;58940;58934:12;;;;;;:::i;:::-;;;;;;;;;;;;;;:18;-1:-1:-1;;;;;58934:18:0;:22;:63;;;;;58979:5;58985;58979:12;;;;;;:::i;:::-;;;;;;;;;;;;;;:18;-1:-1:-1;;;;;58979:18:0;58960:15;:37;;58934:63;:102;;;;;59020:5;59026;59020:12;;;;;;:::i;:::-;;;;;;;;;;;;;;:16;-1:-1:-1;;;;;;;;59020:16:0;;;;59001:15;:35;;58934:102;:126;;;;;59041:5;59047;59041:12;;;;;;:::i;:::-;;;;;;;;;;;;;;:19;;;;;59040:20;58927:133;58849:219;-1:-1:-1;;58849:219:0:o;24302:339::-;24497:41;10708:10;24530:7;24497:18;:41::i;:::-;24489:103;;;;-1:-1:-1;;;24489:103:0;;;;;;;:::i;:::-;24605:28;24615:4;24621:2;24625:7;24605:9;:28::i;60821:157::-;40998:6;;-1:-1:-1;;;;;40998:6:0;10708:10;41145:23;41137:68;;;;-1:-1:-1;;;41137:68:0;;;;;;;:::i;:::-;60903:27:::1;60910:20;;60903:27;:::i;:::-;60941:29;:20;60964:6:::0;;60941:29:::1;:::i;34175:256::-:0;34272:7;34308:23;34325:5;34308:16;:23::i;:::-;34300:5;:31;34292:87;;;;-1:-1:-1;;;34292:87:0;;14127:2:1;34292:87:0;;;14109:21:1;14166:2;14146:18;;;14139:30;14205:34;14185:18;;;14178:62;-1:-1:-1;;;14256:18:1;;;14249:41;14307:19;;34292:87:0;13925:407:1;34292:87:0;-1:-1:-1;;;;;;34397:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;34175:256::o;61728:196::-;40998:6;;-1:-1:-1;;;;;40998:6:0;10708:10;41145:23;41137:68;;;;-1:-1:-1;;;41137:68:0;;;;;;;:::i;:::-;61817:17:::1;::::0;-1:-1:-1;;;9739:23:1;;61817:5:0::1;::::0;9787:1:1;9778:11;61817:17:0;;;::::1;::::0;;;;;::::1;::::0;;;:23;-1:-1:-1;;;;;61817:23:0::1;61799:15;:41;61791:91;;;::::0;-1:-1:-1;;;61791:91:0;;20366:2:1;61791:91:0::1;::::0;::::1;20348:21:1::0;20405:2;20385:18;;;20378:30;20444:34;20424:18;;;20417:62;-1:-1:-1;;;20495:18:1;;;20488:35;20540:19;;61791:91:0::1;20164:401:1::0;61791:91:0::1;61893:23;61902:7;61911:4;61893:8;:23::i;:::-;61728:196:::0;:::o;59184:274::-;59243:4;;59260:168;59284:20;:27;59280:31;;59260:168;;;59364:5;-1:-1:-1;;;;;59337:32:0;:20;59358:1;59337:23;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;59337:23:0;:32;59333:84;;;-1:-1:-1;59397:4:0;;59184:274;-1:-1:-1;;59184:274:0:o;59333:84::-;59313:3;;;;:::i;:::-;;;;59260:168;;;-1:-1:-1;59445:5:0;;59184:274;-1:-1:-1;;59184:274:0:o;50059:412::-;40998:6;;-1:-1:-1;;;;;40998:6:0;10708:10;41145:23;41137:68;;;;-1:-1:-1;;;41137:68:0;;;;;;;:::i;:::-;50131:21:::1;50171:11:::0;50163:41:::1;;;::::0;-1:-1:-1;;;50163:41:0;;24575:2:1;50163:41:0::1;::::0;::::1;24557:21:1::0;24614:2;24594:18;;;24587:30;-1:-1:-1;;;24633:18:1;;;24626:47;24690:18;;50163:41:0::1;24373:341:1::0;50163:41:0::1;50221:7;50217:193;50238:5;:12:::0;50234:16:::1;::::0;::::1;;50217:193;;;50294:1;50274:5;50280:1;50274:8;;;;;;;;;;:::i;:::-;;;;;;;;;;;:17;;;:21;50271:128;;;50315:68;50325:5;50331:1;50325:8;;;;;;;;;;:::i;:::-;;;;;;;;;;;:15;;;;;;;;;;-1:-1:-1::0;;;;;50325:15:0::1;50342:40;50377:4;50342:30;50354:5;50360:1;50354:8;;;;;;;;;;:::i;:::-;;;;;;;;;;;:17;;;50342:7;:11;;:30;;;;:::i;:::-;:34:::0;::::1;:40::i;:::-;50315:9;:68::i;:::-;50252:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50217:193;;;;50422:41;50432:7;40998:6:::0;;-1:-1:-1;;;;;40998:6:0;;40925:87;50432:7:::1;50441:21;50422:9;:41::i;24712:185::-:0;24850:39;24867:4;24873:2;24877:7;24850:39;;;;;;;;;;;;:16;:39::i;50479:429::-;40998:6;;-1:-1:-1;;;;;40998:6:0;10708:10;41145:23;41137:68;;;;-1:-1:-1;;;41137:68:0;;;;;;;:::i;:::-;50555:21:::1;50595:11:::0;50587:44:::1;;;::::0;-1:-1:-1;;;50587:44:0;;25696:2:1;50587:44:0::1;::::0;::::1;25678:21:1::0;25735:2;25715:18;;;25708:30;-1:-1:-1;;;25754:18:1;;;25747:50;25814:18;;50587:44:0::1;25494:344:1::0;50587:44:0::1;50648:7;50644:203;50665:5;:12:::0;50661:16:::1;::::0;::::1;;50644:203;;;50726:1;50701:5;50707:1;50701:8;;;;;;;;;;:::i;:::-;;;;;;;;;;;:22;;;:26;50698:138;;;50747:73;50757:5;50763:1;50757:8;;;;;;;;;;:::i;:::-;;;;;;;;;;;:15;;;;;;;;;;-1:-1:-1::0;;;;;50757:15:0::1;50774:45;50814:4;50774:35;50786:5;50792:1;50786:8;;;;;;;;;;:::i;:::-;;;;;;;;;;;:22;;;50774:7;:11;;:35;;;;:::i;50747:73::-;50679:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50644:203;;34697:233:::0;34772:7;34808:30;34595:10;:17;;34507:113;34808:30;34800:5;:38;34792:95;;;;-1:-1:-1;;;34792:95:0;;23813:2:1;34792:95:0;;;23795:21:1;23852:2;23832:18;;;23825:30;23891:34;23871:18;;;23864:62;-1:-1:-1;;;23942:18:1;;;23935:42;23994:19;;34792:95:0;23611:408:1;34792:95:0;34905:10;34916:5;34905:17;;;;;;;;:::i;:::-;;;;;;;;;34898:24;;34697:233;;;:::o;60443:104::-;40998:6;;-1:-1:-1;;;;;40998:6:0;10708:10;41145:23;41137:68;;;;-1:-1:-1;;;41137:68:0;;;;;;;:::i;:::-;60518:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;60443:104:::0;:::o;59466:361::-;59529:16;59558:23;59584:17;59594:6;59584:9;:17::i;:::-;59558:43;;59612:25;59654:15;-1:-1:-1;;;;;59640:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59640:30:0;;59612:58;;59686:9;59681:113;59701:15;59697:1;:19;59681:113;;;59752:30;59772:6;59780:1;59752:19;:30::i;:::-;59738:8;59747:1;59738:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;59718:3;;;;:::i;:::-;;;;59681:113;;;-1:-1:-1;59811:8:0;59466:361;-1:-1:-1;;;59466:361:0:o;21373:239::-;21445:7;21481:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21481:16:0;21516:19;21508:73;;;;-1:-1:-1;;;21508:73:0;;18780:2:1;21508:73:0;;;18762:21:1;18819:2;18799:18;;;18792:30;18858:34;18838:18;;;18831:62;-1:-1:-1;;;18909:18:1;;;18902:39;18958:19;;21508:73:0;18578:405:1;56747:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21103:208::-;21175:7;-1:-1:-1;;;;;21203:19:0;;21195:74;;;;-1:-1:-1;;;21195:74:0;;18369:2:1;21195:74:0;;;18351:21:1;18408:2;18388:18;;;18381:30;18447:34;18427:18;;;18420:62;-1:-1:-1;;;18498:18:1;;;18491:40;18548:19;;21195:74:0;18167:406:1;21195:74:0;-1:-1:-1;;;;;;21287:16:0;;;;;:9;:16;;;;;;;21103:208::o;41576:94::-;40998:6;;-1:-1:-1;;;;;40998:6:0;10708:10;41145:23;41137:68;;;;-1:-1:-1;;;41137:68:0;;;;;;;:::i;:::-;41641:21:::1;41659:1;41641:9;:21::i;:::-;41576:94::o:0;61402:318::-;57751:689;;;;;;;;;;;;;-1:-1:-1;;;57751:689:0;;;61473:6;57821:17;57832:5;57821:10;:17::i;:::-;57813:44;;;;-1:-1:-1;;;57813:44:0;;22361:2:1;57813:44:0;;;22343:21:1;22400:2;22380:18;;;22373:30;-1:-1:-1;;;22419:18:1;;;22412:44;22473:18;;57813:44:0;22159:338:1;57813:44:0;57885:1;57876:6;:10;;;57868:41;;;;-1:-1:-1;;;57868:41:0;;13431:2:1;57868:41:0;;;13413:21:1;13470:2;13450:18;;;13443:30;-1:-1:-1;;;13489:18:1;;;13482:48;13547:18;;57868:41:0;13229:342:1;57868:41:0;57939:16;;57929:6;:26;;;;57920:86;;;;-1:-1:-1;;;57920:86:0;;;;;;;:::i;:::-;58044:1;58025:16;;:20;58017:54;;;;-1:-1:-1;;;58017:54:0;;18019:2:1;58017:54:0;;;18001:21:1;18058:2;18038:18;;;18031:30;-1:-1:-1;;;18077:18:1;;;18070:51;18138:18;;58017:54:0;17817:345:1;58017:54:0;58100:5;58106;58100:12;;;;;;:::i;:::-;;;;;;;;;;;;;;:21;;-1:-1:-1;;;58100:21:0;;;;;58090:31;;;;;58082:60;;;;-1:-1:-1;;;58082:60:0;;16481:2:1;58082:60:0;;;16463:21:1;16520:2;16500:18;;;16493:30;-1:-1:-1;;;16539:18:1;;;16532:46;16595:18;;58082:60:0;16279:340:1;58082:60:0;58227:5;58233;58227:12;;;;;;:::i;:::-;;;;;;;;;;;;;;:25;-1:-1:-1;;;58227:25:0;;;;;;58161:92;;;58202:14;;;;58227:25;;58167:18;;58179:5;;58167:18;:::i;:::-;;;;;;;;;;;;;:32;58186:12;10708:10;;10628:98;58186:12;-1:-1:-1;;;;;58167:32:0;;;;;;;;;;;;-1:-1:-1;58167:32:0;;:49;;;:32;;:49;:::i;:::-;58161:92;;;;58153:125;;;;-1:-1:-1;;;58153:125:0;;;;;;;:::i;:::-;58331:6;58310:27;;:5;58316;58310:12;;;;;;:::i;:::-;;;;;;;;;;;;;:18;;;:27;;;;:::i;:::-;58297:9;:40;;58289:70;;;;-1:-1:-1;;;58289:70:0;;23467:2:1;58289:70:0;;;23449:21:1;23506:2;23486:18;;;23479:30;-1:-1:-1;;;23525:18:1;;;23518:47;23582:18;;58289:70:0;23265:341:1;58289:70:0;58413:6;58406:14;;58370:11;58382:5;58370:18;;;;;;:::i;:::-;;;;;;;;;;;;;:32;58389:12;10708:10;;10628:98;58389:12;-1:-1:-1;;;;;58370:32:0;;;;;;;;;;;;-1:-1:-1;58370:32:0;;;:50;;:32;;-1:-1:-1;58370:50:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;61494:27:::1;61508:12;10708:10:::0;;10628:98;61494:27:::1;61491:188;;;61592:21;::::0;;-1:-1:-1;;;9478:21:1;;61592:11:0::1;9524:1:1::0;9515:11;;61592:21:0;;;;;;;;;;;;;10708:10;-1:-1:-1;61592:35:0;;;::::1;::::0;;;;;;;-1:-1:-1;;;9739:23:1;;9787:1;9778:11;;61552:23:0;;;;;;;;;;;;;;;;;;:37;;;;;;;;;56733:1:::1;::::0;61552:75:::1;::::0;61592:35:::1;::::0;;::::1;::::0;61552:37:::1;:75;:::i;:::-;61546:96;;;;61538:129;;;;-1:-1:-1::0;;;61538:129:0::1;;;;;;;:::i;:::-;61689:23;61698:6;61689:23;;61706:5;61689:8;:23::i;60192:135::-:0;60266:6;60292:11;60304:5;60292:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;60292:27:0;;;;;;;;;;;;;;-1:-1:-1;60192:135:0;;;;:::o;22022:104::-;22078:13;22111:7;22104:14;;;;;:::i;61094:300::-;57751:689;;;;;;;;;;;;;-1:-1:-1;;;57751:689:0;;;61164:6;57821:17;57832:5;57821:10;:17::i;:::-;57813:44;;;;-1:-1:-1;;;57813:44:0;;22361:2:1;57813:44:0;;;22343:21:1;22400:2;22380:18;;;22373:30;-1:-1:-1;;;22419:18:1;;;22412:44;22473:18;;57813:44:0;22159:338:1;57813:44:0;57885:1;57876:6;:10;;;57868:41;;;;-1:-1:-1;;;57868:41:0;;13431:2:1;57868:41:0;;;13413:21:1;13470:2;13450:18;;;13443:30;-1:-1:-1;;;13489:18:1;;;13482:48;13547:18;;57868:41:0;13229:342:1;57868:41:0;57939:16;;57929:6;:26;;;;57920:86;;;;-1:-1:-1;;;57920:86:0;;;;;;;:::i;:::-;58044:1;58025:16;;:20;58017:54;;;;-1:-1:-1;;;58017:54:0;;18019:2:1;58017:54:0;;;18001:21:1;18058:2;18038:18;;;18031:30;-1:-1:-1;;;18077:18:1;;;18070:51;18138:18;;58017:54:0;17817:345:1;58017:54:0;58100:5;58106;58100:12;;;;;;:::i;:::-;;;;;;;;;;;;;;:21;;-1:-1:-1;;;58100:21:0;;;;;58090:31;;;;;58082:60;;;;-1:-1:-1;;;58082:60:0;;16481:2:1;58082:60:0;;;16463:21:1;16520:2;16500:18;;;16493:30;-1:-1:-1;;;16539:18:1;;;16532:46;16595:18;;58082:60:0;16279:340:1;58082:60:0;58227:5;58233;58227:12;;;;;;:::i;:::-;;;;;;;;;;;;;;:25;-1:-1:-1;;;58227:25:0;;;;;;58161:92;;;58202:14;;;;58227:25;;58167:18;;58179:5;;58167:18;:::i;:::-;;;;;;;;;;;;;:32;58186:12;10708:10;;10628:98;58186:12;-1:-1:-1;;;;;58167:32:0;;;;;;;;;;;;-1:-1:-1;58167:32:0;;:49;;;:32;;:49;:::i;:::-;58161:92;;;;58153:125;;;;-1:-1:-1;;;58153:125:0;;;;;;;:::i;:::-;58331:6;58310:27;;:5;58316;58310:12;;;;;;:::i;:::-;;;;;;;;;;;;;:18;;;:27;;;;:::i;:::-;58297:9;:40;;58289:70;;;;-1:-1:-1;;;58289:70:0;;23467:2:1;58289:70:0;;;23449:21:1;23506:2;23486:18;;;23479:30;-1:-1:-1;;;23525:18:1;;;23518:47;23582:18;;58289:70:0;23265:341:1;58289:70:0;58413:6;58406:14;;58370:11;58382:5;58370:18;;;;;;:::i;:::-;;;;;;;;;;;;;:32;58389:12;10708:10;;10628:98;58389:12;-1:-1:-1;;;;;58370:32:0;;;;;;;;;;;;-1:-1:-1;58370:32:0;;;:50;;:32;;-1:-1:-1;58370:50:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;61191:27:::1;61205:12;10708:10:::0;;10628:98;61191:27:::1;61183:60;;;::::0;-1:-1:-1;;;61183:60:0;;24226:2:1;61183:60:0::1;::::0;::::1;24208:21:1::0;24265:2;24245:18;;;24238:30;-1:-1:-1;;;24284:18:1;;;24277:50;24344:18;;61183:60:0::1;24024:344:1::0;61183:60:0::1;61268:23;::::0;;-1:-1:-1;;;9739:23:1;;61268:11:0::1;9787:1:1::0;9778:11;;61268:23:0;;;;;;;;;;;10708:10;-1:-1:-1;61268:37:0;;;::::1;::::0;;;;;;56691:1:::1;61268:37;::::0;;::::1;::::0;61262:54:::1;;;61254:98;;;::::0;-1:-1:-1;;;61254:98:0;;24921:2:1;61254:98:0::1;::::0;::::1;24903:21:1::0;24960:2;24940:18;;;24933:30;24999:33;24979:18;;;24972:61;25050:18;;61254:98:0::1;24719:355:1::0;23705:295:0;-1:-1:-1;;;;;23808:24:0;;10708:10;23808:24;;23800:62;;;;-1:-1:-1;;;23800:62:0;;16127:2:1;23800:62:0;;;16109:21:1;16166:2;16146:18;;;16139:30;16205:27;16185:18;;;16178:55;16250:18;;23800:62:0;15925:349:1;23800:62:0;10708:10;23875:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23875:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;23875:53:0;;;;;;;;;;23944:48;;12017:41:1;;;23875:42:0;;10708:10;23944:48;;11990:18:1;23944:48:0;;;;;;;23705:295;;:::o;24968:328::-;25143:41;10708:10;25176:7;25143:18;:41::i;:::-;25135:103;;;;-1:-1:-1;;;25135:103:0;;;;;;;:::i;:::-;25249:39;25263:4;25269:2;25273:7;25282:5;25249:13;:39::i;:::-;24968:328;;;;:::o;56777:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56777:37:0;;-1:-1:-1;56777:37:0;:::o;60555:258::-;26871:4;26895:16;;;:7;:16;;;;;;60620:13;;-1:-1:-1;;;;;26895:16:0;60646:76;;;;-1:-1:-1;;;60646:76:0;;21543:2:1;60646:76:0;;;21525:21:1;21582:2;21562:18;;;21555:30;21621:34;21601:18;;;21594:62;-1:-1:-1;;;21672:18:1;;;21665:45;21727:19;;60646:76:0;21341:411:1;60646:76:0;60764:10;:8;:10::i;:::-;60776:18;:7;:16;:18::i;:::-;60747:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;60733:72;;60555:258;;;:::o;49759:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49759:19:0;;;;-1:-1:-1;49759:19:0;:::o;58722:119::-;40998:6;;-1:-1:-1;;;;;40998:6:0;10708:10;41145:23;41137:68;;;;-1:-1:-1;;;41137:68:0;;;;;;;:::i;:::-;58827:6:::1;58805:5;58811;58805:12;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:19:::1;;:28:::0;;;::::1;;-1:-1:-1::0;;58805:28:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;58722:119:0:o;59835:229::-;59899:7;59919:25;59947:24;59964:6;59947:16;:24::i;:::-;60008:15;;59835:229;-1:-1:-1;;;59835:229:0:o;41825:192::-;40998:6;;-1:-1:-1;;;;;40998:6:0;10708:10;41145:23;41137:68;;;;-1:-1:-1;;;41137:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41914:22:0;::::1;41906:73;;;::::0;-1:-1:-1;;;41906:73:0;;14958:2:1;41906:73:0::1;::::0;::::1;14940:21:1::0;14997:2;14977:18;;;14970:30;15036:34;15016:18;;;15009:62;-1:-1:-1;;;15087:18:1;;;15080:36;15133:19;;41906:73:0::1;14756:402:1::0;41906:73:0::1;41990:19;42000:8;41990:9;:19::i;20746:293::-:0;20848:4;-1:-1:-1;;;;;;20881:40:0;;-1:-1:-1;;;20881:40:0;;:101;;-1:-1:-1;;;;;;;20934:48:0;;-1:-1:-1;;;20934:48:0;20881:101;:150;;;-1:-1:-1;;;;;;;;;;12399:40:0;;;20995:36;12290:157;30806:174;30881:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30881:29:0;-1:-1:-1;;;;;30881:29:0;;;;;;;;:24;;30935:23;30881:24;30935:14;:23::i;:::-;-1:-1:-1;;;;;30926:46:0;;;;;;;;;;;30806:174;;:::o;27100:348::-;27193:4;26895:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26895:16:0;27210:73;;;;-1:-1:-1;;;27210:73:0;;16826:2:1;27210:73:0;;;16808:21:1;16865:2;16845:18;;;16838:30;16904:34;16884:18;;;16877:62;-1:-1:-1;;;16955:18:1;;;16948:42;17007:19;;27210:73:0;16624:408:1;27210:73:0;27294:13;27310:23;27325:7;27310:14;:23::i;:::-;27294:39;;27363:5;-1:-1:-1;;;;;27352:16:0;:7;-1:-1:-1;;;;;27352:16:0;;:51;;;;27396:7;-1:-1:-1;;;;;27372:31:0;:20;27384:7;27372:11;:20::i;:::-;-1:-1:-1;;;;;27372:31:0;;27352:51;:87;;;-1:-1:-1;;;;;;24192:25:0;;;24168:4;24192:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27407:32;27344:96;27100:348;-1:-1:-1;;;;27100:348:0:o;30110:578::-;30269:4;-1:-1:-1;;;;;30242:31:0;:23;30257:7;30242:14;:23::i;:::-;-1:-1:-1;;;;;30242:31:0;;30234:85;;;;-1:-1:-1;;;30234:85:0;;21133:2:1;30234:85:0;;;21115:21:1;21172:2;21152:18;;;21145:30;21211:34;21191:18;;;21184:62;-1:-1:-1;;;21262:18:1;;;21255:39;21311:19;;30234:85:0;20931:405:1;30234:85:0;-1:-1:-1;;;;;30338:16:0;;30330:65;;;;-1:-1:-1;;;30330:65:0;;15722:2:1;30330:65:0;;;15704:21:1;15761:2;15741:18;;;15734:30;15800:34;15780:18;;;15773:62;-1:-1:-1;;;15851:18:1;;;15844:34;15895:19;;30330:65:0;15520:400:1;30330:65:0;30408:39;30429:4;30435:2;30439:7;30408:20;:39::i;:::-;30512:29;30529:1;30533:7;30512:8;:29::i;:::-;-1:-1:-1;;;;;30554:15:0;;;;;;:9;:15;;;;;:20;;30573:1;;30554:15;:20;;30573:1;;30554:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30585:13:0;;;;;;:9;:13;;;;;:18;;30602:1;;30585:13;:18;;30602:1;;30585:18;:::i;:::-;;;;-1:-1:-1;;30614:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30614:21:0;-1:-1:-1;;;;;30614:21:0;;;;;;;;;30653:27;;30614:16;;30653:27;;;;;;;30110:578;;;:::o;61932:520::-;61999:28;62041:7;-1:-1:-1;;;;;62030:19:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62030:19:0;;61999:50;;62067:6;62062:323;62083:7;62079:1;:11;62062:323;;;62112:17;62172:16;;62134:6;62133:7;:35;;34595:10;:17;62133:35;;;62143:9;:7;:9::i;:::-;62132:56;;;;:::i;:::-;62112:76;;62203:19;62225:47;62244:16;;62242:18;;;;;:::i;:::-;;;;;-1:-1:-1;62262:9:0;62225:16;:47::i;:::-;62203:69;-1:-1:-1;62287:40:0;10708:10;62311:15;:11;62325:1;62311:15;:::i;:::-;62287:9;:40::i;:::-;62362:11;62342:14;62357:1;62342:17;;;;;;;;:::i;:::-;;;;;;:31;;;;;62097:288;;62092:3;;;;;:::i;:::-;;;;62062:323;;;-1:-1:-1;62400:44:0;62415:14;10708:10;62400:44;;;;;;;:::i;:::-;;;;;;;;61988:464;61932:520;;:::o;45788:220::-;45846:7;45870:6;45866:20;;-1:-1:-1;45885:1:0;45878:8;;45866:20;45897:9;45909:5;45913:1;45909;:5;:::i;:::-;45897:17;-1:-1:-1;45942:1:0;45933:5;45937:1;45897:17;45933:5;:::i;:::-;:10;45925:56;;;;-1:-1:-1;;;45925:56:0;;19551:2:1;45925:56:0;;;19533:21:1;19590:2;19570:18;;;19563:30;19629:34;19609:18;;;19602:62;-1:-1:-1;;;19680:18:1;;;19673:31;19721:19;;45925:56:0;19349:397:1;45925:56:0;45999:1;45788:220;-1:-1:-1;;;45788:220:0:o;46486:153::-;46544:7;46576:1;46572;:5;46564:44;;;;-1:-1:-1;;;46564:44:0;;17239:2:1;46564:44:0;;;17221:21:1;17278:2;17258:18;;;17251:30;17317:28;17297:18;;;17290:56;17363:18;;46564:44:0;17037:350:1;46564:44:0;46626:5;46630:1;46626;:5;:::i;50916:180::-;50990:12;51008:8;-1:-1:-1;;;;;51008:13:0;51029:7;51008:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50989:52;;;51060:7;51052:36;;;;-1:-1:-1;;;51052:36:0;;22704:2:1;51052:36:0;;;22686:21:1;22743:2;22723:18;;;22716:30;-1:-1:-1;;;22762:18:1;;;22755:46;22818:18;;51052:36:0;22502:340:1;42025:173:0;42100:6;;;-1:-1:-1;;;;;42117:17:0;;;-1:-1:-1;;;;;;42117:17:0;;;;;;;42150:40;;42100:6;;;42117:17;42100:6;;42150:40;;42081:16;;42150:40;42070:128;42025:173;:::o;26178:315::-;26335:28;26345:4;26351:2;26355:7;26335:9;:28::i;:::-;26382:48;26405:4;26411:2;26415:7;26424:5;26382:22;:48::i;:::-;26374:111;;;;-1:-1:-1;;;26374:111:0;;;;;;;:::i;60076:108::-;60136:13;60169:7;60162:14;;;;;:::i;290:723::-;346:13;567:10;563:53;;-1:-1:-1;;594:10:0;;;;;;;;;;;;-1:-1:-1;;;594:10:0;;;;;290:723::o;563:53::-;641:5;626:12;682:78;689:9;;682:78;;715:8;;;;:::i;:::-;;-1:-1:-1;738:10:0;;-1:-1:-1;746:2:0;738:10;;:::i;:::-;;;682:78;;;770:19;802:6;-1:-1:-1;;;;;792:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;792:17:0;;770:39;;820:154;827:10;;820:154;;854:11;864:1;854:11;;:::i;:::-;;-1:-1:-1;923:10:0;931:2;923:5;:10;:::i;:::-;910:24;;:2;:24;:::i;:::-;897:39;;880:6;887;880:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;880:56:0;;;;;;;;-1:-1:-1;951:11:0;960:2;951:11;;:::i;:::-;;;820:154;;35543:589;-1:-1:-1;;;;;35749:18:0;;35745:187;;35784:40;35816:7;36959:10;:17;;36932:24;;;;:15;:24;;;;;:44;;;36987:24;;;;;;;;;;;;36855:164;35784:40;35745:187;;;35854:2;-1:-1:-1;;;;;35846:10:0;:4;-1:-1:-1;;;;;35846:10:0;;35842:90;;35873:47;35906:4;35912:7;35873:32;:47::i;:::-;-1:-1:-1;;;;;35946:16:0;;35942:183;;35979:45;36016:7;35979:36;:45::i;35942:183::-;36052:4;-1:-1:-1;;;;;36046:10:0;:2;-1:-1:-1;;;;;36046:10:0;;36042:83;;36073:40;36101:2;36105:7;36073:27;:40::i;62568:398::-;62609:7;62942:16;;62910:15;62891:12;10708:10;;10628:98;62891:12;62874:30;;;;;;;8018:2:1;8014:15;;;;-1:-1:-1;;8010:53:1;7998:66;;8089:2;8080:12;;7869:229;62874:30:0;;;;;;;;;;;;;62864:41;;;;;;62856:50;;62855:70;;;;:::i;:::-;62785:32;;-1:-1:-1;;62802:14:0;8018:2:1;8014:15;8010:53;62785:32:0;;;7998:66:1;62823:15:0;;8080:12:1;;62785:32:0;;;;;;;;;;;;62775:43;;;;;;62767:52;;62766:72;;;;:::i;:::-;62739:12;62722:14;62685:34;62703:16;62685:15;:34;:::i;:::-;:51;;;;:::i;:::-;:66;;;;:::i;:::-;:154;;;;:::i;:::-;:241;;;;:::i;:::-;62668:269;;;;;;10139:19:1;;10183:2;10174:12;;10010:182;62668:269:0;;;;;;;;;;;;;62658:280;;;;;;62636:303;;:322;;;;:::i;:::-;62629:329;;62568:398;:::o;62974:392::-;63049:7;63105:20;;;:12;:20;;;;;;63084:6;;63105:24;63101:57;;-1:-1:-1;63138:20:0;;;;:12;:20;;;;;;63101:57;63169:20;;;;:12;:20;;;;;;:29;;;63213:20;;;;;;:24;63209:73;;63262:20;;;;:12;:20;;;;;;;63239;;;;;:43;63209:73;63293:20;;;;:12;:20;;;;;;:27;;;;63338:20;;;-1:-1:-1;63338:20:0;;;62974:392::o;27790:110::-;27866:26;27876:2;27880:7;27866:26;;;;;;;;;;;;:9;:26::i;31545:803::-;31700:4;-1:-1:-1;;;;;31721:13:0;;3053:20;3101:8;31717:624;;31757:72;;-1:-1:-1;;;31757:72:0;;-1:-1:-1;;;;;31757:36:0;;;;;:72;;10708:10;;31808:4;;31814:7;;31823:5;;31757:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31757:72:0;;;;;;;;-1:-1:-1;;31757:72:0;;;;;;;;;;;;:::i;:::-;;;31753:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32003:13:0;;31999:272;;32046:60;;-1:-1:-1;;;32046:60:0;;;;;;;:::i;31999:272::-;32221:6;32215:13;32206:6;32202:2;32198:15;32191:38;31753:533;-1:-1:-1;;;;;;31880:55:0;-1:-1:-1;;;31880:55:0;;-1:-1:-1;31873:62:0;;31717:624;-1:-1:-1;32325:4:0;31545:803;;;;;;:::o;37646:988::-;37912:22;37962:1;37937:22;37954:4;37937:16;:22::i;:::-;:26;;;;:::i;:::-;37974:18;37995:26;;;:17;:26;;;;;;37912:51;;-1:-1:-1;38128:28:0;;;38124:328;;-1:-1:-1;;;;;38195:18:0;;38173:19;38195:18;;;:12;:18;;;;;;;;:34;;;;;;;;;38246:30;;;;;;:44;;;38363:30;;:17;:30;;;;;:43;;;38124:328;-1:-1:-1;38548:26:0;;;;:17;:26;;;;;;;;38541:33;;;-1:-1:-1;;;;;38592:18:0;;;;;:12;:18;;;;;:34;;;;;;;38585:41;37646:988::o;38929:1079::-;39207:10;:17;39182:22;;39207:21;;39227:1;;39207:21;:::i;:::-;39239:18;39260:24;;;:15;:24;;;;;;39633:10;:26;;39182:46;;-1:-1:-1;39260:24:0;;39182:46;;39633:26;;;;;;:::i;:::-;;;;;;;;;39611:48;;39697:11;39672:10;39683;39672:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;39777:28;;;:15;:28;;;;;;;:41;;;39949:24;;;;;39942:31;39984:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39000:1008;;;38929:1079;:::o;36433:221::-;36518:14;36535:20;36552:2;36535:16;:20::i;:::-;-1:-1:-1;;;;;36566:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;36611:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;36433:221:0:o;28127:321::-;28257:18;28263:2;28267:7;28257:5;:18::i;:::-;28308:54;28339:1;28343:2;28347:7;28356:5;28308:22;:54::i;:::-;28286:154;;;;-1:-1:-1;;;28286:154:0;;;;;;;:::i;28784:382::-;-1:-1:-1;;;;;28864:16:0;;28856:61;;;;-1:-1:-1;;;28856:61:0;;19190:2:1;28856:61:0;;;19172:21:1;;;19209:18;;;19202:30;19268:34;19248:18;;;19241:62;19320:18;;28856:61:0;18988:356:1;28856:61:0;26871:4;26895:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26895:16:0;:30;28928:58;;;;-1:-1:-1;;;28928:58:0;;15365:2:1;28928:58:0;;;15347:21:1;15404:2;15384:18;;;15377:30;15443;15423:18;;;15416:58;15491:18;;28928:58:0;15163:352:1;28928:58:0;28999:45;29028:1;29032:2;29036:7;28999:20;:45::i;:::-;-1:-1:-1;;;;;29057:13:0;;;;;;:9;:13;;;;;:18;;29074:1;;29057:13;:18;;29074:1;;29057:18;:::i;:::-;;;;-1:-1:-1;;29086:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29086:21:0;-1:-1:-1;;;;;29086:21:0;;;;;;;;29125:33;;29086:16;;;29125:33;;29086:16;;29125:33;28784:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:1;78:5;-1:-1:-1;;;;;149:2:1;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:221;1036:5;1089:3;1082:4;1074:6;1070:17;1066:27;1056:55;;1107:1;1104;1097:12;1056:55;1129:79;1204:3;1195:6;1182:20;1175:4;1167:6;1163:17;1129:79;:::i;1219:171::-;1286:20;;-1:-1:-1;;;;;1335:30:1;;1325:41;;1315:69;;1380:1;1377;1370:12;1395:156;1461:20;;1521:4;1510:16;;1500:27;;1490:55;;1541:1;1538;1531:12;1556:186;1615:6;1668:2;1656:9;1647:7;1643:23;1639:32;1636:52;;;1684:1;1681;1674:12;1636:52;1707:29;1726:9;1707:29;:::i;1747:260::-;1815:6;1823;1876:2;1864:9;1855:7;1851:23;1847:32;1844:52;;;1892:1;1889;1882:12;1844:52;1915:29;1934:9;1915:29;:::i;:::-;1905:39;;1963:38;1997:2;1986:9;1982:18;1963:38;:::i;:::-;1953:48;;1747:260;;;;;:::o;2012:328::-;2089:6;2097;2105;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;2197:29;2216:9;2197:29;:::i;:::-;2187:39;;2245:38;2279:2;2268:9;2264:18;2245:38;:::i;:::-;2235:48;;2330:2;2319:9;2315:18;2302:32;2292:42;;2012:328;;;;;:::o;2345:666::-;2440:6;2448;2456;2464;2517:3;2505:9;2496:7;2492:23;2488:33;2485:53;;;2534:1;2531;2524:12;2485:53;2557:29;2576:9;2557:29;:::i;:::-;2547:39;;2605:38;2639:2;2628:9;2624:18;2605:38;:::i;:::-;2595:48;;2690:2;2679:9;2675:18;2662:32;2652:42;;2745:2;2734:9;2730:18;2717:32;-1:-1:-1;;;;;2764:6:1;2761:30;2758:50;;;2804:1;2801;2794:12;2758:50;2827:22;;2880:4;2872:13;;2868:27;-1:-1:-1;2858:55:1;;2909:1;2906;2899:12;2858:55;2932:73;2997:7;2992:2;2979:16;2974:2;2970;2966:11;2932:73;:::i;:::-;2922:83;;;2345:666;;;;;;;:::o;3016:254::-;3081:6;3089;3142:2;3130:9;3121:7;3117:23;3113:32;3110:52;;;3158:1;3155;3148:12;3110:52;3181:29;3200:9;3181:29;:::i;:::-;3171:39;;3229:35;3260:2;3249:9;3245:18;3229:35;:::i;3275:254::-;3343:6;3351;3404:2;3392:9;3383:7;3379:23;3375:32;3372:52;;;3420:1;3417;3410:12;3372:52;3443:29;3462:9;3443:29;:::i;:::-;3433:39;3519:2;3504:18;;;;3491:32;;-1:-1:-1;;;3275:254:1:o;3534:615::-;3620:6;3628;3681:2;3669:9;3660:7;3656:23;3652:32;3649:52;;;3697:1;3694;3687:12;3649:52;3737:9;3724:23;-1:-1:-1;;;;;3807:2:1;3799:6;3796:14;3793:34;;;3823:1;3820;3813:12;3793:34;3861:6;3850:9;3846:22;3836:32;;3906:7;3899:4;3895:2;3891:13;3887:27;3877:55;;3928:1;3925;3918:12;3877:55;3968:2;3955:16;3994:2;3986:6;3983:14;3980:34;;;4010:1;4007;4000:12;3980:34;4063:7;4058:2;4048:6;4045:1;4041:14;4037:2;4033:23;4029:32;4026:45;4023:65;;;4084:1;4081;4074:12;4023:65;4115:2;4107:11;;;;;4137:6;;-1:-1:-1;3534:615:1;;-1:-1:-1;;;;3534:615:1:o;4154:245::-;4212:6;4265:2;4253:9;4244:7;4240:23;4236:32;4233:52;;;4281:1;4278;4271:12;4233:52;4320:9;4307:23;4339:30;4363:5;4339:30;:::i;4404:249::-;4473:6;4526:2;4514:9;4505:7;4501:23;4497:32;4494:52;;;4542:1;4539;4532:12;4494:52;4574:9;4568:16;4593:30;4617:5;4593:30;:::i;4658:322::-;4727:6;4780:2;4768:9;4759:7;4755:23;4751:32;4748:52;;;4796:1;4793;4786:12;4748:52;4836:9;4823:23;-1:-1:-1;;;;;4861:6:1;4858:30;4855:50;;;4901:1;4898;4891:12;4855:50;4924;4966:7;4957:6;4946:9;4942:22;4924:50;:::i;4985:396::-;5063:6;5071;5124:2;5112:9;5103:7;5099:23;5095:32;5092:52;;;5140:1;5137;5130:12;5092:52;5180:9;5167:23;-1:-1:-1;;;;;5205:6:1;5202:30;5199:50;;;5245:1;5242;5235:12;5199:50;5268;5310:7;5301:6;5290:9;5286:22;5268:50;:::i;:::-;5258:60;;;5337:38;5371:2;5360:9;5356:18;5337:38;:::i;5386:390::-;5461:6;5469;5522:2;5510:9;5501:7;5497:23;5493:32;5490:52;;;5538:1;5535;5528:12;5490:52;5578:9;5565:23;-1:-1:-1;;;;;5603:6:1;5600:30;5597:50;;;5643:1;5640;5633:12;5597:50;5666;5708:7;5699:6;5688:9;5684:22;5666:50;:::i;:::-;5656:60;;;5735:35;5766:2;5755:9;5751:18;5735:35;:::i;5781:1009::-;5881:6;5889;5933:9;5924:7;5920:23;5963:3;5959:2;5955:12;5952:32;;;5980:1;5977;5970:12;5952:32;6020:9;6007:23;-1:-1:-1;;;;;6045:6:1;6042:30;6039:50;;;6085:1;6082;6075:12;6039:50;6108;6150:7;6141:6;6130:9;6126:22;6108:50;:::i;:::-;6098:60;-1:-1:-1;;6192:4:1;-1:-1:-1;;6174:16:1;;6170:27;6167:47;;;6210:1;6207;6200:12;6167:47;;6236:17;;:::i;:::-;6276:37;6309:2;6298:9;6294:18;6276:37;:::i;:::-;6269:5;6262:52;6346:37;6379:2;6368:9;6364:18;6346:37;:::i;:::-;6341:2;6334:5;6330:14;6323:61;6436:2;6425:9;6421:18;6408:32;6485:7;6482:1;6471:22;6462:7;6459:35;6449:63;;6508:1;6505;6498:12;6449:63;6539:2;6528:14;;6521:31;6584:37;6616:3;6601:19;;6584:37;:::i;:::-;6579:2;6572:5;6568:14;6561:61;6683:3;6672:9;6668:19;6655:33;6649:3;6642:5;6638:15;6631:58;6722:37;6753:4;6742:9;6738:20;6722:37;:::i;:::-;6716:3;6709:5;6705:15;6698:62;6779:5;6769:15;;;5781:1009;;;;;:::o;6795:180::-;6854:6;6907:2;6895:9;6886:7;6882:23;6878:32;6875:52;;;6923:1;6920;6913:12;6875:52;-1:-1:-1;6946:23:1;;6795:180;-1:-1:-1;6795:180:1:o;6980:182::-;7037:6;7090:2;7078:9;7069:7;7065:23;7061:32;7058:52;;;7106:1;7103;7096:12;7058:52;7129:27;7146:9;7129:27;:::i;7167:435::-;7220:3;7258:5;7252:12;7285:6;7280:3;7273:19;7311:4;7340:2;7335:3;7331:12;7324:19;;7377:2;7370:5;7366:14;7398:1;7408:169;7422:6;7419:1;7416:13;7408:169;;;7483:13;;7471:26;;7517:12;;;;7552:15;;;;7444:1;7437:9;7408:169;;;-1:-1:-1;7593:3:1;;7167:435;-1:-1:-1;;;;;7167:435:1:o;7607:257::-;7648:3;7686:5;7680:12;7713:6;7708:3;7701:19;7729:63;7785:6;7778:4;7773:3;7769:14;7762:4;7755:5;7751:16;7729:63;:::i;:::-;7846:2;7825:15;-1:-1:-1;;7821:29:1;7812:39;;;;7853:4;7808:50;;7607:257;-1:-1:-1;;7607:257:1:o;8353:276::-;8484:3;8522:6;8516:13;8538:53;8584:6;8579:3;8572:4;8564:6;8560:17;8538:53;:::i;:::-;8607:16;;;;;8353:276;-1:-1:-1;;8353:276:1:o;8634:637::-;8914:3;8952:6;8946:13;8968:53;9014:6;9009:3;9002:4;8994:6;8990:17;8968:53;:::i;:::-;9084:13;;9043:16;;;;9106:57;9084:13;9043:16;9140:4;9128:17;;9106:57;:::i;:::-;-1:-1:-1;;;9185:20:1;;9214:22;;;9263:1;9252:13;;8634:637;-1:-1:-1;;;;8634:637:1:o;10405:488::-;-1:-1:-1;;;;;10674:15:1;;;10656:34;;10726:15;;10721:2;10706:18;;10699:43;10773:2;10758:18;;10751:34;;;10821:3;10816:2;10801:18;;10794:31;;;10599:4;;10842:45;;10867:19;;10859:6;10842:45;:::i;:::-;10834:53;10405:488;-1:-1:-1;;;;;;10405:488:1:o;11248:261::-;11427:2;11416:9;11409:21;11390:4;11447:56;11499:2;11488:9;11484:18;11476:6;11447:56;:::i;11514:358::-;11721:2;11710:9;11703:21;11684:4;11741:56;11793:2;11782:9;11778:18;11770:6;11741:56;:::i;:::-;11733:64;;11862:1;11858;11853:3;11849:11;11845:19;11837:6;11833:32;11828:2;11817:9;11813:18;11806:60;11514:358;;;;;:::o;12260:219::-;12409:2;12398:9;12391:21;12372:4;12429:44;12469:2;12458:9;12454:18;12446:6;12429:44;:::i;12484:740::-;12705:3;12694:9;12687:22;12668:4;12726:45;12766:3;12755:9;12751:19;12743:6;12726:45;:::i;:::-;12718:53;;-1:-1:-1;;;;;12863:2:1;12854:6;12848:13;12844:22;12839:2;12828:9;12824:18;12817:50;12931:2;12925;12917:6;12913:15;12907:22;12903:31;12898:2;12887:9;12883:18;12876:59;;13003:2;12995:6;12991:15;12985:22;12982:1;12971:37;12966:2;12955:9;12951:18;12944:65;13074:4;13068:2;13060:6;13056:15;13050:22;13046:33;13040:3;13029:9;13025:19;13018:62;13135:3;13127:6;13123:16;13117:23;13111:3;13100:9;13096:19;13089:52;13210:3;13202:6;13198:16;13192:23;13185:31;13178:39;13172:3;13161:9;13157:19;13150:68;12484:740;;;;;:::o;13576:344::-;13778:2;13760:21;;;13817:2;13797:18;;;13790:30;-1:-1:-1;;;13851:2:1;13836:18;;13829:50;13911:2;13896:18;;13576:344::o;14337:414::-;14539:2;14521:21;;;14578:2;14558:18;;;14551:30;14617:34;14612:2;14597:18;;14590:62;-1:-1:-1;;;14683:2:1;14668:18;;14661:48;14741:3;14726:19;;14337:414::o;20570:356::-;20772:2;20754:21;;;20791:18;;;20784:30;20850:34;20845:2;20830:18;;20823:62;20917:2;20902:18;;20570:356::o;22847:413::-;23049:2;23031:21;;;23088:2;23068:18;;;23061:30;23127:34;23122:2;23107:18;;23100:62;-1:-1:-1;;;23193:2:1;23178:18;;23171:47;23250:3;23235:19;;22847:413::o;25079:410::-;25281:2;25263:21;;;25320:2;25300:18;;;25293:30;25359:34;25354:2;25339:18;;25332:62;-1:-1:-1;;;25425:2:1;25410:18;;25403:44;25479:3;25464:19;;25079:410::o;26837:248::-;26904:2;26898:9;26946:4;26934:17;;-1:-1:-1;;;;;26966:34:1;;27002:22;;;26963:62;26960:88;;;27028:18;;:::i;:::-;27064:2;27057:22;26837:248;:::o;27090:224::-;27129:3;27157:6;27190:2;27187:1;27183:10;27220:2;27217:1;27213:10;27251:3;27247:2;27243:12;27238:3;27235:21;27232:47;;;27259:18;;:::i;:::-;27295:13;;27090:224;-1:-1:-1;;;;27090:224:1:o;27319:128::-;27359:3;27390:1;27386:6;27383:1;27380:13;27377:39;;;27396:18;;:::i;:::-;-1:-1:-1;27432:9:1;;27319:128::o;27452:120::-;27492:1;27518;27508:35;;27523:18;;:::i;:::-;-1:-1:-1;27557:9:1;;27452:120::o;27577:168::-;27617:7;27683:1;27679;27675:6;27671:14;27668:1;27665:21;27660:1;27653:9;27646:17;27642:45;27639:71;;;27690:18;;:::i;:::-;-1:-1:-1;27730:9:1;;27577:168::o;27750:125::-;27790:4;27818:1;27815;27812:8;27809:34;;;27823:18;;:::i;:::-;-1:-1:-1;27860:9:1;;27750:125::o;27880:258::-;27952:1;27962:113;27976:6;27973:1;27970:13;27962:113;;;28052:11;;;28046:18;28033:11;;;28026:39;27998:2;27991:10;27962:113;;;28093:6;28090:1;28087:13;28084:48;;;-1:-1:-1;;28128:1:1;28110:16;;28103:27;27880:258::o;28143:136::-;28182:3;28210:5;28200:39;;28219:18;;:::i;:::-;-1:-1:-1;;;28255:18:1;;28143:136::o;28284:380::-;28363:1;28359:12;;;;28406;;;28427:61;;28481:4;28473:6;28469:17;28459:27;;28427:61;28534:2;28526:6;28523:14;28503:18;28500:38;28497:161;;;28580:10;28575:3;28571:20;28568:1;28561:31;28615:4;28612:1;28605:15;28643:4;28640:1;28633:15;28497:161;;28284:380;;;:::o;28669:135::-;28708:3;-1:-1:-1;;28729:17:1;;28726:43;;;28749:18;;:::i;:::-;-1:-1:-1;28796:1:1;28785:13;;28669:135::o;28809:175::-;28846:3;28890:4;28883:5;28879:16;28919:4;28910:7;28907:17;28904:43;;;28927:18;;:::i;:::-;28976:1;28963:15;;28809:175;-1:-1:-1;;28809:175:1:o;28989:112::-;29021:1;29047;29037:35;;29052:18;;:::i;:::-;-1:-1:-1;29086:9:1;;28989:112::o;29106:127::-;29167:10;29162:3;29158:20;29155:1;29148:31;29198:4;29195:1;29188:15;29222:4;29219:1;29212:15;29238:127;29299:10;29294:3;29290:20;29287:1;29280:31;29330:4;29327:1;29320:15;29354:4;29351:1;29344:15;29370:127;29431:10;29426:3;29422:20;29419:1;29412:31;29462:4;29459:1;29452:15;29486:4;29483:1;29476:15;29502:127;29563:10;29558:3;29554:20;29551:1;29544:31;29594:4;29591:1;29584:15;29618:4;29615:1;29608:15;29634:127;29695:10;29690:3;29686:20;29683:1;29676:31;29726:4;29723:1;29716:15;29750:4;29747:1;29740:15;29766:131;-1:-1:-1;;;;;;29840:32:1;;29830:43;;29820:71;;29887:1;29884;29877:12
Swarm Source
ipfs://29c85afa46ea9769ebd2b98e207e0fa660e2ac286f3ed3d9fda0dd8b2a064ac3
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.