Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
204 HOF
Holders
37
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 HOFLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HouseOfFinns
Compiler Version
v0.8.12+commit.f00d7308
Optimization Enabled:
Yes with 100 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT import "@beskay/erc721b/contracts/ERC721B.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; pragma solidity ^0.8.4; library LibPart { bytes32 public constant TYPE_HASH = keccak256("Part(address account,uint96 value)"); struct Part { address payable account; uint96 value; } function hash(Part memory part) internal pure returns (bytes32) { return keccak256(abi.encode(TYPE_HASH, part.account, part.value)); } } // Developer: uglyrobot.eth contract HouseOfFinns is ERC721B, Ownable, ReentrancyGuard { using Strings for uint256; bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; /* * bytes4(keccak256('getRoyalties(LibAsset.AssetType)')) == 0x44c74bcc */ bytes4 private constant _INTERFACE_ID_ROYALTIES = 0x44c74bcc; string public hofProvenance; // Hash of all images string private _licenseText; bool public licenseLocked; // Init false. Team can't edit the license after this is flipped. string private _baseTokenURI; // Will be updated with IPFS url once minted out bool public baseURILocked; // Init false. Team can't change the baseURI after flipping this, making the metadata truly locked forever. string public contractURI; //used by OpenSea, not an official standard uint256 public hofPrice = 80000000000000000; // 0.08 ETH uint96 private _royaltyBPS = 500; // 5% royalty for Rarible/Mintable address private _royaltyReceiver; //address of wallet to receive royalties. Defaults to owner(). uint256 public constant HOF_MAX = 10000; //cannot be changed uint256 public maxHofPurchase = 50; //max per mint, to make sale fairer. bool public saleIsActive;// Init false. uint256 public marketingReserve = 850; // Reserve for marketing - Giveaways/Prizes etc address public withdrawAddress; //address of profits wallet event licenseIsLocked(string _licenseText); event metadataLocked(string _baseTokenURI); constructor( address _teamWallet, string memory _initLicenseText, string memory _initBaseTokenURI, string memory _ContractURI ) ERC721B("House of Finns", "HOF") payable { withdrawAddress = _teamWallet; //set marketing team address _royaltyReceiver = _teamWallet; //default to owner _licenseText = _initLicenseText; _baseTokenURI = _initBaseTokenURI; contractURI = _ContractURI; } /** * @dev Throws if called by any account other than the owner. */ modifier contractOwner() { _isOwner(); _; } /** * This actually saves a chunk of contract deployment gas when modifier is used multiple times. */ function _isOwner() internal view { require(owner() == _msgSender(), "Ownable: not the owner"); } function withdraw() public { require(withdrawAddress == msg.sender, "Withdrawl wallet only"); uint balance = address(this).balance; payable(msg.sender).transfer(balance); } //Rarible royalty interface new function getRaribleV2Royalties(uint256 /*id*/) external view returns (LibPart.Part[] memory) { LibPart.Part[] memory _royalties = new LibPart.Part[](1); _royalties[0].value = _royaltyBPS; _royalties[0].account = payable(_royaltyReceiver); return _royalties; } //Mintable royalty handler function royaltyInfo(uint256 /*_tokenId*/, uint256 _salePrice) external view returns (address receiver, uint256 royaltyAmount) { return (_royaltyReceiver, (_salePrice * _royaltyBPS)/10000); } // Register support for our two royalty standards, falling back to inherited contracts function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721B) returns (bool) { if(interfaceId == _INTERFACE_ID_ROYALTIES) { return true; } if(interfaceId == _INTERFACE_ID_ERC2981) { return true; } return super.supportsInterface(interfaceId); } /** * Slightly more gas efficient than balanceOf for merely returning ownership status. */ function isFinnsOwner(address owner) public view virtual returns (bool) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); uint256 qty = _owners.length; // Cannot realistically overflow, since we are using uint256 unchecked { for (uint256 i = 0; i < qty; i++) { if (owner == ownerOf(i)) { return true; } } } return false; } /** * Returns array of tokens only from the last mint in descending order. Transfers * will affect this, it's only useful right after minting. * It is not recommended to call this function from another smart contract * as it can become quite expensive -- call this function off chain instead. */ function latestMinted(address owner) public view virtual returns (uint256[] memory) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); if (totalSupply() == 0) { return new uint256[](0); } uint256 count; uint256 start; bool started; for (uint256 tokenId = _owners.length-1; tokenId >= 0; tokenId--) { if (!started && _owners[tokenId] == owner) { start = tokenId; started = true; count++; } else if (_owners[tokenId] == address(0)) { count++; } else if (count >= 1) { break; } if (tokenId == 0) { break; } } uint256 i; uint256 end = 0; if (count <= start) { //prevent underflow end = start - count; } uint256[] memory tokenIds = new uint256[](count); for (uint256 tokenId = start; tokenId > end; tokenId--) { tokenIds[i] = tokenId; i++; } return tokenIds; } // see https://medium.com/coinmonks/the-elegance-of-the-nft-provenance-hash-solution-823b39f99473 function setProvenanceHash(string memory provenanceHash) public contractOwner { hofProvenance = provenanceHash; } //change the metadata baseURI function setBaseURI(string memory baseURI) public contractOwner { require(baseURILocked == false, "Already locked"); _baseTokenURI = baseURI; } // Locks the baseURI to prevent further metadata changes. Only lock if it's all in onchain storage, and you will never need to update it again, or you're screwed! function lockBaseURI() public contractOwner { baseURILocked = true; emit metadataLocked(_baseTokenURI); } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return bytes(_baseTokenURI).length > 0 ? string(abi.encodePacked(_baseTokenURI, tokenId.toString())) : ""; } //used by OpenSea function setContractURI(string memory _uri) public contractOwner { contractURI = _uri; } //This enables minting function flipSaleState() public contractOwner { saleIsActive = !saleIsActive; } // Returns the license for tokens function tokenLicense(uint256 _id) public view returns(string memory) { require(_id < totalSupply(), "Invalid token"); return _licenseText; } // Locks the license to prevent further changes function lockLicense() public contractOwner { licenseLocked = true; emit licenseIsLocked(_licenseText); } // Change the license function changeLicense(string memory _license) public contractOwner { require(licenseLocked == false, "Already locked"); _licenseText = _license; } // Change the mintPrice function setMintPrice(uint256 _newPrice) public contractOwner { require(_newPrice != hofPrice, "Not new value"); hofPrice = _newPrice; } // Change the royaltyBPS function setRoyaltyBPS(uint96 _newRoyaltyBPS) public contractOwner { require(_newRoyaltyBPS != _royaltyBPS, "Not new value"); _royaltyBPS = _newRoyaltyBPS; } // Change the royalty receiver address function setRoyaltyReceiver(address _account) public contractOwner { require(_account != _royaltyReceiver, "Not new value"); _royaltyReceiver = _account; } //calculate the mint limit factoring in balances of all reserves function _mintLimit() internal virtual returns (uint256 limit) { if (marketingReserve > HOF_MAX) { return HOF_MAX; } else { return HOF_MAX - marketingReserve; } } // Change per-mint limit function setMaxHofPurchase(uint256 _limit) public contractOwner { require(maxHofPurchase != _limit, "Not new value"); maxHofPurchase = _limit; } /*---------------- Mint Functions -----------*/ // Mint function for marketing reserve function reserveMintMarketing(address _to, uint256 _reserveAmount) public contractOwner { require(_reserveAmount > 0 && _reserveAmount <= marketingReserve, "Exceeds reserve remaining"); require(totalSupply() + _reserveAmount < HOF_MAX, "Exceeds supply"); marketingReserve -= _reserveAmount; _safeMint(_to, _reserveAmount); } // Mint function for marketing reserve to multiple addresses function reserveMintMarketingMass(address[] memory _to, uint256[] memory _reserveAmount) public contractOwner { require(_to.length == _reserveAmount.length, "To and amount length mismatch"); require(_to.length > 0, "No tos"); uint256 totalReserve = 0; for (uint256 i = 0; i < _to.length; i++) { totalReserve += _reserveAmount[i]; } require(totalReserve > 0 && totalReserve <= marketingReserve, "Exceeds reserve remaining"); require(totalSupply() + totalReserve < HOF_MAX, "Exceeds supply"); marketingReserve -= totalReserve; for (uint256 i = 0; i < _to.length; i++) { _safeMint(_to[i], _reserveAmount[i]); } } //Mint for the hof minting drop function mintFinns(uint256 numberOfTokens) public payable nonReentrant { require(saleIsActive, "Sale Inactive"); require(numberOfTokens > 0 && numberOfTokens <= maxHofPurchase, "Exceeds transaction max"); require(totalSupply() + numberOfTokens < _mintLimit(), "Exceeds max supply"); require(msg.value == hofPrice * numberOfTokens, "Check price"); _safeMint(msg.sender, numberOfTokens); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.4; import '@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol'; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error UnableDetermineTokenOwner(); error UnableGetTokenOwnerByIndex(); error URIQueryForNonexistentToken(); /** * Updated, minimalist and gas efficient version of OpenZeppelins ERC721 contract. * Includes the Metadata and Enumerable extension. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * Does not support burning tokens * * @author beskay0x * Credits: chiru-labs, solmate, transmissions11, nftchance, squeebo_nft and others */ abstract contract ERC721B { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 indexed id); event Approval(address indexed owner, address indexed spender, uint256 indexed id); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /*/////////////////////////////////////////////////////////////// METADATA STORAGE/LOGIC //////////////////////////////////////////////////////////////*/ string public name; string public symbol; function tokenURI(uint256 tokenId) public view virtual returns (string memory); /*/////////////////////////////////////////////////////////////// ERC721 STORAGE //////////////////////////////////////////////////////////////*/ // Array which maps token ID to address (index is tokenID) address[] internal _owners; // 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; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; } /*/////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x780e9d63 || // ERC165 Interface ID for ERC721Enumerable interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /*/////////////////////////////////////////////////////////////// ERC721ENUMERABLE LOGIC //////////////////////////////////////////////////////////////*/ /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view returns (uint256) { return _owners.length; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * Dont call this function on chain from another smart contract, since it can become quite expensive */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual returns (uint256 tokenId) { if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds(); uint256 count; uint256 qty = _owners.length; // Cannot realistically overflow, since we are using uint256 unchecked { for (tokenId; tokenId < qty; tokenId++) { if (owner == ownerOf(tokenId)) { if (count == index) return tokenId; else count++; } } } revert UnableGetTokenOwnerByIndex(); } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual returns (uint256) { if (index >= totalSupply()) revert TokenIndexOutOfBounds(); return index; } /*/////////////////////////////////////////////////////////////// ERC721 LOGIC //////////////////////////////////////////////////////////////*/ /** * @dev Iterates through _owners array, returns balance of address * It is not recommended to call this function from another smart contract * as it can become quite expensive -- call this function off chain instead. */ function balanceOf(address owner) public view virtual returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); uint256 count; uint256 qty = _owners.length; // Cannot realistically overflow, since we are using uint256 unchecked { for (uint256 i = 0; i < qty; i++) { if (owner == ownerOf(i)) { count++; } } } return count; } /** * @dev See {IERC721-ownerOf}. * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownerOf(uint256 tokenId) public view virtual returns (address) { if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken(); // Cannot realistically overflow, since we are using uint256 unchecked { for (uint256 i = tokenId; ; i++) { if (_owners[i] != address(0)) { return _owners[i]; } } } revert UnableDetermineTokenOwner(); } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual { address owner = ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (msg.sender != owner && !isApprovedForAll(owner, msg.sender)) revert ApprovalCallerNotOwnerNorApproved(); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual { if (operator == msg.sender) revert ApproveToCaller(); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual { if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken(); if (ownerOf(tokenId) != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); bool isApprovedOrOwner = (msg.sender == from || msg.sender == getApproved(tokenId) || isApprovedForAll(from, msg.sender)); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); // delete token approvals from previous owner delete _tokenApprovals[tokenId]; _owners[tokenId] = to; // if token ID below transferred one isnt set, set it to previous owner // if tokenid is zero, skip this to prevent underflow if (tokenId > 0) { if (_owners[tokenId - 1] == address(0)) { _owners[tokenId - 1] = from; } } emit Transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); if (!_checkOnERC721Received(from, to, id, '')) revert TransferToNonERC721ReceiverImplementer(); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, bytes memory data ) public virtual { transferFrom(from, to, id); if (!_checkOnERC721Received(from, to, id, data)) revert TransferToNonERC721ReceiverImplementer(); } /** * @dev Returns whether `tokenId` exists. */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length; } /** * @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.code.length > 0) { try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /*/////////////////////////////////////////////////////////////// INTERNAL MINT LOGIC //////////////////////////////////////////////////////////////*/ /** * @dev check if contract confirms token transfer, if not - reverts * unlike the standard ERC721 implementation this is only called once per mint, * no matter how many tokens get minted, since it is useless to check this * requirement several times -- if the contract confirms one token, * it will confirm all additional ones too. * This saves us around 5k gas per additional mint */ function _safeMint(address to, uint256 qty) internal virtual { _mint(to, qty); if (!_checkOnERC721Received(address(0), to, _owners.length - 1, '')) revert TransferToNonERC721ReceiverImplementer(); } function _safeMint( address to, uint256 qty, bytes memory data ) internal virtual { _mint(to, qty); if (!_checkOnERC721Received(address(0), to, _owners.length - 1, data)) revert TransferToNonERC721ReceiverImplementer(); } function _mint(address to, uint256 qty) internal virtual { if (to == address(0)) revert MintToZeroAddress(); if (qty == 0) revert MintZeroQuantity(); uint256 _currentIndex = _owners.length; // Cannot realistically overflow, since we are using uint256 unchecked { for (uint256 i = 0; i < qty - 1; i++) { _owners.push(); emit Transfer(address(0), to, _currentIndex + i); } } // set last index to receiver _owners.push(to); emit Transfer(address(0), to, _currentIndex + (qty - 1)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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 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 { _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 v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @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 making 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// 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": true, "runs": 100 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_teamWallet","type":"address"},{"internalType":"string","name":"_initLicenseText","type":"string"},{"internalType":"string","name":"_initBaseTokenURI","type":"string"},{"internalType":"string","name":"_ContractURI","type":"string"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"UnableDetermineTokenOwner","type":"error"},{"inputs":[],"name":"UnableGetTokenOwnerByIndex","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_licenseText","type":"string"}],"name":"licenseIsLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"metadataLocked","type":"event"},{"inputs":[],"name":"HOF_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURILocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_license","type":"string"}],"name":"changeLicense","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getRaribleV2Royalties","outputs":[{"components":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint96","name":"value","type":"uint96"}],"internalType":"struct LibPart.Part[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hofPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hofProvenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"isFinnsOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"latestMinted","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"licenseLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockLicense","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHofPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintFinns","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"reserveMintMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_reserveAmount","type":"uint256[]"}],"name":"reserveMintMarketingMass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setMaxHofPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint96","name":"_newRoyaltyBPS","type":"uint96"}],"name":"setRoyaltyBPS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"setRoyaltyReceiver","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":"uint256","name":"_id","type":"uint256"}],"name":"tokenLicense","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604081905267011c37937e080000600d55600e80546001600160601b0319166101f41790556032600f5561035260115562002f2538819003908190833981016040819052620000509162000330565b604080518082018252600e81526d486f757365206f662046696e6e7360901b6020808301918252835180850190945260038452622427a360e91b908401528151919291620000a191600091620001bd565b508051620000b7906001906020840190620001bd565b505050620000d4620000ce6200016760201b60201c565b6200016b565b6001600655601280546001600160a01b0319166001600160a01b038616908117909155600e80546001600160601b03166c01000000000000000000000000909202919091179055825162000130906008906020860190620001bd565b5081516200014690600a906020850190620001bd565b5080516200015c90600c906020840190620001bd565b50505050506200041f565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001cb90620003e2565b90600052602060002090601f016020900481019282620001ef57600085556200023a565b82601f106200020a57805160ff19168380011785556200023a565b828001600101855582156200023a579182015b828111156200023a5782518255916020019190600101906200021d565b50620002489291506200024c565b5090565b5b808211156200024857600081556001016200024d565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200028b57600080fd5b81516001600160401b0380821115620002a857620002a862000263565b604051601f8301601f19908116603f01168101908282118183101715620002d357620002d362000263565b81604052838152602092508683858801011115620002f057600080fd5b600091505b83821015620003145785820183015181830184015290820190620002f5565b83821115620003265760008385830101525b9695505050505050565b600080600080608085870312156200034757600080fd5b84516001600160a01b03811681146200035f57600080fd5b60208601519094506001600160401b03808211156200037d57600080fd5b6200038b8883890162000279565b94506040870151915080821115620003a257600080fd5b620003b08883890162000279565b93506060870151915080821115620003c757600080fd5b50620003d68782880162000279565b91505092959194509250565b600181811c90821680620003f757607f821691505b602082108114156200041957634e487b7160e01b600052602260045260246000fd5b50919050565b612af6806200042f6000396000f3fe60806040526004361061029e5760003560e01c8063715018a611610165578063b88d4fde116100cc578063e8a3d48511610085578063e8a3d485146107c6578063e985e9c5146107db578063eab847d4146107fb578063eb8d24441461081b578063f2fde38b14610835578063f4a0a52814610855578063f57e6d531461087557600080fd5b8063b88d4fde14610704578063bf4702fc14610724578063c87b56dd14610739578063cad96cca14610759578063d0168a4c14610786578063d9b137b2146107a657600080fd5b806398b6b20c1161011e57806398b6b20c1461064e5780639c231bb5146106615780639cc5fe1114610681578063a22cb465146106ae578063b09904b5146106ce578063b21df6c3146106ee57600080fd5b8063715018a6146105a65780638da5cb5b146105bb5780638dc251e3146105d9578063938e3d7b146105f957806395d89b411461061957806396d74b981461062e57600080fd5b80633ccfd60b1161020957806353df5c7c116101c257806353df5c7c1461050157806355f804b3146105165780635d148e5c146105365780636352211e146105505780636cb9421c1461057057806370a082311461058657600080fd5b80633ccfd60b146104615780633e85713d1461047657806342842e0e1461048c57806342b8c751146104ac5780634f6ccce7146104cc57806353ad5388146104ec57600080fd5b806318160ddd1161025b57806318160ddd146103945780631a5722b2146103b357806323b872dd146103cd5780632a55205a146103ed5780632f745c591461042c57806334918dfd1461044c57600080fd5b806301ffc9a7146102a357806306fdde03146102d8578063081812fc146102fa578063095ea7b31461033257806310969523146103545780631581b60014610374575b600080fd5b3480156102af57600080fd5b506102c36102be3660046121e8565b61088b565b60405190151581526020015b60405180910390f35b3480156102e457600080fd5b506102ed6108de565b6040516102cf9190612264565b34801561030657600080fd5b5061031a610315366004612277565b61096c565b6040516001600160a01b0390911681526020016102cf565b34801561033e57600080fd5b5061035261034d3660046122ac565b6109b2565b005b34801561036057600080fd5b5061035261036f366004612373565b610a8c565b34801561038057600080fd5b5060125461031a906001600160a01b031681565b3480156103a057600080fd5b506002545b6040519081526020016102cf565b3480156103bf57600080fd5b506009546102c39060ff1681565b3480156103d957600080fd5b506103526103e83660046123bb565b610aab565b3480156103f957600080fd5b5061040d6104083660046123f7565b610cb3565b604080516001600160a01b0390931683526020830191909152016102cf565b34801561043857600080fd5b506103a56104473660046122ac565b610cf8565b34801561045857600080fd5b50610352610d8d565b34801561046d57600080fd5b50610352610da9565b34801561048257600080fd5b506103a560115481565b34801561049857600080fd5b506103526104a73660046123bb565b610e2f565b3480156104b857600080fd5b506103526104c7366004612277565b610e77565b3480156104d857600080fd5b506103a56104e7366004612277565b610ea6565b3480156104f857600080fd5b506102ed610ed4565b34801561050d57600080fd5b50610352610ee1565b34801561052257600080fd5b50610352610531366004612373565b610f31565b34801561054257600080fd5b50600b546102c39060ff1681565b34801561055c57600080fd5b5061031a61056b366004612277565b610f6f565b34801561057c57600080fd5b506103a5600d5481565b34801561059257600080fd5b506103a56105a1366004612419565b61100a565b3480156105b257600080fd5b5061035261107d565b3480156105c757600080fd5b506005546001600160a01b031661031a565b3480156105e557600080fd5b506103526105f4366004612419565b6110b3565b34801561060557600080fd5b50610352610614366004612373565b611118565b34801561062557600080fd5b506102ed611133565b34801561063a57600080fd5b50610352610649366004612434565b611140565b61035261065c366004612277565b61119d565b34801561066d57600080fd5b506102c361067c366004612419565b611349565b34801561068d57600080fd5b506106a161069c366004612419565b6113be565b6040516102cf919061245d565b3480156106ba57600080fd5b506103526106c93660046124a1565b611596565b3480156106da57600080fd5b506103526106e9366004612373565b61162c565b3480156106fa57600080fd5b506103a5600f5481565b34801561071057600080fd5b5061035261071f3660046124dd565b61166a565b34801561073057600080fd5b506103526116a4565b34801561074557600080fd5b506102ed610754366004612277565b6116ea565b34801561076557600080fd5b50610779610774366004612277565b6117b7565b6040516102cf9190612558565b34801561079257600080fd5b506103526107a1366004612647565b611886565b3480156107b257600080fd5b506102ed6107c1366004612277565b611a34565b3480156107d257600080fd5b506102ed611b0f565b3480156107e757600080fd5b506102c36107f6366004612706565b611b1c565b34801561080757600080fd5b506103526108163660046122ac565b611b4a565b34801561082757600080fd5b506010546102c39060ff1681565b34801561084157600080fd5b50610352610850366004612419565b611bd6565b34801561086157600080fd5b50610352610870366004612277565b611c71565b34801561088157600080fd5b506103a561271081565b60006001600160e01b03198216631131d2f360e21b14156108ae57506001919050565b6001600160e01b0319821663152a902d60e11b14156108cf57506001919050565b6108d882611ca0565b92915050565b600080546108eb90612739565b80601f016020809104026020016040519081016040528092919081815260200182805461091790612739565b80156109645780601f1061093957610100808354040283529160200191610964565b820191906000526020600020905b81548152906001019060200180831161094757829003601f168201915b505050505081565b6000610979826002541190565b610996576040516333d1c03960e21b815260040160405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006109bd82610f6f565b9050806001600160a01b0316836001600160a01b031614156109f25760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a125750610a108133611b1c565b155b15610a30576040516367d9dca160e11b815260040160405180910390fd5b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610a94611d09565b8051610aa7906007906020840190612142565b5050565b610ab6816002541190565b610ad357604051636f96cda160e11b815260040160405180910390fd5b826001600160a01b0316610ae682610f6f565b6001600160a01b031614610b0c5760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038216610b3357604051633a954ecd60e21b815260040160405180910390fd5b6000336001600160a01b0385161480610b655750610b508261096c565b6001600160a01b0316336001600160a01b0316145b80610b755750610b758433611b1c565b905080610b9557604051632ce44b5f60e11b815260040160405180910390fd5b600082815260036020526040902080546001600160a01b03191690556002805484919084908110610bc857610bc8612774565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558115610c7e5760006002610c066001856127a0565b81548110610c1657610c16612774565b6000918252602090912001546001600160a01b03161415610c7e57836002610c3f6001856127a0565b81548110610c4f57610c4f612774565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b81836001600160a01b0316856001600160a01b0316600080516020612aa183398151915260405160405180910390a450505050565b600e5460009081906001600160a01b03600160601b8204169061271090610ce3906001600160601b0316866127b7565b610ced91906127ec565b915091509250929050565b6000610d038361100a565b8210610d22576040516306ed618760e11b815260040160405180910390fd5b6002546000905b80831015610d7457610d3a83610f6f565b6001600160a01b0316856001600160a01b03161415610d695783821415610d625750506108d8565b6001909101905b600190920191610d29565b604051637339954760e01b815260040160405180910390fd5b610d95611d09565b6010805460ff19811660ff90911615179055565b6012546001600160a01b03163314610e005760405162461bcd60e51b815260206004820152601560248201527457697468647261776c2077616c6c6574206f6e6c7960581b60448201526064015b60405180910390fd5b6040514790339082156108fc029083906000818181858888f19350505050158015610aa7573d6000803e3d6000fd5b610e3a838383610aab565b610e5583838360405180602001604052806000815250611d5c565b610e72576040516368d2bf6b60e11b815260040160405180910390fd5b505050565b610e7f611d09565b80600f541415610ea15760405162461bcd60e51b8152600401610df790612800565b600f55565b6000610eb160025490565b8210610ed0576040516329c8c00760e21b815260040160405180910390fd5b5090565b600780546108eb90612739565b610ee9611d09565b600b805460ff191660011790556040517fadc8e49891460029c77844a6ce057c18a2b8940fd08e68d17757a5f8082589b290610f2790600a90612827565b60405180910390a1565b610f39611d09565b600b5460ff1615610f5c5760405162461bcd60e51b8152600401610df7906128ac565b8051610aa790600a906020840190612142565b6000610f7c826002541190565b610f9957604051636f96cda160e11b815260040160405180910390fd5b815b60006001600160a01b031660028281548110610fb957610fb9612774565b6000918252602090912001546001600160a01b0316146110025760028181548110610fe657610fe6612774565b6000918252602090912001546001600160a01b03169392505050565b600101610f9b565b60006001600160a01b038216611033576040516323d3ad8160e21b815260040160405180910390fd5b600254600090815b818110156110745761104c81610f6f565b6001600160a01b0316856001600160a01b0316141561106c576001909201915b60010161103b565b50909392505050565b6005546001600160a01b031633146110a75760405162461bcd60e51b8152600401610df7906128d4565b6110b16000611e5c565b565b6110bb611d09565b600e546001600160a01b03828116600160601b9092041614156110f05760405162461bcd60e51b8152600401610df790612800565b600e80546001600160a01b03909216600160601b026001600160601b03909216919091179055565b611120611d09565b8051610aa790600c906020840190612142565b600180546108eb90612739565b611148611d09565b600e546001600160601b03828116911614156111765760405162461bcd60e51b8152600401610df790612800565b600e80546bffffffffffffffffffffffff19166001600160601b0392909216919091179055565b600260065414156111f05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df7565b600260065560105460ff166112375760405162461bcd60e51b815260206004820152600d60248201526c53616c6520496e61637469766560981b6044820152606401610df7565b6000811180156112495750600f548111155b61128f5760405162461bcd60e51b815260206004820152601760248201527608af0c6cacac8e640e8e4c2dce6c2c6e8d2dedc40dac2f604b1b6044820152606401610df7565b611297611eae565b816112a160025490565b6112ab9190612909565b106112ed5760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610df7565b80600d546112fb91906127b7565b34146113375760405162461bcd60e51b815260206004820152600b60248201526a436865636b20707269636560a81b6044820152606401610df7565b6113413382611ed7565b506001600655565b60006001600160a01b038216611372576040516323d3ad8160e21b815260040160405180910390fd5b60025460005b818110156113b45761138981610f6f565b6001600160a01b0316846001600160a01b031614156113ac575060019392505050565b600101611378565b5060009392505050565b60606001600160a01b0382166113e7576040516323d3ad8160e21b815260040160405180910390fd5b60025461140257505060408051600081526020810190915290565b600080600080600160028054905061141a91906127a0565b90505b8115801561145a5750856001600160a01b03166002828154811061144357611443612774565b6000918252602090912001546001600160a01b0316145b1561147857915060019050818361147081612921565b9450506114c8565b60006001600160a01b03166002828154811061149657611496612774565b6000918252602090912001546001600160a01b031614156114bb578361147081612921565b600184106114c8576114e4565b806114d2576114e4565b806114dc8161293c565b91505061141d565b506000808385116114fc576114f985856127a0565b90505b6000856001600160401b03811115611516576115166122d6565b60405190808252806020026020018201604052801561153f578160200160208202803683370190505b509050845b8281111561158a578082858151811061155f5761155f612774565b60209081029190910101528361157481612921565b94505080806115829061293c565b915050611544565b50979650505050505050565b6001600160a01b0382163314156115c05760405163b06307db60e01b815260040160405180910390fd5b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611634611d09565b60095460ff16156116575760405162461bcd60e51b8152600401610df7906128ac565b8051610aa7906008906020840190612142565b611675848484610aab565b61168184848484611d5c565b61169e576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6116ac611d09565b6009805460ff191660011790556040517ff27a6fa5c2c9783f2c131f659c2119106077b81db9f21c76357aa819ad314f7e90610f2790600890612827565b60606116f7826002541190565b61175b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610df7565b6000600a805461176a90612739565b90501161178657604051806020016040528060008152506108d8565b600a61179183611f2b565b6040516020016117a2929190612953565b60405160208183030381529060405292915050565b60408051600180825281830190925260609160009190816020015b60408051808201909152600080825260208201528152602001906001900390816117d2575050600e5481519192506001600160601b031690829060009061181b5761181b612774565b6020026020010151602001906001600160601b031690816001600160601b031681525050600e600c9054906101000a90046001600160a01b03168160008151811061186857611868612774565b60209081029190910101516001600160a01b03909116905292915050565b61188e611d09565b80518251146118df5760405162461bcd60e51b815260206004820152601d60248201527f546f20616e6420616d6f756e74206c656e677468206d69736d617463680000006044820152606401610df7565b60008251116119195760405162461bcd60e51b81526020600482015260066024820152654e6f20746f7360d01b6044820152606401610df7565b6000805b835181101561195f5782818151811061193857611938612774565b60200260200101518261194b9190612909565b91508061195781612921565b91505061191d565b5060008111801561197257506011548111155b61198e5760405162461bcd60e51b8152600401610df7906129d6565b6127108161199b60025490565b6119a59190612909565b106119c25760405162461bcd60e51b8152600401610df790612a09565b80601160008282546119d491906127a0565b90915550600090505b835181101561169e57611a228482815181106119fb576119fb612774565b6020026020010151848381518110611a1557611a15612774565b6020026020010151611ed7565b80611a2c81612921565b9150506119dd565b6060611a3f60025490565b8210611a7d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610df7565b60088054611a8a90612739565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab690612739565b8015611b035780601f10611ad857610100808354040283529160200191611b03565b820191906000526020600020905b815481529060010190602001808311611ae657829003601f168201915b50505050509050919050565b600c80546108eb90612739565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b611b52611d09565b600081118015611b6457506011548111155b611b805760405162461bcd60e51b8152600401610df7906129d6565b61271081611b8d60025490565b611b979190612909565b10611bb45760405162461bcd60e51b8152600401610df790612a09565b8060116000828254611bc691906127a0565b90915550610aa790508282611ed7565b6005546001600160a01b03163314611c005760405162461bcd60e51b8152600401610df7906128d4565b6001600160a01b038116611c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df7565b611c6e81611e5c565b50565b611c79611d09565b600d54811415611c9b5760405162461bcd60e51b8152600401610df790612800565b600d55565b60006301ffc9a760e01b6001600160e01b031983161480611cd157506380ac58cd60e01b6001600160e01b03198316145b80611cec575063780e9d6360e01b6001600160e01b03198316145b806108d85750506001600160e01b031916635b5e139f60e01b1490565b6005546001600160a01b031633146110b15760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d103737ba103a34329037bbb732b960511b6044820152606401610df7565b60006001600160a01b0384163b15611e5057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611da0903390899088908890600401612a32565b6020604051808303816000875af1925050508015611ddb575060408051601f3d908101601f19168201909252611dd891810190612a6f565b60015b611e36573d808015611e09576040519150601f19603f3d011682016040523d82523d6000602084013e611e0e565b606091505b508051611e2e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611e54565b5060015b949350505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006127106011541115611ec3575061271090565b601154611ed2906127106127a0565b905090565b611ee18282612028565b611f0e6000836001600280549050611ef991906127a0565b60405180602001604052806000815250611d5c565b610aa7576040516368d2bf6b60e11b815260040160405180910390fd5b606081611f4f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611f795780611f6381612921565b9150611f729050600a836127ec565b9150611f53565b6000816001600160401b03811115611f9357611f936122d6565b6040519080825280601f01601f191660200182016040528015611fbd576020820181803683370190505b5090505b8415611e5457611fd26001836127a0565b9150611fdf600a86612a8c565b611fea906030612909565b60f81b818381518110611fff57611fff612774565b60200101906001600160f81b031916908160001a905350612021600a866127ec565b9450611fc1565b6001600160a01b03821661204e57604051622e076360e81b815260040160405180910390fd5b8061206c5760405163b562e8dd60e01b815260040160405180910390fd5b60025460005b600183038110156120b8576002805460010181556000908152604051838301916001600160a01b03871691600080516020612aa1833981519152908290a4600101612072565b5060028054600180820183556000929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b03861617905561210f90836127a0565b6121199082612909565b6040516001600160a01b03851690600090600080516020612aa1833981519152908290a4505050565b82805461214e90612739565b90600052602060002090601f01602090048101928261217057600085556121b6565b82601f1061218957805160ff19168380011785556121b6565b828001600101855582156121b6579182015b828111156121b657825182559160200191906001019061219b565b50610ed09291505b80821115610ed057600081556001016121be565b6001600160e01b031981168114611c6e57600080fd5b6000602082840312156121fa57600080fd5b8135612205816121d2565b9392505050565b60005b8381101561222757818101518382015260200161220f565b8381111561169e5750506000910152565b6000815180845261225081602086016020860161220c565b601f01601f19169290920160200192915050565b6020815260006122056020830184612238565b60006020828403121561228957600080fd5b5035919050565b80356001600160a01b03811681146122a757600080fd5b919050565b600080604083850312156122bf57600080fd5b6122c883612290565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612314576123146122d6565b604052919050565b60006001600160401b03831115612335576123356122d6565b612348601f8401601f19166020016122ec565b905082815283838301111561235c57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561238557600080fd5b81356001600160401b0381111561239b57600080fd5b8201601f810184136123ac57600080fd5b611e548482356020840161231c565b6000806000606084860312156123d057600080fd5b6123d984612290565b92506123e760208501612290565b9150604084013590509250925092565b6000806040838503121561240a57600080fd5b50508035926020909101359150565b60006020828403121561242b57600080fd5b61220582612290565b60006020828403121561244657600080fd5b81356001600160601b038116811461220557600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561249557835183529284019291840191600101612479565b50909695505050505050565b600080604083850312156124b457600080fd5b6124bd83612290565b9150602083013580151581146124d257600080fd5b809150509250929050565b600080600080608085870312156124f357600080fd5b6124fc85612290565b935061250a60208601612290565b92506040850135915060608501356001600160401b0381111561252c57600080fd5b8501601f8101871361253d57600080fd5b61254c8782356020840161231c565b91505092959194509250565b602080825282518282018190526000919060409081850190868401855b828110156125ac57815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101612575565b5091979650505050505050565b60006001600160401b038211156125d2576125d26122d6565b5060051b60200190565b600082601f8301126125ed57600080fd5b813560206126026125fd836125b9565b6122ec565b82815260059290921b8401810191818101908684111561262157600080fd5b8286015b8481101561263c5780358352918301918301612625565b509695505050505050565b6000806040838503121561265a57600080fd5b82356001600160401b038082111561267157600080fd5b818501915085601f83011261268557600080fd5b813560206126956125fd836125b9565b82815260059290921b840181019181810190898411156126b457600080fd5b948201945b838610156126d9576126ca86612290565b825294820194908201906126b9565b965050860135925050808211156126ef57600080fd5b506126fc858286016125dc565b9150509250929050565b6000806040838503121561271957600080fd5b61272283612290565b915061273060208401612290565b90509250929050565b600181811c9082168061274d57607f821691505b6020821081141561276e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156127b2576127b261278a565b500390565b60008160001904831182151516156127d1576127d161278a565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826127fb576127fb6127d6565b500490565b6020808252600d908201526c4e6f74206e65772076616c756560981b604082015260600190565b600060208083526000845461283b81612739565b8084870152604060018084166000811461285c57600181146128705761289e565b60ff1985168984015260608901955061289e565b896000528660002060005b858110156128965781548b820186015290830190880161287b565b8a0184019650505b509398975050505050505050565b6020808252600e908201526d105b1c9958591e481b1bd8dad95960921b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561291c5761291c61278a565b500190565b60006000198214156129355761293561278a565b5060010190565b60008161294b5761294b61278a565b506000190190565b600080845461296181612739565b60018281168015612979576001811461298a576129b9565b60ff198416875282870194506129b9565b8860005260208060002060005b858110156129b05781548a820152908401908201612997565b50505082870194505b5050505083516129cd81836020880161220c565b01949350505050565b6020808252601990820152784578636565647320726573657276652072656d61696e696e6760381b604082015260600190565b6020808252600f908201526e457863656564732020737570706c7960881b604082015260600190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a6590830184612238565b9695505050505050565b600060208284031215612a8157600080fd5b8151612205816121d2565b600082612a9b57612a9b6127d6565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220584e5df19d4eeaddfa37ed872d79c0ef74a15c59bda5de8f65a4ba3fa407a61864736f6c634300080c00330000000000000000000000000e3aa6cf5c0a3101ffd163546fde723299c136ae000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000035442440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d68747470733a2f2f6e7474776e79693461692e657865637574652d6170692e75732d656173742d312e616d617a6f6e6177732e636f6d2f66696e6e732f000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f65766a6178792e696e66696e69746575706c6f6164732e636c6f75642f323032322f30332f636f6e74726163742d6d657461646174612e6a736f6e0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061029e5760003560e01c8063715018a611610165578063b88d4fde116100cc578063e8a3d48511610085578063e8a3d485146107c6578063e985e9c5146107db578063eab847d4146107fb578063eb8d24441461081b578063f2fde38b14610835578063f4a0a52814610855578063f57e6d531461087557600080fd5b8063b88d4fde14610704578063bf4702fc14610724578063c87b56dd14610739578063cad96cca14610759578063d0168a4c14610786578063d9b137b2146107a657600080fd5b806398b6b20c1161011e57806398b6b20c1461064e5780639c231bb5146106615780639cc5fe1114610681578063a22cb465146106ae578063b09904b5146106ce578063b21df6c3146106ee57600080fd5b8063715018a6146105a65780638da5cb5b146105bb5780638dc251e3146105d9578063938e3d7b146105f957806395d89b411461061957806396d74b981461062e57600080fd5b80633ccfd60b1161020957806353df5c7c116101c257806353df5c7c1461050157806355f804b3146105165780635d148e5c146105365780636352211e146105505780636cb9421c1461057057806370a082311461058657600080fd5b80633ccfd60b146104615780633e85713d1461047657806342842e0e1461048c57806342b8c751146104ac5780634f6ccce7146104cc57806353ad5388146104ec57600080fd5b806318160ddd1161025b57806318160ddd146103945780631a5722b2146103b357806323b872dd146103cd5780632a55205a146103ed5780632f745c591461042c57806334918dfd1461044c57600080fd5b806301ffc9a7146102a357806306fdde03146102d8578063081812fc146102fa578063095ea7b31461033257806310969523146103545780631581b60014610374575b600080fd5b3480156102af57600080fd5b506102c36102be3660046121e8565b61088b565b60405190151581526020015b60405180910390f35b3480156102e457600080fd5b506102ed6108de565b6040516102cf9190612264565b34801561030657600080fd5b5061031a610315366004612277565b61096c565b6040516001600160a01b0390911681526020016102cf565b34801561033e57600080fd5b5061035261034d3660046122ac565b6109b2565b005b34801561036057600080fd5b5061035261036f366004612373565b610a8c565b34801561038057600080fd5b5060125461031a906001600160a01b031681565b3480156103a057600080fd5b506002545b6040519081526020016102cf565b3480156103bf57600080fd5b506009546102c39060ff1681565b3480156103d957600080fd5b506103526103e83660046123bb565b610aab565b3480156103f957600080fd5b5061040d6104083660046123f7565b610cb3565b604080516001600160a01b0390931683526020830191909152016102cf565b34801561043857600080fd5b506103a56104473660046122ac565b610cf8565b34801561045857600080fd5b50610352610d8d565b34801561046d57600080fd5b50610352610da9565b34801561048257600080fd5b506103a560115481565b34801561049857600080fd5b506103526104a73660046123bb565b610e2f565b3480156104b857600080fd5b506103526104c7366004612277565b610e77565b3480156104d857600080fd5b506103a56104e7366004612277565b610ea6565b3480156104f857600080fd5b506102ed610ed4565b34801561050d57600080fd5b50610352610ee1565b34801561052257600080fd5b50610352610531366004612373565b610f31565b34801561054257600080fd5b50600b546102c39060ff1681565b34801561055c57600080fd5b5061031a61056b366004612277565b610f6f565b34801561057c57600080fd5b506103a5600d5481565b34801561059257600080fd5b506103a56105a1366004612419565b61100a565b3480156105b257600080fd5b5061035261107d565b3480156105c757600080fd5b506005546001600160a01b031661031a565b3480156105e557600080fd5b506103526105f4366004612419565b6110b3565b34801561060557600080fd5b50610352610614366004612373565b611118565b34801561062557600080fd5b506102ed611133565b34801561063a57600080fd5b50610352610649366004612434565b611140565b61035261065c366004612277565b61119d565b34801561066d57600080fd5b506102c361067c366004612419565b611349565b34801561068d57600080fd5b506106a161069c366004612419565b6113be565b6040516102cf919061245d565b3480156106ba57600080fd5b506103526106c93660046124a1565b611596565b3480156106da57600080fd5b506103526106e9366004612373565b61162c565b3480156106fa57600080fd5b506103a5600f5481565b34801561071057600080fd5b5061035261071f3660046124dd565b61166a565b34801561073057600080fd5b506103526116a4565b34801561074557600080fd5b506102ed610754366004612277565b6116ea565b34801561076557600080fd5b50610779610774366004612277565b6117b7565b6040516102cf9190612558565b34801561079257600080fd5b506103526107a1366004612647565b611886565b3480156107b257600080fd5b506102ed6107c1366004612277565b611a34565b3480156107d257600080fd5b506102ed611b0f565b3480156107e757600080fd5b506102c36107f6366004612706565b611b1c565b34801561080757600080fd5b506103526108163660046122ac565b611b4a565b34801561082757600080fd5b506010546102c39060ff1681565b34801561084157600080fd5b50610352610850366004612419565b611bd6565b34801561086157600080fd5b50610352610870366004612277565b611c71565b34801561088157600080fd5b506103a561271081565b60006001600160e01b03198216631131d2f360e21b14156108ae57506001919050565b6001600160e01b0319821663152a902d60e11b14156108cf57506001919050565b6108d882611ca0565b92915050565b600080546108eb90612739565b80601f016020809104026020016040519081016040528092919081815260200182805461091790612739565b80156109645780601f1061093957610100808354040283529160200191610964565b820191906000526020600020905b81548152906001019060200180831161094757829003601f168201915b505050505081565b6000610979826002541190565b610996576040516333d1c03960e21b815260040160405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006109bd82610f6f565b9050806001600160a01b0316836001600160a01b031614156109f25760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a125750610a108133611b1c565b155b15610a30576040516367d9dca160e11b815260040160405180910390fd5b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610a94611d09565b8051610aa7906007906020840190612142565b5050565b610ab6816002541190565b610ad357604051636f96cda160e11b815260040160405180910390fd5b826001600160a01b0316610ae682610f6f565b6001600160a01b031614610b0c5760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038216610b3357604051633a954ecd60e21b815260040160405180910390fd5b6000336001600160a01b0385161480610b655750610b508261096c565b6001600160a01b0316336001600160a01b0316145b80610b755750610b758433611b1c565b905080610b9557604051632ce44b5f60e11b815260040160405180910390fd5b600082815260036020526040902080546001600160a01b03191690556002805484919084908110610bc857610bc8612774565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558115610c7e5760006002610c066001856127a0565b81548110610c1657610c16612774565b6000918252602090912001546001600160a01b03161415610c7e57836002610c3f6001856127a0565b81548110610c4f57610c4f612774565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b81836001600160a01b0316856001600160a01b0316600080516020612aa183398151915260405160405180910390a450505050565b600e5460009081906001600160a01b03600160601b8204169061271090610ce3906001600160601b0316866127b7565b610ced91906127ec565b915091509250929050565b6000610d038361100a565b8210610d22576040516306ed618760e11b815260040160405180910390fd5b6002546000905b80831015610d7457610d3a83610f6f565b6001600160a01b0316856001600160a01b03161415610d695783821415610d625750506108d8565b6001909101905b600190920191610d29565b604051637339954760e01b815260040160405180910390fd5b610d95611d09565b6010805460ff19811660ff90911615179055565b6012546001600160a01b03163314610e005760405162461bcd60e51b815260206004820152601560248201527457697468647261776c2077616c6c6574206f6e6c7960581b60448201526064015b60405180910390fd5b6040514790339082156108fc029083906000818181858888f19350505050158015610aa7573d6000803e3d6000fd5b610e3a838383610aab565b610e5583838360405180602001604052806000815250611d5c565b610e72576040516368d2bf6b60e11b815260040160405180910390fd5b505050565b610e7f611d09565b80600f541415610ea15760405162461bcd60e51b8152600401610df790612800565b600f55565b6000610eb160025490565b8210610ed0576040516329c8c00760e21b815260040160405180910390fd5b5090565b600780546108eb90612739565b610ee9611d09565b600b805460ff191660011790556040517fadc8e49891460029c77844a6ce057c18a2b8940fd08e68d17757a5f8082589b290610f2790600a90612827565b60405180910390a1565b610f39611d09565b600b5460ff1615610f5c5760405162461bcd60e51b8152600401610df7906128ac565b8051610aa790600a906020840190612142565b6000610f7c826002541190565b610f9957604051636f96cda160e11b815260040160405180910390fd5b815b60006001600160a01b031660028281548110610fb957610fb9612774565b6000918252602090912001546001600160a01b0316146110025760028181548110610fe657610fe6612774565b6000918252602090912001546001600160a01b03169392505050565b600101610f9b565b60006001600160a01b038216611033576040516323d3ad8160e21b815260040160405180910390fd5b600254600090815b818110156110745761104c81610f6f565b6001600160a01b0316856001600160a01b0316141561106c576001909201915b60010161103b565b50909392505050565b6005546001600160a01b031633146110a75760405162461bcd60e51b8152600401610df7906128d4565b6110b16000611e5c565b565b6110bb611d09565b600e546001600160a01b03828116600160601b9092041614156110f05760405162461bcd60e51b8152600401610df790612800565b600e80546001600160a01b03909216600160601b026001600160601b03909216919091179055565b611120611d09565b8051610aa790600c906020840190612142565b600180546108eb90612739565b611148611d09565b600e546001600160601b03828116911614156111765760405162461bcd60e51b8152600401610df790612800565b600e80546bffffffffffffffffffffffff19166001600160601b0392909216919091179055565b600260065414156111f05760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df7565b600260065560105460ff166112375760405162461bcd60e51b815260206004820152600d60248201526c53616c6520496e61637469766560981b6044820152606401610df7565b6000811180156112495750600f548111155b61128f5760405162461bcd60e51b815260206004820152601760248201527608af0c6cacac8e640e8e4c2dce6c2c6e8d2dedc40dac2f604b1b6044820152606401610df7565b611297611eae565b816112a160025490565b6112ab9190612909565b106112ed5760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610df7565b80600d546112fb91906127b7565b34146113375760405162461bcd60e51b815260206004820152600b60248201526a436865636b20707269636560a81b6044820152606401610df7565b6113413382611ed7565b506001600655565b60006001600160a01b038216611372576040516323d3ad8160e21b815260040160405180910390fd5b60025460005b818110156113b45761138981610f6f565b6001600160a01b0316846001600160a01b031614156113ac575060019392505050565b600101611378565b5060009392505050565b60606001600160a01b0382166113e7576040516323d3ad8160e21b815260040160405180910390fd5b60025461140257505060408051600081526020810190915290565b600080600080600160028054905061141a91906127a0565b90505b8115801561145a5750856001600160a01b03166002828154811061144357611443612774565b6000918252602090912001546001600160a01b0316145b1561147857915060019050818361147081612921565b9450506114c8565b60006001600160a01b03166002828154811061149657611496612774565b6000918252602090912001546001600160a01b031614156114bb578361147081612921565b600184106114c8576114e4565b806114d2576114e4565b806114dc8161293c565b91505061141d565b506000808385116114fc576114f985856127a0565b90505b6000856001600160401b03811115611516576115166122d6565b60405190808252806020026020018201604052801561153f578160200160208202803683370190505b509050845b8281111561158a578082858151811061155f5761155f612774565b60209081029190910101528361157481612921565b94505080806115829061293c565b915050611544565b50979650505050505050565b6001600160a01b0382163314156115c05760405163b06307db60e01b815260040160405180910390fd5b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611634611d09565b60095460ff16156116575760405162461bcd60e51b8152600401610df7906128ac565b8051610aa7906008906020840190612142565b611675848484610aab565b61168184848484611d5c565b61169e576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6116ac611d09565b6009805460ff191660011790556040517ff27a6fa5c2c9783f2c131f659c2119106077b81db9f21c76357aa819ad314f7e90610f2790600890612827565b60606116f7826002541190565b61175b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610df7565b6000600a805461176a90612739565b90501161178657604051806020016040528060008152506108d8565b600a61179183611f2b565b6040516020016117a2929190612953565b60405160208183030381529060405292915050565b60408051600180825281830190925260609160009190816020015b60408051808201909152600080825260208201528152602001906001900390816117d2575050600e5481519192506001600160601b031690829060009061181b5761181b612774565b6020026020010151602001906001600160601b031690816001600160601b031681525050600e600c9054906101000a90046001600160a01b03168160008151811061186857611868612774565b60209081029190910101516001600160a01b03909116905292915050565b61188e611d09565b80518251146118df5760405162461bcd60e51b815260206004820152601d60248201527f546f20616e6420616d6f756e74206c656e677468206d69736d617463680000006044820152606401610df7565b60008251116119195760405162461bcd60e51b81526020600482015260066024820152654e6f20746f7360d01b6044820152606401610df7565b6000805b835181101561195f5782818151811061193857611938612774565b60200260200101518261194b9190612909565b91508061195781612921565b91505061191d565b5060008111801561197257506011548111155b61198e5760405162461bcd60e51b8152600401610df7906129d6565b6127108161199b60025490565b6119a59190612909565b106119c25760405162461bcd60e51b8152600401610df790612a09565b80601160008282546119d491906127a0565b90915550600090505b835181101561169e57611a228482815181106119fb576119fb612774565b6020026020010151848381518110611a1557611a15612774565b6020026020010151611ed7565b80611a2c81612921565b9150506119dd565b6060611a3f60025490565b8210611a7d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610df7565b60088054611a8a90612739565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab690612739565b8015611b035780601f10611ad857610100808354040283529160200191611b03565b820191906000526020600020905b815481529060010190602001808311611ae657829003601f168201915b50505050509050919050565b600c80546108eb90612739565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b611b52611d09565b600081118015611b6457506011548111155b611b805760405162461bcd60e51b8152600401610df7906129d6565b61271081611b8d60025490565b611b979190612909565b10611bb45760405162461bcd60e51b8152600401610df790612a09565b8060116000828254611bc691906127a0565b90915550610aa790508282611ed7565b6005546001600160a01b03163314611c005760405162461bcd60e51b8152600401610df7906128d4565b6001600160a01b038116611c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df7565b611c6e81611e5c565b50565b611c79611d09565b600d54811415611c9b5760405162461bcd60e51b8152600401610df790612800565b600d55565b60006301ffc9a760e01b6001600160e01b031983161480611cd157506380ac58cd60e01b6001600160e01b03198316145b80611cec575063780e9d6360e01b6001600160e01b03198316145b806108d85750506001600160e01b031916635b5e139f60e01b1490565b6005546001600160a01b031633146110b15760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d103737ba103a34329037bbb732b960511b6044820152606401610df7565b60006001600160a01b0384163b15611e5057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611da0903390899088908890600401612a32565b6020604051808303816000875af1925050508015611ddb575060408051601f3d908101601f19168201909252611dd891810190612a6f565b60015b611e36573d808015611e09576040519150601f19603f3d011682016040523d82523d6000602084013e611e0e565b606091505b508051611e2e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611e54565b5060015b949350505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006127106011541115611ec3575061271090565b601154611ed2906127106127a0565b905090565b611ee18282612028565b611f0e6000836001600280549050611ef991906127a0565b60405180602001604052806000815250611d5c565b610aa7576040516368d2bf6b60e11b815260040160405180910390fd5b606081611f4f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611f795780611f6381612921565b9150611f729050600a836127ec565b9150611f53565b6000816001600160401b03811115611f9357611f936122d6565b6040519080825280601f01601f191660200182016040528015611fbd576020820181803683370190505b5090505b8415611e5457611fd26001836127a0565b9150611fdf600a86612a8c565b611fea906030612909565b60f81b818381518110611fff57611fff612774565b60200101906001600160f81b031916908160001a905350612021600a866127ec565b9450611fc1565b6001600160a01b03821661204e57604051622e076360e81b815260040160405180910390fd5b8061206c5760405163b562e8dd60e01b815260040160405180910390fd5b60025460005b600183038110156120b8576002805460010181556000908152604051838301916001600160a01b03871691600080516020612aa1833981519152908290a4600101612072565b5060028054600180820183556000929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b03861617905561210f90836127a0565b6121199082612909565b6040516001600160a01b03851690600090600080516020612aa1833981519152908290a4505050565b82805461214e90612739565b90600052602060002090601f01602090048101928261217057600085556121b6565b82601f1061218957805160ff19168380011785556121b6565b828001600101855582156121b6579182015b828111156121b657825182559160200191906001019061219b565b50610ed09291505b80821115610ed057600081556001016121be565b6001600160e01b031981168114611c6e57600080fd5b6000602082840312156121fa57600080fd5b8135612205816121d2565b9392505050565b60005b8381101561222757818101518382015260200161220f565b8381111561169e5750506000910152565b6000815180845261225081602086016020860161220c565b601f01601f19169290920160200192915050565b6020815260006122056020830184612238565b60006020828403121561228957600080fd5b5035919050565b80356001600160a01b03811681146122a757600080fd5b919050565b600080604083850312156122bf57600080fd5b6122c883612290565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612314576123146122d6565b604052919050565b60006001600160401b03831115612335576123356122d6565b612348601f8401601f19166020016122ec565b905082815283838301111561235c57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561238557600080fd5b81356001600160401b0381111561239b57600080fd5b8201601f810184136123ac57600080fd5b611e548482356020840161231c565b6000806000606084860312156123d057600080fd5b6123d984612290565b92506123e760208501612290565b9150604084013590509250925092565b6000806040838503121561240a57600080fd5b50508035926020909101359150565b60006020828403121561242b57600080fd5b61220582612290565b60006020828403121561244657600080fd5b81356001600160601b038116811461220557600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561249557835183529284019291840191600101612479565b50909695505050505050565b600080604083850312156124b457600080fd5b6124bd83612290565b9150602083013580151581146124d257600080fd5b809150509250929050565b600080600080608085870312156124f357600080fd5b6124fc85612290565b935061250a60208601612290565b92506040850135915060608501356001600160401b0381111561252c57600080fd5b8501601f8101871361253d57600080fd5b61254c8782356020840161231c565b91505092959194509250565b602080825282518282018190526000919060409081850190868401855b828110156125ac57815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101612575565b5091979650505050505050565b60006001600160401b038211156125d2576125d26122d6565b5060051b60200190565b600082601f8301126125ed57600080fd5b813560206126026125fd836125b9565b6122ec565b82815260059290921b8401810191818101908684111561262157600080fd5b8286015b8481101561263c5780358352918301918301612625565b509695505050505050565b6000806040838503121561265a57600080fd5b82356001600160401b038082111561267157600080fd5b818501915085601f83011261268557600080fd5b813560206126956125fd836125b9565b82815260059290921b840181019181810190898411156126b457600080fd5b948201945b838610156126d9576126ca86612290565b825294820194908201906126b9565b965050860135925050808211156126ef57600080fd5b506126fc858286016125dc565b9150509250929050565b6000806040838503121561271957600080fd5b61272283612290565b915061273060208401612290565b90509250929050565b600181811c9082168061274d57607f821691505b6020821081141561276e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156127b2576127b261278a565b500390565b60008160001904831182151516156127d1576127d161278a565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826127fb576127fb6127d6565b500490565b6020808252600d908201526c4e6f74206e65772076616c756560981b604082015260600190565b600060208083526000845461283b81612739565b8084870152604060018084166000811461285c57600181146128705761289e565b60ff1985168984015260608901955061289e565b896000528660002060005b858110156128965781548b820186015290830190880161287b565b8a0184019650505b509398975050505050505050565b6020808252600e908201526d105b1c9958591e481b1bd8dad95960921b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561291c5761291c61278a565b500190565b60006000198214156129355761293561278a565b5060010190565b60008161294b5761294b61278a565b506000190190565b600080845461296181612739565b60018281168015612979576001811461298a576129b9565b60ff198416875282870194506129b9565b8860005260208060002060005b858110156129b05781548a820152908401908201612997565b50505082870194505b5050505083516129cd81836020880161220c565b01949350505050565b6020808252601990820152784578636565647320726573657276652072656d61696e696e6760381b604082015260600190565b6020808252600f908201526e457863656564732020737570706c7960881b604082015260600190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a6590830184612238565b9695505050505050565b600060208284031215612a8157600080fd5b8151612205816121d2565b600082612a9b57612a9b6127d6565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220584e5df19d4eeaddfa37ed872d79c0ef74a15c59bda5de8f65a4ba3fa407a61864736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000e3aa6cf5c0a3101ffd163546fde723299c136ae000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000035442440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d68747470733a2f2f6e7474776e79693461692e657865637574652d6170692e75732d656173742d312e616d617a6f6e6177732e636f6d2f66696e6e732f000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f65766a6178792e696e66696e69746575706c6f6164732e636c6f75642f323032322f30332f636f6e74726163742d6d657461646174612e6a736f6e0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _teamWallet (address): 0x0E3aA6Cf5c0a3101fFD163546fDE723299C136aE
Arg [1] : _initLicenseText (string): TBD
Arg [2] : _initBaseTokenURI (string): https://nttwnyi4ai.execute-api.us-east-1.amazonaws.com/finns/
Arg [3] : _ContractURI (string): https://evjaxy.infiniteuploads.cloud/2022/03/contract-metadata.json
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000e3aa6cf5c0a3101ffd163546fde723299c136ae
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 5442440000000000000000000000000000000000000000000000000000000000
Arg [6] : 000000000000000000000000000000000000000000000000000000000000003d
Arg [7] : 68747470733a2f2f6e7474776e79693461692e657865637574652d6170692e75
Arg [8] : 732d656173742d312e616d617a6f6e6177732e636f6d2f66696e6e732f000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [10] : 68747470733a2f2f65766a6178792e696e66696e69746575706c6f6164732e63
Arg [11] : 6c6f75642f323032322f30332f636f6e74726163742d6d657461646174612e6a
Arg [12] : 736f6e0000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.