Feature Tip: Add private address tag to any address under My Name Tag !
Contract Overview
Balance:
1.14 Ether
EtherValue:
$2,249.56 (@ $1,973.30/ETH)
More Info
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x63e2282e0a6d187c904e798f6064019d7b26a98465b5c0caafa14780d2cbdf4f | Transfer From | 13963110 | 218 days 19 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0 Ether | 0.00633695 | ||
0x48ba613eedb44e192d4021c408436289be5eb981fa8092ae582858d8df069894 | Set Approval For... | 13238140 | 332 days 8 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0 Ether | 0.00321905 | ||
0xd0ae0196c257939801aa8b819e6ab3c3a18acea9c6795954b4a1675b2215a485 | Set Approval For... | 13178317 | 341 days 14 hrs ago | 0xabe3bf5043ed0833d3da5148cd58d0f946891e61 | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0 Ether | 0.00410432 | |
0x4e8d1ff3b48dfe6cb96f707aea38fe47cf77cebe56ce4c5b82687c4331d0db39 | Set Approval For... | 13176328 | 341 days 22 hrs ago | 0x2e4aaffe4bd1a72044fb27f85692c3e61c143d9c | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0 Ether | 0.00470024 | |
0x87fdd256c508d05fd5c88d83feff3d973b8ff9b57f6ae161385f6ed458ef3759 | Set Approval For... | 13170556 | 342 days 19 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0 Ether | 0.00413973 | ||
0xc10f77d5af4b7f7fc7174df2ceb2b8e8f9ff463ad6896ba4b5606356ac0d354d | Set Approval For... | 13164587 | 343 days 17 hrs ago | 0xe90e640b09fdef82c3e33f2ba2d80d4a784ba0f5 | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0 Ether | 0.00381783 | |
0xfe4a2b8d807f64e1acfc5641ad445259da4331ae041a8699c045a29db6542aa9 | Mint With Loot | 13154481 | 345 days 7 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.02843976 | ||
0x6a2350bd6e2655078ed555711c78b8dd7044260df61b2ca90fac75b93226942d | Mint With Loot | 13154481 | 345 days 7 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.02638027 | ||
0x05d183258d2f1b3cf5addee522cb4327903e08ee596adc85b5d6412365a6847a | Mint With Loot | 13153019 | 345 days 12 hrs ago | 0x27d9fae4e12e6d66cbc8584c9f545e7319769829 | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.02324998 | |
0x27e09a1914e69012f0734be67ab30c6ae01f1f6f2721cc69f1859148ef488cf0 | Mint With Loot | 13153009 | 345 days 12 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.02859314 | ||
0x0fe8dc6c2f74bbc6fed4f49049c1e6d2dcd8410037dfc0746d36f061f4e4bd69 | Set Approval For... | 13152803 | 345 days 13 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0 Ether | 0.00700963 | ||
0x8f110ddd754405cc074593b38a691bc496865567be93a78e8ff0d259928539a9 | Mint With Loot | 13152186 | 345 days 15 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.02992177 | ||
0xfc17922ffa9707a40f2eaf32a580246573f58d8ac8fa9fef5c21020bc6005ce6 | Mint With Loot | 13152186 | 345 days 15 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.02992177 | ||
0xe2efc9c5e32dda4ec374df343c50425aa122269a219b067194e78f27304a24ae | Mint With Loot | 13152170 | 345 days 15 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.02324621 | ||
0x75940d5f4703ac4509d6a1b378984cd17fac466d05a7693118087a9c37e9ba0d | Mint With Loot | 13152165 | 345 days 15 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.02282879 | ||
0x32675ca846fd7aff8dc011e72f52b18478661a0311b1dba20dfa084194c979de | Mint With Loot | 13150009 | 345 days 23 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.04 Ether | 0.02218261 | ||
0x0423994159899f29b1709035c8eb8ba78421f2c36800b74e77ff21b572f59334 | Mint With Loot | 13149629 | 346 days 1 hr ago | 0xda9f4df68dc1957cd72ae1d9b645a3bd6e30c708 | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.01202333 | |
0x9f588369b530c75dbd90d74039f1378ac515c14b1203a76c77f1908dd7ecb00d | Mint With Loot | 13148412 | 346 days 5 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.04 Ether | 0.0212765 | ||
0xf3043e6418e53e4d3bf2fa51e0264e3a49e03c62be526be2741df93c6de879cb | Mint With Loot | 13148408 | 346 days 5 hrs ago | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.04 Ether | 0.02089445 | ||
0x9ed30ea1966d524772b14f5e31534e4aefd8f98b5d7865c8e548908b686b452e | Mint With Loot | 13148384 | 346 days 5 hrs ago | 0xd21b6b2ae0254060044024dc7e6929e8e08f07b9 | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.01595321 | |
0x8e417a9d35ba70a092ce7d03221a207c36fa8d95808f86b1f96b8ba0f27a7565 | Mint With Loot | 13148370 | 346 days 5 hrs ago | 0xd21b6b2ae0254060044024dc7e6929e8e08f07b9 | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.01778969 | |
0xec2c3fbb09ee6eb6896d459084af170f1dd8047209467d02fef8b124a9419716 | Mint With Loot | 13148264 | 346 days 6 hrs ago | Gitcoin Grants: Stackbrief | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.01948758 | |
0xe83741f5220018160a99f2b6c1b766f5b6993a7f49d561f1eae5bdec0b08bbd2 | Mint With Loot | 13148264 | 346 days 6 hrs ago | Gitcoin Grants: Stackbrief | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.01948758 | |
0x3058137587886123b63c0098aa04c95c2d7ab11bc1c408b0e1054dfaa4cc09e2 | Mint With Loot | 13148264 | 346 days 6 hrs ago | Gitcoin Grants: Stackbrief | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.03 Ether | 0.01913765 | |
0x646214799a94e9910b433a77aeed2fde84661ad9cc6e7b65cd443bfbae753cb5 | Mint With Loot | 13148258 | 346 days 6 hrs ago | 0x1a50a6238eb67285ccd4df17f75cce430baae2a4 | IN | 0xb2c3f1109cfdae570df9fabc326597c7f7305c5a | 0.05 Ether | 0.02162853 |
[ Download CSV Export ]
View more zero value Internal Transactions in Advanced View mode
Contract Name:
LootWear
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @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 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 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); } function ownerWithdraw() external onlyOwner { payable(_owner).transfer(address(this).balance); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(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 {} } /** * @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); } /** * @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; uint256 lootPrice = 0.03 ether; /** * @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(); } } contract LootWear is ERC721Enumerable, ReentrancyGuard, Ownable { ERC721 loot = ERC721(0xFF9C1b15B16263C61d017ee9F65C50e4AE0113D7); uint[][] private distributions = [ [0,0,0,0,0,1,1,1,2,2], [0,0,0,0,0,1,1,1,2,2], [0,0,0,0,0,1,1,1,2,2] ]; string[] private types = [ "Shirt", "Hoodie", "Hat", "Socks", "Underwear" ]; string[] private colors = [ "Black", "White", "Yellow", "Pink", "Aquamarine" ]; function sample(uint256 rand) internal pure returns (uint256) { if (rand < 40) { return 0; } if (rand < 65) { return 1; } if (rand < 85) { return 2; } if (rand < 95) { return 3; } return 4; } function getIndices(uint256 tokenId) internal pure returns (uint256, uint256, uint256) { uint256 source = uint256(keccak256(abi.encodePacked(tokenId))); uint256 num1 = source % 100; uint256 num2 = (source << 16) % 100; uint256 num3 = (source << 32) % 100; return (sample(num1), sample(num2), sample(num3)); } function tokenURI(uint256 tokenId) override public view returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string[7] memory parts; uint256 idx1; uint256 idx2; uint256 idx3; (idx1, idx2, idx3) = getIndices(tokenId); parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base">'; string memory _type; if(uint256(keccak256(abi.encodePacked(tokenId))) % 0x224 == 0) { // Super rare drop _type = "Mask"; } else { _type = types[idx1]; } parts[1] = string(abi.encodePacked( _type)); parts[2] = '</text><text x="10" y="40" class="base">'; parts[3] = string(abi.encodePacked(colors[idx2])); parts[4] = '</text><text x="10" y="60" class="base">'; parts[5] = string(abi.encodePacked(colors[idx3], " logo")); parts[6] = '</text></svg>'; string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6])); string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Wearable #', toString(tokenId), '", "description": "Loot(wear) is randomly generated text for owners of Loot with option of redeeming the physical item.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } function mintWithLoot(uint256 tokenId) public payable nonReentrant { require(tokenId > 0 && tokenId < 8001, "Token ID invalid"); require(loot.ownerOf(tokenId) == msg.sender, "Not Loot owner"); require(0.03 ether <= msg.value, "Ether value sent is not correct"); _safeMint(_msgSender(), tokenId); } function mintWithoutLoot(uint256 tokenId) public payable nonReentrant { require(tokenId > 8000 && tokenId < 9001, "Token ID invalid"); require(1 ether <= msg.value, "Ether value sent is not correct"); _safeMint(_msgSender(), tokenId); } function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // 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); } constructor() ERC721("LootWear", "WEAR") Ownable() {} } /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintWithLoot","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintWithoutLoot","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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"}]
Contract Creation Code
666a94d74f430000600a55600d80546001600160a01b03191673ff9c1b15b16263c61d017ee9f65c50e4ae0113d7179055600060e081815261010082905261012082905261014082905261016082905260016101808190526101a08190526101c081905260026101e081905261020081905260809283526102208481526102408590526102608590526102808590526102a08590526102c08390526102e083905261030083905261032082905261034082905260a0526104a06040526103608481526103808590526103a08590526103c08590526103e094909452610400829052610420829052610440919091526104608190526104805260c0919091526200010d90600e90600362000351565b506040805160e081018252600560a082018181526414da1a5c9d60da1b60c08401528252825180840184526006815265486f6f64696560d01b6020828101919091528084019190915283518085018552600381526212185d60ea1b81830152838501528351808501855282815264536f636b7360d81b818301526060840152835180850190945260098452682ab73232b93bb2b0b960b91b908401526080820192909252620001c091600f9190620003af565b506040805160e081018252600560a0820181815264426c61636b60d81b60c084015282528251808401845281815264576869746560d81b6020828101919091528084019190915283518085018552600681526559656c6c6f7760d01b818301528385015283518085018552600481526350696e6b60e01b8183015260608401528351808501909452600a845269417175616d6172696e6560b01b908401526080820192909252620002759160109190620003af565b503480156200028357600080fd5b5060408051808201825260088152672637b7ba2bb2b0b960c11b6020808301918252835180850190945260048452632ba2a0a960e11b908401528151919291620002d0916000916200040f565b508051620002e69060019060208401906200040f565b50506001600b5550620002f933620002ff565b620005d5565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280548282559060005260206000209081019282156200039d579160200282015b828111156200039d5782516200038c908390600a6200049a565b509160200191906001019062000372565b50620003ab929150620004dd565b5090565b82805482825590600052602060002090810192821562000401579160200282015b82811115620004015782518051620003f09184916020909101906200040f565b5091602001919060010190620003d0565b50620003ab929150620004fe565b8280546200041d9062000598565b90600052602060002090601f0160209004810192826200044157600085556200048c565b82601f106200045c57805160ff19168380011785556200048c565b828001600101855582156200048c579182015b828111156200048c5782518255916020019190600101906200046f565b50620003ab9291506200051f565b8280548282559060005260206000209081019282156200048c579160200282015b828111156200048c578251829060ff16905591602001919060010190620004bb565b80821115620003ab576000620004f4828262000536565b50600101620004dd565b80821115620003ab57600062000515828262000559565b50600101620004fe565b5b80821115620003ab576000815560010162000520565b50805460008255906000526020600020908101906200055691906200051f565b50565b508054620005679062000598565b6000825580601f1062000578575050565b601f0160209004906000526020600020908101906200055691906200051f565b600181811c90821680620005ad57607f821691505b60208210811415620005cf57634e487b7160e01b600052602260045260246000fd5b50919050565b61279f80620005e56000396000f3fe6080604052600436106101355760003560e01c80636352211e116100ab578063a22cb4651161006f578063a22cb4651461033a578063b88d4fde1461035a578063c87b56dd1461037a578063e985e9c51461039a578063f2fde38b146103e3578063fd12c9681461040357600080fd5b80636352211e146102b257806370a08231146102d2578063715018a6146102f25780638da5cb5b1461030757806395d89b411461032557600080fd5b806318160ddd116100fd57806318160ddd146101fe57806323b872dd1461021d5780632f745c591461023d57806342842e0e1461025d5780634311de8f1461027d5780634f6ccce71461029257600080fd5b806301ffc9a71461013a57806306fdde031461016f578063081812fc14610191578063081e249b146101c9578063095ea7b3146101de575b600080fd5b34801561014657600080fd5b5061015a610155366004611fca565b610416565b60405190151581526020015b60405180910390f35b34801561017b57600080fd5b50610184610441565b6040516101669190612360565b34801561019d57600080fd5b506101b16101ac366004612004565b6104d3565b6040516001600160a01b039091168152602001610166565b6101dc6101d7366004612004565b61056d565b005b3480156101ea57600080fd5b506101dc6101f9366004611f9e565b610680565b34801561020a57600080fd5b506008545b604051908152602001610166565b34801561022957600080fd5b506101dc610238366004611e4a565b610796565b34801561024957600080fd5b5061020f610258366004611f9e565b6107c7565b34801561026957600080fd5b506101dc610278366004611e4a565b61085d565b34801561028957600080fd5b506101dc610878565b34801561029e57600080fd5b5061020f6102ad366004612004565b6108de565b3480156102be57600080fd5b506101b16102cd366004612004565b610971565b3480156102de57600080fd5b5061020f6102ed366004611dd0565b6109e8565b3480156102fe57600080fd5b506101dc610a6f565b34801561031357600080fd5b50600c546001600160a01b03166101b1565b34801561033157600080fd5b50610184610aa5565b34801561034657600080fd5b506101dc610355366004611f6b565b610ab4565b34801561036657600080fd5b506101dc610375366004611e8b565b610b79565b34801561038657600080fd5b50610184610395366004612004565b610bb1565b3480156103a657600080fd5b5061015a6103b5366004611e11565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156103ef57600080fd5b506101dc6103fe366004611dd0565b610f31565b6101dc610411366004612004565b610fc9565b60006001600160e01b0319821663780e9d6360e01b148061043b575061043b8261118a565b92915050565b606060008054610450906124d9565b80601f016020809104026020016040519081016040528092919081815260200182805461047c906124d9565b80156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166105515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6002600b5414156105c05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610548565b6002600b55611f40811180156105d7575061232981105b6106165760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881251081a5b9d985b1a5960821b6044820152606401610548565b34670de0b6b3a7640000111561066e5760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610548565b61067833826111da565b506001600b55565b600061068b82610971565b9050806001600160a01b0316836001600160a01b031614156106f95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610548565b336001600160a01b0382161480610715575061071581336103b5565b6107875760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610548565b61079183836111f8565b505050565b6107a03382611266565b6107bc5760405162461bcd60e51b8152600401610548906123fa565b61079183838361135d565b60006107d2836109e8565b82106108345760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610548565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61079183838360405180602001604052806000815250610b79565b600c546001600160a01b031633146108a25760405162461bcd60e51b8152600401610548906123c5565b600c546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156108db573d6000803e3d6000fd5b50565b60006108e960085490565b821061094c5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610548565b6008828154811061095f5761095f612585565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061043b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610548565b60006001600160a01b038216610a535760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610548565b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b03163314610a995760405162461bcd60e51b8152600401610548906123c5565b610aa36000611508565b565b606060018054610450906124d9565b6001600160a01b038216331415610b0d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610548565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610b833383611266565b610b9f5760405162461bcd60e51b8152600401610548906123fa565b610bab8484848461155a565b50505050565b6000818152600260205260409020546060906001600160a01b0316610c305760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610548565b610c38611da9565b6000806000610c468661158d565b60408051610120810190915260fd808252939650919450925090612605602083013984526040805160208082018990528251808303820181529183019092528051910120606090610c9a906102249061252f565b610cbf57506040805180820190915260048152634d61736b60e01b6020820152610d68565b600f8481548110610cd257610cd2612585565b906000526020600020018054610ce7906124d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d13906124d9565b8015610d605780601f10610d3557610100808354040283529160200191610d60565b820191906000526020600020905b815481529060010190602001808311610d4357829003601f168201915b505050505090505b80604051602001610d7991906120e3565b60408051601f1981840301815291905285600160200201819052506040518060600160405280602881526020016127426028913960408601526010805484908110610dc657610dc6612585565b90600052602060002001604051602001610de09190612191565b60408051808303601f190181529181526060808801929092528051918201905260288082526125dd602083013960808601526010805483908110610e2657610e26612585565b90600052602060002001604051602001610e40919061219d565b60408051601f1981840301815291815260a0870191825280518082018252600d81526c1e17ba32bc3a1f1e17b9bb339f60991b60208083019190915260c089018290528851818a01518a85015160608c015160808d015197519651600098610eb498959794969395929490939091016120ff565b60405160208183030381529060405290506000610f01610ed38a611621565b610edc8461171f565b604051602001610eed9291906121be565b60405160208183030381529060405261171f565b905080604051602001610f1491906122de565b60408051601f198184030181529190529998505050505050505050565b600c546001600160a01b03163314610f5b5760405162461bcd60e51b8152600401610548906123c5565b6001600160a01b038116610fc05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610548565b6108db81611508565b6002600b54141561101c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610548565b6002600b5580158015906110315750611f4181105b6110705760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881251081a5b9d985b1a5960821b6044820152606401610548565b600d546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b1580156110b457600080fd5b505afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec9190611df4565b6001600160a01b0316146111335760405162461bcd60e51b815260206004820152600e60248201526d2737ba102637b7ba1037bbb732b960911b6044820152606401610548565b34666a94d74f430000111561066e5760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610548565b60006001600160e01b031982166380ac58cd60e01b14806111bb57506001600160e01b03198216635b5e139f60e01b145b8061043b57506301ffc9a760e01b6001600160e01b031983161461043b565b6111f4828260405180602001604052806000815250611885565b5050565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061122d82610971565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166112df5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610548565b60006112ea83610971565b9050806001600160a01b0316846001600160a01b031614806113255750836001600160a01b031661131a846104d3565b6001600160a01b0316145b8061135557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661137082610971565b6001600160a01b0316146113d85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610548565b6001600160a01b03821661143a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610548565b6114458383836118b8565b6114506000826111f8565b6001600160a01b0383166000908152600360205260408120805460019290611479908490612496565b90915550506001600160a01b03821660009081526003602052604081208054600192906114a790849061244b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61156584848461135d565b61157184848484611970565b610bab5760405162461bcd60e51b815260040161054890612373565b600080600080846040516020016115a691815260200190565b60408051601f198184030181529190528051602090910120905060006115cd60648361252f565b905060006115e06064601085901b61252f565b905060006115f36064602086901b61252f565b90506115fe83611a7d565b61160783611a7d565b61161083611a7d565b965096509650505050509193909250565b6060816116455750506040805180820190915260018152600360fc1b602082015290565b8160005b811561166f578061165981612514565b91506116689050600a83612463565b9150611649565b60008167ffffffffffffffff81111561168a5761168a61259b565b6040519080825280601f01601f1916602001820160405280156116b4576020820181803683370190505b5090505b8415611355576116c9600183612496565b91506116d6600a8661252f565b6116e190603061244b565b60f81b8183815181106116f6576116f6612585565b60200101906001600160f81b031916908160001a905350611718600a86612463565b94506116b8565b80516060908061173f575050604080516020810190915260008152919050565b6000600361174e83600261244b565b6117589190612463565b611763906004612477565b9050600061177282602061244b565b67ffffffffffffffff81111561178a5761178a61259b565b6040519080825280601f01601f1916602001820160405280156117b4576020820181803683370190505b5090506000604051806060016040528060408152602001612702604091399050600181016020830160005b86811015611840576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b8352600490920191016117df565b50600386066001811461185a576002811461186b57611877565b613d3d60f01b600119830152611877565b603d60f81b6000198301525b505050918152949350505050565b61188f8383611acb565b61189c6000848484611970565b6107915760405162461bcd60e51b815260040161054890612373565b6001600160a01b0383166119135761190e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611936565b816001600160a01b0316836001600160a01b031614611936576119368382611c19565b6001600160a01b03821661194d5761079181611cb6565b826001600160a01b0316826001600160a01b031614610791576107918282611d65565b60006001600160a01b0384163b15611a7257604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906119b4903390899088908890600401612323565b602060405180830381600087803b1580156119ce57600080fd5b505af19250505080156119fe575060408051601f3d908101601f191682019092526119fb91810190611fe7565b60015b611a58573d808015611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b508051611a505760405162461bcd60e51b815260040161054890612373565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611355565b506001949350505050565b60006028821015611a9057506000919050565b6041821015611aa157506001919050565b6055821015611ab257506002919050565b605f821015611ac357506003919050565b506004919050565b6001600160a01b038216611b215760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610548565b6000818152600260205260409020546001600160a01b031615611b865760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610548565b611b92600083836118b8565b6001600160a01b0382166000908152600360205260408120805460019290611bbb90849061244b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611c26846109e8565b611c309190612496565b600083815260076020526040902054909150808214611c83576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611cc890600190612496565b60008381526009602052604081205460088054939450909284908110611cf057611cf0612585565b906000526020600020015490508060088381548110611d1157611d11612585565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611d4957611d4961256f565b6001900381819060005260206000200160009055905550505050565b6000611d70836109e8565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6040518060e001604052806007905b6060815260200190600190039081611db85790505090565b600060208284031215611de257600080fd5b8135611ded816125b1565b9392505050565b600060208284031215611e0657600080fd5b8151611ded816125b1565b60008060408385031215611e2457600080fd5b8235611e2f816125b1565b91506020830135611e3f816125b1565b809150509250929050565b600080600060608486031215611e5f57600080fd5b8335611e6a816125b1565b92506020840135611e7a816125b1565b929592945050506040919091013590565b60008060008060808587031215611ea157600080fd5b8435611eac816125b1565b93506020850135611ebc816125b1565b925060408501359150606085013567ffffffffffffffff80821115611ee057600080fd5b818701915087601f830112611ef457600080fd5b813581811115611f0657611f0661259b565b604051601f8201601f19908116603f01168101908382118183101715611f2e57611f2e61259b565b816040528281528a6020848701011115611f4757600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611f7e57600080fd5b8235611f89816125b1565b915060208301358015158114611e3f57600080fd5b60008060408385031215611fb157600080fd5b8235611fbc816125b1565b946020939093013593505050565b600060208284031215611fdc57600080fd5b8135611ded816125c6565b600060208284031215611ff957600080fd5b8151611ded816125c6565b60006020828403121561201657600080fd5b5035919050565b600081518084526120358160208601602086016124ad565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061206357607f831692505b602080841082141561208557634e487b7160e01b600052602260045260246000fd5b81801561209957600181146120aa576120d7565b60ff198616895284890196506120d7565b60008881526020902060005b868110156120cf5781548b8201529085019083016120b6565b505084890196505b50505050505092915050565b600082516120f58184602087016124ad565b9190910192915050565b6000885160206121128285838e016124ad565b8951918401916121258184848e016124ad565b89519201916121378184848d016124ad565b88519201916121498184848c016124ad565b875192019161215b8184848b016124ad565b865192019161216d8184848a016124ad565b855192019161217f81848489016124ad565b919091019a9950505050505050505050565b6000611ded8284612049565b60006121a98284612049565b64206c6f676f60d81b81526005019392505050565b737b226e616d65223a20225765617261626c65202360601b815282516000906121ee8160148501602088016124ad565b7f222c20226465736372697074696f6e223a20224c6f6f742877656172292069736014918401918201527f2072616e646f6d6c792067656e657261746564207465787420666f72206f776e60348201527f657273206f66204c6f6f742077697468206f7074696f6e206f6620726564656560548201527f6d696e672074686520706879736963616c206974656d2e222c2022696d61676560748201527f223a2022646174613a696d6167652f7376672b786d6c3b6261736536342c0000609482015283516122c38160b28401602088016124ad565b61227d60f01b60b2929091019182015260b401949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161231681601d8501602087016124ad565b91909101601d0192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123569083018461201d565b9695505050505050565b602081526000611ded602083018461201d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561245e5761245e612543565b500190565b60008261247257612472612559565b500490565b600081600019048311821515161561249157612491612543565b500290565b6000828210156124a8576124a8612543565b500390565b60005b838110156124c85781810151838201526020016124b0565b83811115610bab5750506000910152565b600181811c908216806124ed57607f821691505b6020821081141561250e57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561252857612528612543565b5060010190565b60008261253e5761253e612559565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146108db57600080fd5b6001600160e01b0319811681146108db57600080fdfe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223ea2646970667358221220d55b1956bdbd3068a6378e4f1b94dbec89fe9e5f43cbf167cd554d2279097ab564736f6c63430008070033
Deployed ByteCode Sourcemap
44607:4601:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38457:224;;;;;;;;;;-1:-1:-1;38457:224:0;;;;;:::i;:::-;;:::i;:::-;;;10475:14:1;;10468:22;10450:41;;10438:2;10423:18;38457:224:0;;;;;;;;25528:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27087:221::-;;;;;;;;;;-1:-1:-1;27087:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9773:32:1;;;9755:51;;9743:2;9728:18;27087:221:0;9609:203:1;48145:268:0;;;;;;:::i;:::-;;:::i;:::-;;26610:411;;;;;;;;;;-1:-1:-1;26610:411:0;;;;;:::i;:::-;;:::i;39097:113::-;;;;;;;;;;-1:-1:-1;39185:10:0;:17;39097:113;;;19487:25:1;;;19475:2;19460:18;39097:113:0;19341:177:1;27977:339:0;;;;;;;;;;-1:-1:-1;27977:339:0;;;;;:::i;:::-;;:::i;38765:256::-;;;;;;;;;;-1:-1:-1;38765:256:0;;;;;:::i;:::-;;:::i;28387:185::-;;;;;;;;;;-1:-1:-1;28387:185:0;;;;;:::i;:::-;;:::i;10468:110::-;;;;;;;;;;;;;:::i;39287:233::-;;;;;;;;;;-1:-1:-1;39287:233:0;;;;;:::i;:::-;;:::i;25222:239::-;;;;;;;;;;-1:-1:-1;25222:239:0;;;;;:::i;:::-;;:::i;24952:208::-;;;;;;;;;;-1:-1:-1;24952:208:0;;;;;:::i;:::-;;:::i;9834:94::-;;;;;;;;;;;;;:::i;9183:87::-;;;;;;;;;;-1:-1:-1;9256:6:0;;-1:-1:-1;;;;;9256:6:0;9183:87;;25697:104;;;;;;;;;;;;;:::i;27380:295::-;;;;;;;;;;-1:-1:-1;27380:295:0;;;;;:::i;:::-;;:::i;28643:328::-;;;;;;;;;;-1:-1:-1;28643:328:0;;;;;:::i;:::-;;:::i;45935:1852::-;;;;;;;;;;-1:-1:-1;45935:1852:0;;;;;:::i;:::-;;:::i;27746:164::-;;;;;;;;;;-1:-1:-1;27746:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;27867:25:0;;;27843:4;27867:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27746:164;10083:192;;;;;;;;;;-1:-1:-1;10083:192:0;;;;;:::i;:::-;;:::i;47795:338::-;;;;;;:::i;:::-;;:::i;38457:224::-;38559:4;-1:-1:-1;;;;;;38583:50:0;;-1:-1:-1;;;38583:50:0;;:90;;;38637:36;38661:11;38637:23;:36::i;:::-;38576:97;38457:224;-1:-1:-1;;38457:224:0:o;25528:100::-;25582:13;25615:5;25608:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25528:100;:::o;27087:221::-;27163:7;30570:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30570:16:0;27183:73;;;;-1:-1:-1;;;27183:73:0;;16005:2:1;27183:73:0;;;15987:21:1;16044:2;16024:18;;;16017:30;16083:34;16063:18;;;16056:62;-1:-1:-1;;;16134:18:1;;;16127:42;16186:19;;27183:73:0;;;;;;;;;-1:-1:-1;27276:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27276:24:0;;27087:221::o;48145:268::-;12238:1;12834:7;;:19;;12826:63;;;;-1:-1:-1;;;12826:63:0;;19183:2:1;12826:63:0;;;19165:21:1;19222:2;19202:18;;;19195:30;19261:33;19241:18;;;19234:61;19312:18;;12826:63:0;18981:355:1;12826:63:0;12238:1;12967:7;:18;48244:4:::1;48234:14:::0;::::1;:32:::0;::::1;;;;48262:4;48252:7;:14;48234:32;48226:61;;;::::0;-1:-1:-1;;;48226:61:0;;16779:2:1;48226:61:0::1;::::0;::::1;16761:21:1::0;16818:2;16798:18;;;16791:30;-1:-1:-1;;;16837:18:1;;;16830:46;16893:18;;48226:61:0::1;16577:340:1::0;48226:61:0::1;48317:9;48306:7;:20;;48298:64;;;::::0;-1:-1:-1;;;48298:64:0;;13625:2:1;48298:64:0::1;::::0;::::1;13607:21:1::0;13664:2;13644:18;;;13637:30;13703:33;13683:18;;;13676:61;13754:18;;48298:64:0::1;13423:355:1::0;48298:64:0::1;48373:32;8135:10:::0;48397:7:::1;48373:9;:32::i;:::-;-1:-1:-1::0;12194:1:0;13146:7;:22;48145:268::o;26610:411::-;26691:13;26707:23;26722:7;26707:14;:23::i;:::-;26691:39;;26755:5;-1:-1:-1;;;;;26749:11:0;:2;-1:-1:-1;;;;;26749:11:0;;;26741:57;;;;-1:-1:-1;;;26741:57:0;;17950:2:1;26741:57:0;;;17932:21:1;17989:2;17969:18;;;17962:30;18028:34;18008:18;;;18001:62;-1:-1:-1;;;18079:18:1;;;18072:31;18120:19;;26741:57:0;17748:397:1;26741:57:0;8135:10;-1:-1:-1;;;;;26833:21:0;;;;:62;;-1:-1:-1;26858:37:0;26875:5;8135:10;27746:164;:::i;26858:37::-;26811:168;;;;-1:-1:-1;;;26811:168:0;;14398:2:1;26811:168:0;;;14380:21:1;14437:2;14417:18;;;14410:30;14476:34;14456:18;;;14449:62;14547:26;14527:18;;;14520:54;14591:19;;26811:168:0;14196:420:1;26811:168:0;26992:21;27001:2;27005:7;26992:8;:21::i;:::-;26680:341;26610:411;;:::o;27977:339::-;28172:41;8135:10;28205:7;28172:18;:41::i;:::-;28164:103;;;;-1:-1:-1;;;28164:103:0;;;;;;;:::i;:::-;28280:28;28290:4;28296:2;28300:7;28280:9;:28::i;38765:256::-;38862:7;38898:23;38915:5;38898:16;:23::i;:::-;38890:5;:31;38882:87;;;;-1:-1:-1;;;38882:87:0;;10928:2:1;38882:87:0;;;10910:21:1;10967:2;10947:18;;;10940:30;11006:34;10986:18;;;10979:62;-1:-1:-1;;;11057:18:1;;;11050:41;11108:19;;38882:87:0;10726:407:1;38882:87:0;-1:-1:-1;;;;;;38987:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38765:256::o;28387:185::-;28525:39;28542:4;28548:2;28552:7;28525:39;;;;;;;;;;;;:16;:39::i;10468:110::-;9256:6;;-1:-1:-1;;;;;9256:6:0;8135:10;9403:23;9395:68;;;;-1:-1:-1;;;9395:68:0;;;;;;;:::i;:::-;10531:6:::1;::::0;10523:47:::1;::::0;-1:-1:-1;;;;;10531:6:0;;::::1;::::0;10548:21:::1;10523:47:::0;::::1;;;::::0;10531:6:::1;10523:47:::0;10531:6;10523:47;10548:21;10531:6;10523:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;10468:110::o:0;39287:233::-;39362:7;39398:30;39185:10;:17;;39097:113;39398:30;39390:5;:38;39382:95;;;;-1:-1:-1;;;39382:95:0;;18770:2:1;39382:95:0;;;18752:21:1;18809:2;18789:18;;;18782:30;18848:34;18828:18;;;18821:62;-1:-1:-1;;;18899:18:1;;;18892:42;18951:19;;39382:95:0;18568:408:1;39382:95:0;39495:10;39506:5;39495:17;;;;;;;;:::i;:::-;;;;;;;;;39488:24;;39287:233;;;:::o;25222:239::-;25294:7;25330:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25330:16:0;25365:19;25357:73;;;;-1:-1:-1;;;25357:73:0;;15234:2:1;25357:73:0;;;15216:21:1;15273:2;15253:18;;;15246:30;15312:34;15292:18;;;15285:62;-1:-1:-1;;;15363:18:1;;;15356:39;15412:19;;25357:73:0;15032:405:1;24952:208:0;25024:7;-1:-1:-1;;;;;25052:19:0;;25044:74;;;;-1:-1:-1;;;25044:74:0;;14823:2:1;25044:74:0;;;14805:21:1;14862:2;14842:18;;;14835:30;14901:34;14881:18;;;14874:62;-1:-1:-1;;;14952:18:1;;;14945:40;15002:19;;25044:74:0;14621:406:1;25044:74:0;-1:-1:-1;;;;;;25136:16:0;;;;;:9;:16;;;;;;;24952:208::o;9834:94::-;9256:6;;-1:-1:-1;;;;;9256:6:0;8135:10;9403:23;9395:68;;;;-1:-1:-1;;;9395:68:0;;;;;;;:::i;:::-;9899:21:::1;9917:1;9899:9;:21::i;:::-;9834:94::o:0;25697:104::-;25753:13;25786:7;25779:14;;;;;:::i;27380:295::-;-1:-1:-1;;;;;27483:24:0;;8135:10;27483:24;;27475:62;;;;-1:-1:-1;;;27475:62:0;;13271:2:1;27475:62:0;;;13253:21:1;13310:2;13290:18;;;13283:30;13349:27;13329:18;;;13322:55;13394:18;;27475:62:0;13069:349:1;27475:62:0;8135:10;27550:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;27550:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;27550:53:0;;;;;;;;;;27619:48;;10450:41:1;;;27550:42:0;;8135:10;27619:48;;10423:18:1;27619:48:0;;;;;;;27380:295;;:::o;28643:328::-;28818:41;8135:10;28851:7;28818:18;:41::i;:::-;28810:103;;;;-1:-1:-1;;;28810:103:0;;;;;;;:::i;:::-;28924:39;28938:4;28944:2;28948:7;28957:5;28924:13;:39::i;:::-;28643:328;;;;:::o;45935:1852::-;30546:4;30570:16;;;:7;:16;;;;;;46000:13;;-1:-1:-1;;;;;30570:16:0;46036:76;;;;-1:-1:-1;;;46036:76:0;;17534:2:1;46036:76:0;;;17516:21:1;17573:2;17553:18;;;17546:30;17612:34;17592:18;;;17585:62;-1:-1:-1;;;17663:18:1;;;17656:45;17718:19;;46036:76:0;17332:411:1;46036:76:0;46133:22;;:::i;:::-;46176:12;46199;46222;46276:19;46287:7;46276:10;:19::i;:::-;46316:266;;;;;;;;;;;;;46255:40;;-1:-1:-1;46255:40:0;;-1:-1:-1;46255:40:0;-1:-1:-1;46316:266:0;;;;;;;;46661:25;;;46316:8;46661:25;;;9551:19:1;;;46661:25:0;;;;;;;;;9586:12:1;;;46661:25:0;;;46651:36;;;;;46600:19;;46643:53;;46691:5;;46643:53;:::i;:::-;46640:188;;-1:-1:-1;46750:14:0;;;;;;;;;;;;-1:-1:-1;;;46750:14:0;;;;46640:188;;;46805:5;46811:4;46805:11;;;;;;;;:::i;:::-;;;;;;;;46797:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46640:188;46880:5;46862:24;;;;;;;;:::i;:::-;;;;-1:-1:-1;;46862:24:0;;;;;;;;;46844:5;46850:1;46844:8;;;:43;;;;46900:53;;;;;;;;;;;;;;;;;:8;;;:53;47009:6;:12;;47016:4;;47009:12;;;;;;:::i;:::-;;;;;;;;46992:30;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;46992:30:0;;;;;;46974:8;;;;:49;;;;47044:53;;;;;;;;;;;;46974:8;47044:53;;;:8;;;:53;47149:6;:12;;47156:4;;47149:12;;;;;;:::i;:::-;;;;;;;;47132:39;;;;;;;;:::i;:::-;;;;-1:-1:-1;;47132:39:0;;;;;;;;;47114:8;;;:58;;;47185:26;;;;;;;;;;-1:-1:-1;;;47114:8:0;47185:26;;;;;;;:8;;;:26;;;47271:8;;47281;;;;47291;;;;-1:-1:-1;;;47301:8:0;47311;;;;47321;;47254:86;;-1:-1:-1;;47254:86:0;;47271:8;;47281;;47291;;47301;;47311;;47185:26;;47254:86;;:::i;:::-;;;;;;;;;;;;;47224:117;;47362:18;47383:287;47451:17;47460:7;47451:8;:17::i;:::-;47632:28;47652:6;47632:13;:28::i;:::-;47410:257;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47383:13;:287::i;:::-;47362:308;;47747:4;47697:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;47697:55:0;;;;;;;;;;45935:1852;-1:-1:-1;;;;;;;;;45935:1852:0:o;10083:192::-;9256:6;;-1:-1:-1;;;;;9256:6:0;8135:10;9403:23;9395:68;;;;-1:-1:-1;;;9395:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10172:22:0;::::1;10164:73;;;::::0;-1:-1:-1;;;10164:73:0;;11759:2:1;10164:73:0::1;::::0;::::1;11741:21:1::0;11798:2;11778:18;;;11771:30;11837:34;11817:18;;;11810:62;-1:-1:-1;;;11888:18:1;;;11881:36;11934:19;;10164:73:0::1;11557:402:1::0;10164:73:0::1;10248:19;10258:8;10248:9;:19::i;47795:338::-:0;12238:1;12834:7;;:19;;12826:63;;;;-1:-1:-1;;;12826:63:0;;19183:2:1;12826:63:0;;;19165:21:1;19222:2;19202:18;;;19195:30;19261:33;19241:18;;;19234:61;19312:18;;12826:63:0;18981:355:1;12826:63:0;12238:1;12967:7;:18;47881:11;;;;;:29:::1;;;47906:4;47896:7;:14;47881:29;47873:58;;;::::0;-1:-1:-1;;;47873:58:0;;16779:2:1;47873:58:0::1;::::0;::::1;16761:21:1::0;16818:2;16798:18;;;16791:30;-1:-1:-1;;;16837:18:1;;;16830:46;16893:18;;47873:58:0::1;16577:340:1::0;47873:58:0::1;47950:4;::::0;:21:::1;::::0;-1:-1:-1;;;47950:21:0;;::::1;::::0;::::1;19487:25:1::0;;;47975:10:0::1;::::0;-1:-1:-1;;;;;47950:4:0::1;::::0;:12:::1;::::0;19460:18:1;;47950:21:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47950:35:0::1;;47942:62;;;::::0;-1:-1:-1;;;47942:62:0;;12523:2:1;47942:62:0::1;::::0;::::1;12505:21:1::0;12562:2;12542:18;;;12535:30;-1:-1:-1;;;12581:18:1;;;12574:44;12635:18;;47942:62:0::1;12321:338:1::0;47942:62:0::1;48037:9;48023:10;:23;;48015:67;;;::::0;-1:-1:-1;;;48015:67:0;;13625:2:1;48015:67:0::1;::::0;::::1;13607:21:1::0;13664:2;13644:18;;;13637:30;13703:33;13683:18;;;13676:61;13754:18;;48015:67:0::1;13423:355:1::0;24583:305:0;24685:4;-1:-1:-1;;;;;;24722:40:0;;-1:-1:-1;;;24722:40:0;;:105;;-1:-1:-1;;;;;;;24779:48:0;;-1:-1:-1;;;24779:48:0;24722:105;:158;;;-1:-1:-1;;;;;;;;;;23299:40:0;;;24844:36;23190:157;31465:110;31541:26;31551:2;31555:7;31541:26;;;;;;;;;;;;:9;:26::i;:::-;31465:110;;:::o;34463:174::-;34538:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34538:29:0;-1:-1:-1;;;;;34538:29:0;;;;;;;;:24;;34592:23;34538:24;34592:14;:23::i;:::-;-1:-1:-1;;;;;34583:46:0;;;;;;;;;;;34463:174;;:::o;30775:348::-;30868:4;30570:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30570:16:0;30885:73;;;;-1:-1:-1;;;30885:73:0;;13985:2:1;30885:73:0;;;13967:21:1;14024:2;14004:18;;;13997:30;14063:34;14043:18;;;14036:62;-1:-1:-1;;;14114:18:1;;;14107:42;14166:19;;30885:73:0;13783:408:1;30885:73:0;30969:13;30985:23;31000:7;30985:14;:23::i;:::-;30969:39;;31038:5;-1:-1:-1;;;;;31027:16:0;:7;-1:-1:-1;;;;;31027:16:0;;:51;;;;31071:7;-1:-1:-1;;;;;31047:31:0;:20;31059:7;31047:11;:20::i;:::-;-1:-1:-1;;;;;31047:31:0;;31027:51;:87;;;-1:-1:-1;;;;;;27867:25:0;;;27843:4;27867:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31082:32;31019:96;30775:348;-1:-1:-1;;;;30775:348:0:o;33767:578::-;33926:4;-1:-1:-1;;;;;33899:31:0;:23;33914:7;33899:14;:23::i;:::-;-1:-1:-1;;;;;33899:31:0;;33891:85;;;;-1:-1:-1;;;33891:85:0;;17124:2:1;33891:85:0;;;17106:21:1;17163:2;17143:18;;;17136:30;17202:34;17182:18;;;17175:62;-1:-1:-1;;;17253:18:1;;;17246:39;17302:19;;33891:85:0;16922:405:1;33891:85:0;-1:-1:-1;;;;;33995:16:0;;33987:65;;;;-1:-1:-1;;;33987:65:0;;12866:2:1;33987:65:0;;;12848:21:1;12905:2;12885:18;;;12878:30;12944:34;12924:18;;;12917:62;-1:-1:-1;;;12995:18:1;;;12988:34;13039:19;;33987:65:0;12664:400:1;33987:65:0;34065:39;34086:4;34092:2;34096:7;34065:20;:39::i;:::-;34169:29;34186:1;34190:7;34169:8;:29::i;:::-;-1:-1:-1;;;;;34211:15:0;;;;;;:9;:15;;;;;:20;;34230:1;;34211:15;:20;;34230:1;;34211:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34242:13:0;;;;;;:9;:13;;;;;:18;;34259:1;;34242:13;:18;;34259:1;;34242:18;:::i;:::-;;;;-1:-1:-1;;34271:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34271:21:0;-1:-1:-1;;;;;34271:21:0;;;;;;;;;34310:27;;34271:16;;34310:27;;;;;;;33767:578;;;:::o;10283:173::-;10358:6;;;-1:-1:-1;;;;;10375:17:0;;;-1:-1:-1;;;;;;10375:17:0;;;;;;;10408:40;;10358:6;;;10375:17;10358:6;;10408:40;;10339:16;;10408:40;10328:128;10283:173;:::o;29853:315::-;30010:28;30020:4;30026:2;30030:7;30010:9;:28::i;:::-;30057:48;30080:4;30086:2;30090:7;30099:5;30057:22;:48::i;:::-;30049:111;;;;-1:-1:-1;;;30049:111:0;;;;;;;:::i;45533:394::-;45593:7;45602;45611;45633:14;45685:7;45668:25;;;;;;9551:19:1;;9595:2;9586:12;;9422:182;45668:25:0;;;;-1:-1:-1;;45668:25:0;;;;;;;;;45658:36;;45668:25;45658:36;;;;;-1:-1:-1;45650:45:0;45723:12;45732:3;45658:36;45723:12;:::i;:::-;45708:27;-1:-1:-1;45746:12:0;45761:20;45778:3;45772:2;45762:12;;;45761:20;:::i;:::-;45746:35;-1:-1:-1;45792:12:0;45807:20;45824:3;45818:2;45808:12;;;45807:20;:::i;:::-;45792:35;;45868:12;45875:4;45868:6;:12::i;:::-;45882;45889:4;45882:6;:12::i;:::-;45896;45903:4;45896:6;:12::i;:::-;45860:49;;;;;;;;;;45533:394;;;;;:::o;48425:715::-;48481:13;48694:10;48690:53;;-1:-1:-1;;48721:10:0;;;;;;;;;;;;-1:-1:-1;;;48721:10:0;;;;;48425:715::o;48690:53::-;48768:5;48753:12;48809:78;48816:9;;48809:78;;48842:8;;;;:::i;:::-;;-1:-1:-1;48865:10:0;;-1:-1:-1;48873:2:0;48865:10;;:::i;:::-;;;48809:78;;;48897:19;48929:6;48919:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48919:17:0;;48897:39;;48947:154;48954:10;;48947:154;;48981:11;48991:1;48981:11;;:::i;:::-;;-1:-1:-1;49050:10:0;49058:2;49050:5;:10;:::i;:::-;49037:24;;:2;:24;:::i;:::-;49024:39;;49007:6;49014;49007:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;49007:56:0;;;;;;;;-1:-1:-1;49078:11:0;49087:2;49078:11;;:::i;:::-;;;48947:154;;49559:1607;49657:11;;49617:13;;49683:8;49679:23;;-1:-1:-1;;49693:9:0;;;;;;;;;-1:-1:-1;49693:9:0;;;49559:1607;-1:-1:-1;49559:1607:0:o;49679:23::-;49754:18;49792:1;49781:7;:3;49787:1;49781:7;:::i;:::-;49780:13;;;;:::i;:::-;49775:19;;:1;:19;:::i;:::-;49754:40;-1:-1:-1;49852:19:0;49884:15;49754:40;49897:2;49884:15;:::i;:::-;49874:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49874:26:0;;49852:48;;49913:18;49934:5;;;;;;;;;;;;;;;;;49913:26;;50003:1;49996:5;49992:13;50048:2;50040:6;50036:15;50099:1;50067:777;50122:3;50119:1;50116:10;50067:777;;;50177:1;50220:12;;;;;50214:19;50315:4;50303:2;50299:14;;;;;50281:40;;50275:47;50424:2;50420:14;;;50416:25;;50402:40;;50396:47;50553:1;50549:13;;;50545:24;;50531:39;;50525:46;50673:16;;;;50659:31;;50653:38;50351:1;50347:11;;;50445:4;50392:58;;;50383:68;50476:11;;50521:57;;;50512:67;;;;50604:11;;50649:49;;50640:59;50728:3;50724:13;50757:22;;50827:1;50812:17;;;;50170:9;50067:777;;;50071:44;50876:1;50871:3;50867:11;50897:1;50892:84;;;;50995:1;50990:82;;;;50860:212;;50892:84;-1:-1:-1;;;;;50925:17:0;;50918:43;50892:84;;50990:82;-1:-1:-1;;;;;51023:17:0;;51016:41;50860:212;-1:-1:-1;;;51088:26:0;;;51095:6;49559:1607;-1:-1:-1;;;;49559:1607:0:o;31802:321::-;31932:18;31938:2;31942:7;31932:5;:18::i;:::-;31983:54;32014:1;32018:2;32022:7;32031:5;31983:22;:54::i;:::-;31961:154;;;;-1:-1:-1;;;31961:154:0;;;;;;;:::i;40133:589::-;-1:-1:-1;;;;;40339:18:0;;40335:187;;40374:40;40406:7;41549:10;:17;;41522:24;;;;:15;:24;;;;;:44;;;41577:24;;;;;;;;;;;;41445:164;40374:40;40335:187;;;40444:2;-1:-1:-1;;;;;40436:10:0;:4;-1:-1:-1;;;;;40436:10:0;;40432:90;;40463:47;40496:4;40502:7;40463:32;:47::i;:::-;-1:-1:-1;;;;;40536:16:0;;40532:183;;40569:45;40606:7;40569:36;:45::i;40532:183::-;40642:4;-1:-1:-1;;;;;40636:10:0;:2;-1:-1:-1;;;;;40636:10:0;;40632:83;;40663:40;40691:2;40695:7;40663:27;:40::i;35202:803::-;35357:4;-1:-1:-1;;;;;35378:13:0;;15685:20;15733:8;35374:624;;35414:72;;-1:-1:-1;;;35414:72:0;;-1:-1:-1;;;;;35414:36:0;;;;;:72;;8135:10;;35465:4;;35471:7;;35480:5;;35414:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35414:72:0;;;;;;;;-1:-1:-1;;35414:72:0;;;;;;;;;;;;:::i;:::-;;;35410:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35660:13:0;;35656:272;;35703:60;;-1:-1:-1;;;35703:60:0;;;;;;;:::i;35656:272::-;35878:6;35872:13;35863:6;35859:2;35855:15;35848:38;35410:533;-1:-1:-1;;;;;;35537:55:0;-1:-1:-1;;;35537:55:0;;-1:-1:-1;35530:62:0;;35374:624;-1:-1:-1;35982:4:0;35202:803;;;;;;:::o;45176:349::-;45229:7;45270:2;45263:4;:9;45259:50;;;-1:-1:-1;45296:1:0;;45176:349;-1:-1:-1;45176:349:0:o;45259:50::-;45330:2;45323:4;:9;45319:50;;;-1:-1:-1;45356:1:0;;45176:349;-1:-1:-1;45176:349:0:o;45319:50::-;45390:2;45383:4;:9;45379:50;;;-1:-1:-1;45416:1:0;;45176:349;-1:-1:-1;45176:349:0:o;45379:50::-;45450:2;45443:4;:9;45439:50;;;-1:-1:-1;45476:1:0;;45176:349;-1:-1:-1;45176:349:0:o;45439:50::-;-1:-1:-1;45516:1:0;;45176:349;-1:-1:-1;45176:349:0:o;32459:382::-;-1:-1:-1;;;;;32539:16:0;;32531:61;;;;-1:-1:-1;;;32531:61:0;;15644:2:1;32531:61:0;;;15626:21:1;;;15663:18;;;15656:30;15722:34;15702:18;;;15695:62;15774:18;;32531:61:0;15442:356:1;32531:61:0;30546:4;30570:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30570:16:0;:30;32603:58;;;;-1:-1:-1;;;32603:58:0;;12166:2:1;32603:58:0;;;12148:21:1;12205:2;12185:18;;;12178:30;12244;12224:18;;;12217:58;12292:18;;32603:58:0;11964:352:1;32603:58:0;32674:45;32703:1;32707:2;32711:7;32674:20;:45::i;:::-;-1:-1:-1;;;;;32732:13:0;;;;;;:9;:13;;;;;:18;;32749:1;;32732:13;:18;;32749:1;;32732:18;:::i;:::-;;;;-1:-1:-1;;32761:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32761:21:0;-1:-1:-1;;;;;32761:21:0;;;;;;;;32800:33;;32761:16;;;32800:33;;32761:16;;32800:33;32459:382;;:::o;42236:988::-;42502:22;42552:1;42527:22;42544:4;42527:16;:22::i;:::-;:26;;;;:::i;:::-;42564:18;42585:26;;;:17;:26;;;;;;42502:51;;-1:-1:-1;42718:28:0;;;42714:328;;-1:-1:-1;;;;;42785:18:0;;42763:19;42785:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42836:30;;;;;;:44;;;42953:30;;:17;:30;;;;;:43;;;42714:328;-1:-1:-1;43138:26:0;;;;:17;:26;;;;;;;;43131:33;;;-1:-1:-1;;;;;43182:18:0;;;;;:12;:18;;;;;:34;;;;;;;43175:41;42236:988::o;43519:1079::-;43797:10;:17;43772:22;;43797:21;;43817:1;;43797:21;:::i;:::-;43829:18;43850:24;;;:15;:24;;;;;;44223:10;:26;;43772:46;;-1:-1:-1;43850:24:0;;43772:46;;44223:26;;;;;;:::i;:::-;;;;;;;;;44201:48;;44287:11;44262:10;44273;44262:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44367:28;;;:15;:28;;;;;;;:41;;;44539:24;;;;;44532:31;44574:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43590:1008;;;43519:1079;:::o;41023:221::-;41108:14;41125:20;41142:2;41125:16;:20::i;:::-;-1:-1:-1;;;;;41156:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41201:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;41023:221:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;:::-;250:5;14:247;-1:-1:-1;;;14:247:1:o;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:1266::-;1471:6;1479;1487;1495;1548:3;1536:9;1527:7;1523:23;1519:33;1516:53;;;1565:1;1562;1555:12;1516:53;1604:9;1591:23;1623:31;1648:5;1623:31;:::i;:::-;1673:5;-1:-1:-1;1730:2:1;1715:18;;1702:32;1743:33;1702:32;1743:33;:::i;:::-;1795:7;-1:-1:-1;1849:2:1;1834:18;;1821:32;;-1:-1:-1;1904:2:1;1889:18;;1876:32;1927:18;1957:14;;;1954:34;;;1984:1;1981;1974:12;1954:34;2022:6;2011:9;2007:22;1997:32;;2067:7;2060:4;2056:2;2052:13;2048:27;2038:55;;2089:1;2086;2079:12;2038:55;2125:2;2112:16;2147:2;2143;2140:10;2137:36;;;2153:18;;:::i;:::-;2228:2;2222:9;2196:2;2282:13;;-1:-1:-1;;2278:22:1;;;2302:2;2274:31;2270:40;2258:53;;;2326:18;;;2346:22;;;2323:46;2320:72;;;2372:18;;:::i;:::-;2412:10;2408:2;2401:22;2447:2;2439:6;2432:18;2487:7;2482:2;2477;2473;2469:11;2465:20;2462:33;2459:53;;;2508:1;2505;2498:12;2459:53;2564:2;2559;2555;2551:11;2546:2;2538:6;2534:15;2521:46;2609:1;2604:2;2599;2591:6;2587:15;2583:24;2576:35;2630:6;2620:16;;;;;;;1376:1266;;;;;;;:::o;2647:416::-;2712:6;2720;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;2828:9;2815:23;2847:31;2872:5;2847:31;:::i;:::-;2897:5;-1:-1:-1;2954:2:1;2939:18;;2926:32;2996:15;;2989:23;2977:36;;2967:64;;3027:1;3024;3017:12;3068:315;3136:6;3144;3197:2;3185:9;3176:7;3172:23;3168:32;3165:52;;;3213:1;3210;3203:12;3165:52;3252:9;3239:23;3271:31;3296:5;3271:31;:::i;:::-;3321:5;3373:2;3358:18;;;;3345:32;;-1:-1:-1;;;3068:315:1:o;3388:245::-;3446:6;3499:2;3487:9;3478:7;3474:23;3470:32;3467:52;;;3515:1;3512;3505:12;3467:52;3554:9;3541:23;3573:30;3597:5;3573:30;:::i;3638:249::-;3707:6;3760:2;3748:9;3739:7;3735:23;3731:32;3728:52;;;3776:1;3773;3766:12;3728:52;3808:9;3802:16;3827:30;3851:5;3827:30;:::i;3892:180::-;3951:6;4004:2;3992:9;3983:7;3979:23;3975:32;3972:52;;;4020:1;4017;4010:12;3972:52;-1:-1:-1;4043:23:1;;3892:180;-1:-1:-1;3892:180:1:o;4077:257::-;4118:3;4156:5;4150:12;4183:6;4178:3;4171:19;4199:63;4255:6;4248:4;4243:3;4239:14;4232:4;4225:5;4221:16;4199:63;:::i;:::-;4316:2;4295:15;-1:-1:-1;;4291:29:1;4282:39;;;;4323:4;4278:50;;4077:257;-1:-1:-1;;4077:257:1:o;4339:973::-;4424:12;;4389:3;;4479:1;4499:18;;;;4552;;;;4579:61;;4633:4;4625:6;4621:17;4611:27;;4579:61;4659:2;4707;4699:6;4696:14;4676:18;4673:38;4670:161;;;4753:10;4748:3;4744:20;4741:1;4734:31;4788:4;4785:1;4778:15;4816:4;4813:1;4806:15;4670:161;4847:18;4874:104;;;;4992:1;4987:319;;;;4840:466;;4874:104;-1:-1:-1;;4907:24:1;;4895:37;;4952:16;;;;-1:-1:-1;4874:104:1;;4987:319;19596:1;19589:14;;;19633:4;19620:18;;5081:1;5095:165;5109:6;5106:1;5103:13;5095:165;;;5187:14;;5174:11;;;5167:35;5230:16;;;;5124:10;;5095:165;;;5099:3;;5289:6;5284:3;5280:16;5273:23;;4840:466;;;;;;;4339:973;;;;:::o;5317:276::-;5448:3;5486:6;5480:13;5502:53;5548:6;5543:3;5536:4;5528:6;5524:17;5502:53;:::i;:::-;5571:16;;;;;5317:276;-1:-1:-1;;5317:276:1:o;5598:1449::-;6017:3;6055:6;6049:13;6081:4;6094:51;6138:6;6133:3;6128:2;6120:6;6116:15;6094:51;:::i;:::-;6208:13;;6167:16;;;;6230:55;6208:13;6167:16;6252:15;;;6230:55;:::i;:::-;6352:13;;6307:20;;;6374:55;6352:13;6307:20;6396:15;;;6374:55;:::i;:::-;6496:13;;6451:20;;;6518:55;6496:13;6451:20;6540:15;;;6518:55;:::i;:::-;6640:13;;6595:20;;;6662:55;6640:13;6595:20;6684:15;;;6662:55;:::i;:::-;6784:13;;6739:20;;;6806:55;6784:13;6739:20;6828:15;;;6806:55;:::i;:::-;6928:13;;6883:20;;;6950:55;6928:13;6883:20;6972:15;;;6950:55;:::i;:::-;7021:20;;;;;5598:1449;-1:-1:-1;;;;;;;;;;5598:1449:1:o;7052:197::-;7180:3;7205:38;7239:3;7231:6;7205:38;:::i;7254:355::-;7483:3;7511:38;7545:3;7537:6;7511:38;:::i;:::-;-1:-1:-1;;;7558:19:1;;7601:1;7593:10;;7254:355;-1:-1:-1;;;7254:355:1:o;7614:1350::-;-1:-1:-1;;;8114:64:1;;8201:13;;8096:3;;8223:62;8201:13;8273:2;8264:12;;8257:4;8245:17;;8223:62;:::i;:::-;8349:66;8344:2;8304:16;;;8336:11;;;8329:87;8445:34;8440:2;8432:11;;8425:55;8509:34;8504:2;8496:11;;8489:55;8574:66;8568:3;8560:12;;8553:88;8671:66;8665:3;8657:12;;8650:88;8763:13;;8785:64;8763:13;8834:3;8826:12;;8819:4;8807:17;;8785:64;:::i;:::-;-1:-1:-1;;;8909:3:1;8868:17;;;;8901:12;;;8894:36;8954:3;8946:12;;7614:1350;-1:-1:-1;;;;7614:1350:1:o;8969:448::-;9231:31;9226:3;9219:44;9201:3;9292:6;9286:13;9308:62;9363:6;9358:2;9353:3;9349:12;9342:4;9334:6;9330:17;9308:62;:::i;:::-;9390:16;;;;9408:2;9386:25;;8969:448;-1:-1:-1;;8969:448:1:o;9817:488::-;-1:-1:-1;;;;;10086:15:1;;;10068:34;;10138:15;;10133:2;10118:18;;10111:43;10185:2;10170:18;;10163:34;;;10233:3;10228:2;10213:18;;10206:31;;;10011:4;;10254:45;;10279:19;;10271:6;10254:45;:::i;:::-;10246:53;9817:488;-1:-1:-1;;;;;;9817:488:1:o;10502:219::-;10651:2;10640:9;10633:21;10614:4;10671:44;10711:2;10700:9;10696:18;10688:6;10671:44;:::i;11138:414::-;11340:2;11322:21;;;11379:2;11359:18;;;11352:30;11418:34;11413:2;11398:18;;11391:62;-1:-1:-1;;;11484:2:1;11469:18;;11462:48;11542:3;11527:19;;11138:414::o;16216:356::-;16418:2;16400:21;;;16437:18;;;16430:30;16496:34;16491:2;16476:18;;16469:62;16563:2;16548:18;;16216:356::o;18150:413::-;18352:2;18334:21;;;18391:2;18371:18;;;18364:30;18430:34;18425:2;18410:18;;18403:62;-1:-1:-1;;;18496:2:1;18481:18;;18474:47;18553:3;18538:19;;18150:413::o;19649:128::-;19689:3;19720:1;19716:6;19713:1;19710:13;19707:39;;;19726:18;;:::i;:::-;-1:-1:-1;19762:9:1;;19649:128::o;19782:120::-;19822:1;19848;19838:35;;19853:18;;:::i;:::-;-1:-1:-1;19887:9:1;;19782:120::o;19907:168::-;19947:7;20013:1;20009;20005:6;20001:14;19998:1;19995:21;19990:1;19983:9;19976:17;19972:45;19969:71;;;20020:18;;:::i;:::-;-1:-1:-1;20060:9:1;;19907:168::o;20080:125::-;20120:4;20148:1;20145;20142:8;20139:34;;;20153:18;;:::i;:::-;-1:-1:-1;20190:9:1;;20080:125::o;20210:258::-;20282:1;20292:113;20306:6;20303:1;20300:13;20292:113;;;20382:11;;;20376:18;20363:11;;;20356:39;20328:2;20321:10;20292:113;;;20423:6;20420:1;20417:13;20414:48;;;-1:-1:-1;;20458:1:1;20440:16;;20433:27;20210:258::o;20473:380::-;20552:1;20548:12;;;;20595;;;20616:61;;20670:4;20662:6;20658:17;20648:27;;20616:61;20723:2;20715:6;20712:14;20692:18;20689:38;20686:161;;;20769:10;20764:3;20760:20;20757:1;20750:31;20804:4;20801:1;20794:15;20832:4;20829:1;20822:15;20686:161;;20473:380;;;:::o;20858:135::-;20897:3;-1:-1:-1;;20918:17:1;;20915:43;;;20938:18;;:::i;:::-;-1:-1:-1;20985:1:1;20974:13;;20858:135::o;20998:112::-;21030:1;21056;21046:35;;21061:18;;:::i;:::-;-1:-1:-1;21095:9:1;;20998:112::o;21115:127::-;21176:10;21171:3;21167:20;21164:1;21157:31;21207:4;21204:1;21197:15;21231:4;21228:1;21221:15;21247:127;21308:10;21303:3;21299:20;21296:1;21289:31;21339:4;21336:1;21329:15;21363:4;21360:1;21353:15;21379:127;21440:10;21435:3;21431:20;21428:1;21421:31;21471:4;21468:1;21461:15;21495:4;21492:1;21485:15;21511:127;21572:10;21567:3;21563:20;21560:1;21553:31;21603:4;21600:1;21593:15;21627:4;21624:1;21617:15;21643:127;21704:10;21699:3;21695:20;21692:1;21685:31;21735:4;21732:1;21725:15;21759:4;21756:1;21749:15;21775:131;-1:-1:-1;;;;;21850:31:1;;21840:42;;21830:70;;21896:1;21893;21886:12;21911:131;-1:-1:-1;;;;;;21985:32:1;;21975:43;;21965:71;;22032:1;22029;22022:12
Swarm Source
ipfs://d55b1956bdbd3068a6378e4f1b94dbec89fe9e5f43cbf167cd554d2279097ab5
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.