Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
5,076 DIAMOND
Holders
2,879
Market
Volume (24H)
0.0942 ETH
Min Price (24H)
$3.38 @ 0.001800 ETH
Max Price (24H)
$74.81 @ 0.039900 ETH
Other Info
Token Contract
Balance
0 DIAMONDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DiamondExhibition
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 9999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity ^0.8.15;import {Strings} from "openzeppelin-contracts/utils/Strings.sol";import {GenArt721CoreV3_Engine_Flex_PROOF} from "artblocks-contracts/GenArt721CoreV3_Engine_Flex_PROOF.sol";import {ERC721A, ERC721ACommon, BaseTokenURI, ERC721ACommonBaseTokenURI} from "ethier/erc721/BaseTokenURI.sol";import {OperatorFilterOS} from "ethier/erc721/OperatorFilterOS.sol";import {artblocksTokenID} from "proof/artblocks/TokenIDMapping.sol";import {IGenArt721CoreContractV3_Mintable} from "proof/artblocks/IGenArt721CoreContractV3_Mintable.sol";import {SellableERC721ACommon} from "proof/sellers/sellable/SellableERC721ACommon.sol";import {ProjectsConfig} from "./ProjectsConfig.sol";import {TokenInfoManager} from "./TokenInfoManager.sol";/*** @notice Library for encoding and decoding purchase data for the Diamond Exhibition sellers.*/library DiamondExhibitionLib {function encodePurchaseData(uint8[] memory projectIds) internal pure returns (bytes memory) {return abi.encode(projectIds);}function dencodePurchaseData(bytes memory data) internal pure returns (uint8[] memory) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)pragma solidity ^0.8.0;import "./math/Math.sol";/*** @dev String operations.*/library Strings {bytes16 private constant _SYMBOLS = "0123456789abcdef";uint8 private constant _ADDRESS_LENGTH = 20;/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {unchecked {uint256 length = Math.log10(value) + 1;string memory buffer = new string(length);uint256 ptr;/// @solidity memory-safe-assemblyassembly {ptr := add(buffer, add(32, length))}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity 0.8.17;// Created By: Art Blocks Inc.import "./interfaces/0.8.x/IRandomizerV2.sol";import "./interfaces/0.8.x/IAdminACLV0.sol";import "./interfaces/0.8.x/IEngineRegistryV0.sol";import "./interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol";import "./interfaces/0.8.x/IDependencyRegistryCompatibleV0.sol";import "./interfaces/0.8.x/IManifold.sol";import "@openzeppelin-4.7/contracts/access/Ownable.sol";import "./libs/0.8.x/ERC721_PackedHashSeed.sol";import "./libs/0.8.x/BytecodeStorage.sol";import "./libs/0.8.x/Bytes32Strings.sol";/*** @title Art Blocks Engine Flex ERC-721 core contract, V3.* @author Art Blocks Inc.* @notice Privileged Roles and Ownership:* This contract is designed to be managed, with progressively limited powers* as a project progresses from active to locked.* Privileged roles and abilities are controlled by the admin ACL contract and* artists. Both of these roles hold extensive power and can arbitrarily* control and modify portions of projects, dependent upon project state. After
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright (c) 2023 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {AccessControlEnumerable} from "../utils/AccessControlEnumerable.sol";import {ERC721A, ERC721ACommon} from "./ERC721ACommon.sol";/*** @notice ERC721 extension that implements a commonly used _baseURI() function* to return an URL prefix that can be set by the contract steerer.*/contract BaseTokenURI is AccessControlEnumerable {/*** @notice Base token URI used as a prefix by tokenURI().*/string private _baseTokenURI;constructor(string memory baseTokenURI_) {_setBaseTokenURI(baseTokenURI_);}/*** @notice Sets the base token URI prefix.* @dev Only callable by the contract steerer.*/function setBaseTokenURI(string memory baseTokenURI_)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright (c) 2023 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {Address} from "@openzeppelin/contracts/utils/Address.sol";import {DefaultOperatorFilterer} from "operator-filter-registry/src/DefaultOperatorFilterer.sol";import {ERC721A, ERC721ACommon} from "./ERC721ACommon.sol";/*** @notice ERC721ACommon extension that adds Opensea's operator filtering.*/abstract contract OperatorFilterOS is ERC721ACommon, DefaultOperatorFilterer {using Address for address;/*** @notice Calling the operator filter registry with given calldata.* @dev The registry contract did not foresee role-based contract access* control -- only the contract itself, or its (EIP-173) owner is allowed to* change subscription settings. To work around this, we enforce* authorisation here and forward arbitrary calldata to the registry.* Use with care!*/function callOperatorFilterRegistry(bytes calldata cdata)externalonlyRole(DEFAULT_STEERING_ROLE)returns (bytes memory)
123456789// SPDX-License-Identifier: MIT// Copyright 2023 Proof Holdings Inc.pragma solidity ^0.8.0;uint256 constant AB_ENGINE_PROJECT_MULTIPLIER = 1_000_000;function artblocksTokenID(uint256 projectId, uint256 edition) pure returns (uint256) {return (projectId * AB_ENGINE_PROJECT_MULTIPLIER) + edition;}
1234567891011// SPDX-License-Identifier: MIT// Copyright 2023 Proof Holdings Inc.pragma solidity >=0.8.0;/*** @notice IGenArt721CoreContractV3_Base minting interface*/interface IGenArt721CoreContractV3_Mintable {function mint_Ecf(address to, uint256 projectId, address sender) external returns (uint256 _tokenId);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.0 <0.9.0;import {ERC721ACommon} from "ethier/erc721/ERC721ACommon.sol";import {AccessControlEnumerable, BaseSellable} from "./BaseSellable.sol";/*** @notice Base contract for sellable ERC721ACommon tokens.*/abstract contract SellableERC721ACommon is BaseSellable, ERC721ACommon {/*** @inheritdoc BaseSellable*/function _handleSale(address to, uint64 num, bytes calldata) internal virtual override {_mint(to, num);}function supportsInterface(bytes4 interfaceId)publicviewvirtualoverride(ERC721ACommon, AccessControlEnumerable)returns (bool){return ERC721ACommon.supportsInterface(interfaceId) || AccessControlEnumerable.supportsInterface(interfaceId);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 Proof Holdings Inc.pragma solidity >=0.8.17;/*** @notice Diamond Exhibition - Projects configuration.* @author David Huber (@cxkoda)* @custom:reviewer Arran Schlosberg (@divergencearran)*/contract ProjectsConfig {/*** @notice The number of longform projects.*/uint8 internal constant _NUM_LONGFORM_PROJECTS = 11;/*** @notice The number of pre-curated projects.*/uint8 internal constant _NUM_CURATED_PROJECTS = 10;/*** @notice The total number of projects.*/uint8 public constant NUM_PROJECTS = _NUM_LONGFORM_PROJECTS + _NUM_CURATED_PROJECTS;/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 Proof Holdings Inc.pragma solidity >=0.8.17;/*** @notice Token information module for Diamond Exhibition.* @author David Huber (@cxkoda)* @custom:reviewer Arran Schlosberg (@divergencearran)*/contract TokenInfoManager {/*** @notice Encodes token information.* @param projectId the ID of the project associated with the token.* @param edition the edition of the token within the given project.*/struct TokenInfo {uint8 projectId;uint16 edition;}/*** @notice Max numbers of tokens that this contract can store.* @dev This constant is intentionally very large so we never have to worry about it.*/uint256 internal constant _NUM_MAX_TOKEN_INFO = (1 << 32);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)pragma solidity ^0.8.0;/*** @dev Standard math utilities missing in the Solidity language.*/library Math {enum Rounding {Down, // Toward negative infinityUp, // Toward infinityZero // Toward zero}/*** @dev Returns the largest of two numbers.*/function max(uint256 a, uint256 b) internal pure returns (uint256) {return a > b ? a : b;}/*** @dev Returns the smallest of two numbers.*/function min(uint256 a, uint256 b) internal pure returns (uint256) {
123456789101112131415161718// SPDX-License-Identifier: LGPL-3.0-only// Creatd By: Art Blocks Inc.pragma solidity ^0.8.0;import "./IGenArt721CoreContractV3_Base.sol";interface IRandomizerV2 {// The core contract that may interact with this randomizer contract.function genArt721Core()externalviewreturns (IGenArt721CoreContractV3_Base);// When a core contract calls this, it can be assured that the randomizer// will set a bytes32 hash for tokenId `_tokenId` on the core contract.function assignTokenHash(uint256 _tokenId) external;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-only// Created By: Art Blocks Inc.pragma solidity ^0.8.0;interface IAdminACLV0 {/*** @notice Token ID `_tokenId` minted to `_to`.* @param previousSuperAdmin The previous superAdmin address.* @param newSuperAdmin The new superAdmin address.* @param genArt721CoreAddressesToUpdate Array of genArt721Core* addresses to update to the new superAdmin, for indexing purposes only.*/event SuperAdminTransferred(address indexed previousSuperAdmin,address indexed newSuperAdmin,address[] genArt721CoreAddressesToUpdate);/// Type of the Admin ACL contract, e.g. "AdminACLV0"function AdminACLType() external view returns (string memory);/// super admin addressfunction superAdmin() external view returns (address);/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-only// Created By: Art Blocks Inc.pragma solidity ^0.8.17;interface IEngineRegistryV0 {/// ADDRESS/*** @notice contract has been registered as a contract that is powered by the Art Blocks Engine.*/event ContractRegistered(address indexed _contractAddress,bytes32 _coreVersion,bytes32 _coreType);/// ADDRESS/*** @notice contract has been unregistered as a contract that is powered by the Art Blocks Engine.*/event ContractUnregistered(address indexed _contractAddress);/*** @notice Emits a `ContractRegistered` event with the provided information.* @dev this function should be gated to only deployer addresses.*/function registerContract(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-only// Created By: Art Blocks Inc.pragma solidity ^0.8.0;import "./IAdminACLV0.sol";import "./IGenArt721CoreContractV3_Engine.sol";/*** @title This interface is intended to house interface items that are common* across all GenArt721CoreContractV3 Engine Flex and derivative implementations.* @author Art Blocks Inc.*/interface IGenArt721CoreContractV3_Engine_Flex isIGenArt721CoreContractV3_Engine{/*** @notice When an external asset dependency is updated or added, this event is emitted.* @param _projectId The project ID of the project that was updated.* @param _index The index of the external asset dependency that was updated.* @param _cid The content ID of the external asset dependency. This is an empty string* if the dependency type is ONCHAIN.* @param _dependencyType The type of the external asset dependency.* @param _externalAssetDependencyCount The number of external asset dependencies.*/event ExternalAssetDependencyUpdated(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-only// Created By: Art Blocks Inc.pragma solidity ^0.8.17;interface IDependencyRegistryCompatibleV0 {/// Dependency registry managed by Art Blocksfunction artblocksDependencyRegistryAddress()externalviewreturns (address);/*** @notice Returns script information for project `_projectId`.* @param _projectId Project to be queried.* @return scriptTypeAndVersion Project's script type and version* (e.g. "p5js(atSymbol)1.0.0")* @return aspectRatio Aspect ratio of project (e.g. "1" for square,* "1.77777778" for 16:9, etc.)* @return scriptCount Count of scripts for project*/function projectScriptDetails(uint256 _projectId)externalviewreturns (
123456789101112131415161718192021222324// SPDX-License-Identifier: MITpragma solidity ^0.8.0;/// @dev Royalty Registry interface, used to support the Royalty Registry./// @dev Source: https://github.com/manifoldxyz/royalty-registry-solidity/blob/main/contracts/specs/IManifold.sol/// @author: manifold.xyz/*** @dev Royalty interface for creator core classes*/interface IManifold {/*** @dev Get royalites of a token. Returns list of receivers and basisPoints** bytes4(keccak256('getRoyalties(uint256)')) == 0xbb3bafd6** => 0xbb3bafd6 = 0xbb3bafd6*/function getRoyalties(uint256 tokenId) external view returns (address payable[] memory, uint256[] memory);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)pragma solidity ^0.8.0;import "../utils/Context.sol";/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. This* can later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/abstract contract Ownable is Context {address private _owner;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);/*** @dev Initializes the contract setting the deployer as the initial owner.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)pragma solidity ^0.8.0;import "@openzeppelin-4.7/contracts/token/ERC721/IERC721.sol";import "@openzeppelin-4.7/contracts/token/ERC721/IERC721Receiver.sol";import "@openzeppelin-4.7/contracts/token/ERC721/extensions/IERC721Metadata.sol";import "@openzeppelin-4.7/contracts/utils/Address.sol";import "@openzeppelin-4.7/contracts/utils/Context.sol";import "@openzeppelin-4.7/contracts/utils/Strings.sol";import "@openzeppelin-4.7/contracts/utils/introspection/ERC165.sol";/*** @dev Forked version of the OpenZeppelin v4.7.1 ERC721 contract. Utilizes a* struct to pack owner and hash seed into a single storage slot.* ---------------------* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including* the Metadata extension, but not including the Enumerable extension, which is available separately as* {ERC721Enumerable}.*/contract ERC721_PackedHashSeed is Context, ERC165, IERC721, IERC721Metadata {using Address for address;using Strings for uint256;// Token name
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-only// Created By: Art Blocks Inc.pragma solidity ^0.8.0;/*** @title Art Blocks Script Storage Library* @notice Utilize contract bytecode as persistant storage for large chunks of script string data.** @author Art Blocks Inc.* @author Modified from 0xSequence (https://github.com/0xsequence/sstore2/blob/master/contracts/SSTORE2.sol)* @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SSTORE2.sol)** @dev Compared to the above two rerferenced libraries, this contracts-as-storage implementation makes a few* notably different design decisions:* - uses the `string` data type for input/output on reads, rather than speaking in bytes directly* - exposes "delete" functionality, allowing no-longer-used storage to be purged from chain state* - stores the "writer" address (library user) in the deployed contract bytes, which is useful for both:* a) providing necessary information for safe deletion; and* b) allowing this to be introspected on-chain* Also, given that much of this library is written in assembly, this library makes use of a slightly* different convention (when compared to the rest of the Art Blocks smart contract repo) around* pre-defining return values in some cases in order to simplify need to directly memory manage these* return values.*/library BytecodeStorage {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-only// Created By: Art Blocks Inc.// Inspired by: https://ethereum.stackexchange.com/a/123950/103422pragma solidity ^0.8.0;/*** @dev Operations on bytes32 data type, dealing with conversion to string.*/library Bytes32Strings {/*** @dev Intended to convert a `bytes32`-encoded string literal to `string`.* Trims zero padding to arrive at original string literal.*/function toString(bytes32 source) internal pure returns (string memory result) {uint8 length = 0;while (source[length] != 0 && length < 32) {length++;}assembly {// free memory pointerresult := mload(0x40)// update free memory pointer to new "memory end"// (offset is 64-bytes: 32 for length, 32 for data)
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// Copyright (c) 2023 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {AccessControlEnumerable as ACE} from "@openzeppelin/contracts/access/AccessControlEnumerable.sol";contract AccessControlEnumerable is ACE {/// @notice The default role intended to perform access-restricted actions./// @dev We are using this instead of DEFAULT_ADMIN_ROLE because the latter/// is intended to grant/revoke roles and will be secured differently.bytes32 public constant DEFAULT_STEERING_ROLE =keccak256("DEFAULT_STEERING_ROLE");/// @dev Overrides supportsInterface so that inheriting contracts can/// reference this contract instead of OZ's version for further overrides.function supportsInterface(bytes4 interfaceId)publicviewvirtualoverride(ACE)returns (bool){return ACE.supportsInterface(interfaceId);}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright (c) 2022 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {ERC721A} from "erc721a/contracts/ERC721A.sol";import {ERC2981} from "@openzeppelin/contracts/token/common/ERC2981.sol";import {AccessControlEnumerable} from "../utils/AccessControlEnumerable.sol";import {AccessControlPausable} from "../utils/AccessControlPausable.sol";import {ERC4906} from "./ERC4906.sol";/**@notice An ERC721A contract with common functionality:- Pausable with toggling functions exposed to Owner only- ERC2981 royalties*/contract ERC721ACommon is ERC721A, AccessControlPausable, ERC2981, ERC4906 {constructor(address admin,address steerer,string memory name,string memory symbol,address payable royaltyReciever,uint96 royaltyBasisPoints) ERC721A(name, symbol) {_setDefaultRoyalty(royaltyReciever, royaltyBasisPoints);_grantRole(DEFAULT_ADMIN_ROLE, admin);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed* ====*
1234567891011121314151617// SPDX-License-Identifier: MITpragma solidity ^0.8.13;import {OperatorFilterer} from "./OperatorFilterer.sol";import {CANONICAL_CORI_SUBSCRIPTION} from "./lib/Constants.sol";/*** @title DefaultOperatorFilterer* @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription.* @dev Please note that if your token contract does not provide an owner with EIP-173, it must provide* administration methods on the contract itself to interact with the registry otherwise the subscription* will be locked to the options set during construction.*/abstract contract DefaultOperatorFilterer is OperatorFilterer {/// @dev The constructor that is called when the contract is being deployed.constructor() OperatorFilterer(CANONICAL_CORI_SUBSCRIPTION, true) {}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.0 <0.9.0;import {AccessControlEnumerable} from "ethier/utils/AccessControlEnumerable.sol";import {ISellable} from "../interfaces/ISellable.sol";/*** @notice A base contract for selling content via authorised sellers.*/abstract contract BaseSellable is ISellable, AccessControlEnumerable {/*** @notice Authorised sellers.*/bytes32 public constant AUTHORISED_SELLER_ROLE = keccak256("AUTHORISED_SELLER_ROLE");/*** @notice A role that cannot be granted or revoked.* @dev Used to lock in members of the `AUTHORISED_SELLER_ROLE` role.*/bytes32 private constant _NOOP_ROLE = keccak256("NOOP_ROLE");constructor() {_setRoleAdmin(AUTHORISED_SELLER_ROLE, DEFAULT_STEERING_ROLE);_setRoleAdmin(_NOOP_ROLE, _NOOP_ROLE);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-only// Created By: Art Blocks Inc.pragma solidity ^0.8.0;import "./IAdminACLV0.sol";/// use the Royalty Registry's IManifold interface for token royaltiesimport "./IManifold.sol";/*** @title This interface is intended to house interface items that are common* across all GenArt721CoreContractV3 flagship and derivative implementations.* This interface extends the IManifold royalty interface in order to* add support the Royalty Registry by default.* @author Art Blocks Inc.*/interface IGenArt721CoreContractV3_Base is IManifold {/*** @notice Token ID `_tokenId` minted to `_to`.*/event Mint(address indexed _to, uint256 indexed _tokenId);/*** @notice currentMinter updated to `_currentMinter`.* @dev Implemented starting with V3 core*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: LGPL-3.0-only// Created By: Art Blocks Inc.pragma solidity ^0.8.0;import "./IAdminACLV0.sol";import "./IGenArt721CoreContractV3_Base.sol";interface IGenArt721CoreContractV3_Engine is IGenArt721CoreContractV3_Base {// @dev new function in V3function getPrimaryRevenueSplits(uint256 _projectId,uint256 _price)externalviewreturns (uint256 renderProviderRevenue_,address payable renderProviderAddress_,uint256 platformProviderRevenue_,address payable platformProviderAddress_,uint256 artistRevenue_,address payable artistAddress_,uint256 additionalPayeePrimaryRevenue_,address payable additionalPayeePrimaryAddress_);
123456789101112131415161718192021222324// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)pragma solidity ^0.8.0;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)pragma solidity ^0.8.0;import "../../utils/introspection/IERC165.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);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)pragma solidity ^0.8.0;/*** @title ERC721 token receiver interface* @dev Interface for any contract that wants to support safeTransfers* from ERC721 asset contracts.*/interface IERC721Receiver {/*** @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}* by `operator` from `from`, this function is called.** It must return its Solidity selector to confirm the token transfer.* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.** The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.*/function onERC721Received(address operator,address from,uint256 tokenId,bytes calldata data) external returns (bytes4);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)pragma solidity ^0.8.0;import "../IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional metadata extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Metadata is IERC721 {/*** @dev Returns the token collection name.*/function name() external view returns (string memory);/*** @dev Returns the token collection symbol.*/function symbol() external view returns (string memory);/*** @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.*/function tokenURI(uint256 tokenId) external view returns (string memory);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed* ====*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)pragma solidity ^0.8.0;/*** @dev String operations.*/library Strings {bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";uint8 private constant _ADDRESS_LENGTH = 20;/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {// Inspired by OraclizeAPI's implementation - MIT licence// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.solif (value == 0) {return "0";}uint256 temp = value;uint256 digits;while (temp != 0) {digits++;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)pragma solidity ^0.8.0;import "./IERC165.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check* for the additional interface id that will be supported. For example:** ```solidity* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);* }* ```** Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.*/abstract contract ERC165 is IERC165 {/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)pragma solidity ^0.8.0;import "./IAccessControlEnumerable.sol";import "./AccessControl.sol";import "../utils/structs/EnumerableSet.sol";/*** @dev Extension of {AccessControl} that allows enumerating the members of each role.*/abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {using EnumerableSet for EnumerableSet.AddressSet;mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);}/*** @dev Returns one of the accounts that have `role`. `index` must be a
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// ERC721A Contracts v4.2.3// Creator: Chiru Labspragma solidity ^0.8.4;import './IERC721A.sol';/*** @dev Interface of ERC721 token receiver.*/interface ERC721A__IERC721Receiver {function onERC721Received(address operator,address from,uint256 tokenId,bytes calldata data) external returns (bytes4);}/*** @title ERC721A** @dev Implementation of the [ERC721](https://eips.ethereum.org/EIPS/eip-721)* Non-Fungible Token Standard, including the Metadata extension.* Optimized for lower gas during batch mints.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (token/common/ERC2981.sol)pragma solidity ^0.8.0;import "../../interfaces/IERC2981.sol";import "../../utils/introspection/ERC165.sol";/*** @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.** Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for* specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.** Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the* fee is specified in basis points by default.** IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See* https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to* voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.** _Available since v4.5._*/abstract contract ERC2981 is IERC2981, ERC165 {struct RoyaltyInfo {address receiver;
1234567891011121314151617181920// SPDX-License-Identifier: MIT// Copyright (c) 2021 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol";import {AccessControlEnumerable} from "./AccessControlEnumerable.sol";/// @notice A Pausable contract that can only be toggled by a member of the/// STEERING role.contract AccessControlPausable is AccessControlEnumerable, Pausable {/// @notice Pauses the contract.function pause() public onlyRole(DEFAULT_STEERING_ROLE) {Pausable._pause();}/// @notice Unpauses the contract.function unpause() public onlyRole(DEFAULT_STEERING_ROLE) {Pausable._unpause();}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: CC0-1.0pragma solidity ^0.8.0;import {IERC165, ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";interface IERC4906Events {/// @dev This event emits when the metadata of a token is changed./// So that the third-party platforms such as NFT market could/// timely update the images and related attributes of the NFT.event MetadataUpdate(uint256 _tokenId);/// @dev This event emits when the metadata of a range of tokens is changed./// So that the third-party platforms such as NFT market could/// timely update the images and related attributes of the NFTs.event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);}/// @title EIP-721 Metadata Update Extension// solhint-disable-next-line no-empty-blocksinterface IERC4906 is IERC165, IERC4906Events {}contract ERC4906 is IERC4906, ERC165 {function _refreshMetadata(uint256 tokenId) internal {emit MetadataUpdate(tokenId);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.13;import {IOperatorFilterRegistry} from "./IOperatorFilterRegistry.sol";import {CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS} from "./lib/Constants.sol";/*** @title OperatorFilterer* @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another* registrant's entries in the OperatorFilterRegistry.* @dev This smart contract is meant to be inherited by token contracts so they can use the following:* - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.* - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.* Please note that if your token contract does not provide an owner with EIP-173, it must provide* administration methods on the contract itself to interact with the registry otherwise the subscription* will be locked to the options set during construction.*/abstract contract OperatorFilterer {/// @dev Emitted when an operator is not allowed.error OperatorNotAllowed(address operator);IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =IOperatorFilterRegistry(CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS);/// @dev The constructor that is called when the contract is being deployed.constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
12345// SPDX-License-Identifier: MITpragma solidity ^0.8.13;address constant CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS = 0x000000000000AAeB6D7670E522A718067333cd4E;address constant CANONICAL_CORI_SUBSCRIPTION = 0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6;
1234567891011121314// SPDX-License-Identifier: MIT// Copyright 2023 PROOF Holdings Incpragma solidity >=0.8.0 <0.9.0;/*** @notice Basic interface for a contract providing sellable content.*/interface ISellable {/*** @notice Handles the sale of sellable content.* @dev This is usually only callable by Sellers.*/function handleSale(address to, uint64 num, bytes calldata data) external payable;}
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[EIP].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)pragma solidity ^0.8.0;import "./IAccessControl.sol";/*** @dev External interface of AccessControlEnumerable declared to support ERC165 detection.*/interface IAccessControlEnumerable is IAccessControl {/*** @dev Returns one of the accounts that have `role`. `index` must be a* value between 0 and {getRoleMemberCount}, non-inclusive.** Role bearers are not sorted in any particular way, and their ordering may* change at any point.** WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure* you perform all queries on the same block. See the following* https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]* for more information.*/function getRoleMember(bytes32 role, uint256 index) external view returns (address);/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)pragma solidity ^0.8.0;import "./IAccessControl.sol";import "../utils/Context.sol";import "../utils/Strings.sol";import "../utils/introspection/ERC165.sol";/*** @dev Contract module that allows children to implement role-based access* control mechanisms. This is a lightweight version that doesn't allow enumerating role* members except through off-chain means by accessing the contract event logs. Some* applications may benefit from on-chain enumerability, for those cases see* {AccessControlEnumerable}.** Roles are referred to by their `bytes32` identifier. These should be exposed* in the external API and be unique. The best way to achieve this is by* using `public constant` hash digests:** ```* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");* ```** Roles can be used to represent a set of permissions. To restrict access to a
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.8.0) (utils/structs/EnumerableSet.sol)// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.pragma solidity ^0.8.0;/*** @dev Library for managing* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive* types.** Sets have the following properties:** - Elements are added, removed, and checked for existence in constant time* (O(1)).* - Elements are enumerated in O(n). No guarantees are made on the ordering.** ```* contract Example {* // Add the library methods* using EnumerableSet for EnumerableSet.AddressSet;** // Declare a set state variable* EnumerableSet.AddressSet private mySet;* }* ```
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// ERC721A Contracts v4.2.3// Creator: Chiru Labspragma solidity ^0.8.4;/*** @dev Interface of ERC721A.*/interface IERC721A {/*** The caller must own the token or be an approved operator.*/error ApprovalCallerNotOwnerNorApproved();/*** The token does not exist.*/error ApprovalQueryForNonexistentToken();/*** Cannot query the balance for the zero address.*/error BalanceQueryForZeroAddress();/**
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)pragma solidity ^0.8.0;import "../utils/introspection/IERC165.sol";/*** @dev Interface for the NFT Royalty Standard.** A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal* support for royalty payments across all NFT marketplaces and ecosystem participants.** _Available since v4.5._*/interface IERC2981 is IERC165 {/*** @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of* exchange. The royalty amount is denominated and should be paid in that same unit of exchange.*/function royaltyInfo(uint256 tokenId, uint256 salePrice)externalviewreturns (address receiver, uint256 royaltyAmount);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)pragma solidity ^0.8.0;import "./IERC165.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check* for the additional interface id that will be supported. For example:** ```solidity* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);* }* ```** Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.*/abstract contract ERC165 is IERC165 {/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)pragma solidity ^0.8.0;import "../utils/Context.sol";/*** @dev Contract module which allows children to implement an emergency stop* mechanism that can be triggered by an authorized account.** This module is used through inheritance. It will make available the* modifiers `whenNotPaused` and `whenPaused`, which can be applied to* the functions of your contract. Note that they will not be pausable by* simply including this module, only once the modifiers are put in place.*/abstract contract Pausable is Context {/*** @dev Emitted when the pause is triggered by `account`.*/event Paused(address account);/*** @dev Emitted when the pause is lifted by `account`.*/event Unpaused(address account);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.13;interface IOperatorFilterRegistry {/*** @notice Returns true if operator is not filtered for a given token, either by address or codeHash. Also returns* true if supplied registrant address is not registered.*/function isOperatorAllowed(address registrant, address operator) external view returns (bool);/*** @notice Registers an address with the registry. May be called by address itself or by EIP-173 owner.*/function register(address registrant) external;/*** @notice Registers an address with the registry and "subscribes" to another address's filtered operators and codeHashes.*/function registerAndSubscribe(address registrant, address subscription) external;/*** @notice Registers an address with the registry and copies the filtered operators and codeHashes from another* address without subscribing.*/function registerAndCopyEntries(address registrant, address registrantToCopy) external;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)pragma solidity ^0.8.0;/*** @dev External interface of AccessControl declared to support ERC165 detection.*/interface IAccessControl {/*** @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`** `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite* {RoleAdminChanged} not being emitted signaling this.** _Available since v3.1._*/event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);/*** @dev Emitted when `account` is granted `role`.** `sender` is the account that originated the contract call, an admin role* bearer except when using {AccessControl-_setupRole}.*/event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
123456789101112131415161718192021222324// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)pragma solidity ^0.8.0;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}}
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[EIP].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223{"remappings": ["@divergencetech/ethier/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/","@openzeppelin-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/","@openzeppelin-4.7/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/","@openzeppelin/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/","ERC721A/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/contracts/","ERC721A_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/","artblocks-contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/artblocks-contracts_fa1dc466/contracts/","artblocks-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/artblocks-contracts_fa1dc466/","delegation-registry/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/delegation-registry_2d1a158b/src/","delegation-registry_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/delegation-registry_2d1a158b/","ds-test/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ds-test_013e6c64/src/","ds-test_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ds-test_013e6c64/","erc721a/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/","ethier/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/contracts/","ethier_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/","forge-std/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/forge-std_1-4-0/src/","openzeppelin-contracts-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/contracts/","openzeppelin-contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/contracts/","openzeppelin-contracts/contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/contracts/","openzeppelin-contracts_root-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/","openzeppelin-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/",
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"components":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"steerer","type":"address"},{"internalType":"address payable","name":"secondaryReceiver","type":"address"},{"internalType":"contract GenArt721CoreV3_Engine_Flex_PROOF","name":"flex","type":"address"},{"internalType":"contract IGenArt721CoreContractV3_Mintable","name":"flexMintGateway","type":"address"}],"internalType":"struct DiamondExhibition.ConstructorParams","name":"params","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"numLeft","type":"uint256"}],"name":"ExceedingMaxTotalSupply","type":"error"},{"inputs":[{"internalType":"uint8","name":"projectId","type":"uint8"}],"name":"InvalidProject","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[{"internalType":"uint8","name":"projectId","type":"uint8"}],"name":"ProjectExhausted","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"AUTHORISED_SELLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_STEERING_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NUM_PROJECTS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"artblocksProjectIds","outputs":[{"internalType":"uint8[11]","name":"","type":"uint8[11]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"cdata","type":"bytes"}],"name":"callOperatorFilterRegistry","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitMetadataUpdateForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flex","outputs":[{"internalType":"contract GenArt721CoreV3_Engine_Flex_PROOF","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flexMintGateway","outputs":[{"internalType":"contract IGenArt721CoreContractV3_Mintable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint64","name":"num","type":"uint64"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"handleSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockSellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxNumPerProject","outputs":[{"internalType":"uint256[21]","name":"","type":"uint256[21]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numPurchasedPerProject","outputs":[{"internalType":"uint16[21]","name":"","type":"uint16[21]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"projectId","type":"uint8"}],"name":"projectType","outputs":[{"internalType":"enum ProjectsConfig.ProjectType","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI_","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"basisPoints","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"projectId","type":"uint8"}],"name":"tokenIdsByProjectId","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"tokenInfos","outputs":[{"components":[{"internalType":"uint8","name":"projectId","type":"uint8"},{"internalType":"uint16","name":"edition","type":"uint16"}],"internalType":"struct TokenInfoManager.TokenInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b5060405162004a8238038062004a82833981016040819052620000349162000741565b733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060600160405280602e815260200162004a54602e913983600001518460200151604051806040016040528060128152602001712234b0b6b7b7321022bc3434b134ba34b7b760711b815250604051806040016040528060078152602001661112505353d39160ca1b81525087604001516101f483838160029081620000d5919062000874565b506003620000e4828262000874565b50506000805550620001267fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b30760008051602062004a3483398151915262000380565b620001527fd83ac62169e315c6fc3ecdb2c5b6ae75284053b2c2f2fb9fc715ba380283e9428062000380565b600a805460ff19169055620001688282620003cb565b62000175600087620004d0565b6200019060008051602062004a3483398151915286620004d0565b505050505050620001a7816200051360201b60201c565b506daaeb6d7670e522a718067333cd4e3b15620002ed5780156200023b57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200021c57600080fd5b505af115801562000231573d6000803e3d6000fd5b50505050620002ed565b6001600160a01b038216156200028c5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af29039060440162000201565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620002d357600080fd5b505af1158015620002e8573d6000803e3d6000fd5b505050505b506000905080620002fd62000525565b905060005b62000310600a600b62000956565b60ff16811015620003585781816015811062000330576200033062000972565b602002015162000341908462000988565b9250806200034f816200099e565b91505062000302565b505060c05260608101516001600160a01b039081166080908152909101511660a052620009ba565b600082815260086020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6127106001600160601b03821611156200043f5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620004975760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000436565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600b55565b620004e78282620005dd60201b620013561760201c565b60008281526009602090815260409091206200050e918390620013f862000681821b17901c565b505050565b600d62000521828262000874565b5050565b6200052f620006f3565b604051806102a0016040528061025881526020016102588152602001610258815260200161032081526020016103e8815260200161025881526020016101c281526020016103e8815260200161010081526020016103e881526020016103e881526020016064815260200160648152602001606481526020016104678152602001604d8152602001606481526020016064815260200160c88152602001606481526020016064815250905090565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16620005215760008281526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200063d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600062000698836001600160a01b038416620006a1565b90505b92915050565b6000818152600183016020526040812054620006ea575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200069b565b5060006200069b565b604051806102a001604052806015906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200073e57600080fd5b50565b600060a082840312156200075457600080fd5b60405160a081016001600160401b038111828210171562000779576200077962000712565b6040528251620007898162000728565b815260208301516200079b8162000728565b60208201526040830151620007b08162000728565b60408201526060830151620007c58162000728565b60608201526080830151620007da8162000728565b60808201529392505050565b600181811c90821680620007fb57607f821691505b6020821081036200081c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200050e57600081815260208120601f850160051c810160208610156200084b5750805b601f850160051c820191505b818110156200086c5782815560010162000857565b505050505050565b81516001600160401b0381111562000890576200089062000712565b620008a881620008a18454620007e6565b8462000822565b602080601f831160018114620008e05760008415620008c75750858301515b600019600386901b1c1916600185901b1785556200086c565b600085815260208120601f198616915b828110156200091157888601518255948401946001909101908401620008f0565b5085821015620009305787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156200069b576200069b62000940565b634e487b7160e01b600052603260045260246000fd5b808201808211156200069b576200069b62000940565b600060018201620009b357620009b362000940565b5060010190565b60805160a05160c05161402e62000a066000396000818161051901528181611ad80152611b2a0152600081816106e601526126ed01526000818161069f015261125d015261402e6000f3fe6080604052600436106102fd5760003560e01c806342842e0e1161018f57806391d14854116100e1578063b88d4fde1161008a578063d547741f11610064578063d547741f146108fe578063d547cfb71461091e578063e985e9c51461093357600080fd5b8063b88d4fde146108ab578063c87b56dd146108be578063ca15c873146108de57600080fd5b80639aec8462116100bb5780639aec846214610854578063a217fddf14610876578063a22cb4651461088b57600080fd5b806391d14854146107d757806395d89b411461081d57806399ef3fcd1461083257600080fd5b80636352211e116101435780638222b7d71161011d5780638222b7d71461078d5780638456cb59146107a25780639010d07c146107b757600080fd5b80636352211e146107205780636d147a6d1461074057806370a082311461076d57600080fd5b80635ada5c55116101745780635ada5c55146106c15780635ba9341a146106d45780635c975abb1461070857600080fd5b806342842e0e1461067a57806351b1dbef1461068d57600080fd5b8063248a9ca31161025357806331c23d20116101fc5780633dcc23a0116101d65780633dcc23a0146106235780633f4ba83a1461064357806341f434341461065857600080fd5b806331c23d20146105a257806336568abe146105d657806337d05add146105f657600080fd5b80632e163d0c1161022d5780632e163d0c1461053b5780632f2ff15d1461056257806330176e131461058257600080fd5b8063248a9ca3146104985780632a55205a146104c85780632ab4d0521461050757600080fd5b80630dc3b909116102b55780631d23354a1161028f5780631d23354a1461044e5780631db721851461046357806323b872dd1461048557600080fd5b80630dc3b909146103c657806318160ddd146104085780631a3141ed1461042157600080fd5b806306fdde03116102e657806306fdde0314610359578063081812fc1461037b578063095ea7b3146103b357600080fd5b806301ffc9a71461030257806304634d8d14610337575b600080fd5b34801561030e57600080fd5b5061032261031d3660046133a1565b61097c565b60405190151581526020015b60405180910390f35b34801561034357600080fd5b506103576103523660046133da565b61098d565b005b34801561036557600080fd5b5061036e6109c6565b60405161032e9190613472565b34801561038757600080fd5b5061039b610396366004613485565b610a58565b6040516001600160a01b03909116815260200161032e565b6103576103c136600461349e565b610ab5565b3480156103d257600080fd5b506103fa7fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b30781565b60405190815260200161032e565b34801561041457600080fd5b50600154600054036103fa565b34801561042d57600080fd5b5061044161043c3660046134d7565b610adb565b60405161032e9190613523565b34801561045a57600080fd5b50610357610af7565b34801561046f57600080fd5b50610478610b2c565b60405161032e9190613564565b61035761049336600461359a565b610b93565b3480156104a457600080fd5b506103fa6104b3366004613485565b60009081526008602052604090206001015490565b3480156104d457600080fd5b506104e86104e33660046135d6565b610bb7565b604080516001600160a01b03909316835260208301919091520161032e565b34801561051357600080fd5b506103fa7f000000000000000000000000000000000000000000000000000000000000000081565b34801561054757600080fd5b50610550610c96565b60405160ff909116815260200161032e565b34801561056e57600080fd5b5061035761057d3660046135f8565b610ca5565b34801561058e57600080fd5b5061035761059d3660046136ea565b610cca565b3480156105ae57600080fd5b506103fa7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7681565b3480156105e257600080fd5b506103576105f13660046135f8565b610cfd565b34801561060257600080fd5b506106166106113660046134d7565b610da4565b60405161032e9190613733565b34801561062f57600080fd5b5061036e61063e3660046137b9565b610e9c565b34801561064f57600080fd5b50610357610f22565b34801561066457600080fd5b5061039b6daaeb6d7670e522a718067333cd4e81565b61035761068836600461359a565b610f54565b34801561069957600080fd5b5061039b7f000000000000000000000000000000000000000000000000000000000000000081565b6103576106cf3660046137fb565b610f78565b3480156106e057600080fd5b5061039b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561071457600080fd5b50600a5460ff16610322565b34801561072c57600080fd5b5061039b61073b366004613485565b610fb5565b34801561074c57600080fd5b5061076061075b366004613867565b610fc0565b60405161032e91906138dc565b34801561077957600080fd5b506103fa610788366004613932565b611087565b34801561079957600080fd5b506103576110ef565b3480156107ae57600080fd5b50610357611130565b3480156107c357600080fd5b5061039b6107d23660046135d6565b611162565b3480156107e357600080fd5b506103226107f23660046135f8565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561082957600080fd5b5061036e611181565b34801561083e57600080fd5b50610847611190565b60405161032e919061394d565b34801561086057600080fd5b506108696111a5565b60405161032e9190613979565b34801561088257600080fd5b506103fa600081565b34801561089757600080fd5b506103576108a63660046139b0565b6111b5565b6103576108b93660046139dc565b6111bf565b3480156108ca57600080fd5b5061036e6108d9366004613485565b6111f0565b3480156108ea57600080fd5b506103fa6108f9366004613485565b61130b565b34801561090a57600080fd5b506103576109193660046135f8565b611322565b34801561092a57600080fd5b5061036e611347565b34801561093f57600080fd5b5061032261094e366004613a58565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006109878261140d565b92915050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf766109b781611427565b6109c18383611431565b505050565b6060600280546109d590613a82565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0190613a82565b8015610a4e5780601f10610a2357610100808354040283529160200191610a4e565b820191906000526020600020905b815481529060010190602001808311610a3157829003601f168201915b5050505050905090565b6000610a6382611590565b610a99576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b610abe816115d0565b15610ad157610acd82826115e4565b5050565b610acd82826116b5565b6000600b60ff831610610aef576001610987565b600092915050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610b2181611427565b610b296116c9565b50565b610b34613335565b604080516102a08101918290529064010000000e90601590826000855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610b515790505050505050905090565b610b9c816115d0565b15610bac576109c1838383611715565b6109c1838383611939565b6000828152600c602090815260408083208151808301909252546001600160a01b038116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16928201929092528291610c58575060408051808201909152600b546001600160a01b03811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b602081015160009061271090610c7c906bffffffffffffffffffffffff1687613b04565b610c869190613b1b565b91519350909150505b9250929050565b610ca2600a600b613b56565b81565b600082815260086020526040902060010154610cc081611427565b6109c1838361195e565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610cf481611427565b610acd82611980565b6001600160a01b0381163314610d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610acd828261198c565b6060600064010000000e8360ff1660158110610dc257610dc2613b6f565b601091828204019190066002029054906101000a900461ffff1661ffff1667ffffffffffffffff811115610df857610df8613624565b604051908082528060200260200182016040528015610e21578160200160208202803683370190505b509050600080610e346001546000540390565b905060005b81811015610e92578560ff16610e4e826119ae565b5160ff1603610e8257808484610e6381613b9e565b955081518110610e7557610e75613b6f565b6020026020010181815250505b610e8b81613b9e565b9050610e39565b5091949350505050565b60607f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610ec881611427565b610f1884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506daaeb6d7670e522a718067333cd4e93925050611a009050565b91505b5092915050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610f4c81611427565b610b29611a44565b610f5d816115d0565b15610f6d576109c1838383611a96565b6109c1838383611ab1565b7fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b307610fa281611427565b610fae85858585611ad6565b5050505050565b600061098782611c68565b606060008267ffffffffffffffff811115610fdd57610fdd613624565b60405190808252806020026020018201604052801561102257816020015b6040805180820190915260008082526020820152815260200190600190039081610ffb5790505b50905060005b8381101561107f5761105185858381811061104557611045613b6f565b905060200201356119ae565b82828151811061106357611063613b6f565b60200260200101819052508061107890613b9e565b9050611028565b509392505050565b60006001600160a01b0382166110c9576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7661111981611427565b610b29600061112b6001546000540390565b611d01565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7661115a81611427565b610b29611d3e565b600082815260096020526040812061117a9083611d7b565b9392505050565b6060600380546109d590613a82565b611198613354565b6111a0611d87565b905090565b6111ad613335565b6111a0611ded565b610acd8282611ea3565b6111c8826115d0565b156111de576111d984848484611f0f565b6111ea565b6111ea84848484611f6c565b50505050565b606060006111fd836119ae565b90506001815161120c90610adb565b600181111561121d5761121d6134f4565b0361125b5761122a611f92565b61123384611f9c565b604051602001611244929190613bb8565b604051602081830303815290604052915050919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c87b56dd6112a861129a846000015161203c565b846020015161ffff1661207d565b6040518263ffffffff1660e01b81526004016112c691815260200190565b600060405180830381865afa1580156112e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261117a9190810190613be7565b600081815260096020526040812061098790612097565b60008281526008602052604090206001015461133d81611427565b6109c1838361198c565b6060600d80546109d590613a82565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16610acd5760008281526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790556113b43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600061117a836001600160a01b0384166120a1565b6000611418826120f0565b80610987575061098782612128565b610b298133612133565b6127106bffffffffffffffffffffffff821611156114d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610d91565b6001600160a01b038216611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610d91565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600b55565b60008054821080156109875750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b60006109876115de836119ae565b516121c2565b60006115ef82610fb5565b9050336001600160a01b038216146116415761160b813361094e565b611641576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b816116bf816121e6565b6109c183836115e4565b6117137fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b3077fd83ac62169e315c6fc3ecdb2c5b6ae75284053b2c2f2fb9fc715ba380283e9426122d1565b565b600061172082611c68565b9050836001600160a01b0316816001600160a01b03161461176d576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b038816909114176117d35761179d863361094e565b6117d3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611813576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611820868686600161231c565b801561182b57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600460205260408120919091557c0200000000000000000000000000000000000000000000000000000000841690036118ef576001840160008181526004602052604081205490036118ed5760005481146118ed5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b826001600160a01b038116331461195357611953336121e6565b6111ea848484611715565b6119688282611356565b60008281526009602052604090206109c190826113f8565b600d610acd8282613ca4565b6119968282612389565b60008281526009602052604090206109c1908261240c565b6040805180820190915260008082526020820152600e8264010000000081106119d9576119d9613b6f565b6040805180820190915291015460ff81168252610100900461ffff16602082015292915050565b606061117a838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250612421565b611a4c61252f565b600a805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6109c1838383604051806020016040528060008152506111bf565b826001600160a01b0381163314611acb57611acb336121e6565b6111ea848484611a96565b7f0000000000000000000000000000000000000000000000000000000000000000611b0060005490565b611b149067ffffffffffffffff8616613d64565b1115611b925782611b2460005490565b611b4e907f0000000000000000000000000000000000000000000000000000000000000000613d77565b6040517f81efb37f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90921660048301526024820152604401610d91565b6000611bd383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061259b92505050565b90508367ffffffffffffffff16815114611bef57611bef613d8a565b6000805490611bfc611ded565b905060005b8667ffffffffffffffff16811015611c5257611c4283611c2081613b9e565b9450858381518110611c3457611c34613b6f565b6020026020010151846125b1565b611c4b81613b9e565b9050611c01565b50611c5f878787876127bc565b50505050505050565b600081600054811015611ccf57600081815260046020526040812054907c010000000000000000000000000000000000000000000000000000000082169003611ccd575b8060000361117a575060001901600081815260046020526040902054611cac565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c910160405180910390a15050565b611d466127d0565b600a805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a793390565b600061117a838361283d565b611d8f613354565b50604080516101608101825260058152600660208201526007918101919091526008606082015260096080820152600a60a0820152600b60c0820152600c60e0820152600d610100820152600e610120820152600f61014082015290565b611df5613335565b604051806102a0016040528061025881526020016102588152602001610258815260200161032081526020016103e8815260200161025881526020016101c281526020016103e8815260200161010081526020016103e881526020016103e881526020016064815260200160648152602001606481526020016104678152602001604d8152602001606481526020016064815260200160c88152602001606481526020016064815250905090565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611f1a848484610b93565b6001600160a01b0383163b156111ea57611f3684848484612867565b6111ea576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0381163314611f8657611f86336121e6565b610fae85858585611f0f565b60606111a06129b2565b60606000611fa9836129bc565b600101905060008167ffffffffffffffff811115611fc957611fc9613624565b6040519080825280601f01601f191660200182016040528015611ff3576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611ffd57509392505050565b6000612047826121c2565b61205357612053613d8a565b61205b611d87565b8260ff16600b811061206f5761206f613b6f565b602002015160ff1692915050565b60008161208d620f424085613b04565b61117a9190613d64565b6000610987825490565b60008181526001830160205260408120546120e857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610987565b506000610987565b60006120fb82612a9e565b8061210a575061210a82612b7f565b80612119575061211982612128565b80610987575061098782612bd5565b600061098782612c6c565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16610acd5761216681612cc2565b612171836020612cd4565b604051602001612182929190613db9565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610d9191600401613472565b6000806121ce83610adb565b60018111156121df576121df6134f4565b1492915050565b6daaeb6d7670e522a718067333cd4e3b15610b29576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561226c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122909190613e3a565b610b29576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610d91565b600082815260086020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600a5460ff16156111d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f45524337323141436f6d6d6f6e3a2070617573656400000000000000000000006044820152606401610d91565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff1615610acd5760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061117a836001600160a01b038416612f17565b6060824710156124b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d91565b600080866001600160a01b031685876040516124cf9190613e57565b60006040518083038185875af1925050503d806000811461250c576040519150601f19603f3d011682016040523d82523d6000602084013e612511565b606091505b50915091506125228783838761300a565b925050505b949350505050565b600a5460ff16611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610d91565b6060818060200190518101906109879190613e73565b6125bd600a600b613b56565b60ff168260ff1610612600576040517f7a9d020a00000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610d91565b600064010000000e8360ff166015811061261c5761261c613b6f565b601091828204019190066002029054906101000a900461ffff169050818360ff166015811061264d5761264d613b6f565b60200201518161ffff1610612693576040517fd83adc3500000000000000000000000000000000000000000000000000000000815260ff84166004820152602401610d91565b61269e816001613f25565b64010000000e8460ff16601581106126b8576126b8613b6f565b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506126e6836121c2565b156127b1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615de5306127228661203c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201523060448201526064016020604051808303816000875af115801561278b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127af9190613f40565b505b6111ea84848361309d565b6111ea848467ffffffffffffffff1661311c565b600a5460ff1615611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d91565b600082600001828154811061285457612854613b6f565b9060005260206000200154905092915050565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081526000906001600160a01b0385169063150b7a02906128b5903390899088908890600401613f59565b6020604051808303816000875af19250505080156128f0575060408051601f3d908101601f191682019092526128ed91810190613f95565b60015b612967573d80801561291e576040519150601f19603f3d011682016040523d82523d6000602084013e612923565b606091505b50805160000361295f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612527565b60606111a0611347565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612a05577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612a31576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612a4f57662386f26fc10000830492506010015b6305f5e1008310612a67576305f5e100830492506008015b6127108310612a7b57612710830492506004015b60648310612a8d576064830492506002015b600a83106109875760010192915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480612b3157507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806109875750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480610987575061098782612128565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4906490600000000000000000000000000000000000000000000000000000000148061098757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610987565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f00000000000000000000000000000000000000000000000000000000148061098757506109878261325a565b60606109876001600160a01b03831660145b60606000612ce3836002613b04565b612cee906002613d64565b67ffffffffffffffff811115612d0657612d06613624565b6040519080825280601f01601f191660200182016040528015612d30576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612d6757612d67613b6f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612dca57612dca613b6f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612e06846002613b04565b612e11906001613d64565b90505b6001811115612eae577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612e5257612e52613b6f565b1a60f81b828281518110612e6857612e68613b6f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612ea781613fb2565b9050612e14565b50831561117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d91565b60008181526001830160205260408120548015613000576000612f3b600183613d77565b8554909150600090612f4f90600190613d77565b9050818114612fb4576000866000018281548110612f6f57612f6f613b6f565b9060005260206000200154905080876000018481548110612f9257612f92613b6f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612fc557612fc5613fc9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610987565b6000915050610987565b6060831561309357825160000361308c576001600160a01b0385163b61308c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d91565b5081612527565b61252783836132f1565b60405180604001604052808360ff1681526020018261ffff16815250600e8464010000000081106130d0576130d0613b6f565b82519101805460209093015161ffff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090931660ff90921691909117919091179055505050565b600080549082900361315a576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613167600084838561231c565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461321657808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016131de565b5081600003613251576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061098757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610987565b8151156133015781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d919190613472565b604051806102a001604052806015906020820280368337509192915050565b604051806101600160405280600b906020820280368337509192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b2957600080fd5b6000602082840312156133b357600080fd5b813561117a81613373565b80356001600160a01b03811681146133d557600080fd5b919050565b600080604083850312156133ed57600080fd5b6133f6836133be565b915060208301356bffffffffffffffffffffffff8116811461341757600080fd5b809150509250929050565b60005b8381101561343d578181015183820152602001613425565b50506000910152565b6000815180845261345e816020860160208601613422565b601f01601f19169290920160200192915050565b60208152600061117a6020830184613446565b60006020828403121561349757600080fd5b5035919050565b600080604083850312156134b157600080fd5b6134ba836133be565b946020939093013593505050565b60ff81168114610b2957600080fd5b6000602082840312156134e957600080fd5b813561117a816134c8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016002831061355e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6102a08101818360005b601581101561359157815161ffff1683526020928301929091019060010161356e565b50505092915050565b6000806000606084860312156135af57600080fd5b6135b8846133be565b92506135c6602085016133be565b9150604084013590509250925092565b600080604083850312156135e957600080fd5b50508035926020909101359150565b6000806040838503121561360b57600080fd5b8235915061361b602084016133be565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561367c5761367c613624565b604052919050565b600067ffffffffffffffff82111561369e5761369e613624565b50601f01601f191660200190565b60006136bf6136ba84613684565b613653565b90508281528383830111156136d357600080fd5b828260208301376000602084830101529392505050565b6000602082840312156136fc57600080fd5b813567ffffffffffffffff81111561371357600080fd5b8201601f8101841361372457600080fd5b610f18848235602084016136ac565b6020808252825182820181905260009190848201906040850190845b8181101561376b5783518352928401929184019160010161374f565b50909695505050505050565b60008083601f84011261378957600080fd5b50813567ffffffffffffffff8111156137a157600080fd5b602083019150836020828501011115610c8f57600080fd5b600080602083850312156137cc57600080fd5b823567ffffffffffffffff8111156137e357600080fd5b6137ef85828601613777565b90969095509350505050565b6000806000806060858703121561381157600080fd5b61381a856133be565b9350602085013567ffffffffffffffff808216821461383857600080fd5b9093506040860135908082111561384e57600080fd5b5061385b87828801613777565b95989497509550505050565b6000806020838503121561387a57600080fd5b823567ffffffffffffffff8082111561389257600080fd5b818501915085601f8301126138a657600080fd5b8135818111156138b557600080fd5b8660208260051b85010111156138ca57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613925578151805160ff16855286015161ffff168685015292840192908501906001016138f9565b5091979650505050505050565b60006020828403121561394457600080fd5b61117a826133be565b6101608101818360005b600b81101561359157815160ff16835260209283019290910190600101613957565b6102a08101818360005b6015811015613591578151835260209283019290910190600101613983565b8015158114610b2957600080fd5b600080604083850312156139c357600080fd5b6139cc836133be565b91506020830135613417816139a2565b600080600080608085870312156139f257600080fd5b6139fb856133be565b9350613a09602086016133be565b925060408501359150606085013567ffffffffffffffff811115613a2c57600080fd5b8501601f81018713613a3d57600080fd5b613a4c878235602084016136ac565b91505092959194509250565b60008060408385031215613a6b57600080fd5b613a74836133be565b915061361b602084016133be565b600181811c90821680613a9657607f821691505b602082108103613acf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761098757610987613ad5565b600082613b51577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60ff818116838216019081111561098757610987613ad5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006000198203613bb157613bb1613ad5565b5060010190565b60008351613bca818460208801613422565b835190830190613bde818360208801613422565b01949350505050565b600060208284031215613bf957600080fd5b815167ffffffffffffffff811115613c1057600080fd5b8201601f81018413613c2157600080fd5b8051613c2f6136ba82613684565b818152856020838501011115613c4457600080fd5b613c55826020830160208601613422565b95945050505050565b601f8211156109c157600081815260208120601f850160051c81016020861015613c855750805b601f850160051c820191505b8181101561193157828155600101613c91565b815167ffffffffffffffff811115613cbe57613cbe613624565b613cd281613ccc8454613a82565b84613c5e565b602080601f831160018114613d075760008415613cef5750858301515b600019600386901b1c1916600185901b178555611931565b600085815260208120601f198616915b82811015613d3657888601518255948401946001909101908401613d17565b5085821015613d545787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111561098757610987613ad5565b8181038181111561098757610987613ad5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613df1816017850160208801613422565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351613e2e816028840160208801613422565b01602801949350505050565b600060208284031215613e4c57600080fd5b815161117a816139a2565b60008251613e69818460208701613422565b9190910192915050565b60006020808385031215613e8657600080fd5b825167ffffffffffffffff80821115613e9e57600080fd5b818501915085601f830112613eb257600080fd5b815181811115613ec457613ec4613624565b8060051b9150613ed5848301613653565b8181529183018401918481019088841115613eef57600080fd5b938501935b83851015613f195784519250613f09836134c8565b8282529385019390850190613ef4565b98975050505050505050565b61ffff818116838216019080821115610f1b57610f1b613ad5565b600060208284031215613f5257600080fd5b5051919050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613f8b6080830184613446565b9695505050505050565b600060208284031215613fa757600080fd5b815161117a81613373565b600081613fc157613fc1613ad5565b506000190190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f72305c808cd44b353acdb31d572319381d9caea6827967a4faf2f208a59b7b264736f6c634300081100331e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7668747470733a2f2f6d657461646174612e70726f6f662e78797a2f6469616d6f6e642d65786869626974696f6e2f00000000000000000000000070c71b539bdcb5b59edd42a500fd95bdec96265000000000000000000000000032220f07dbcd18149f619f28cd09fd911cc0372d000000000000000000000000a468e2f92721afcbfc6d9b061b546b26b3656b420000000000000000000000001353fd9d3dc70d1a18149c8fb2adb4fb906de4e80000000000000000000000001353fd9d3dc70d1a18149c8fb2adb4fb906de4e8
Deployed Bytecode
0x6080604052600436106102fd5760003560e01c806342842e0e1161018f57806391d14854116100e1578063b88d4fde1161008a578063d547741f11610064578063d547741f146108fe578063d547cfb71461091e578063e985e9c51461093357600080fd5b8063b88d4fde146108ab578063c87b56dd146108be578063ca15c873146108de57600080fd5b80639aec8462116100bb5780639aec846214610854578063a217fddf14610876578063a22cb4651461088b57600080fd5b806391d14854146107d757806395d89b411461081d57806399ef3fcd1461083257600080fd5b80636352211e116101435780638222b7d71161011d5780638222b7d71461078d5780638456cb59146107a25780639010d07c146107b757600080fd5b80636352211e146107205780636d147a6d1461074057806370a082311461076d57600080fd5b80635ada5c55116101745780635ada5c55146106c15780635ba9341a146106d45780635c975abb1461070857600080fd5b806342842e0e1461067a57806351b1dbef1461068d57600080fd5b8063248a9ca31161025357806331c23d20116101fc5780633dcc23a0116101d65780633dcc23a0146106235780633f4ba83a1461064357806341f434341461065857600080fd5b806331c23d20146105a257806336568abe146105d657806337d05add146105f657600080fd5b80632e163d0c1161022d5780632e163d0c1461053b5780632f2ff15d1461056257806330176e131461058257600080fd5b8063248a9ca3146104985780632a55205a146104c85780632ab4d0521461050757600080fd5b80630dc3b909116102b55780631d23354a1161028f5780631d23354a1461044e5780631db721851461046357806323b872dd1461048557600080fd5b80630dc3b909146103c657806318160ddd146104085780631a3141ed1461042157600080fd5b806306fdde03116102e657806306fdde0314610359578063081812fc1461037b578063095ea7b3146103b357600080fd5b806301ffc9a71461030257806304634d8d14610337575b600080fd5b34801561030e57600080fd5b5061032261031d3660046133a1565b61097c565b60405190151581526020015b60405180910390f35b34801561034357600080fd5b506103576103523660046133da565b61098d565b005b34801561036557600080fd5b5061036e6109c6565b60405161032e9190613472565b34801561038757600080fd5b5061039b610396366004613485565b610a58565b6040516001600160a01b03909116815260200161032e565b6103576103c136600461349e565b610ab5565b3480156103d257600080fd5b506103fa7fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b30781565b60405190815260200161032e565b34801561041457600080fd5b50600154600054036103fa565b34801561042d57600080fd5b5061044161043c3660046134d7565b610adb565b60405161032e9190613523565b34801561045a57600080fd5b50610357610af7565b34801561046f57600080fd5b50610478610b2c565b60405161032e9190613564565b61035761049336600461359a565b610b93565b3480156104a457600080fd5b506103fa6104b3366004613485565b60009081526008602052604090206001015490565b3480156104d457600080fd5b506104e86104e33660046135d6565b610bb7565b604080516001600160a01b03909316835260208301919091520161032e565b34801561051357600080fd5b506103fa7f000000000000000000000000000000000000000000000000000000000000271a81565b34801561054757600080fd5b50610550610c96565b60405160ff909116815260200161032e565b34801561056e57600080fd5b5061035761057d3660046135f8565b610ca5565b34801561058e57600080fd5b5061035761059d3660046136ea565b610cca565b3480156105ae57600080fd5b506103fa7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7681565b3480156105e257600080fd5b506103576105f13660046135f8565b610cfd565b34801561060257600080fd5b506106166106113660046134d7565b610da4565b60405161032e9190613733565b34801561062f57600080fd5b5061036e61063e3660046137b9565b610e9c565b34801561064f57600080fd5b50610357610f22565b34801561066457600080fd5b5061039b6daaeb6d7670e522a718067333cd4e81565b61035761068836600461359a565b610f54565b34801561069957600080fd5b5061039b7f0000000000000000000000001353fd9d3dc70d1a18149c8fb2adb4fb906de4e881565b6103576106cf3660046137fb565b610f78565b3480156106e057600080fd5b5061039b7f0000000000000000000000001353fd9d3dc70d1a18149c8fb2adb4fb906de4e881565b34801561071457600080fd5b50600a5460ff16610322565b34801561072c57600080fd5b5061039b61073b366004613485565b610fb5565b34801561074c57600080fd5b5061076061075b366004613867565b610fc0565b60405161032e91906138dc565b34801561077957600080fd5b506103fa610788366004613932565b611087565b34801561079957600080fd5b506103576110ef565b3480156107ae57600080fd5b50610357611130565b3480156107c357600080fd5b5061039b6107d23660046135d6565b611162565b3480156107e357600080fd5b506103226107f23660046135f8565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561082957600080fd5b5061036e611181565b34801561083e57600080fd5b50610847611190565b60405161032e919061394d565b34801561086057600080fd5b506108696111a5565b60405161032e9190613979565b34801561088257600080fd5b506103fa600081565b34801561089757600080fd5b506103576108a63660046139b0565b6111b5565b6103576108b93660046139dc565b6111bf565b3480156108ca57600080fd5b5061036e6108d9366004613485565b6111f0565b3480156108ea57600080fd5b506103fa6108f9366004613485565b61130b565b34801561090a57600080fd5b506103576109193660046135f8565b611322565b34801561092a57600080fd5b5061036e611347565b34801561093f57600080fd5b5061032261094e366004613a58565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006109878261140d565b92915050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf766109b781611427565b6109c18383611431565b505050565b6060600280546109d590613a82565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0190613a82565b8015610a4e5780601f10610a2357610100808354040283529160200191610a4e565b820191906000526020600020905b815481529060010190602001808311610a3157829003601f168201915b5050505050905090565b6000610a6382611590565b610a99576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b610abe816115d0565b15610ad157610acd82826115e4565b5050565b610acd82826116b5565b6000600b60ff831610610aef576001610987565b600092915050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610b2181611427565b610b296116c9565b50565b610b34613335565b604080516102a08101918290529064010000000e90601590826000855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610b515790505050505050905090565b610b9c816115d0565b15610bac576109c1838383611715565b6109c1838383611939565b6000828152600c602090815260408083208151808301909252546001600160a01b038116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16928201929092528291610c58575060408051808201909152600b546001600160a01b03811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b602081015160009061271090610c7c906bffffffffffffffffffffffff1687613b04565b610c869190613b1b565b91519350909150505b9250929050565b610ca2600a600b613b56565b81565b600082815260086020526040902060010154610cc081611427565b6109c1838361195e565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610cf481611427565b610acd82611980565b6001600160a01b0381163314610d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610acd828261198c565b6060600064010000000e8360ff1660158110610dc257610dc2613b6f565b601091828204019190066002029054906101000a900461ffff1661ffff1667ffffffffffffffff811115610df857610df8613624565b604051908082528060200260200182016040528015610e21578160200160208202803683370190505b509050600080610e346001546000540390565b905060005b81811015610e92578560ff16610e4e826119ae565b5160ff1603610e8257808484610e6381613b9e565b955081518110610e7557610e75613b6f565b6020026020010181815250505b610e8b81613b9e565b9050610e39565b5091949350505050565b60607f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610ec881611427565b610f1884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506daaeb6d7670e522a718067333cd4e93925050611a009050565b91505b5092915050565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf76610f4c81611427565b610b29611a44565b610f5d816115d0565b15610f6d576109c1838383611a96565b6109c1838383611ab1565b7fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b307610fa281611427565b610fae85858585611ad6565b5050505050565b600061098782611c68565b606060008267ffffffffffffffff811115610fdd57610fdd613624565b60405190808252806020026020018201604052801561102257816020015b6040805180820190915260008082526020820152815260200190600190039081610ffb5790505b50905060005b8381101561107f5761105185858381811061104557611045613b6f565b905060200201356119ae565b82828151811061106357611063613b6f565b60200260200101819052508061107890613b9e565b9050611028565b509392505050565b60006001600160a01b0382166110c9576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7661111981611427565b610b29600061112b6001546000540390565b611d01565b7f1e4c11efbd6a865b1cba79eea33d1b33c1394d834190605ed6a14c71c480bf7661115a81611427565b610b29611d3e565b600082815260096020526040812061117a9083611d7b565b9392505050565b6060600380546109d590613a82565b611198613354565b6111a0611d87565b905090565b6111ad613335565b6111a0611ded565b610acd8282611ea3565b6111c8826115d0565b156111de576111d984848484611f0f565b6111ea565b6111ea84848484611f6c565b50505050565b606060006111fd836119ae565b90506001815161120c90610adb565b600181111561121d5761121d6134f4565b0361125b5761122a611f92565b61123384611f9c565b604051602001611244929190613bb8565b604051602081830303815290604052915050919050565b7f0000000000000000000000001353fd9d3dc70d1a18149c8fb2adb4fb906de4e86001600160a01b031663c87b56dd6112a861129a846000015161203c565b846020015161ffff1661207d565b6040518263ffffffff1660e01b81526004016112c691815260200190565b600060405180830381865afa1580156112e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261117a9190810190613be7565b600081815260096020526040812061098790612097565b60008281526008602052604090206001015461133d81611427565b6109c1838361198c565b6060600d80546109d590613a82565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16610acd5760008281526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790556113b43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600061117a836001600160a01b0384166120a1565b6000611418826120f0565b80610987575061098782612128565b610b298133612133565b6127106bffffffffffffffffffffffff821611156114d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610d91565b6001600160a01b038216611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610d91565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600b55565b60008054821080156109875750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b60006109876115de836119ae565b516121c2565b60006115ef82610fb5565b9050336001600160a01b038216146116415761160b813361094e565b611641576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b816116bf816121e6565b6109c183836115e4565b6117137fe0fb75b40f2731fce9fd08fd8e51c7db44b9ffb2e43369a2734fc1a121a6b3077fd83ac62169e315c6fc3ecdb2c5b6ae75284053b2c2f2fb9fc715ba380283e9426122d1565b565b600061172082611c68565b9050836001600160a01b0316816001600160a01b03161461176d576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b038816909114176117d35761179d863361094e565b6117d3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516611813576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611820868686600161231c565b801561182b57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600460205260408120919091557c0200000000000000000000000000000000000000000000000000000000841690036118ef576001840160008181526004602052604081205490036118ed5760005481146118ed5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b826001600160a01b038116331461195357611953336121e6565b6111ea848484611715565b6119688282611356565b60008281526009602052604090206109c190826113f8565b600d610acd8282613ca4565b6119968282612389565b60008281526009602052604090206109c1908261240c565b6040805180820190915260008082526020820152600e8264010000000081106119d9576119d9613b6f565b6040805180820190915291015460ff81168252610100900461ffff16602082015292915050565b606061117a838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250612421565b611a4c61252f565b600a805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6109c1838383604051806020016040528060008152506111bf565b826001600160a01b0381163314611acb57611acb336121e6565b6111ea848484611a96565b7f000000000000000000000000000000000000000000000000000000000000271a611b0060005490565b611b149067ffffffffffffffff8616613d64565b1115611b925782611b2460005490565b611b4e907f000000000000000000000000000000000000000000000000000000000000271a613d77565b6040517f81efb37f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90921660048301526024820152604401610d91565b6000611bd383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061259b92505050565b90508367ffffffffffffffff16815114611bef57611bef613d8a565b6000805490611bfc611ded565b905060005b8667ffffffffffffffff16811015611c5257611c4283611c2081613b9e565b9450858381518110611c3457611c34613b6f565b6020026020010151846125b1565b611c4b81613b9e565b9050611c01565b50611c5f878787876127bc565b50505050505050565b600081600054811015611ccf57600081815260046020526040812054907c010000000000000000000000000000000000000000000000000000000082169003611ccd575b8060000361117a575060001901600081815260046020526040902054611cac565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c910160405180910390a15050565b611d466127d0565b600a805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a793390565b600061117a838361283d565b611d8f613354565b50604080516101608101825260058152600660208201526007918101919091526008606082015260096080820152600a60a0820152600b60c0820152600c60e0820152600d610100820152600e610120820152600f61014082015290565b611df5613335565b604051806102a0016040528061025881526020016102588152602001610258815260200161032081526020016103e8815260200161025881526020016101c281526020016103e8815260200161010081526020016103e881526020016103e881526020016064815260200160648152602001606481526020016104678152602001604d8152602001606481526020016064815260200160c88152602001606481526020016064815250905090565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611f1a848484610b93565b6001600160a01b0383163b156111ea57611f3684848484612867565b6111ea576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0381163314611f8657611f86336121e6565b610fae85858585611f0f565b60606111a06129b2565b60606000611fa9836129bc565b600101905060008167ffffffffffffffff811115611fc957611fc9613624565b6040519080825280601f01601f191660200182016040528015611ff3576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611ffd57509392505050565b6000612047826121c2565b61205357612053613d8a565b61205b611d87565b8260ff16600b811061206f5761206f613b6f565b602002015160ff1692915050565b60008161208d620f424085613b04565b61117a9190613d64565b6000610987825490565b60008181526001830160205260408120546120e857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610987565b506000610987565b60006120fb82612a9e565b8061210a575061210a82612b7f565b80612119575061211982612128565b80610987575061098782612bd5565b600061098782612c6c565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16610acd5761216681612cc2565b612171836020612cd4565b604051602001612182929190613db9565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610d9191600401613472565b6000806121ce83610adb565b60018111156121df576121df6134f4565b1492915050565b6daaeb6d7670e522a718067333cd4e3b15610b29576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561226c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122909190613e3a565b610b29576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610d91565b600082815260086020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600a5460ff16156111d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f45524337323141436f6d6d6f6e3a2070617573656400000000000000000000006044820152606401610d91565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff1615610acd5760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061117a836001600160a01b038416612f17565b6060824710156124b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d91565b600080866001600160a01b031685876040516124cf9190613e57565b60006040518083038185875af1925050503d806000811461250c576040519150601f19603f3d011682016040523d82523d6000602084013e612511565b606091505b50915091506125228783838761300a565b925050505b949350505050565b600a5460ff16611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610d91565b6060818060200190518101906109879190613e73565b6125bd600a600b613b56565b60ff168260ff1610612600576040517f7a9d020a00000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610d91565b600064010000000e8360ff166015811061261c5761261c613b6f565b601091828204019190066002029054906101000a900461ffff169050818360ff166015811061264d5761264d613b6f565b60200201518161ffff1610612693576040517fd83adc3500000000000000000000000000000000000000000000000000000000815260ff84166004820152602401610d91565b61269e816001613f25565b64010000000e8460ff16601581106126b8576126b8613b6f565b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506126e6836121c2565b156127b1577f0000000000000000000000001353fd9d3dc70d1a18149c8fb2adb4fb906de4e86001600160a01b0316615de5306127228661203c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201523060448201526064016020604051808303816000875af115801561278b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127af9190613f40565b505b6111ea84848361309d565b6111ea848467ffffffffffffffff1661311c565b600a5460ff1615611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610d91565b600082600001828154811061285457612854613b6f565b9060005260206000200154905092915050565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081526000906001600160a01b0385169063150b7a02906128b5903390899088908890600401613f59565b6020604051808303816000875af19250505080156128f0575060408051601f3d908101601f191682019092526128ed91810190613f95565b60015b612967573d80801561291e576040519150601f19603f3d011682016040523d82523d6000602084013e612923565b606091505b50805160000361295f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612527565b60606111a0611347565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612a05577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612a31576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612a4f57662386f26fc10000830492506010015b6305f5e1008310612a67576305f5e100830492506008015b6127108310612a7b57612710830492506004015b60648310612a8d576064830492506002015b600a83106109875760010192915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480612b3157507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806109875750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480610987575061098782612128565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4906490600000000000000000000000000000000000000000000000000000000148061098757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610987565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f00000000000000000000000000000000000000000000000000000000148061098757506109878261325a565b60606109876001600160a01b03831660145b60606000612ce3836002613b04565b612cee906002613d64565b67ffffffffffffffff811115612d0657612d06613624565b6040519080825280601f01601f191660200182016040528015612d30576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612d6757612d67613b6f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612dca57612dca613b6f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612e06846002613b04565b612e11906001613d64565b90505b6001811115612eae577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612e5257612e52613b6f565b1a60f81b828281518110612e6857612e68613b6f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612ea781613fb2565b9050612e14565b50831561117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d91565b60008181526001830160205260408120548015613000576000612f3b600183613d77565b8554909150600090612f4f90600190613d77565b9050818114612fb4576000866000018281548110612f6f57612f6f613b6f565b9060005260206000200154905080876000018481548110612f9257612f92613b6f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612fc557612fc5613fc9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610987565b6000915050610987565b6060831561309357825160000361308c576001600160a01b0385163b61308c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d91565b5081612527565b61252783836132f1565b60405180604001604052808360ff1681526020018261ffff16815250600e8464010000000081106130d0576130d0613b6f565b82519101805460209093015161ffff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090931660ff90921691909117919091179055505050565b600080549082900361315a576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613167600084838561231c565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461321657808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016131de565b5081600003613251576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061098757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610987565b8151156133015781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d919190613472565b604051806102a001604052806015906020820280368337509192915050565b604051806101600160405280600b906020820280368337509192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b2957600080fd5b6000602082840312156133b357600080fd5b813561117a81613373565b80356001600160a01b03811681146133d557600080fd5b919050565b600080604083850312156133ed57600080fd5b6133f6836133be565b915060208301356bffffffffffffffffffffffff8116811461341757600080fd5b809150509250929050565b60005b8381101561343d578181015183820152602001613425565b50506000910152565b6000815180845261345e816020860160208601613422565b601f01601f19169290920160200192915050565b60208152600061117a6020830184613446565b60006020828403121561349757600080fd5b5035919050565b600080604083850312156134b157600080fd5b6134ba836133be565b946020939093013593505050565b60ff81168114610b2957600080fd5b6000602082840312156134e957600080fd5b813561117a816134c8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016002831061355e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6102a08101818360005b601581101561359157815161ffff1683526020928301929091019060010161356e565b50505092915050565b6000806000606084860312156135af57600080fd5b6135b8846133be565b92506135c6602085016133be565b9150604084013590509250925092565b600080604083850312156135e957600080fd5b50508035926020909101359150565b6000806040838503121561360b57600080fd5b8235915061361b602084016133be565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561367c5761367c613624565b604052919050565b600067ffffffffffffffff82111561369e5761369e613624565b50601f01601f191660200190565b60006136bf6136ba84613684565b613653565b90508281528383830111156136d357600080fd5b828260208301376000602084830101529392505050565b6000602082840312156136fc57600080fd5b813567ffffffffffffffff81111561371357600080fd5b8201601f8101841361372457600080fd5b610f18848235602084016136ac565b6020808252825182820181905260009190848201906040850190845b8181101561376b5783518352928401929184019160010161374f565b50909695505050505050565b60008083601f84011261378957600080fd5b50813567ffffffffffffffff8111156137a157600080fd5b602083019150836020828501011115610c8f57600080fd5b600080602083850312156137cc57600080fd5b823567ffffffffffffffff8111156137e357600080fd5b6137ef85828601613777565b90969095509350505050565b6000806000806060858703121561381157600080fd5b61381a856133be565b9350602085013567ffffffffffffffff808216821461383857600080fd5b9093506040860135908082111561384e57600080fd5b5061385b87828801613777565b95989497509550505050565b6000806020838503121561387a57600080fd5b823567ffffffffffffffff8082111561389257600080fd5b818501915085601f8301126138a657600080fd5b8135818111156138b557600080fd5b8660208260051b85010111156138ca57600080fd5b60209290920196919550909350505050565b602080825282518282018190526000919060409081850190868401855b82811015613925578151805160ff16855286015161ffff168685015292840192908501906001016138f9565b5091979650505050505050565b60006020828403121561394457600080fd5b61117a826133be565b6101608101818360005b600b81101561359157815160ff16835260209283019290910190600101613957565b6102a08101818360005b6015811015613591578151835260209283019290910190600101613983565b8015158114610b2957600080fd5b600080604083850312156139c357600080fd5b6139cc836133be565b91506020830135613417816139a2565b600080600080608085870312156139f257600080fd5b6139fb856133be565b9350613a09602086016133be565b925060408501359150606085013567ffffffffffffffff811115613a2c57600080fd5b8501601f81018713613a3d57600080fd5b613a4c878235602084016136ac565b91505092959194509250565b60008060408385031215613a6b57600080fd5b613a74836133be565b915061361b602084016133be565b600181811c90821680613a9657607f821691505b602082108103613acf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761098757610987613ad5565b600082613b51577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60ff818116838216019081111561098757610987613ad5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006000198203613bb157613bb1613ad5565b5060010190565b60008351613bca818460208801613422565b835190830190613bde818360208801613422565b01949350505050565b600060208284031215613bf957600080fd5b815167ffffffffffffffff811115613c1057600080fd5b8201601f81018413613c2157600080fd5b8051613c2f6136ba82613684565b818152856020838501011115613c4457600080fd5b613c55826020830160208601613422565b95945050505050565b601f8211156109c157600081815260208120601f850160051c81016020861015613c855750805b601f850160051c820191505b8181101561193157828155600101613c91565b815167ffffffffffffffff811115613cbe57613cbe613624565b613cd281613ccc8454613a82565b84613c5e565b602080601f831160018114613d075760008415613cef5750858301515b600019600386901b1c1916600185901b178555611931565b600085815260208120601f198616915b82811015613d3657888601518255948401946001909101908401613d17565b5085821015613d545787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111561098757610987613ad5565b8181038181111561098757610987613ad5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613df1816017850160208801613422565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351613e2e816028840160208801613422565b01602801949350505050565b600060208284031215613e4c57600080fd5b815161117a816139a2565b60008251613e69818460208701613422565b9190910192915050565b60006020808385031215613e8657600080fd5b825167ffffffffffffffff80821115613e9e57600080fd5b818501915085601f830112613eb257600080fd5b815181811115613ec457613ec4613624565b8060051b9150613ed5848301613653565b8181529183018401918481019088841115613eef57600080fd5b938501935b83851015613f195784519250613f09836134c8565b8282529385019390850190613ef4565b98975050505050505050565b61ffff818116838216019080821115610f1b57610f1b613ad5565b600060208284031215613f5257600080fd5b5051919050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613f8b6080830184613446565b9695505050505050565b600060208284031215613fa757600080fd5b815161117a81613373565b600081613fc157613fc1613ad5565b506000190190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f72305c808cd44b353acdb31d572319381d9caea6827967a4faf2f208a59b7b264736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000070c71b539bdcb5b59edd42a500fd95bdec96265000000000000000000000000032220f07dbcd18149f619f28cd09fd911cc0372d000000000000000000000000a468e2f92721afcbfc6d9b061b546b26b3656b420000000000000000000000001353fd9d3dc70d1a18149c8fb2adb4fb906de4e80000000000000000000000001353fd9d3dc70d1a18149c8fb2adb4fb906de4e8
-----Decoded View---------------
Arg [0] : params (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000070c71b539bdcb5b59edd42a500fd95bdec962650
Arg [1] : 00000000000000000000000032220f07dbcd18149f619f28cd09fd911cc0372d
Arg [2] : 000000000000000000000000a468e2f92721afcbfc6d9b061b546b26b3656b42
Arg [3] : 0000000000000000000000001353fd9d3dc70d1a18149c8fb2adb4fb906de4e8
Arg [4] : 0000000000000000000000001353fd9d3dc70d1a18149c8fb2adb4fb906de4e8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.