Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ERC721Storage
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Unlicense // Creator: 0xVeryBased pragma solidity ^0.8.9; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; contract ERC721Storage is Ownable { using Address for address; using Strings for uint256; // Tracker for calculating number minted/total supply and assigning token indices uint256 private currentIndex = 0; // Token name string private _name; // Token symbol string private _symbol; // Token owners and token balances mapping(uint256 => address) private _ownerships; mapping(address => uint256) private _balances; // Burn address and counter address public immutable burnAddress = 0x000000000000000000000000000000000000dEaD; uint256 private numTokensBurned; // 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; // Mapping from operators to whether or not they are restricted mapping(address => bool) private _operatorRestrictions; // Bool indicating whether one can still restrict an operator or not bool private _canRestrict; ERC721TopLevelProto public topLevelContract; constructor( string memory name_, string memory symbol_ ) { _name = name_; _symbol = symbol_; // topLevelContract = ERC721TopLevelProto(msg.sender); } function setTopLevelContract(address _topLevelContract) public onlyOwner { topLevelContract = ERC721TopLevelProto(_topLevelContract); transferOwnership(_topLevelContract); } /** * @dev See {IERC721Enumerable-totalSupply}. **/ function storage_totalSupply() public view returns (uint256) { return (currentIndex - numTokensBurned); } /** * @dev See {IERC721Enumerable-tokenByIndex}. **/ function storage_tokenByIndex(uint256 index) public view returns (uint256) { require(index < storage_totalSupply(), "g"); require(storage_ownerOf(index) != burnAddress, "b"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. **/ function storage_tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) { require(index < storage_balanceOf(owner), "b"); uint256 numMintedSoFar = storage_totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { address ownership = _ownerships[i]; if (ownership != address(0)) { currOwnershipAddr = ownership; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("u"); } function storage_tokenOfOwnerByIndexStepped(address owner, uint256 index, uint256 lastToken, uint256 lastIndex) public view returns (uint256) { require(index < storage_balanceOf(owner), "b"); uint256 numTokenIds = currentIndex; uint256 tokenIdsIdx = ((lastIndex == 0) ? 0 : (lastIndex + 1)); address currOwnershipAddr = address(0); for (uint256 i = ((lastToken == 0) ? 0 : (lastToken + 1)); i < numTokenIds; i++) { address ownership = _ownerships[i]; if (ownership != address(0)) { currOwnershipAddr = ownership; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("u"); } // /** // * @dev See {IERC165-supportsInterface}. // **/ // function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { // return (interfaceId == type(IERC721).interfaceId || // interfaceId == type(IERC721Metadata).interfaceId || // interfaceId == type(IERC721Enumerable).interfaceId || // super.supportsInterface(interfaceId)); // } /** * @dev See {IERC721-balanceOf}. **/ function storage_balanceOf(address owner) public view returns (uint256) { require(owner != address(0), "0"); return uint256(_balances[owner]); } /** * @dev See {IERC721-ownerOf}. **/ function storage_ownerOf(uint256 tokenId) public view returns (address) { require(tokenId < currentIndex, "t"); for (uint256 curr = tokenId; curr >= 0; curr--) { address ownership = _ownerships[curr]; if (ownership != address(0)) { return ownership; } } revert("o"); } /** * @dev See {IERC721Metadata-name}. **/ function storage_name() public view virtual returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. **/ function storage_symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev See {IERC721-approve}. **/ function storage_approve(address to, uint256 tokenId, address msgSender) public onlyOwner { address owner = ERC721Storage.storage_ownerOf(tokenId); require(to != owner, "o"); require( msgSender == owner || storage_isApprovedForAll(owner, msgSender), "a" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. **/ function storage_getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId), "a"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. **/ function storage_setApprovalForAll(address operator, bool approved, address msgSender) public { // require(operator != msgSender && !(operatorRestrict[operator]), "a;r"); require(operator != msgSender, "a"); _operatorApprovals[msgSender][operator] = approved; topLevelContract.emitApprovalForAll(msgSender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. **/ function storage_isApprovedForAll(address owner, address operator) public view virtual returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. **/ function storage_transferFrom( address from, address to, uint256 tokenId, address msgSender ) public onlyOwner { _transfer(from, to, tokenId, msgSender); } /** * @dev See {IERC721-safeTransferFrom}. **/ function storage_safeTransferFrom( address from, address to, uint256 tokenId, address msgSender ) public onlyOwner { storage_safeTransferFrom(from, to, tokenId, "", msgSender); } /** * @dev See {IERC721-safeTransferFrom}. **/ function storage_safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data, address msgSender ) public onlyOwner { _transfer(from, to, tokenId, msgSender); require( _checkOnERC721Received(from, to, tokenId, _data, msgSender), "z" ); } /** * @dev Burns a token to the designated burn address **/ function storage_burnToken(uint256 tokenId, address msgSender) public onlyOwner { _transfer(storage_ownerOf(tokenId), burnAddress, tokenId, msgSender); numTokensBurned++; } /** * @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`), **/ function _exists(uint256 tokenId) internal view returns (bool) { return (tokenId < currentIndex && storage_ownerOf(tokenId) != burnAddress); } function storage_exists(uint256 tokenId) public view returns (bool) { return _exists(tokenId); } function storage_safeMint(address to, uint256 quantity, address msgSender) public onlyOwner { storage_safeMint(to, quantity, "", msgSender); } function storage_safeMint( address to, uint256 quantity, bytes memory _data, address msgSender ) public onlyOwner { storage_mint(to, quantity); require(_checkOnERC721Received(address(0), to, currentIndex - 1, _data, msgSender), "z"); } function storage_mint(address to, uint256 quantity) public onlyOwner { uint256 startTokenId = currentIndex; require(to != address(0), "0"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "a"); _balances[to] = _balances[to] + quantity; _ownerships[startTokenId] = to; uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { topLevelContract.emitTransfer(address(0), to, updatedIndex); updatedIndex++; } currentIndex = updatedIndex; } function storage_contractURI(string memory _description, string memory _img, string memory _self) public view returns (string memory) { return string( abi.encodePacked( "data:application/json;utf8,{\"name\":\"", storage_name(),"\",", "\"description\":\"", _description, "\",", "\"image\":\"", _img, "\",", "\"external_link\":\"https://crudeborne.wtf\",", "\"seller_fee_basis_points\":420,\"fee_recipient\":\"", _self, "\"}" ) ); } function _transfer( address from, address to, uint256 tokenId, address msgSender ) private { address prevOwnership = storage_ownerOf(tokenId); bool isApprovedOrOwner = (msgSender == prevOwnership || storage_getApproved(tokenId) == msgSender || storage_isApprovedForAll(prevOwnership, msgSender)); require(isApprovedOrOwner && prevOwnership == from, "a"); require(prevOwnership == from, "o"); require(to != address(0), "0"); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership); _balances[from] -= 1; _balances[to] += 1; _ownerships[tokenId] = to; // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId] == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = prevOwnership; } } topLevelContract.emitTransfer(from, to, tokenId); } function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; topLevelContract.emitApproval(owner, to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data, address msgSender ) 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("z"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } } //////////////////// abstract contract ERC721TopLevelProto { function emitTransfer(address from, address to, uint256 tokenId) public virtual; function emitApproval(address owner, address approved, uint256 tokenId) public virtual; function emitApprovalForAll(address owner, address operator, bool approved) public virtual; } ////////////////////////////////////////
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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 Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_topLevelContract","type":"address"}],"name":"setTopLevelContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"msgSender","type":"address"}],"name":"storage_approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"storage_balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"msgSender","type":"address"}],"name":"storage_burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_description","type":"string"},{"internalType":"string","name":"_img","type":"string"},{"internalType":"string","name":"_self","type":"string"}],"name":"storage_contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"storage_exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"storage_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":"storage_isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"storage_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storage_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"storage_ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"msgSender","type":"address"}],"name":"storage_safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"msgSender","type":"address"}],"name":"storage_safeMint","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"},{"internalType":"address","name":"msgSender","type":"address"}],"name":"storage_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":"address","name":"msgSender","type":"address"}],"name":"storage_safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"address","name":"msgSender","type":"address"}],"name":"storage_setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storage_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"storage_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":"storage_tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"lastToken","type":"uint256"},{"internalType":"uint256","name":"lastIndex","type":"uint256"}],"name":"storage_tokenOfOwnerByIndexStepped","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"storage_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"},{"internalType":"address","name":"msgSender","type":"address"}],"name":"storage_transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"topLevelContract","outputs":[{"internalType":"contract ERC721TopLevelProto","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052600060015561dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004b57600080fd5b506040516200379b3803806200379b8339818101604052810190620000719190620003e4565b6200009162000085620000cb60201b60201c565b620000d360201b60201c565b8160029080519060200190620000a992919062000197565b508060039080519060200190620000c292919062000197565b505050620004ce565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001a59062000498565b90600052602060002090601f016020900481019282620001c9576000855562000215565b82601f10620001e457805160ff191683800117855562000215565b8280016001018555821562000215579182015b8281111562000214578251825591602001919060010190620001f7565b5b50905062000224919062000228565b5090565b5b808211156200024357600081600090555060010162000229565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002b08262000265565b810181811067ffffffffffffffff82111715620002d257620002d162000276565b5b80604052505050565b6000620002e762000247565b9050620002f58282620002a5565b919050565b600067ffffffffffffffff82111562000318576200031762000276565b5b620003238262000265565b9050602081019050919050565b60005b838110156200035057808201518184015260208101905062000333565b8381111562000360576000848401525b50505050565b60006200037d6200037784620002fa565b620002db565b9050828152602081018484840111156200039c576200039b62000260565b5b620003a984828562000330565b509392505050565b600082601f830112620003c957620003c86200025b565b5b8151620003db84826020860162000366565b91505092915050565b60008060408385031215620003fe57620003fd62000251565b5b600083015167ffffffffffffffff8111156200041f576200041e62000256565b5b6200042d85828601620003b1565b925050602083015167ffffffffffffffff81111562000451576200045062000256565b5b6200045f85828601620003b1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b157607f821691505b60208210811415620004c857620004c762000469565b5b50919050565b60805161329c620004ff60003960008181610a6e01528181610cd001528181610de50152611789015261329c6000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063a2345ac5116100f9578063d604c5b011610097578063e568c01a11610071578063e568c01a146104b8578063e8114668146104e8578063f20342e714610504578063f2fde38b14610534576101a9565b8063d604c5b014610462578063defb876a1461047e578063e4e4c5f81461049c576101a9565b8063b7e591ed116100d3578063b7e591ed146103ca578063b855b7fe146103fa578063bfbacd3f14610416578063cc8b042a14610432576101a9565b8063a2345ac514610360578063b1d984e41461037e578063b467ad0e146103ae576101a9565b80635543afe9116101665780637b42aae2116101405780637b42aae2146102d85780638d445898146102f65780638da5cb5b146103265780639aaf8c6614610344576101a9565b80635543afe91461029457806370d5ae05146102b0578063715018a6146102ce576101a9565b80631909ea12146101ae5780631a754575146101de5780633bf75186146101fa5780633f64be631461021657806340953e7e14610246578063517d9de714610264575b600080fd5b6101c860048036038101906101c39190611f74565b610550565b6040516101d59190611fc3565b60405180910390f35b6101f860048036038101906101f39190611fde565b6106d4565b005b610214600480360381019061020f9190611fde565b6106fc565b005b610230600480360381019061022b9190612031565b610810565b60405161023d9190612079565b60405180910390f35b61024e610822565b60405161025b91906120f3565b60405180910390f35b61027e6004803603810190610279919061210e565b610848565b60405161028b9190611fc3565b60405180910390f35b6102ae60048036038101906102a991906122bb565b610a05565b005b6102b8610a6c565b6040516102c59190612361565b60405180910390f35b6102d6610a90565b005b6102e0610aa4565b6040516102ed9190611fc3565b60405180910390f35b610310600480360381019061030b919061237c565b610abb565b60405161031d9190611fc3565b60405180910390f35b61032e610b73565b60405161033b9190612361565b60405180910390f35b61035e6004803603810190610359919061237c565b610b9c565b005b610368610bf1565b6040516103759190612431565b60405180910390f35b61039860048036038101906103939190612031565b610c83565b6040516103a59190611fc3565b60405180910390f35b6103c860048036038101906103c39190612453565b610d6d565b005b6103e460048036038101906103df919061255b565b610d97565b6040516103f19190612431565b60405180910390f35b610414600480360381019061040f9190612602565b610dcf565b005b610430600480360381019061042b919061266e565b610e27565b005b61044c60048036038101906104479190612031565b610fc0565b6040516104599190612361565b60405180910390f35b61047c60048036038101906104779190612453565b6110df565b005b6104866110f9565b6040516104939190612431565b60405180910390f35b6104b660048036038101906104b191906126c1565b61118b565b005b6104d260048036038101906104cd9190612744565b6111fd565b6040516104df9190612079565b60405180910390f35b61050260048036038101906104fd9190611f74565b611291565b005b61051e60048036038101906105199190612031565b61150a565b60405161052b9190612361565b60405180910390f35b61054e6004803603810190610549919061237c565b61158f565b005b600061055b83610abb565b821061059c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610593906127d0565b60405180910390fd5b60006105a6610aa4565b905060008060005b838110156106925760006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610626578092505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561067e578684141561066f5781955050505050506106ce565b838061067a9061281f565b9450505b50808061068a9061281f565b9150506105ae565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c5906128b4565b60405180910390fd5b92915050565b6106dc611613565b6106f78383604051806020016040528060008152508461118b565b505050565b610704611613565b600061070f83610fc0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077790612920565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806107c057506107bf81836111fd565b5b6107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f69061298c565b60405180910390fd5b61080a848483611691565b50505050565b600061081b82611779565b9050919050565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061085385610abb565b8410610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b906127d0565b60405180910390fd5b6000600154905060008084146108b6576001846108b191906129ac565b6108b9565b60005b90506000808087146108d7576001876108d291906129ac565b6108da565b60005b90505b838110156109c15760006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610955578092505b8973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ad578884141561099e5781955050505050506109fd565b83806109a99061281f565b9450505b5080806109b99061281f565b9150506108dd565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f4906128b4565b60405180910390fd5b949350505050565b610a0d611613565b610a19858585846117e7565b610a268585858585611c4c565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c90612a4e565b60405180910390fd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a98611613565b610aa26000611ddd565b565b6000600654600154610ab69190612a6e565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390612aee565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ba4611613565b80600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610bee8161158f565b50565b606060028054610c0090612b3d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2c90612b3d565b8015610c795780601f10610c4e57610100808354040283529160200191610c79565b820191906000526020600020905b815481529060010190602001808311610c5c57829003601f168201915b5050505050905090565b6000610c8d610aa4565b8210610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590612bbb565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d0e83610fc0565b73ffffffffffffffffffffffffffffffffffffffff161415610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c906127d0565b60405180910390fd5b819050919050565b610d75611613565b610d918484846040518060200160405280600081525085610a05565b50505050565b6060610da1610bf1565b848484604051602001610db79493929190612e9d565b60405160208183030381529060405290509392505050565b610dd7611613565b610e0b610de383610fc0565b7f000000000000000000000000000000000000000000000000000000000000000084846117e7565b60066000815480929190610e1e9061281f565b91905055505050565b8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d9061298c565b60405180910390fd5b81600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166355c45fbe8285856040518463ffffffff1660e01b8152600401610f8993929190612f3e565b600060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b50505050505050565b60006001548210611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90612fc1565b60405180910390fd5b60008290505b6000811061109e5760006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461108a5780925050506110da565b50808061109690612fe1565b91505061100c565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190612920565b60405180910390fd5b919050565b6110e7611613565b6110f3848484846117e7565b50505050565b60606003805461110890612b3d565b80601f016020809104026020016040519081016040528092919081815260200182805461113490612b3d565b80156111815780601f1061115657610100808354040283529160200191611181565b820191906000526020600020905b81548152906001019060200180831161116457829003601f168201915b5050505050905090565b611193611613565b61119d8484611291565b6111b8600085600180546111b19190612a6e565b8585611c4c565b6111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90612a4e565b60405180910390fd5b50505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611299611613565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790612aee565b60405180910390fd5b61131981611779565b15611359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113509061298c565b60405180910390fd5b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113a491906129ac565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081905060005b838110156114fc57600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323de6651600087856040518463ffffffff1660e01b81526004016114a99392919061300b565b600060405180830381600087803b1580156114c357600080fd5b505af11580156114d7573d6000803e3d6000fd5b5050505081806114e69061281f565b92505080806114f49061281f565b915050611441565b508060018190555050505050565b600061151582611779565b611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061298c565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611597611613565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe906130b4565b60405180910390fd5b61161081611ddd565b50565b61161b611ea1565b73ffffffffffffffffffffffffffffffffffffffff16611639610b73565b73ffffffffffffffffffffffffffffffffffffffff161461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690613120565b60405180910390fd5b565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635687f2b88285856040518463ffffffff1660e01b81526004016117429392919061300b565b600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b50505050505050565b6000600154821080156117e057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166117c783610fc0565b73ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b60006117f283610fc0565b905060008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061186357508273ffffffffffffffffffffffffffffffffffffffff1661184b8561150a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611874575061187382846111fd565b5b90508080156118ae57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e49061298c565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290612920565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c290612aee565b60405180910390fd5b6119d760008584611691565b6001600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a279190612a6e565b925050819055506001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a7e91906129ac565b92505081905550846004600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600185611ae691906129ac565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bb257611b5981611779565b15611bb157826004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323de66518888886040518463ffffffff1660e01b8152600401611c119392919061300b565b600060405180830381600087803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b5050505050505050505050565b6000611c6d8573ffffffffffffffffffffffffffffffffffffffff16611ea9565b15611dcf578473ffffffffffffffffffffffffffffffffffffffff1663150b7a02838887876040518563ffffffff1660e01b8152600401611cb19493929190613195565b602060405180830381600087803b158015611ccb57600080fd5b505af1925050508015611cfc57506040513d601f19601f82011682018060405250810190611cf99190613239565b60015b611d7f573d8060008114611d2c576040519150601f19603f3d011682016040523d82523d6000602084013e611d31565b606091505b50600081511415611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6e90612a4e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611dd4565b600190505b95945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f0b82611ee0565b9050919050565b611f1b81611f00565b8114611f2657600080fd5b50565b600081359050611f3881611f12565b92915050565b6000819050919050565b611f5181611f3e565b8114611f5c57600080fd5b50565b600081359050611f6e81611f48565b92915050565b60008060408385031215611f8b57611f8a611ed6565b5b6000611f9985828601611f29565b9250506020611faa85828601611f5f565b9150509250929050565b611fbd81611f3e565b82525050565b6000602082019050611fd86000830184611fb4565b92915050565b600080600060608486031215611ff757611ff6611ed6565b5b600061200586828701611f29565b935050602061201686828701611f5f565b925050604061202786828701611f29565b9150509250925092565b60006020828403121561204757612046611ed6565b5b600061205584828501611f5f565b91505092915050565b60008115159050919050565b6120738161205e565b82525050565b600060208201905061208e600083018461206a565b92915050565b6000819050919050565b60006120b96120b46120af84611ee0565b612094565b611ee0565b9050919050565b60006120cb8261209e565b9050919050565b60006120dd826120c0565b9050919050565b6120ed816120d2565b82525050565b600060208201905061210860008301846120e4565b92915050565b6000806000806080858703121561212857612127611ed6565b5b600061213687828801611f29565b945050602061214787828801611f5f565b935050604061215887828801611f5f565b925050606061216987828801611f5f565b91505092959194509250565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121c88261217f565b810181811067ffffffffffffffff821117156121e7576121e6612190565b5b80604052505050565b60006121fa611ecc565b905061220682826121bf565b919050565b600067ffffffffffffffff82111561222657612225612190565b5b61222f8261217f565b9050602081019050919050565b82818337600083830152505050565b600061225e6122598461220b565b6121f0565b90508281526020810184848401111561227a5761227961217a565b5b61228584828561223c565b509392505050565b600082601f8301126122a2576122a1612175565b5b81356122b284826020860161224b565b91505092915050565b600080600080600060a086880312156122d7576122d6611ed6565b5b60006122e588828901611f29565b95505060206122f688828901611f29565b945050604061230788828901611f5f565b935050606086013567ffffffffffffffff81111561232857612327611edb565b5b6123348882890161228d565b925050608061234588828901611f29565b9150509295509295909350565b61235b81611f00565b82525050565b60006020820190506123766000830184612352565b92915050565b60006020828403121561239257612391611ed6565b5b60006123a084828501611f29565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123e35780820151818401526020810190506123c8565b838111156123f2576000848401525b50505050565b6000612403826123a9565b61240d81856123b4565b935061241d8185602086016123c5565b6124268161217f565b840191505092915050565b6000602082019050818103600083015261244b81846123f8565b905092915050565b6000806000806080858703121561246d5761246c611ed6565b5b600061247b87828801611f29565b945050602061248c87828801611f29565b935050604061249d87828801611f5f565b92505060606124ae87828801611f29565b91505092959194509250565b600067ffffffffffffffff8211156124d5576124d4612190565b5b6124de8261217f565b9050602081019050919050565b60006124fe6124f9846124ba565b6121f0565b90508281526020810184848401111561251a5761251961217a565b5b61252584828561223c565b509392505050565b600082601f83011261254257612541612175565b5b81356125528482602086016124eb565b91505092915050565b60008060006060848603121561257457612573611ed6565b5b600084013567ffffffffffffffff81111561259257612591611edb565b5b61259e8682870161252d565b935050602084013567ffffffffffffffff8111156125bf576125be611edb565b5b6125cb8682870161252d565b925050604084013567ffffffffffffffff8111156125ec576125eb611edb565b5b6125f88682870161252d565b9150509250925092565b6000806040838503121561261957612618611ed6565b5b600061262785828601611f5f565b925050602061263885828601611f29565b9150509250929050565b61264b8161205e565b811461265657600080fd5b50565b60008135905061266881612642565b92915050565b60008060006060848603121561268757612686611ed6565b5b600061269586828701611f29565b93505060206126a686828701612659565b92505060406126b786828701611f29565b9150509250925092565b600080600080608085870312156126db576126da611ed6565b5b60006126e987828801611f29565b94505060206126fa87828801611f5f565b935050604085013567ffffffffffffffff81111561271b5761271a611edb565b5b6127278782880161228d565b925050606061273887828801611f29565b91505092959194509250565b6000806040838503121561275b5761275a611ed6565b5b600061276985828601611f29565b925050602061277a85828601611f29565b9150509250929050565b7f6200000000000000000000000000000000000000000000000000000000000000600082015250565b60006127ba6001836123b4565b91506127c582612784565b602082019050919050565b600060208201905081810360008301526127e9816127ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061282a82611f3e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561285d5761285c6127f0565b5b600182019050919050565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b600061289e6001836123b4565b91506128a982612868565b602082019050919050565b600060208201905081810360008301526128cd81612891565b9050919050565b7f6f00000000000000000000000000000000000000000000000000000000000000600082015250565b600061290a6001836123b4565b9150612915826128d4565b602082019050919050565b60006020820190508181036000830152612939816128fd565b9050919050565b7f6100000000000000000000000000000000000000000000000000000000000000600082015250565b60006129766001836123b4565b915061298182612940565b602082019050919050565b600060208201905081810360008301526129a581612969565b9050919050565b60006129b782611f3e565b91506129c283611f3e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156129f7576129f66127f0565b5b828201905092915050565b7f7a00000000000000000000000000000000000000000000000000000000000000600082015250565b6000612a386001836123b4565b9150612a4382612a02565b602082019050919050565b60006020820190508181036000830152612a6781612a2b565b9050919050565b6000612a7982611f3e565b9150612a8483611f3e565b925082821015612a9757612a966127f0565b5b828203905092915050565b7f3000000000000000000000000000000000000000000000000000000000000000600082015250565b6000612ad86001836123b4565b9150612ae382612aa2565b602082019050919050565b60006020820190508181036000830152612b0781612acb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b5557607f821691505b60208210811415612b6957612b68612b0e565b5b50919050565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b6000612ba56001836123b4565b9150612bb082612b6f565b602082019050919050565b60006020820190508181036000830152612bd481612b98565b9050919050565b600081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c7b226e616d60008201527f65223a2200000000000000000000000000000000000000000000000000000000602082015250565b6000612c42602483612bdb565b9150612c4d82612be6565b602482019050919050565b6000612c63826123a9565b612c6d8185612bdb565b9350612c7d8185602086016123c5565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b6000612cbf600283612bdb565b9150612cca82612c89565b600282019050919050565b7f226465736372697074696f6e223a220000000000000000000000000000000000600082015250565b6000612d0b600f83612bdb565b9150612d1682612cd5565b600f82019050919050565b7f22696d616765223a220000000000000000000000000000000000000000000000600082015250565b6000612d57600983612bdb565b9150612d6282612d21565b600982019050919050565b7f2265787465726e616c5f6c696e6b223a2268747470733a2f2f6372756465626f60008201527f726e652e777466222c0000000000000000000000000000000000000000000000602082015250565b6000612dc9602983612bdb565b9150612dd482612d6d565b602982019050919050565b7f2273656c6c65725f6665655f62617369735f706f696e7473223a3432302c226660008201527f65655f726563697069656e74223a220000000000000000000000000000000000602082015250565b6000612e3b602f83612bdb565b9150612e4682612ddf565b602f82019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000612e87600283612bdb565b9150612e9282612e51565b600282019050919050565b6000612ea882612c35565b9150612eb48287612c58565b9150612ebf82612cb2565b9150612eca82612cfe565b9150612ed68286612c58565b9150612ee182612cb2565b9150612eec82612d4a565b9150612ef88285612c58565b9150612f0382612cb2565b9150612f0e82612dbc565b9150612f1982612e2e565b9150612f258284612c58565b9150612f3082612e7a565b915081905095945050505050565b6000606082019050612f536000830186612352565b612f606020830185612352565b612f6d604083018461206a565b949350505050565b7f7400000000000000000000000000000000000000000000000000000000000000600082015250565b6000612fab6001836123b4565b9150612fb682612f75565b602082019050919050565b60006020820190508181036000830152612fda81612f9e565b9050919050565b6000612fec82611f3e565b9150600082141561300057612fff6127f0565b5b600182039050919050565b60006060820190506130206000830186612352565b61302d6020830185612352565b61303a6040830184611fb4565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061309e6026836123b4565b91506130a982613042565b604082019050919050565b600060208201905081810360008301526130cd81613091565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061310a6020836123b4565b9150613115826130d4565b602082019050919050565b60006020820190508181036000830152613139816130fd565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061316782613140565b613171818561314b565b93506131818185602086016123c5565b61318a8161217f565b840191505092915050565b60006080820190506131aa6000830187612352565b6131b76020830186612352565b6131c46040830185611fb4565b81810360608301526131d6818461315c565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613216816131e1565b811461322157600080fd5b50565b6000815190506132338161320d565b92915050565b60006020828403121561324f5761324e611ed6565b5b600061325d84828501613224565b9150509291505056fea264697066735822122005fbe33387e189ccaaeecdea29a3e875b9348b9786278f883c72b358de4bfa3e64736f6c634300080900330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000194372756465426f726e6520456c6978697220426f74746c657300000000000000000000000000000000000000000000000000000000000000000000000000000943422e454c495849520000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c8063a2345ac5116100f9578063d604c5b011610097578063e568c01a11610071578063e568c01a146104b8578063e8114668146104e8578063f20342e714610504578063f2fde38b14610534576101a9565b8063d604c5b014610462578063defb876a1461047e578063e4e4c5f81461049c576101a9565b8063b7e591ed116100d3578063b7e591ed146103ca578063b855b7fe146103fa578063bfbacd3f14610416578063cc8b042a14610432576101a9565b8063a2345ac514610360578063b1d984e41461037e578063b467ad0e146103ae576101a9565b80635543afe9116101665780637b42aae2116101405780637b42aae2146102d85780638d445898146102f65780638da5cb5b146103265780639aaf8c6614610344576101a9565b80635543afe91461029457806370d5ae05146102b0578063715018a6146102ce576101a9565b80631909ea12146101ae5780631a754575146101de5780633bf75186146101fa5780633f64be631461021657806340953e7e14610246578063517d9de714610264575b600080fd5b6101c860048036038101906101c39190611f74565b610550565b6040516101d59190611fc3565b60405180910390f35b6101f860048036038101906101f39190611fde565b6106d4565b005b610214600480360381019061020f9190611fde565b6106fc565b005b610230600480360381019061022b9190612031565b610810565b60405161023d9190612079565b60405180910390f35b61024e610822565b60405161025b91906120f3565b60405180910390f35b61027e6004803603810190610279919061210e565b610848565b60405161028b9190611fc3565b60405180910390f35b6102ae60048036038101906102a991906122bb565b610a05565b005b6102b8610a6c565b6040516102c59190612361565b60405180910390f35b6102d6610a90565b005b6102e0610aa4565b6040516102ed9190611fc3565b60405180910390f35b610310600480360381019061030b919061237c565b610abb565b60405161031d9190611fc3565b60405180910390f35b61032e610b73565b60405161033b9190612361565b60405180910390f35b61035e6004803603810190610359919061237c565b610b9c565b005b610368610bf1565b6040516103759190612431565b60405180910390f35b61039860048036038101906103939190612031565b610c83565b6040516103a59190611fc3565b60405180910390f35b6103c860048036038101906103c39190612453565b610d6d565b005b6103e460048036038101906103df919061255b565b610d97565b6040516103f19190612431565b60405180910390f35b610414600480360381019061040f9190612602565b610dcf565b005b610430600480360381019061042b919061266e565b610e27565b005b61044c60048036038101906104479190612031565b610fc0565b6040516104599190612361565b60405180910390f35b61047c60048036038101906104779190612453565b6110df565b005b6104866110f9565b6040516104939190612431565b60405180910390f35b6104b660048036038101906104b191906126c1565b61118b565b005b6104d260048036038101906104cd9190612744565b6111fd565b6040516104df9190612079565b60405180910390f35b61050260048036038101906104fd9190611f74565b611291565b005b61051e60048036038101906105199190612031565b61150a565b60405161052b9190612361565b60405180910390f35b61054e6004803603810190610549919061237c565b61158f565b005b600061055b83610abb565b821061059c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610593906127d0565b60405180910390fd5b60006105a6610aa4565b905060008060005b838110156106925760006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610626578092505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561067e578684141561066f5781955050505050506106ce565b838061067a9061281f565b9450505b50808061068a9061281f565b9150506105ae565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c5906128b4565b60405180910390fd5b92915050565b6106dc611613565b6106f78383604051806020016040528060008152508461118b565b505050565b610704611613565b600061070f83610fc0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077790612920565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806107c057506107bf81836111fd565b5b6107ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f69061298c565b60405180910390fd5b61080a848483611691565b50505050565b600061081b82611779565b9050919050565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061085385610abb565b8410610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b906127d0565b60405180910390fd5b6000600154905060008084146108b6576001846108b191906129ac565b6108b9565b60005b90506000808087146108d7576001876108d291906129ac565b6108da565b60005b90505b838110156109c15760006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610955578092505b8973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ad578884141561099e5781955050505050506109fd565b83806109a99061281f565b9450505b5080806109b99061281f565b9150506108dd565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f4906128b4565b60405180910390fd5b949350505050565b610a0d611613565b610a19858585846117e7565b610a268585858585611c4c565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c90612a4e565b60405180910390fd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b610a98611613565b610aa26000611ddd565b565b6000600654600154610ab69190612a6e565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390612aee565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ba4611613565b80600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610bee8161158f565b50565b606060028054610c0090612b3d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2c90612b3d565b8015610c795780601f10610c4e57610100808354040283529160200191610c79565b820191906000526020600020905b815481529060010190602001808311610c5c57829003601f168201915b5050505050905090565b6000610c8d610aa4565b8210610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590612bbb565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000dead73ffffffffffffffffffffffffffffffffffffffff16610d0e83610fc0565b73ffffffffffffffffffffffffffffffffffffffff161415610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c906127d0565b60405180910390fd5b819050919050565b610d75611613565b610d918484846040518060200160405280600081525085610a05565b50505050565b6060610da1610bf1565b848484604051602001610db79493929190612e9d565b60405160208183030381529060405290509392505050565b610dd7611613565b610e0b610de383610fc0565b7f000000000000000000000000000000000000000000000000000000000000dead84846117e7565b60066000815480929190610e1e9061281f565b91905055505050565b8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d9061298c565b60405180910390fd5b81600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166355c45fbe8285856040518463ffffffff1660e01b8152600401610f8993929190612f3e565b600060405180830381600087803b158015610fa357600080fd5b505af1158015610fb7573d6000803e3d6000fd5b50505050505050565b60006001548210611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90612fc1565b60405180910390fd5b60008290505b6000811061109e5760006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461108a5780925050506110da565b50808061109690612fe1565b91505061100c565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190612920565b60405180910390fd5b919050565b6110e7611613565b6110f3848484846117e7565b50505050565b60606003805461110890612b3d565b80601f016020809104026020016040519081016040528092919081815260200182805461113490612b3d565b80156111815780601f1061115657610100808354040283529160200191611181565b820191906000526020600020905b81548152906001019060200180831161116457829003601f168201915b5050505050905090565b611193611613565b61119d8484611291565b6111b8600085600180546111b19190612a6e565b8585611c4c565b6111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90612a4e565b60405180910390fd5b50505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611299611613565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790612aee565b60405180910390fd5b61131981611779565b15611359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113509061298c565b60405180910390fd5b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113a491906129ac565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081905060005b838110156114fc57600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323de6651600087856040518463ffffffff1660e01b81526004016114a99392919061300b565b600060405180830381600087803b1580156114c357600080fd5b505af11580156114d7573d6000803e3d6000fd5b5050505081806114e69061281f565b92505080806114f49061281f565b915050611441565b508060018190555050505050565b600061151582611779565b611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061298c565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611597611613565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe906130b4565b60405180910390fd5b61161081611ddd565b50565b61161b611ea1565b73ffffffffffffffffffffffffffffffffffffffff16611639610b73565b73ffffffffffffffffffffffffffffffffffffffff161461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690613120565b60405180910390fd5b565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635687f2b88285856040518463ffffffff1660e01b81526004016117429392919061300b565b600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b50505050505050565b6000600154821080156117e057507f000000000000000000000000000000000000000000000000000000000000dead73ffffffffffffffffffffffffffffffffffffffff166117c783610fc0565b73ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b60006117f283610fc0565b905060008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061186357508273ffffffffffffffffffffffffffffffffffffffff1661184b8561150a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611874575061187382846111fd565b5b90508080156118ae57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6118ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e49061298c565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290612920565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c290612aee565b60405180910390fd5b6119d760008584611691565b6001600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a279190612a6e565b925050819055506001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a7e91906129ac565b92505081905550846004600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600185611ae691906129ac565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611bb257611b5981611779565b15611bb157826004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323de66518888886040518463ffffffff1660e01b8152600401611c119392919061300b565b600060405180830381600087803b158015611c2b57600080fd5b505af1158015611c3f573d6000803e3d6000fd5b5050505050505050505050565b6000611c6d8573ffffffffffffffffffffffffffffffffffffffff16611ea9565b15611dcf578473ffffffffffffffffffffffffffffffffffffffff1663150b7a02838887876040518563ffffffff1660e01b8152600401611cb19493929190613195565b602060405180830381600087803b158015611ccb57600080fd5b505af1925050508015611cfc57506040513d601f19601f82011682018060405250810190611cf99190613239565b60015b611d7f573d8060008114611d2c576040519150601f19603f3d011682016040523d82523d6000602084013e611d31565b606091505b50600081511415611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6e90612a4e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611dd4565b600190505b95945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f0b82611ee0565b9050919050565b611f1b81611f00565b8114611f2657600080fd5b50565b600081359050611f3881611f12565b92915050565b6000819050919050565b611f5181611f3e565b8114611f5c57600080fd5b50565b600081359050611f6e81611f48565b92915050565b60008060408385031215611f8b57611f8a611ed6565b5b6000611f9985828601611f29565b9250506020611faa85828601611f5f565b9150509250929050565b611fbd81611f3e565b82525050565b6000602082019050611fd86000830184611fb4565b92915050565b600080600060608486031215611ff757611ff6611ed6565b5b600061200586828701611f29565b935050602061201686828701611f5f565b925050604061202786828701611f29565b9150509250925092565b60006020828403121561204757612046611ed6565b5b600061205584828501611f5f565b91505092915050565b60008115159050919050565b6120738161205e565b82525050565b600060208201905061208e600083018461206a565b92915050565b6000819050919050565b60006120b96120b46120af84611ee0565b612094565b611ee0565b9050919050565b60006120cb8261209e565b9050919050565b60006120dd826120c0565b9050919050565b6120ed816120d2565b82525050565b600060208201905061210860008301846120e4565b92915050565b6000806000806080858703121561212857612127611ed6565b5b600061213687828801611f29565b945050602061214787828801611f5f565b935050604061215887828801611f5f565b925050606061216987828801611f5f565b91505092959194509250565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121c88261217f565b810181811067ffffffffffffffff821117156121e7576121e6612190565b5b80604052505050565b60006121fa611ecc565b905061220682826121bf565b919050565b600067ffffffffffffffff82111561222657612225612190565b5b61222f8261217f565b9050602081019050919050565b82818337600083830152505050565b600061225e6122598461220b565b6121f0565b90508281526020810184848401111561227a5761227961217a565b5b61228584828561223c565b509392505050565b600082601f8301126122a2576122a1612175565b5b81356122b284826020860161224b565b91505092915050565b600080600080600060a086880312156122d7576122d6611ed6565b5b60006122e588828901611f29565b95505060206122f688828901611f29565b945050604061230788828901611f5f565b935050606086013567ffffffffffffffff81111561232857612327611edb565b5b6123348882890161228d565b925050608061234588828901611f29565b9150509295509295909350565b61235b81611f00565b82525050565b60006020820190506123766000830184612352565b92915050565b60006020828403121561239257612391611ed6565b5b60006123a084828501611f29565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123e35780820151818401526020810190506123c8565b838111156123f2576000848401525b50505050565b6000612403826123a9565b61240d81856123b4565b935061241d8185602086016123c5565b6124268161217f565b840191505092915050565b6000602082019050818103600083015261244b81846123f8565b905092915050565b6000806000806080858703121561246d5761246c611ed6565b5b600061247b87828801611f29565b945050602061248c87828801611f29565b935050604061249d87828801611f5f565b92505060606124ae87828801611f29565b91505092959194509250565b600067ffffffffffffffff8211156124d5576124d4612190565b5b6124de8261217f565b9050602081019050919050565b60006124fe6124f9846124ba565b6121f0565b90508281526020810184848401111561251a5761251961217a565b5b61252584828561223c565b509392505050565b600082601f83011261254257612541612175565b5b81356125528482602086016124eb565b91505092915050565b60008060006060848603121561257457612573611ed6565b5b600084013567ffffffffffffffff81111561259257612591611edb565b5b61259e8682870161252d565b935050602084013567ffffffffffffffff8111156125bf576125be611edb565b5b6125cb8682870161252d565b925050604084013567ffffffffffffffff8111156125ec576125eb611edb565b5b6125f88682870161252d565b9150509250925092565b6000806040838503121561261957612618611ed6565b5b600061262785828601611f5f565b925050602061263885828601611f29565b9150509250929050565b61264b8161205e565b811461265657600080fd5b50565b60008135905061266881612642565b92915050565b60008060006060848603121561268757612686611ed6565b5b600061269586828701611f29565b93505060206126a686828701612659565b92505060406126b786828701611f29565b9150509250925092565b600080600080608085870312156126db576126da611ed6565b5b60006126e987828801611f29565b94505060206126fa87828801611f5f565b935050604085013567ffffffffffffffff81111561271b5761271a611edb565b5b6127278782880161228d565b925050606061273887828801611f29565b91505092959194509250565b6000806040838503121561275b5761275a611ed6565b5b600061276985828601611f29565b925050602061277a85828601611f29565b9150509250929050565b7f6200000000000000000000000000000000000000000000000000000000000000600082015250565b60006127ba6001836123b4565b91506127c582612784565b602082019050919050565b600060208201905081810360008301526127e9816127ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061282a82611f3e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561285d5761285c6127f0565b5b600182019050919050565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b600061289e6001836123b4565b91506128a982612868565b602082019050919050565b600060208201905081810360008301526128cd81612891565b9050919050565b7f6f00000000000000000000000000000000000000000000000000000000000000600082015250565b600061290a6001836123b4565b9150612915826128d4565b602082019050919050565b60006020820190508181036000830152612939816128fd565b9050919050565b7f6100000000000000000000000000000000000000000000000000000000000000600082015250565b60006129766001836123b4565b915061298182612940565b602082019050919050565b600060208201905081810360008301526129a581612969565b9050919050565b60006129b782611f3e565b91506129c283611f3e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156129f7576129f66127f0565b5b828201905092915050565b7f7a00000000000000000000000000000000000000000000000000000000000000600082015250565b6000612a386001836123b4565b9150612a4382612a02565b602082019050919050565b60006020820190508181036000830152612a6781612a2b565b9050919050565b6000612a7982611f3e565b9150612a8483611f3e565b925082821015612a9757612a966127f0565b5b828203905092915050565b7f3000000000000000000000000000000000000000000000000000000000000000600082015250565b6000612ad86001836123b4565b9150612ae382612aa2565b602082019050919050565b60006020820190508181036000830152612b0781612acb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b5557607f821691505b60208210811415612b6957612b68612b0e565b5b50919050565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b6000612ba56001836123b4565b9150612bb082612b6f565b602082019050919050565b60006020820190508181036000830152612bd481612b98565b9050919050565b600081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c7b226e616d60008201527f65223a2200000000000000000000000000000000000000000000000000000000602082015250565b6000612c42602483612bdb565b9150612c4d82612be6565b602482019050919050565b6000612c63826123a9565b612c6d8185612bdb565b9350612c7d8185602086016123c5565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b6000612cbf600283612bdb565b9150612cca82612c89565b600282019050919050565b7f226465736372697074696f6e223a220000000000000000000000000000000000600082015250565b6000612d0b600f83612bdb565b9150612d1682612cd5565b600f82019050919050565b7f22696d616765223a220000000000000000000000000000000000000000000000600082015250565b6000612d57600983612bdb565b9150612d6282612d21565b600982019050919050565b7f2265787465726e616c5f6c696e6b223a2268747470733a2f2f6372756465626f60008201527f726e652e777466222c0000000000000000000000000000000000000000000000602082015250565b6000612dc9602983612bdb565b9150612dd482612d6d565b602982019050919050565b7f2273656c6c65725f6665655f62617369735f706f696e7473223a3432302c226660008201527f65655f726563697069656e74223a220000000000000000000000000000000000602082015250565b6000612e3b602f83612bdb565b9150612e4682612ddf565b602f82019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000612e87600283612bdb565b9150612e9282612e51565b600282019050919050565b6000612ea882612c35565b9150612eb48287612c58565b9150612ebf82612cb2565b9150612eca82612cfe565b9150612ed68286612c58565b9150612ee182612cb2565b9150612eec82612d4a565b9150612ef88285612c58565b9150612f0382612cb2565b9150612f0e82612dbc565b9150612f1982612e2e565b9150612f258284612c58565b9150612f3082612e7a565b915081905095945050505050565b6000606082019050612f536000830186612352565b612f606020830185612352565b612f6d604083018461206a565b949350505050565b7f7400000000000000000000000000000000000000000000000000000000000000600082015250565b6000612fab6001836123b4565b9150612fb682612f75565b602082019050919050565b60006020820190508181036000830152612fda81612f9e565b9050919050565b6000612fec82611f3e565b9150600082141561300057612fff6127f0565b5b600182039050919050565b60006060820190506130206000830186612352565b61302d6020830185612352565b61303a6040830184611fb4565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061309e6026836123b4565b91506130a982613042565b604082019050919050565b600060208201905081810360008301526130cd81613091565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061310a6020836123b4565b9150613115826130d4565b602082019050919050565b60006020820190508181036000830152613139816130fd565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061316782613140565b613171818561314b565b93506131818185602086016123c5565b61318a8161217f565b840191505092915050565b60006080820190506131aa6000830187612352565b6131b76020830186612352565b6131c46040830185611fb4565b81810360608301526131d6818461315c565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613216816131e1565b811461322157600080fd5b50565b6000815190506132338161320d565b92915050565b60006020828403121561324f5761324e611ed6565b5b600061325d84828501613224565b9150509291505056fea264697066735822122005fbe33387e189ccaaeecdea29a3e875b9348b9786278f883c72b358de4bfa3e64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000194372756465426f726e6520456c6978697220426f74746c657300000000000000000000000000000000000000000000000000000000000000000000000000000943422e454c495849520000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): CrudeBorne Elixir Bottles
Arg [1] : symbol_ (string): CB.ELIXIR
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [3] : 4372756465426f726e6520456c6978697220426f74746c657300000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 43422e454c495849520000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
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.