Overview
ETH Balance
0.15 ETH
Eth Value
$391.72 (@ $2,611.46/ETH)More Info
Private Name Tags
ContractCreator
Latest 12 from a total of 12 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Batch Permit | 15524295 | 764 days ago | IN | 0 ETH | 0.00087031 | ||||
Batch Permit | 15520642 | 765 days ago | IN | 0 ETH | 0.0014917 | ||||
Batch Permit | 15520562 | 765 days ago | IN | 0 ETH | 0.00132872 | ||||
Batch Permit | 15520453 | 765 days ago | IN | 0 ETH | 0.00063861 | ||||
Batch Permit | 15518933 | 765 days ago | IN | 0 ETH | 0.00063371 | ||||
Batch Permit | 15518850 | 765 days ago | IN | 0 ETH | 0.00166652 | ||||
Batch Permit | 15518737 | 765 days ago | IN | 0 ETH | 0.0007946 | ||||
Batch Permit | 15503198 | 768 days ago | IN | 0 ETH | 0.00270607 | ||||
Batch Permit | 15497262 | 769 days ago | IN | 0 ETH | 0.00956037 | ||||
Batch Permit | 15497154 | 769 days ago | IN | 0 ETH | 0.00196187 | ||||
Transfer | 15497123 | 769 days ago | IN | 2 ETH | 0.00034518 | ||||
0x61016060 | 15495712 | 769 days ago | IN | 0 ETH | 0.03606864 |
Latest 10 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15524295 | 764 days ago | 0.075 ETH | ||||
15520642 | 765 days ago | 0.25 ETH | ||||
15520562 | 765 days ago | 0.25 ETH | ||||
15520453 | 765 days ago | 0.25 ETH | ||||
15518933 | 765 days ago | 0.25 ETH | ||||
15518850 | 765 days ago | 0.325 ETH | ||||
15518737 | 765 days ago | 0.1 ETH | ||||
15503198 | 768 days ago | 0.1 ETH | ||||
15497262 | 769 days ago | 0.175 ETH | ||||
15497154 | 769 days ago | 0.075 ETH |
Loading...
Loading
Contract Name:
Collector
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/** *Submitted for verification at Etherscan.io on 2022-07-27 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol) /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: @openzeppelin/contracts/utils/cryptography/draft-EIP712.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/draft-EIP712.sol) /** * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. * * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding * they need in their contracts using a combination of `abi.encode` and `keccak256`. * * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA * ({_hashTypedDataV4}). * * The implementation of the domain separator was designed to be as efficient as possible while still properly updating * the chain id to protect against replay attacks on an eventual fork of the chain. * * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. * * _Available since v3.4._ */ abstract contract EIP712 { /* solhint-disable var-name-mixedcase */ // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to // invalidate the cached domain separator if the chain id changes. bytes32 private immutable _CACHED_DOMAIN_SEPARATOR; uint256 private immutable _CACHED_CHAIN_ID; address private immutable _CACHED_THIS; bytes32 private immutable _HASHED_NAME; bytes32 private immutable _HASHED_VERSION; bytes32 private immutable _TYPE_HASH; /* solhint-enable var-name-mixedcase */ /** * @dev Initializes the domain separator and parameter caches. * * The meaning of `name` and `version` is specified in * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: * * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. * - `version`: the current major version of the signing domain. * * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart * contract upgrade]. */ constructor(string memory name, string memory version) { bytes32 hashedName = keccak256(bytes(name)); bytes32 hashedVersion = keccak256(bytes(version)); bytes32 typeHash = keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ); _HASHED_NAME = hashedName; _HASHED_VERSION = hashedVersion; _CACHED_CHAIN_ID = block.chainid; _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion); _CACHED_THIS = address(this); _TYPE_HASH = typeHash; } /** * @dev Returns the domain separator for the current chain. */ function _domainSeparatorV4() internal view returns (bytes32) { if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) { return _CACHED_DOMAIN_SEPARATOR; } else { return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); } } function _buildDomainSeparator( bytes32 typeHash, bytes32 nameHash, bytes32 versionHash ) private view returns (bytes32) { return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this))); } /** * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this * function returns the hash of the fully encoded EIP712 message for this domain. * * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example: * * ```solidity * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( * keccak256("Mail(address to,string contents)"), * mailTo, * keccak256(bytes(mailContents)) * ))); * address signer = ECDSA.recover(digest, signature); * ``` */ function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.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); } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: contracts/lib/LibLicenseAgreement.sol library LibLicenseAgreement { struct LicenseAgreementContent { string message; string licenseAgreementLink; address[] nftAddresses; uint[] tokenIds; } bytes32 public constant LICENSE_AGREEMENT_CONTENT_TYPEHASH = keccak256("LicenseAgreementContent(string message,string licenseAgreementLink,address[] nftAddresses,uint256[] tokenIds)"); function getHash(LicenseAgreementContent memory licenseAgreementContent) internal pure returns (bytes32) { return keccak256( abi.encode( LICENSE_AGREEMENT_CONTENT_TYPEHASH, keccak256(abi.encodePacked(licenseAgreementContent.message)), keccak256(abi.encodePacked(licenseAgreementContent.licenseAgreementLink)), keccak256(abi.encodePacked(licenseAgreementContent.nftAddresses)), keccak256(abi.encodePacked(licenseAgreementContent.tokenIds)) ) ); } } // File: contracts/Collector.sol pragma solidity 0.8.13; contract Collector is Ownable, EIP712("Collector", "1") { using ECDSA for bytes32; string constant _MESSAGE = "I sign this message to agree on the Intellectual Property License as a Licensor."; uint public immutable TOTAL_PERMISSION_NUMBER; uint _receivedPermissionNumber; bool _achieved; string _licenseAgreementLink; // target nft address for permission address[] _targetNFTAddresses; // From target nft address to its required number mapping(address => uint) _targetPermissionNumbers; // From target nft address to its permission fee mapping(address => uint) _targetPermissionFees; // From target nft address to its current permission number mapping(address => uint) _currentPermissionNumbers; // From target nft address to the map that (tokenId => whether permitted) mapping(address => mapping(uint => bool)) _permissionRecords; event TopUp(address payer, uint value); event BatchPermit(address indexed owner, address[] targetNFTAddresses, uint[] tokenIds); event Achieved(); constructor( string memory licenseAgreementLink, address[] memory targetNFTAddresses, uint[] memory permissionNumbers, uint[] memory permissionFees ) { uint len = targetNFTAddresses.length; require(len > 0, "zero length"); require(len == permissionNumbers.length, "unmatched length for PN"); require(len == permissionFees.length, "unmatched length for PF"); _targetNFTAddresses = targetNFTAddresses; uint totalPermissionNumber = 0; for (uint i = 0; i < len; ++i) { address targetNFTAddr = targetNFTAddresses[i]; uint permissionNumber = permissionNumbers[i]; require(permissionNumber > 0, "zero PN"); uint permissionFee = permissionFees[i]; require(permissionFee > 0, "zero PF"); _targetPermissionNumbers[targetNFTAddr] = permissionNumber; _targetPermissionFees[targetNFTAddr] = permissionFee; totalPermissionNumber += permissionNumber; } TOTAL_PERMISSION_NUMBER = totalPermissionNumber; _licenseAgreementLink = licenseAgreementLink; } function setLicenseAgreementLink(string memory newLicenseAgreementLink) external onlyOwner { _licenseAgreementLink = newLicenseAgreementLink; } // batch permit by the target NFT's owner with the signature function batchPermit( address[] calldata nftAddresses, uint[] calldata tokenIds, bytes calldata signature ) external { require(!_achieved, "achieved"); uint len = nftAddresses.length; require(len == tokenIds.length, "unmatched length"); // verify signature address sender = msg.sender; require( sender == _hashTypedDataV4( LibLicenseAgreement.getHash( LibLicenseAgreement.LicenseAgreementContent({ message : _MESSAGE, licenseAgreementLink : _licenseAgreementLink, nftAddresses : nftAddresses, tokenIds : tokenIds }) ) ).recover(signature), "invalid sig" ); // update _receivedPermissionNumber first uint receivedPermissionNumber = _receivedPermissionNumber; receivedPermissionNumber += len; _receivedPermissionNumber = receivedPermissionNumber; uint totalFee = 0; for (uint i = 0; i < len; ++i) { address nftAddress = nftAddresses[i]; uint tokenId = tokenIds[i]; uint targetPermissionNumber = _targetPermissionNumbers[nftAddress]; require(targetPermissionNumber > 0, "not target nft"); uint currentPermissionNumber = _currentPermissionNumbers[nftAddress]; require(currentPermissionNumber < targetPermissionNumber, "reached target"); unchecked{ ++currentPermissionNumber; } _currentPermissionNumbers[nftAddress] = currentPermissionNumber; require(!_permissionRecords[nftAddress][tokenId], "already permitted"); _permissionRecords[nftAddress][tokenId] = true; // check ownership require(IERC721(nftAddress).ownerOf(tokenId) == sender, "not owner"); // sum fee totalFee += _targetPermissionFees[nftAddress]; } // transfer total fee payable(sender).transfer(totalFee); emit BatchPermit(sender, nftAddresses, tokenIds); // check goal achievement if (receivedPermissionNumber == TOTAL_PERMISSION_NUMBER) { _achieved = true; emit Achieved(); } } function refund(uint amount, address payable recipient) external onlyOwner { require(amount <= address(this).balance, "insufficient balance"); recipient.transfer(amount); } receive() external payable { emit TopUp(msg.sender, msg.value); } function getReceivedPermissionNumber() external view returns (uint){ return _receivedPermissionNumber; } function getAchieved() external view returns (bool){ return _achieved; } function getTargetNFTAddressesLength() external view returns (uint){ return _targetNFTAddresses.length; } function getTargetNFTAddresses(uint index) external view returns (address){ return _targetNFTAddresses[index]; } function getTargetPermissionNumbers(address targetNFTAddress) external view returns (uint){ return _targetPermissionNumbers[targetNFTAddress]; } function getTargetPermissionFees(address targetNFTAddress) external view returns (uint){ return _targetPermissionFees[targetNFTAddress]; } function getCurrentPermissionNumbers(address targetNFTAddress) external view returns (uint){ return _currentPermissionNumbers[targetNFTAddress]; } function getPermissionRecords(address targetNFTAddress, uint tokenId) external view returns (bool){ return _permissionRecords[targetNFTAddress][tokenId]; } function getLicenseAgreementLink() external view returns (string memory){ return _licenseAgreementLink; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"licenseAgreementLink","type":"string"},{"internalType":"address[]","name":"targetNFTAddresses","type":"address[]"},{"internalType":"uint256[]","name":"permissionNumbers","type":"uint256[]"},{"internalType":"uint256[]","name":"permissionFees","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Achieved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address[]","name":"targetNFTAddresses","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"BatchPermit","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":false,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TopUp","type":"event"},{"inputs":[],"name":"TOTAL_PERMISSION_NUMBER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"nftAddresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"batchPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAchieved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"targetNFTAddress","type":"address"}],"name":"getCurrentPermissionNumbers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLicenseAgreementLink","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"targetNFTAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPermissionRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReceivedPermissionNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getTargetNFTAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTargetNFTAddressesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"targetNFTAddress","type":"address"}],"name":"getTargetPermissionFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"targetNFTAddress","type":"address"}],"name":"getTargetPermissionNumbers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newLicenseAgreementLink","type":"string"}],"name":"setLicenseAgreementLink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101606040523480156200001257600080fd5b5060405162003e1238038062003e12833981810160405281019062000038919062000a79565b6040518060400160405280600981526020017f436f6c6c6563746f7200000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250620000c4620000b86200044460201b60201c565b6200044c60201b60201c565b60008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a081815250506200012d8184846200051060201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050806101208181525050505050505060008351905060008111620001c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b99062000bc8565b60405180910390fd5b8251811462000208576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ff9062000c3a565b60405180910390fd5b815181146200024e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002459062000cac565b60405180910390fd5b8360049080519060200190620002669291906200054c565b506000805b82811015620004155760008682815181106200028c576200028b62000cce565b5b602002602001015190506000868381518110620002ae57620002ad62000cce565b5b6020026020010151905060008111620002fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f59062000d4d565b60405180910390fd5b600086848151811062000316576200031562000cce565b5b602002602001015190506000811162000366576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035d9062000dbf565b60405180910390fd5b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508185620003fc919062000e10565b9450505050806200040d9062000e6d565b90506200026b565b50806101408181525050856003908051906020019062000437929190620005db565b5050505050505062000fb8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600083838346306040516020016200052d95949392919062000ef7565b6040516020818303038152906040528051906020012090509392505050565b828054828255906000526020600020908101928215620005c8579160200282015b82811115620005c75782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906200056d565b5b509050620005d791906200066c565b5090565b828054620005e99062000f83565b90600052602060002090601f0160209004810192826200060d576000855562000659565b82601f106200062857805160ff191683800117855562000659565b8280016001018555821562000659579182015b82811115620006585782518255916020019190600101906200063b565b5b5090506200066891906200066c565b5090565b5b80821115620006875760008160009055506001016200066d565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006f482620006a9565b810181811067ffffffffffffffff82111715620007165762000715620006ba565b5b80604052505050565b60006200072b6200068b565b9050620007398282620006e9565b919050565b600067ffffffffffffffff8211156200075c576200075b620006ba565b5b6200076782620006a9565b9050602081019050919050565b60005b838110156200079457808201518184015260208101905062000777565b83811115620007a4576000848401525b50505050565b6000620007c1620007bb846200073e565b6200071f565b905082815260208101848484011115620007e057620007df620006a4565b5b620007ed84828562000774565b509392505050565b600082601f8301126200080d576200080c6200069f565b5b81516200081f848260208601620007aa565b91505092915050565b600067ffffffffffffffff821115620008465762000845620006ba565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000889826200085c565b9050919050565b6200089b816200087c565b8114620008a757600080fd5b50565b600081519050620008bb8162000890565b92915050565b6000620008d8620008d28462000828565b6200071f565b90508083825260208201905060208402830185811115620008fe57620008fd62000857565b5b835b818110156200092b5780620009168882620008aa565b84526020840193505060208101905062000900565b5050509392505050565b600082601f8301126200094d576200094c6200069f565b5b81516200095f848260208601620008c1565b91505092915050565b600067ffffffffffffffff821115620009865762000985620006ba565b5b602082029050602081019050919050565b6000819050919050565b620009ac8162000997565b8114620009b857600080fd5b50565b600081519050620009cc81620009a1565b92915050565b6000620009e9620009e38462000968565b6200071f565b9050808382526020820190506020840283018581111562000a0f5762000a0e62000857565b5b835b8181101562000a3c578062000a278882620009bb565b84526020840193505060208101905062000a11565b5050509392505050565b600082601f83011262000a5e5762000a5d6200069f565b5b815162000a70848260208601620009d2565b91505092915050565b6000806000806080858703121562000a965762000a9562000695565b5b600085015167ffffffffffffffff81111562000ab75762000ab66200069a565b5b62000ac587828801620007f5565b945050602085015167ffffffffffffffff81111562000ae95762000ae86200069a565b5b62000af78782880162000935565b935050604085015167ffffffffffffffff81111562000b1b5762000b1a6200069a565b5b62000b298782880162000a46565b925050606085015167ffffffffffffffff81111562000b4d5762000b4c6200069a565b5b62000b5b8782880162000a46565b91505092959194509250565b600082825260208201905092915050565b7f7a65726f206c656e677468000000000000000000000000000000000000000000600082015250565b600062000bb0600b8362000b67565b915062000bbd8262000b78565b602082019050919050565b6000602082019050818103600083015262000be38162000ba1565b9050919050565b7f756e6d617463686564206c656e67746820666f7220504e000000000000000000600082015250565b600062000c2260178362000b67565b915062000c2f8262000bea565b602082019050919050565b6000602082019050818103600083015262000c558162000c13565b9050919050565b7f756e6d617463686564206c656e67746820666f72205046000000000000000000600082015250565b600062000c9460178362000b67565b915062000ca18262000c5c565b602082019050919050565b6000602082019050818103600083015262000cc78162000c85565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f7a65726f20504e00000000000000000000000000000000000000000000000000600082015250565b600062000d3560078362000b67565b915062000d428262000cfd565b602082019050919050565b6000602082019050818103600083015262000d688162000d26565b9050919050565b7f7a65726f20504600000000000000000000000000000000000000000000000000600082015250565b600062000da760078362000b67565b915062000db48262000d6f565b602082019050919050565b6000602082019050818103600083015262000dda8162000d98565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e1d8262000997565b915062000e2a8362000997565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e625762000e6162000de1565b5b828201905092915050565b600062000e7a8262000997565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000eaf5762000eae62000de1565b5b600182019050919050565b6000819050919050565b62000ecf8162000eba565b82525050565b62000ee08162000997565b82525050565b62000ef1816200087c565b82525050565b600060a08201905062000f0e600083018862000ec4565b62000f1d602083018762000ec4565b62000f2c604083018662000ec4565b62000f3b606083018562000ed5565b62000f4a608083018462000ee6565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f9c57607f821691505b60208210810362000fb25762000fb162000f54565b5b50919050565b60805160a05160c05160e051610100516101205161014051612df86200101a600039600081816108320152610fc501526000611486015260006114c8015260006114a7015260006113dc015260006114320152600061145b0152612df86000f3fe6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063b480f32611610059578063b480f32614610384578063dc1e48d4146103af578063f2fde38b146103d8578063fe5bacfd1461040157610137565b80638da5cb5b146102c657806393b6f6fa146102f1578063a051f0621461032e578063a37f69f21461035957610137565b8063715018a6116100c6578063715018a61461021e5780637ad226dc14610235578063804cc95b1461025e57806388f78f311461029b57610137565b80630b9cdca11461013c5780630f6a6ec1146101675780634c537eeb146101a457806362d7cf89146101e157610137565b36610137577f29e6701fa948667bae25d3e2ef7966f2a11754e98aa0dc52c55133430caee2df333460405161012d929190611a14565b60405180910390a1005b600080fd5b34801561014857600080fd5b5061015161042a565b60405161015e9190611a3d565b60405180910390f35b34801561017357600080fd5b5061018e60048036038101906101899190611a98565b610437565b60405161019b9190611a3d565b60405180910390f35b3480156101b057600080fd5b506101cb60048036038101906101c69190611a98565b610480565b6040516101d89190611a3d565b60405180910390f35b3480156101ed57600080fd5b5061020860048036038101906102039190611af1565b6104c9565b6040516102159190611b4c565b60405180910390f35b34801561022a57600080fd5b50610233610531565b005b34801561024157600080fd5b5061025c60048036038101906102579190611ba5565b6105b9565b005b34801561026a57600080fd5b5061028560048036038101906102809190611be5565b6106c3565b6040516102929190611c12565b60405180910390f35b3480156102a757600080fd5b506102b061070b565b6040516102bd9190611a3d565b60405180910390f35b3480156102d257600080fd5b506102db610715565b6040516102e89190611c12565b60405180910390f35b3480156102fd57600080fd5b5061031860048036038101906103139190611a98565b61073e565b6040516103259190611a3d565b60405180910390f35b34801561033a57600080fd5b50610343610787565b6040516103509190611cc6565b60405180910390f35b34801561036557600080fd5b5061036e610819565b60405161037b9190611b4c565b60405180910390f35b34801561039057600080fd5b50610399610830565b6040516103a69190611a3d565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190611df9565b610854565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190611a98565b61103e565b005b34801561040d57600080fd5b5061042860048036038101906104239190611fdd565b611135565b005b6000600480549050905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b6105396111cb565b73ffffffffffffffffffffffffffffffffffffffff16610557610715565b73ffffffffffffffffffffffffffffffffffffffff16146105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a490612072565b60405180910390fd5b6105b760006111d3565b565b6105c16111cb565b73ffffffffffffffffffffffffffffffffffffffff166105df610715565b73ffffffffffffffffffffffffffffffffffffffff1614610635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062c90612072565b60405180910390fd5b47821115610678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066f906120de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156106be573d6000803e3d6000fd5b505050565b6000600482815481106106d9576106d86120fe565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600154905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600380546107969061215c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c29061215c565b801561080f5780601f106107e45761010080835404028352916020019161080f565b820191906000526020600020905b8154815290600101906020018083116107f257829003601f168201915b5050505050905090565b6000600260009054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600260009054906101000a900460ff16156108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089b906121d9565b60405180910390fd5b60008686905090508484905081146108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e890612245565b60405180910390fd5b6000339050610aa184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610a93610a8e6040518060800160405280604051806080016040528060508152602001612d736050913981526020016003805461097a9061215c565b80601f01602080910402602001604051908101604052809291908181526020018280546109a69061215c565b80156109f35780601f106109c8576101008083540402835291602001916109f3565b820191906000526020600020905b8154815290600101906020018083116109d657829003601f168201915b505050505081526020018d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081526020018b8b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815250611297565b611397565b6113b190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b05906122b1565b60405180910390fd5b600060015490508281610b219190612300565b9050806001819055506000805b84811015610f275760008b8b83818110610b4b57610b4a6120fe565b5b9050602002016020810190610b609190611a98565b905060008a8a84818110610b7757610b766120fe565b5b9050602002013590506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe906123a2565b60405180910390fd5b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c849061240e565b60405180910390fd5b80600101905080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c9061247a565b60405180910390fd5b6001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060006101000a81548160ff0219169083151502179055508773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401610e2e9190611a3d565b602060405180830381865afa158015610e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6f91906124af565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612528565b60405180910390fd5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486610f109190612300565b95505050505080610f2090612548565b9050610b2e565b508273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f6e573d6000803e3d6000fd5b508273ffffffffffffffffffffffffffffffffffffffff167f843e639ffe74c676c435fea98848d666367f9813edf21a3ebe3fa44bfbafc5bd8b8b8b8b604051610fbb94939291906126c5565b60405180910390a27f00000000000000000000000000000000000000000000000000000000000000008203611032576001600260006101000a81548160ff0219169083151502179055507f5291dbb8cb18fdb89312f64c805dbe5c463153eecbd9cb55a1189e6045d91f1560405160405180910390a15b50505050505050505050565b6110466111cb565b73ffffffffffffffffffffffffffffffffffffffff16611064610715565b73ffffffffffffffffffffffffffffffffffffffff16146110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190612072565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112090612772565b60405180910390fd5b611132816111d3565b50565b61113d6111cb565b73ffffffffffffffffffffffffffffffffffffffff1661115b610715565b73ffffffffffffffffffffffffffffffffffffffff16146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890612072565b60405180910390fd5b80600390805190602001906111c7929190611917565b5050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007ff1ba0aac76ef99b2e39ec1b56a15d1eed1f934ae2b75c47c9ad4fd02504dd42882600001516040516020016112cf91906127ce565b6040516020818303038152906040528051906020012083602001516040516020016112fa91906127ce565b604051602081830303815290604052805190602001208460400151604051602001611325919061289d565b604051602081830303815290604052805190602001208560600151604051602001611350919061296c565b6040516020818303038152906040528051906020012060405160200161137a95949392919061299c565b604051602081830303815290604052805190602001209050919050565b60006113aa6113a46113d8565b836114f2565b9050919050565b60008060006113c08585611525565b915091506113cd816115a6565b819250505092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561145457507f000000000000000000000000000000000000000000000000000000000000000046145b15611481577f000000000000000000000000000000000000000000000000000000000000000090506114ef565b6114ec7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611772565b90505b90565b60008282604051602001611507929190612a5c565b60405160208183030381529060405280519060200120905092915050565b60008060418351036115665760008060006020860151925060408601519150606086015160001a905061155a878285856117ac565b9450945050505061159f565b604083510361159657600080602085015191506040850151905061158b8683836118b8565b93509350505061159f565b60006002915091505b9250929050565b600060048111156115ba576115b9612a93565b5b8160048111156115cd576115cc612a93565b5b031561176f57600160048111156115e7576115e6612a93565b5b8160048111156115fa576115f9612a93565b5b0361163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190612b0e565b60405180910390fd5b6002600481111561164e5761164d612a93565b5b81600481111561166157611660612a93565b5b036116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890612b7a565b60405180910390fd5b600360048111156116b5576116b4612a93565b5b8160048111156116c8576116c7612a93565b5b03611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90612c0c565b60405180910390fd5b60048081111561171b5761171a612a93565b5b81600481111561172e5761172d612a93565b5b0361176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176590612c9e565b60405180910390fd5b5b50565b6000838383463060405160200161178d959493929190612cbe565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156117e75760006003915091506118af565b601b8560ff16141580156117ff5750601c8560ff1614155b156118115760006004915091506118af565b6000600187878787604051600081526020016040526040516118369493929190612d2d565b6020604051602081039080840390855afa158015611858573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118a6576000600192509250506118af565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6118fb9190612300565b9050611909878288856117ac565b935093505050935093915050565b8280546119239061215c565b90600052602060002090601f016020900481019282611945576000855561198c565b82601f1061195e57805160ff191683800117855561198c565b8280016001018555821561198c579182015b8281111561198b578251825591602001919060010190611970565b5b509050611999919061199d565b5090565b5b808211156119b657600081600090555060010161199e565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119e5826119ba565b9050919050565b6119f5816119da565b82525050565b6000819050919050565b611a0e816119fb565b82525050565b6000604082019050611a2960008301856119ec565b611a366020830184611a05565b9392505050565b6000602082019050611a526000830184611a05565b92915050565b6000604051905090565b600080fd5b600080fd5b611a75816119da565b8114611a8057600080fd5b50565b600081359050611a9281611a6c565b92915050565b600060208284031215611aae57611aad611a62565b5b6000611abc84828501611a83565b91505092915050565b611ace816119fb565b8114611ad957600080fd5b50565b600081359050611aeb81611ac5565b92915050565b60008060408385031215611b0857611b07611a62565b5b6000611b1685828601611a83565b9250506020611b2785828601611adc565b9150509250929050565b60008115159050919050565b611b4681611b31565b82525050565b6000602082019050611b616000830184611b3d565b92915050565b6000611b72826119ba565b9050919050565b611b8281611b67565b8114611b8d57600080fd5b50565b600081359050611b9f81611b79565b92915050565b60008060408385031215611bbc57611bbb611a62565b5b6000611bca85828601611adc565b9250506020611bdb85828601611b90565b9150509250929050565b600060208284031215611bfb57611bfa611a62565b5b6000611c0984828501611adc565b91505092915050565b6000602082019050611c2760008301846119ec565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c67578082015181840152602081019050611c4c565b83811115611c76576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c9882611c2d565b611ca28185611c38565b9350611cb2818560208601611c49565b611cbb81611c7c565b840191505092915050565b60006020820190508181036000830152611ce08184611c8d565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611d0d57611d0c611ce8565b5b8235905067ffffffffffffffff811115611d2a57611d29611ced565b5b602083019150836020820283011115611d4657611d45611cf2565b5b9250929050565b60008083601f840112611d6357611d62611ce8565b5b8235905067ffffffffffffffff811115611d8057611d7f611ced565b5b602083019150836020820283011115611d9c57611d9b611cf2565b5b9250929050565b60008083601f840112611db957611db8611ce8565b5b8235905067ffffffffffffffff811115611dd657611dd5611ced565b5b602083019150836001820283011115611df257611df1611cf2565b5b9250929050565b60008060008060008060608789031215611e1657611e15611a62565b5b600087013567ffffffffffffffff811115611e3457611e33611a67565b5b611e4089828a01611cf7565b9650965050602087013567ffffffffffffffff811115611e6357611e62611a67565b5b611e6f89828a01611d4d565b9450945050604087013567ffffffffffffffff811115611e9257611e91611a67565b5b611e9e89828a01611da3565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611eea82611c7c565b810181811067ffffffffffffffff82111715611f0957611f08611eb2565b5b80604052505050565b6000611f1c611a58565b9050611f288282611ee1565b919050565b600067ffffffffffffffff821115611f4857611f47611eb2565b5b611f5182611c7c565b9050602081019050919050565b82818337600083830152505050565b6000611f80611f7b84611f2d565b611f12565b905082815260208101848484011115611f9c57611f9b611ead565b5b611fa7848285611f5e565b509392505050565b600082601f830112611fc457611fc3611ce8565b5b8135611fd4848260208601611f6d565b91505092915050565b600060208284031215611ff357611ff2611a62565b5b600082013567ffffffffffffffff81111561201157612010611a67565b5b61201d84828501611faf565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061205c602083611c38565b915061206782612026565b602082019050919050565b6000602082019050818103600083015261208b8161204f565b9050919050565b7f696e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006120c8601483611c38565b91506120d382612092565b602082019050919050565b600060208201905081810360008301526120f7816120bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061217457607f821691505b6020821081036121875761218661212d565b5b50919050565b7f6163686965766564000000000000000000000000000000000000000000000000600082015250565b60006121c3600883611c38565b91506121ce8261218d565b602082019050919050565b600060208201905081810360008301526121f2816121b6565b9050919050565b7f756e6d617463686564206c656e67746800000000000000000000000000000000600082015250565b600061222f601083611c38565b915061223a826121f9565b602082019050919050565b6000602082019050818103600083015261225e81612222565b9050919050565b7f696e76616c696420736967000000000000000000000000000000000000000000600082015250565b600061229b600b83611c38565b91506122a682612265565b602082019050919050565b600060208201905081810360008301526122ca8161228e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061230b826119fb565b9150612316836119fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561234b5761234a6122d1565b5b828201905092915050565b7f6e6f7420746172676574206e6674000000000000000000000000000000000000600082015250565b600061238c600e83611c38565b915061239782612356565b602082019050919050565b600060208201905081810360008301526123bb8161237f565b9050919050565b7f7265616368656420746172676574000000000000000000000000000000000000600082015250565b60006123f8600e83611c38565b9150612403826123c2565b602082019050919050565b60006020820190508181036000830152612427816123eb565b9050919050565b7f616c7265616479207065726d6974746564000000000000000000000000000000600082015250565b6000612464601183611c38565b915061246f8261242e565b602082019050919050565b6000602082019050818103600083015261249381612457565b9050919050565b6000815190506124a981611a6c565b92915050565b6000602082840312156124c5576124c4611a62565b5b60006124d38482850161249a565b91505092915050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b6000612512600983611c38565b915061251d826124dc565b602082019050919050565b6000602082019050818103600083015261254181612505565b9050919050565b6000612553826119fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612585576125846122d1565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b6125b4816119da565b82525050565b60006125c683836125ab565b60208301905092915050565b60006125e16020840184611a83565b905092915050565b6000602082019050919050565b60006126028385612590565b935061260d826125a1565b8060005b858110156126465761262382846125d2565b61262d88826125ba565b9750612638836125e9565b925050600181019050612611565b5085925050509392505050565b600082825260208201905092915050565b600080fd5b60006126758385612653565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156126a8576126a7612664565b5b6020830292506126b9838584611f5e565b82840190509392505050565b600060408201905081810360008301526126e08186886125f6565b905081810360208301526126f5818486612669565b905095945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061275c602683611c38565b915061276782612700565b604082019050919050565b6000602082019050818103600083015261278b8161274f565b9050919050565b600081905092915050565b60006127a882611c2d565b6127b28185612792565b93506127c2818560208601611c49565b80840191505092915050565b60006127da828461279d565b915081905092915050565b600081519050919050565b600081905092915050565b6000819050602082019050919050565b612814816119da565b82525050565b6000612826838361280b565b60208301905092915050565b6000602082019050919050565b600061284a826127e5565b61285481856127f0565b935061285f836127fb565b8060005b83811015612890578151612877888261281a565b975061288283612832565b925050600181019050612863565b5085935050505092915050565b60006128a9828461283f565b915081905092915050565b600081519050919050565b600081905092915050565b6000819050602082019050919050565b6128e3816119fb565b82525050565b60006128f583836128da565b60208301905092915050565b6000602082019050919050565b6000612919826128b4565b61292381856128bf565b935061292e836128ca565b8060005b8381101561295f57815161294688826128e9565b975061295183612901565b925050600181019050612932565b5085935050505092915050565b6000612978828461290e565b915081905092915050565b6000819050919050565b61299681612983565b82525050565b600060a0820190506129b1600083018861298d565b6129be602083018761298d565b6129cb604083018661298d565b6129d8606083018561298d565b6129e5608083018461298d565b9695505050505050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612a25600283612792565b9150612a30826129ef565b600282019050919050565b6000819050919050565b612a56612a5182612983565b612a3b565b82525050565b6000612a6782612a18565b9150612a738285612a45565b602082019150612a838284612a45565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612af8601883611c38565b9150612b0382612ac2565b602082019050919050565b60006020820190508181036000830152612b2781612aeb565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612b64601f83611c38565b9150612b6f82612b2e565b602082019050919050565b60006020820190508181036000830152612b9381612b57565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bf6602283611c38565b9150612c0182612b9a565b604082019050919050565b60006020820190508181036000830152612c2581612be9565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c88602283611c38565b9150612c9382612c2c565b604082019050919050565b60006020820190508181036000830152612cb781612c7b565b9050919050565b600060a082019050612cd3600083018861298d565b612ce0602083018761298d565b612ced604083018661298d565b612cfa6060830185611a05565b612d0760808301846119ec565b9695505050505050565b600060ff82169050919050565b612d2781612d11565b82525050565b6000608082019050612d42600083018761298d565b612d4f6020830186612d1e565b612d5c604083018561298d565b612d69606083018461298d565b9594505050505056fe49207369676e2074686973206d65737361676520746f206167726565206f6e2074686520496e74656c6c65637475616c2050726f7065727479204c6963656e73652061732061204c6963656e736f722ea2646970667358221220e199591502e8df2b3467a3c4c5e33254a1c715e14933f1cb50b4b33ad139436564736f6c634300080d00330000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000042697066733a2f2f62616679626569646d32797234686a337771656c7171717570677a65333637736e61366e70346b6f753272667571656769677465326e346d6f34710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000bc4ca0eda7647a8ab7c2061c2e118a18a936f13d00000000000000000000000060e4d786628fea6478f785a6d7e704777c86a7c60000000000000000000000008a90cab2b38dba80c64b7734e58ee1db38b8992e000000000000000000000000ed5af388653567af2f388e6224dc7c4b3241c544000000000000000000000000e785e82358879f061bc3dcac6f0444462d4b5330000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000010a741a46278000000000000000000000000000000000000000000000000000010a741a46278000000000000000000000000000000000000000000000000000010a741a46278000
Deployed Bytecode
0x6080604052600436106100f75760003560e01c80638da5cb5b1161008a578063b480f32611610059578063b480f32614610384578063dc1e48d4146103af578063f2fde38b146103d8578063fe5bacfd1461040157610137565b80638da5cb5b146102c657806393b6f6fa146102f1578063a051f0621461032e578063a37f69f21461035957610137565b8063715018a6116100c6578063715018a61461021e5780637ad226dc14610235578063804cc95b1461025e57806388f78f311461029b57610137565b80630b9cdca11461013c5780630f6a6ec1146101675780634c537eeb146101a457806362d7cf89146101e157610137565b36610137577f29e6701fa948667bae25d3e2ef7966f2a11754e98aa0dc52c55133430caee2df333460405161012d929190611a14565b60405180910390a1005b600080fd5b34801561014857600080fd5b5061015161042a565b60405161015e9190611a3d565b60405180910390f35b34801561017357600080fd5b5061018e60048036038101906101899190611a98565b610437565b60405161019b9190611a3d565b60405180910390f35b3480156101b057600080fd5b506101cb60048036038101906101c69190611a98565b610480565b6040516101d89190611a3d565b60405180910390f35b3480156101ed57600080fd5b5061020860048036038101906102039190611af1565b6104c9565b6040516102159190611b4c565b60405180910390f35b34801561022a57600080fd5b50610233610531565b005b34801561024157600080fd5b5061025c60048036038101906102579190611ba5565b6105b9565b005b34801561026a57600080fd5b5061028560048036038101906102809190611be5565b6106c3565b6040516102929190611c12565b60405180910390f35b3480156102a757600080fd5b506102b061070b565b6040516102bd9190611a3d565b60405180910390f35b3480156102d257600080fd5b506102db610715565b6040516102e89190611c12565b60405180910390f35b3480156102fd57600080fd5b5061031860048036038101906103139190611a98565b61073e565b6040516103259190611a3d565b60405180910390f35b34801561033a57600080fd5b50610343610787565b6040516103509190611cc6565b60405180910390f35b34801561036557600080fd5b5061036e610819565b60405161037b9190611b4c565b60405180910390f35b34801561039057600080fd5b50610399610830565b6040516103a69190611a3d565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190611df9565b610854565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190611a98565b61103e565b005b34801561040d57600080fd5b5061042860048036038101906104239190611fdd565b611135565b005b6000600480549050905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b6105396111cb565b73ffffffffffffffffffffffffffffffffffffffff16610557610715565b73ffffffffffffffffffffffffffffffffffffffff16146105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a490612072565b60405180910390fd5b6105b760006111d3565b565b6105c16111cb565b73ffffffffffffffffffffffffffffffffffffffff166105df610715565b73ffffffffffffffffffffffffffffffffffffffff1614610635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062c90612072565b60405180910390fd5b47821115610678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066f906120de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156106be573d6000803e3d6000fd5b505050565b6000600482815481106106d9576106d86120fe565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600154905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600380546107969061215c565b80601f01602080910402602001604051908101604052809291908181526020018280546107c29061215c565b801561080f5780601f106107e45761010080835404028352916020019161080f565b820191906000526020600020905b8154815290600101906020018083116107f257829003601f168201915b5050505050905090565b6000600260009054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000000e81565b600260009054906101000a900460ff16156108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089b906121d9565b60405180910390fd5b60008686905090508484905081146108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e890612245565b60405180910390fd5b6000339050610aa184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610a93610a8e6040518060800160405280604051806080016040528060508152602001612d736050913981526020016003805461097a9061215c565b80601f01602080910402602001604051908101604052809291908181526020018280546109a69061215c565b80156109f35780601f106109c8576101008083540402835291602001916109f3565b820191906000526020600020905b8154815290600101906020018083116109d657829003601f168201915b505050505081526020018d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081526020018b8b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815250611297565b611397565b6113b190919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b05906122b1565b60405180910390fd5b600060015490508281610b219190612300565b9050806001819055506000805b84811015610f275760008b8b83818110610b4b57610b4a6120fe565b5b9050602002016020810190610b609190611a98565b905060008a8a84818110610b7757610b766120fe565b5b9050602002013590506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe906123a2565b60405180910390fd5b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c849061240e565b60405180910390fd5b80600101905080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c9061247a565b60405180910390fd5b6001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060006101000a81548160ff0219169083151502179055508773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401610e2e9190611a3d565b602060405180830381865afa158015610e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6f91906124af565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612528565b60405180910390fd5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486610f109190612300565b95505050505080610f2090612548565b9050610b2e565b508273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f6e573d6000803e3d6000fd5b508273ffffffffffffffffffffffffffffffffffffffff167f843e639ffe74c676c435fea98848d666367f9813edf21a3ebe3fa44bfbafc5bd8b8b8b8b604051610fbb94939291906126c5565b60405180910390a27f000000000000000000000000000000000000000000000000000000000000000e8203611032576001600260006101000a81548160ff0219169083151502179055507f5291dbb8cb18fdb89312f64c805dbe5c463153eecbd9cb55a1189e6045d91f1560405160405180910390a15b50505050505050505050565b6110466111cb565b73ffffffffffffffffffffffffffffffffffffffff16611064610715565b73ffffffffffffffffffffffffffffffffffffffff16146110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190612072565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112090612772565b60405180910390fd5b611132816111d3565b50565b61113d6111cb565b73ffffffffffffffffffffffffffffffffffffffff1661115b610715565b73ffffffffffffffffffffffffffffffffffffffff16146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890612072565b60405180910390fd5b80600390805190602001906111c7929190611917565b5050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007ff1ba0aac76ef99b2e39ec1b56a15d1eed1f934ae2b75c47c9ad4fd02504dd42882600001516040516020016112cf91906127ce565b6040516020818303038152906040528051906020012083602001516040516020016112fa91906127ce565b604051602081830303815290604052805190602001208460400151604051602001611325919061289d565b604051602081830303815290604052805190602001208560600151604051602001611350919061296c565b6040516020818303038152906040528051906020012060405160200161137a95949392919061299c565b604051602081830303815290604052805190602001209050919050565b60006113aa6113a46113d8565b836114f2565b9050919050565b60008060006113c08585611525565b915091506113cd816115a6565b819250505092915050565b60007f0000000000000000000000006d5ac9ce19f996c33d810cf2ea62623c4cbcaa2873ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561145457507f000000000000000000000000000000000000000000000000000000000000000146145b15611481577f3a4e20abcfbbac16f0a7141f6a7670e9e1a394f69f9e4cd6f5f6b8956e6b0a0890506114ef565b6114ec7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f3dc12a45b3b041dd314465739c1861012ce9f2455ae50201655c293e34c00ecb7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611772565b90505b90565b60008282604051602001611507929190612a5c565b60405160208183030381529060405280519060200120905092915050565b60008060418351036115665760008060006020860151925060408601519150606086015160001a905061155a878285856117ac565b9450945050505061159f565b604083510361159657600080602085015191506040850151905061158b8683836118b8565b93509350505061159f565b60006002915091505b9250929050565b600060048111156115ba576115b9612a93565b5b8160048111156115cd576115cc612a93565b5b031561176f57600160048111156115e7576115e6612a93565b5b8160048111156115fa576115f9612a93565b5b0361163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190612b0e565b60405180910390fd5b6002600481111561164e5761164d612a93565b5b81600481111561166157611660612a93565b5b036116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890612b7a565b60405180910390fd5b600360048111156116b5576116b4612a93565b5b8160048111156116c8576116c7612a93565b5b03611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90612c0c565b60405180910390fd5b60048081111561171b5761171a612a93565b5b81600481111561172e5761172d612a93565b5b0361176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176590612c9e565b60405180910390fd5b5b50565b6000838383463060405160200161178d959493929190612cbe565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156117e75760006003915091506118af565b601b8560ff16141580156117ff5750601c8560ff1614155b156118115760006004915091506118af565b6000600187878787604051600081526020016040526040516118369493929190612d2d565b6020604051602081039080840390855afa158015611858573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118a6576000600192509250506118af565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c6118fb9190612300565b9050611909878288856117ac565b935093505050935093915050565b8280546119239061215c565b90600052602060002090601f016020900481019282611945576000855561198c565b82601f1061195e57805160ff191683800117855561198c565b8280016001018555821561198c579182015b8281111561198b578251825591602001919060010190611970565b5b509050611999919061199d565b5090565b5b808211156119b657600081600090555060010161199e565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006119e5826119ba565b9050919050565b6119f5816119da565b82525050565b6000819050919050565b611a0e816119fb565b82525050565b6000604082019050611a2960008301856119ec565b611a366020830184611a05565b9392505050565b6000602082019050611a526000830184611a05565b92915050565b6000604051905090565b600080fd5b600080fd5b611a75816119da565b8114611a8057600080fd5b50565b600081359050611a9281611a6c565b92915050565b600060208284031215611aae57611aad611a62565b5b6000611abc84828501611a83565b91505092915050565b611ace816119fb565b8114611ad957600080fd5b50565b600081359050611aeb81611ac5565b92915050565b60008060408385031215611b0857611b07611a62565b5b6000611b1685828601611a83565b9250506020611b2785828601611adc565b9150509250929050565b60008115159050919050565b611b4681611b31565b82525050565b6000602082019050611b616000830184611b3d565b92915050565b6000611b72826119ba565b9050919050565b611b8281611b67565b8114611b8d57600080fd5b50565b600081359050611b9f81611b79565b92915050565b60008060408385031215611bbc57611bbb611a62565b5b6000611bca85828601611adc565b9250506020611bdb85828601611b90565b9150509250929050565b600060208284031215611bfb57611bfa611a62565b5b6000611c0984828501611adc565b91505092915050565b6000602082019050611c2760008301846119ec565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c67578082015181840152602081019050611c4c565b83811115611c76576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c9882611c2d565b611ca28185611c38565b9350611cb2818560208601611c49565b611cbb81611c7c565b840191505092915050565b60006020820190508181036000830152611ce08184611c8d565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611d0d57611d0c611ce8565b5b8235905067ffffffffffffffff811115611d2a57611d29611ced565b5b602083019150836020820283011115611d4657611d45611cf2565b5b9250929050565b60008083601f840112611d6357611d62611ce8565b5b8235905067ffffffffffffffff811115611d8057611d7f611ced565b5b602083019150836020820283011115611d9c57611d9b611cf2565b5b9250929050565b60008083601f840112611db957611db8611ce8565b5b8235905067ffffffffffffffff811115611dd657611dd5611ced565b5b602083019150836001820283011115611df257611df1611cf2565b5b9250929050565b60008060008060008060608789031215611e1657611e15611a62565b5b600087013567ffffffffffffffff811115611e3457611e33611a67565b5b611e4089828a01611cf7565b9650965050602087013567ffffffffffffffff811115611e6357611e62611a67565b5b611e6f89828a01611d4d565b9450945050604087013567ffffffffffffffff811115611e9257611e91611a67565b5b611e9e89828a01611da3565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611eea82611c7c565b810181811067ffffffffffffffff82111715611f0957611f08611eb2565b5b80604052505050565b6000611f1c611a58565b9050611f288282611ee1565b919050565b600067ffffffffffffffff821115611f4857611f47611eb2565b5b611f5182611c7c565b9050602081019050919050565b82818337600083830152505050565b6000611f80611f7b84611f2d565b611f12565b905082815260208101848484011115611f9c57611f9b611ead565b5b611fa7848285611f5e565b509392505050565b600082601f830112611fc457611fc3611ce8565b5b8135611fd4848260208601611f6d565b91505092915050565b600060208284031215611ff357611ff2611a62565b5b600082013567ffffffffffffffff81111561201157612010611a67565b5b61201d84828501611faf565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061205c602083611c38565b915061206782612026565b602082019050919050565b6000602082019050818103600083015261208b8161204f565b9050919050565b7f696e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006120c8601483611c38565b91506120d382612092565b602082019050919050565b600060208201905081810360008301526120f7816120bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061217457607f821691505b6020821081036121875761218661212d565b5b50919050565b7f6163686965766564000000000000000000000000000000000000000000000000600082015250565b60006121c3600883611c38565b91506121ce8261218d565b602082019050919050565b600060208201905081810360008301526121f2816121b6565b9050919050565b7f756e6d617463686564206c656e67746800000000000000000000000000000000600082015250565b600061222f601083611c38565b915061223a826121f9565b602082019050919050565b6000602082019050818103600083015261225e81612222565b9050919050565b7f696e76616c696420736967000000000000000000000000000000000000000000600082015250565b600061229b600b83611c38565b91506122a682612265565b602082019050919050565b600060208201905081810360008301526122ca8161228e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061230b826119fb565b9150612316836119fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561234b5761234a6122d1565b5b828201905092915050565b7f6e6f7420746172676574206e6674000000000000000000000000000000000000600082015250565b600061238c600e83611c38565b915061239782612356565b602082019050919050565b600060208201905081810360008301526123bb8161237f565b9050919050565b7f7265616368656420746172676574000000000000000000000000000000000000600082015250565b60006123f8600e83611c38565b9150612403826123c2565b602082019050919050565b60006020820190508181036000830152612427816123eb565b9050919050565b7f616c7265616479207065726d6974746564000000000000000000000000000000600082015250565b6000612464601183611c38565b915061246f8261242e565b602082019050919050565b6000602082019050818103600083015261249381612457565b9050919050565b6000815190506124a981611a6c565b92915050565b6000602082840312156124c5576124c4611a62565b5b60006124d38482850161249a565b91505092915050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b6000612512600983611c38565b915061251d826124dc565b602082019050919050565b6000602082019050818103600083015261254181612505565b9050919050565b6000612553826119fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612585576125846122d1565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b6125b4816119da565b82525050565b60006125c683836125ab565b60208301905092915050565b60006125e16020840184611a83565b905092915050565b6000602082019050919050565b60006126028385612590565b935061260d826125a1565b8060005b858110156126465761262382846125d2565b61262d88826125ba565b9750612638836125e9565b925050600181019050612611565b5085925050509392505050565b600082825260208201905092915050565b600080fd5b60006126758385612653565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156126a8576126a7612664565b5b6020830292506126b9838584611f5e565b82840190509392505050565b600060408201905081810360008301526126e08186886125f6565b905081810360208301526126f5818486612669565b905095945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061275c602683611c38565b915061276782612700565b604082019050919050565b6000602082019050818103600083015261278b8161274f565b9050919050565b600081905092915050565b60006127a882611c2d565b6127b28185612792565b93506127c2818560208601611c49565b80840191505092915050565b60006127da828461279d565b915081905092915050565b600081519050919050565b600081905092915050565b6000819050602082019050919050565b612814816119da565b82525050565b6000612826838361280b565b60208301905092915050565b6000602082019050919050565b600061284a826127e5565b61285481856127f0565b935061285f836127fb565b8060005b83811015612890578151612877888261281a565b975061288283612832565b925050600181019050612863565b5085935050505092915050565b60006128a9828461283f565b915081905092915050565b600081519050919050565b600081905092915050565b6000819050602082019050919050565b6128e3816119fb565b82525050565b60006128f583836128da565b60208301905092915050565b6000602082019050919050565b6000612919826128b4565b61292381856128bf565b935061292e836128ca565b8060005b8381101561295f57815161294688826128e9565b975061295183612901565b925050600181019050612932565b5085935050505092915050565b6000612978828461290e565b915081905092915050565b6000819050919050565b61299681612983565b82525050565b600060a0820190506129b1600083018861298d565b6129be602083018761298d565b6129cb604083018661298d565b6129d8606083018561298d565b6129e5608083018461298d565b9695505050505050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612a25600283612792565b9150612a30826129ef565b600282019050919050565b6000819050919050565b612a56612a5182612983565b612a3b565b82525050565b6000612a6782612a18565b9150612a738285612a45565b602082019150612a838284612a45565b6020820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612af8601883611c38565b9150612b0382612ac2565b602082019050919050565b60006020820190508181036000830152612b2781612aeb565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612b64601f83611c38565b9150612b6f82612b2e565b602082019050919050565b60006020820190508181036000830152612b9381612b57565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bf6602283611c38565b9150612c0182612b9a565b604082019050919050565b60006020820190508181036000830152612c2581612be9565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c88602283611c38565b9150612c9382612c2c565b604082019050919050565b60006020820190508181036000830152612cb781612c7b565b9050919050565b600060a082019050612cd3600083018861298d565b612ce0602083018761298d565b612ced604083018661298d565b612cfa6060830185611a05565b612d0760808301846119ec565b9695505050505050565b600060ff82169050919050565b612d2781612d11565b82525050565b6000608082019050612d42600083018761298d565b612d4f6020830186612d1e565b612d5c604083018561298d565b612d69606083018461298d565b9594505050505056fe49207369676e2074686973206d65737361676520746f206167726565206f6e2074686520496e74656c6c65637475616c2050726f7065727479204c6963656e73652061732061204c6963656e736f722ea2646970667358221220e199591502e8df2b3467a3c4c5e33254a1c715e14933f1cb50b4b33ad139436564736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000042697066733a2f2f62616679626569646d32797234686a337771656c7171717570677a65333637736e61366e70346b6f753272667571656769677465326e346d6f34710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000bc4ca0eda7647a8ab7c2061c2e118a18a936f13d00000000000000000000000060e4d786628fea6478f785a6d7e704777c86a7c60000000000000000000000008a90cab2b38dba80c64b7734e58ee1db38b8992e000000000000000000000000ed5af388653567af2f388e6224dc7c4b3241c544000000000000000000000000e785e82358879f061bc3dcac6f0444462d4b5330000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000003782dace9d90000000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000010a741a46278000000000000000000000000000000000000000000000000000010a741a46278000000000000000000000000000000000000000000000000000010a741a46278000
-----Decoded View---------------
Arg [0] : licenseAgreementLink (string): ipfs://bafybeidm2yr4hj3wqelqqqupgze367sna6np4kou2rfuqegigte2n4mo4q
Arg [1] : targetNFTAddresses (address[]): 0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D,0x60E4d786628Fea6478F785A6d7e704777c86a7c6,0x8a90CAb2b38dba80c64b7734e58Ee1dB38B8992e,0xED5AF388653567Af2F388E6224dC7C4b3241C544,0xe785E82358879F061BC3dcAC6f0444462D4b5330
Arg [2] : permissionNumbers (uint256[]): 5,3,2,2,2
Arg [3] : permissionFees (uint256[]): 250000000000000000,100000000000000000,75000000000000000,75000000000000000,75000000000000000
-----Encoded View---------------
26 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000042
Arg [5] : 697066733a2f2f62616679626569646d32797234686a337771656c7171717570
Arg [6] : 677a65333637736e61366e70346b6f753272667571656769677465326e346d6f
Arg [7] : 3471000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 000000000000000000000000bc4ca0eda7647a8ab7c2061c2e118a18a936f13d
Arg [10] : 00000000000000000000000060e4d786628fea6478f785a6d7e704777c86a7c6
Arg [11] : 0000000000000000000000008a90cab2b38dba80c64b7734e58ee1db38b8992e
Arg [12] : 000000000000000000000000ed5af388653567af2f388e6224dc7c4b3241c544
Arg [13] : 000000000000000000000000e785e82358879f061bc3dcac6f0444462d4b5330
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [21] : 00000000000000000000000000000000000000000000000003782dace9d90000
Arg [22] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [23] : 000000000000000000000000000000000000000000000000010a741a46278000
Arg [24] : 000000000000000000000000000000000000000000000000010a741a46278000
Arg [25] : 000000000000000000000000000000000000000000000000010a741a46278000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,611.46 | 0.15 | $391.72 |
Loading...
Loading
[ Download: CSV Export ]
[ 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.