ERC-721
Overview
Max Total Supply
219 GFC3D
Holders
65
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 GFC3DLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GFC3D
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-29 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // 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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // 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); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // 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); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @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); } // File: erc721a/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/GFC3d.sol // // ************ ********* ********** // ** ** ** // ** ** ** // ** ***** ********* ** // ** ** ** ** // ** ** ** ** // ************ ** ********** pragma solidity >=0.8.9 <0.9.0; contract GFC3D is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; bytes32 public merkleRoot; mapping(address => bool) public freeMintClaimed; mapping(address => bool) public whitelistMintClaimed; mapping(address => bool) public publicMintClaimed; mapping(address => uint256) public specialMintBalance; string public uriPrefix = '';//this is baseuri string public uriSuffix = '.json'; string public hiddenMetadataUri; uint256 public cost; uint256 public maxSupply; uint256 public capWhitelist; uint256 public capPublic; uint256 public capFreemint; bool public publicMintEnabled = false; bool public whitelistMintEnabled = false; bool public revealed = false; bool public freeMintEnabled = false; bool public specialMintEnabled = false; event IsContractChanged(bool _ischanged); constructor( string memory _tokenName, string memory _tokenSymbol, uint256 _cost, uint256 _maxSupply, uint256 _capWhitelist, uint256 _capPublic, uint256 _capFreemint, string memory _hiddenMetadataUri ) ERC721A(_tokenName, _tokenSymbol) { cost = _cost;//*10^18=_ether maxSupply = _maxSupply; capWhitelist = _capWhitelist; capPublic = _capPublic; capFreemint = _capFreemint; setHiddenMetadataUri(_hiddenMetadataUri); } ///////////////////////////// modifier mintCompliance(uint256 _mintAmount) { require(totalSupply() + _mintAmount <= maxSupply, 'Sold out'); _; } modifier mintPriceCompliance(uint256 _mintAmount) { require(msg.value >= cost * _mintAmount, 'Insufficient funds'); _; } /// whitelistmint & publicmint ////////////////////////////////////////////////////////////////////////////////////////// function whitelistMint(uint256 _mintAmount, bytes32[] calldata _merkleProof) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) { require(whitelistMintEnabled, 'Not Ready'); require(_mintAmount <= capWhitelist,'Amount Limit'); require(!whitelistMintClaimed[_msgSender()], 'Address already claimed!'); bytes32 leaf = keccak256(abi.encodePacked(_msgSender())); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), 'Not Whitelist'); _safeMint(_msgSender(), _mintAmount); whitelistMintClaimed[_msgSender()] = true; } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) { require(publicMintEnabled, 'Not Ready'); require(_mintAmount <= capPublic,'Amount Limit'); require(!publicMintClaimed[_msgSender()], 'Address already claimed!'); _safeMint(_msgSender(), _mintAmount); publicMintClaimed[_msgSender()] = true; } // Spare function specialMint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) { require(specialMintEnabled, 'Not Ready'); require(_mintAmount <= capPublic,'Amount Limit'); require(_mintAmount > 0 && specialMintBalance[_msgSender()] + _mintAmount <= capPublic,'Amount Limit'); _safeMint(_msgSender(), _mintAmount); specialMintBalance[_msgSender()] += _mintAmount; } ///For marketing etc//////////////////////////// function reserve(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _safeMint(_receiver, _mintAmount); } function freeMint(uint256 _mintAmount, bytes32[] calldata _merkleProof) public payable mintCompliance(_mintAmount) { require(freeMintEnabled, 'Not Ready'); require(!freeMintClaimed[_msgSender()], 'Address already claimed!'); require(_mintAmount <= capFreemint,'Amount Limit'); bytes32 leaf = keccak256(abi.encodePacked(_msgSender())); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), 'Not freemint address'); _safeMint(_msgSender(), _mintAmount); freeMintClaimed[_msgSender()] = true; } ////////////////// function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = _startTokenId(); uint256 ownedTokenIndex = 0; address latestOwnerAddress; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { TokenOwnership memory ownership = _ownerships[currentTokenId]; if (!ownership.burned && ownership.addr != address(0)) { latestOwnerAddress = ownership.addr; } if (latestOwnerAddress == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function _startTokenId() internal view virtual override returns (uint256) { return 1; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), 'ERC721Metadata: URI query for nonexistent token'); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ''; } //// only owner//////////////////////////////////////////////////////////////////////////////////// function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner { merkleRoot = _merkleRoot; } function verifyMerkle(bytes32[] calldata _merkleProof) public view { bytes32 leaf = keccak256(abi.encodePacked(_msgSender())); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), 'Invalid proof!'); } function setcapWhitelist(uint256 _capWhitelist) public onlyOwner { capWhitelist = _capWhitelist; } function setcapPubliclist(uint256 _capPublic) public onlyOwner { capPublic = _capPublic; } function setcapFreemint(uint256 _capFreemint) public onlyOwner { capFreemint = _capFreemint; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setpublicMintEnabled(bool _state) public onlyOwner { publicMintEnabled = _state; } function setWhitelistMintEnabled(bool _state) public onlyOwner { whitelistMintEnabled = _state; } function setspecialMintEnabled(bool _state) public onlyOwner { specialMintEnabled = _state; } function setfreeMintEnabled(bool _state) public onlyOwner { freeMintEnabled = _state; } function withdraw() public onlyOwner nonReentrant { (bool hs, ) = payable(0x03dc407E7818e803e835F5d6abA950f297d77642).call{value: address(this).balance * 25 / 100}(''); require(hs); (bool os, ) = payable(owner()).call{value: address(this).balance}(''); require(os); } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_capWhitelist","type":"uint256"},{"internalType":"uint256","name":"_capPublic","type":"uint256"},{"internalType":"uint256","name":"_capFreemint","type":"uint256"},{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","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":"bool","name":"_ischanged","type":"bool"}],"name":"IsContractChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capFreemint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeMintClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicMintClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelistMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_capFreemint","type":"uint256"}],"name":"setcapFreemint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_capPublic","type":"uint256"}],"name":"setcapPubliclist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_capWhitelist","type":"uint256"}],"name":"setcapWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setfreeMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setpublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setspecialMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"specialMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"specialMintBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"specialMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"verifyMerkle","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistMintClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600f90805190602001906200002b92919062000396565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601090805190602001906200007992919062000396565b506000601760006101000a81548160ff0219169083151502179055506000601760016101000a81548160ff0219169083151502179055506000601760026101000a81548160ff0219169083151502179055506000601760036101000a81548160ff0219169083151502179055506000601760046101000a81548160ff0219169083151502179055503480156200010e57600080fd5b506040516200603e3803806200603e83398181016040528101906200013491906200061e565b878781600290805190602001906200014e92919062000396565b5080600390805190602001906200016792919062000396565b5062000178620001ea60201b60201c565b6000819055505050620001a062000194620001f360201b60201c565b620001fb60201b60201c565b60016009819055508560128190555084601381905550836014819055508260158190555081601681905550620001dc81620002c160201b60201c565b50505050505050506200082b565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002d1620001f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002f76200036c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200034790620007a5565b60405180910390fd5b80601190805190602001906200036892919062000396565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003a490620007f6565b90600052602060002090601f016020900481019282620003c8576000855562000414565b82601f10620003e357805160ff191683800117855562000414565b8280016001018555821562000414579182015b8281111562000413578251825591602001919060010190620003f6565b5b50905062000423919062000427565b5090565b5b808211156200044257600081600090555060010162000428565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004af8262000464565b810181811067ffffffffffffffff82111715620004d157620004d062000475565b5b80604052505050565b6000620004e662000446565b9050620004f48282620004a4565b919050565b600067ffffffffffffffff82111562000517576200051662000475565b5b620005228262000464565b9050602081019050919050565b60005b838110156200054f57808201518184015260208101905062000532565b838111156200055f576000848401525b50505050565b60006200057c6200057684620004f9565b620004da565b9050828152602081018484840111156200059b576200059a6200045f565b5b620005a88482856200052f565b509392505050565b600082601f830112620005c857620005c76200045a565b5b8151620005da84826020860162000565565b91505092915050565b6000819050919050565b620005f881620005e3565b81146200060457600080fd5b50565b6000815190506200061881620005ed565b92915050565b600080600080600080600080610100898b03121562000642576200064162000450565b5b600089015167ffffffffffffffff81111562000663576200066262000455565b5b620006718b828c01620005b0565b985050602089015167ffffffffffffffff81111562000695576200069462000455565b5b620006a38b828c01620005b0565b9750506040620006b68b828c0162000607565b9650506060620006c98b828c0162000607565b9550506080620006dc8b828c0162000607565b94505060a0620006ef8b828c0162000607565b93505060c0620007028b828c0162000607565b92505060e089015167ffffffffffffffff81111562000726576200072562000455565b5b620007348b828c01620005b0565b9150509295985092959890939650565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200078d60208362000744565b91506200079a8262000755565b602082019050919050565b60006020820190508181036000830152620007c0816200077e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200080f57607f821691505b602082108103620008255762000824620007c7565b5b50919050565b615803806200083b6000396000f3fe60806040526004361061036b5760003560e01c806370a08231116101c6578063b88d4fde116100f7578063e0ec7c3611610095578063eb824f601161006f578063eb824f6014610c56578063f2fde38b14610c7f578063f7b7c28e14610ca8578063f7cb9e5414610cd35761036b565b8063e0ec7c3614610bc0578063e2f36dce14610bfd578063e985e9c514610c195761036b565b8063d2cab056116100d1578063d2cab05614610b25578063d5abeb0114610b41578063d5e13d6514610b6c578063e0a8085314610b975761036b565b8063b88d4fde14610a94578063c87b56dd14610abd578063cb4e832614610afa5761036b565b80638da5cb5b11610164578063a0712d681161013e578063a0712d68146109fb578063a22cb46514610a17578063a45ba8e714610a40578063b767a09814610a6b5761036b565b80638da5cb5b1461097c5780638fca32d8146109a757806395d89b41146109d05761036b565b806376e5ae4f116101a057806376e5ae4f146108c25780637cb64759146108ff5780637ec4a659146109285780637f602f33146109515761036b565b806370a0823114610845578063715018a614610882578063764f735b146108995761036b565b80633ccfd60b116102a05780635503a0e81161023e57806362ad68aa1161021857806362ad68aa1461078757806362b99ad4146107b25780636352211e146107dd5780636caede3d1461081a5761036b565b80635503a0e814610703578063575104921461072e5780635f051be51461074a5761036b565b8063438b63001161027a578063438b63001461064957806344a0d68a146106865780634fdd43cb146106af57806351830227146106d85761036b565b80633ccfd60b146105e057806342842e0e146105f7578063434a2bee146106205761036b565b806313faede61161030d57806323b872dd116102e757806323b872dd1461053a57806326745cb7146105635780632e170b511461058c5780632eb4a7ab146105b55761036b565b806313faede6146104bb57806316ba10e0146104e657806318160ddd1461050f5761036b565b806306fdde031161034957806306fdde03146103ff578063081812fc1461042a578063095ea7b3146104675780630f4161aa146104905761036b565b8063016ac5401461037057806301ffc9a71461039957806303339bcb146103d6575b600080fd5b34801561037c57600080fd5b5061039760048036038101906103929190614421565b610d10565b005b3480156103a557600080fd5b506103c060048036038101906103bb91906144a6565b610da9565b6040516103cd91906144e2565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190614591565b610e8b565b005b34801561040b57600080fd5b50610414610f6e565b604051610421919061466a565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c919061468c565b611000565b60405161045e91906146c8565b60405180910390f35b34801561047357600080fd5b5061048e600480360381019061048991906146e3565b61107c565b005b34801561049c57600080fd5b506104a5611186565b6040516104b291906144e2565b60405180910390f35b3480156104c757600080fd5b506104d0611199565b6040516104dd9190614732565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190614882565b61119f565b005b34801561051b57600080fd5b50610524611235565b6040516105319190614732565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c91906148cb565b61124c565b005b34801561056f57600080fd5b5061058a6004803603810190610585919061468c565b61125c565b005b34801561059857600080fd5b506105b360048036038101906105ae9190614421565b6112e2565b005b3480156105c157600080fd5b506105ca61137b565b6040516105d79190614937565b60405180910390f35b3480156105ec57600080fd5b506105f5611381565b005b34801561060357600080fd5b5061061e600480360381019061061991906148cb565b611575565b005b34801561062c57600080fd5b506106476004803603810190610642919061468c565b611595565b005b34801561065557600080fd5b50610670600480360381019061066b9190614952565b61161b565b60405161067d9190614a3d565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a8919061468c565b611835565b005b3480156106bb57600080fd5b506106d660048036038101906106d19190614882565b6118bb565b005b3480156106e457600080fd5b506106ed611951565b6040516106fa91906144e2565b60405180910390f35b34801561070f57600080fd5b50610718611964565b604051610725919061466a565b60405180910390f35b6107486004803603810190610743919061468c565b6119f2565b005b34801561075657600080fd5b50610771600480360381019061076c9190614952565b611c44565b60405161077e9190614732565b60405180910390f35b34801561079357600080fd5b5061079c611c5c565b6040516107a991906144e2565b60405180910390f35b3480156107be57600080fd5b506107c7611c6f565b6040516107d4919061466a565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff919061468c565b611cfd565b60405161081191906146c8565b60405180910390f35b34801561082657600080fd5b5061082f611d13565b60405161083c91906144e2565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190614952565b611d26565b6040516108799190614732565b60405180910390f35b34801561088e57600080fd5b50610897611df5565b005b3480156108a557600080fd5b506108c060048036038101906108bb919061468c565b611e7d565b005b3480156108ce57600080fd5b506108e960048036038101906108e49190614952565b611f03565b6040516108f691906144e2565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190614a8b565b611f23565b005b34801561093457600080fd5b5061094f600480360381019061094a9190614882565b611fa9565b005b34801561095d57600080fd5b5061096661203f565b6040516109739190614732565b60405180910390f35b34801561098857600080fd5b50610991612045565b60405161099e91906146c8565b60405180910390f35b3480156109b357600080fd5b506109ce60048036038101906109c99190614421565b61206f565b005b3480156109dc57600080fd5b506109e5612108565b6040516109f2919061466a565b60405180910390f35b610a156004803603810190610a10919061468c565b61219a565b005b348015610a2357600080fd5b50610a3e6004803603810190610a399190614ab8565b6123e0565b005b348015610a4c57600080fd5b50610a55612557565b604051610a62919061466a565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d9190614421565b6125e5565b005b348015610aa057600080fd5b50610abb6004803603810190610ab69190614b99565b61267e565b005b348015610ac957600080fd5b50610ae46004803603810190610adf919061468c565b6126fa565b604051610af1919061466a565b60405180910390f35b348015610b0657600080fd5b50610b0f612852565b604051610b1c9190614732565b60405180910390f35b610b3f6004803603810190610b3a9190614c7c565b612858565b005b348015610b4d57600080fd5b50610b56612b60565b604051610b639190614732565b60405180910390f35b348015610b7857600080fd5b50610b81612b66565b604051610b8e9190614732565b60405180910390f35b348015610ba357600080fd5b50610bbe6004803603810190610bb99190614421565b612b6c565b005b348015610bcc57600080fd5b50610be76004803603810190610be29190614952565b612c05565b604051610bf491906144e2565b60405180910390f35b610c176004803603810190610c129190614c7c565b612c25565b005b348015610c2557600080fd5b50610c406004803603810190610c3b9190614cdc565b612edb565b604051610c4d91906144e2565b60405180910390f35b348015610c6257600080fd5b50610c7d6004803603810190610c789190614d1c565b612f6f565b005b348015610c8b57600080fd5b50610ca66004803603810190610ca19190614952565b613033565b005b348015610cb457600080fd5b50610cbd61312a565b604051610cca91906144e2565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf59190614952565b61313d565b604051610d0791906144e2565b60405180910390f35b610d1861315d565b73ffffffffffffffffffffffffffffffffffffffff16610d36612045565b73ffffffffffffffffffffffffffffffffffffffff1614610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390614db5565b60405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e7457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e845750610e8382613165565b5b9050919050565b8160135481610e98611235565b610ea29190614e04565b1115610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda90614ea6565b60405180910390fd5b610eeb61315d565b73ffffffffffffffffffffffffffffffffffffffff16610f09612045565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690614db5565b60405180910390fd5b610f6982846131cf565b505050565b606060028054610f7d90614ef5565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa990614ef5565b8015610ff65780601f10610fcb57610100808354040283529160200191610ff6565b820191906000526020600020905b815481529060010190602001808311610fd957829003601f168201915b5050505050905090565b600061100b826131ed565b611041576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061108782611cfd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110ee576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661110d61315d565b73ffffffffffffffffffffffffffffffffffffffff161415801561113f575061113d8161113861315d565b612edb565b155b15611176576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61118183838361323b565b505050565b601760009054906101000a900460ff1681565b60125481565b6111a761315d565b73ffffffffffffffffffffffffffffffffffffffff166111c5612045565b73ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290614db5565b60405180910390fd5b80601090805190602001906112319291906142ef565b5050565b600061123f6132ed565b6001546000540303905090565b6112578383836132f6565b505050565b61126461315d565b73ffffffffffffffffffffffffffffffffffffffff16611282612045565b73ffffffffffffffffffffffffffffffffffffffff16146112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90614db5565b60405180910390fd5b8060158190555050565b6112ea61315d565b73ffffffffffffffffffffffffffffffffffffffff16611308612045565b73ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135590614db5565b60405180910390fd5b80601760036101000a81548160ff02191690831515021790555050565b600a5481565b61138961315d565b73ffffffffffffffffffffffffffffffffffffffff166113a7612045565b73ffffffffffffffffffffffffffffffffffffffff16146113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f490614db5565b60405180910390fd5b600260095403611442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143990614f72565b60405180910390fd5b600260098190555060007303dc407e7818e803e835f5d6aba950f297d7764273ffffffffffffffffffffffffffffffffffffffff1660646019476114869190614f92565b611490919061501b565b60405161149c9061507d565b60006040518083038185875af1925050503d80600081146114d9576040519150601f19603f3d011682016040523d82523d6000602084013e6114de565b606091505b50509050806114ec57600080fd5b60006114f6612045565b73ffffffffffffffffffffffffffffffffffffffff16476040516115199061507d565b60006040518083038185875af1925050503d8060008114611556576040519150601f19603f3d011682016040523d82523d6000602084013e61155b565b606091505b505090508061156957600080fd5b50506001600981905550565b6115908383836040518060200160405280600081525061267e565b505050565b61159d61315d565b73ffffffffffffffffffffffffffffffffffffffff166115bb612045565b73ffffffffffffffffffffffffffffffffffffffff1614611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890614db5565b60405180910390fd5b8060148190555050565b6060600061162883611d26565b905060008167ffffffffffffffff81111561164657611645614757565b5b6040519080825280602002602001820160405280156116745781602001602082028036833780820191505090505b50905060006116816132ed565b90506000805b848210801561169857506013548311155b15611828576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001511580156117a55750600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614155b156117b257806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361181457838584815181106117f9576117f8615092565b5b6020026020010181815250508280611810906150c1565b9350505b838061181f906150c1565b94505050611687565b8395505050505050919050565b61183d61315d565b73ffffffffffffffffffffffffffffffffffffffff1661185b612045565b73ffffffffffffffffffffffffffffffffffffffff16146118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890614db5565b60405180910390fd5b8060128190555050565b6118c361315d565b73ffffffffffffffffffffffffffffffffffffffff166118e1612045565b73ffffffffffffffffffffffffffffffffffffffff1614611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614db5565b60405180910390fd5b806011908051906020019061194d9291906142ef565b5050565b601760029054906101000a900460ff1681565b6010805461197190614ef5565b80601f016020809104026020016040519081016040528092919081815260200182805461199d90614ef5565b80156119ea5780601f106119bf576101008083540402835291602001916119ea565b820191906000526020600020905b8154815290600101906020018083116119cd57829003601f168201915b505050505081565b80601354816119ff611235565b611a099190614e04565b1115611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190614ea6565b60405180910390fd5b8180601254611a599190614f92565b341015611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290615155565b60405180910390fd5b601760049054906101000a900460ff16611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae1906151c1565b60405180910390fd5b601554831115611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b269061522d565b60405180910390fd5b600083118015611b92575060155483600e6000611b4a61315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b8f9190614e04565b11155b611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc89061522d565b60405180910390fd5b611be2611bdc61315d565b846131cf565b82600e6000611bef61315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c389190614e04565b92505081905550505050565b600e6020528060005260406000206000915090505481565b601760039054906101000a900460ff1681565b600f8054611c7c90614ef5565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca890614ef5565b8015611cf55780601f10611cca57610100808354040283529160200191611cf5565b820191906000526020600020905b815481529060010190602001808311611cd857829003601f168201915b505050505081565b6000611d08826137aa565b600001519050919050565b601760019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d8d576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611dfd61315d565b73ffffffffffffffffffffffffffffffffffffffff16611e1b612045565b73ffffffffffffffffffffffffffffffffffffffff1614611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890614db5565b60405180910390fd5b611e7b6000613a39565b565b611e8561315d565b73ffffffffffffffffffffffffffffffffffffffff16611ea3612045565b73ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090614db5565b60405180910390fd5b8060168190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b611f2b61315d565b73ffffffffffffffffffffffffffffffffffffffff16611f49612045565b73ffffffffffffffffffffffffffffffffffffffff1614611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614db5565b60405180910390fd5b80600a8190555050565b611fb161315d565b73ffffffffffffffffffffffffffffffffffffffff16611fcf612045565b73ffffffffffffffffffffffffffffffffffffffff1614612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c90614db5565b60405180910390fd5b80600f908051906020019061203b9291906142ef565b5050565b60165481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61207761315d565b73ffffffffffffffffffffffffffffffffffffffff16612095612045565b73ffffffffffffffffffffffffffffffffffffffff16146120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290614db5565b60405180910390fd5b80601760046101000a81548160ff02191690831515021790555050565b60606003805461211790614ef5565b80601f016020809104026020016040519081016040528092919081815260200182805461214390614ef5565b80156121905780601f1061216557610100808354040283529160200191612190565b820191906000526020600020905b81548152906001019060200180831161217357829003601f168201915b5050505050905090565b80601354816121a7611235565b6121b19190614e04565b11156121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e990614ea6565b60405180910390fd5b81806012546122019190614f92565b341015612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90615155565b60405180910390fd5b601760009054906101000a900460ff16612292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612289906151c1565b60405180910390fd5b6015548311156122d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ce9061522d565b60405180910390fd5b600d60006122e361315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561236b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236290615299565b60405180910390fd5b61237c61237661315d565b846131cf565b6001600d600061238a61315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6123e861315d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244c576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061245961315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661250661315d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161254b91906144e2565b60405180910390a35050565b6011805461256490614ef5565b80601f016020809104026020016040519081016040528092919081815260200182805461259090614ef5565b80156125dd5780601f106125b2576101008083540402835291602001916125dd565b820191906000526020600020905b8154815290600101906020018083116125c057829003601f168201915b505050505081565b6125ed61315d565b73ffffffffffffffffffffffffffffffffffffffff1661260b612045565b73ffffffffffffffffffffffffffffffffffffffff1614612661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265890614db5565b60405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b6126898484846132f6565b6126a88373ffffffffffffffffffffffffffffffffffffffff16613aff565b80156126bd57506126bb84848484613b22565b155b156126f4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060612705826131ed565b612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b9061532b565b60405180910390fd5b60001515601760029054906101000a900460ff161515036127f1576011805461276c90614ef5565b80601f016020809104026020016040519081016040528092919081815260200182805461279890614ef5565b80156127e55780601f106127ba576101008083540402835291602001916127e5565b820191906000526020600020905b8154815290600101906020018083116127c857829003601f168201915b5050505050905061284d565b60006127fb613c72565b9050600081511161281b5760405180602001604052806000815250612849565b8061282584613d04565b60106040516020016128399392919061541b565b6040516020818303038152906040525b9150505b919050565b60155481565b8260135481612865611235565b61286f9190614e04565b11156128b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a790614ea6565b60405180910390fd5b83806012546128bf9190614f92565b341015612901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f890615155565b60405180910390fd5b601760019054906101000a900460ff16612950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612947906151c1565b60405180910390fd5b601454851115612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c9061522d565b60405180910390fd5b600c60006129a161315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2090615299565b60405180910390fd5b6000612a3361315d565b604051602001612a439190615494565b604051602081830303815290604052805190602001209050612aa9858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483613e64565b612ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adf906154fb565b60405180910390fd5b612af9612af361315d565b876131cf565b6001600c6000612b0761315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050565b60135481565b60145481565b612b7461315d565b73ffffffffffffffffffffffffffffffffffffffff16612b92612045565b73ffffffffffffffffffffffffffffffffffffffff1614612be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdf90614db5565b60405180910390fd5b80601760026101000a81548160ff02191690831515021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b8260135481612c32611235565b612c3c9190614e04565b1115612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7490614ea6565b60405180910390fd5b601760039054906101000a900460ff16612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc3906151c1565b60405180910390fd5b600b6000612cd861315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5790615299565b60405180910390fd5b601654841115612da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9c9061522d565b60405180910390fd5b6000612daf61315d565b604051602001612dbf9190615494565b604051602081830303815290604052805190602001209050612e25848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483613e64565b612e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5b90615567565b60405180910390fd5b612e75612e6f61315d565b866131cf565b6001600b6000612e8361315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000612f7961315d565b604051602001612f899190615494565b604051602081830303815290604052805190602001209050612fef838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483613e64565b61302e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613025906155d3565b60405180910390fd5b505050565b61303b61315d565b73ffffffffffffffffffffffffffffffffffffffff16613059612045565b73ffffffffffffffffffffffffffffffffffffffff16146130af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a690614db5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361311e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311590615665565b60405180910390fd5b61312781613a39565b50565b601760049054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6131e9828260405180602001604052806000815250613e7b565b5050565b6000816131f86132ed565b11158015613207575060005482105b8015613234575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000613301826137aa565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461336c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661338d61315d565b73ffffffffffffffffffffffffffffffffffffffff1614806133bc57506133bb856133b661315d565b612edb565b5b8061340157506133ca61315d565b73ffffffffffffffffffffffffffffffffffffffff166133e984611000565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061343a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036134a0576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ad8585856001613e8d565b6134b96000848761323b565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361373857600054821461373757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137a38585856001613e93565b5050505050565b6137b2614375565b6000829050806137c06132ed565b111580156137cf575060005481105b15613a02576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151613a0057600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146138e4578092505050613a34565b5b6001156139ff57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146139fa578092505050613a34565b6138e5565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613b4861315d565b8786866040518563ffffffff1660e01b8152600401613b6a94939291906156da565b6020604051808303816000875af1925050508015613ba657506040513d601f19601f82011682018060405250810190613ba3919061573b565b60015b613c1f573d8060008114613bd6576040519150601f19603f3d011682016040523d82523d6000602084013e613bdb565b606091505b506000815103613c17576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f8054613c8190614ef5565b80601f0160208091040260200160405190810160405280929190818152602001828054613cad90614ef5565b8015613cfa5780601f10613ccf57610100808354040283529160200191613cfa565b820191906000526020600020905b815481529060010190602001808311613cdd57829003601f168201915b5050505050905090565b606060008203613d4b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613e5f565b600082905060005b60008214613d7d578080613d66906150c1565b915050600a82613d76919061501b565b9150613d53565b60008167ffffffffffffffff811115613d9957613d98614757565b5b6040519080825280601f01601f191660200182016040528015613dcb5781602001600182028036833780820191505090505b5090505b60008514613e5857600182613de49190615768565b9150600a85613df3919061579c565b6030613dff9190614e04565b60f81b818381518110613e1557613e14615092565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613e51919061501b565b9450613dcf565b8093505050505b919050565b600082613e718584613e99565b1490509392505050565b613e888383836001613f0e565b505050565b50505050565b50505050565b60008082905060005b8451811015613f03576000858281518110613ec057613ebf615092565b5b60200260200101519050808311613ee257613edb83826142d8565b9250613eef565b613eec81846142d8565b92505b508080613efb906150c1565b915050613ea2565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613f7a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403613fb4576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613fc16000868387613e8d565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561418b575061418a8773ffffffffffffffffffffffffffffffffffffffff16613aff565b5b15614250575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46142006000888480600101955088613b22565b614236576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80820361419157826000541461424b57600080fd5b6142bb565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203614251575b8160008190555050506142d16000868387613e93565b5050505050565b600082600052816020526040600020905092915050565b8280546142fb90614ef5565b90600052602060002090601f01602090048101928261431d5760008555614364565b82601f1061433657805160ff1916838001178555614364565b82800160010185558215614364579182015b82811115614363578251825591602001919060010190614348565b5b50905061437191906143b8565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156143d15760008160009055506001016143b9565b5090565b6000604051905090565b600080fd5b600080fd5b60008115159050919050565b6143fe816143e9565b811461440957600080fd5b50565b60008135905061441b816143f5565b92915050565b600060208284031215614437576144366143df565b5b60006144458482850161440c565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6144838161444e565b811461448e57600080fd5b50565b6000813590506144a08161447a565b92915050565b6000602082840312156144bc576144bb6143df565b5b60006144ca84828501614491565b91505092915050565b6144dc816143e9565b82525050565b60006020820190506144f760008301846144d3565b92915050565b6000819050919050565b614510816144fd565b811461451b57600080fd5b50565b60008135905061452d81614507565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061455e82614533565b9050919050565b61456e81614553565b811461457957600080fd5b50565b60008135905061458b81614565565b92915050565b600080604083850312156145a8576145a76143df565b5b60006145b68582860161451e565b92505060206145c78582860161457c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561460b5780820151818401526020810190506145f0565b8381111561461a576000848401525b50505050565b6000601f19601f8301169050919050565b600061463c826145d1565b61464681856145dc565b93506146568185602086016145ed565b61465f81614620565b840191505092915050565b600060208201905081810360008301526146848184614631565b905092915050565b6000602082840312156146a2576146a16143df565b5b60006146b08482850161451e565b91505092915050565b6146c281614553565b82525050565b60006020820190506146dd60008301846146b9565b92915050565b600080604083850312156146fa576146f96143df565b5b60006147088582860161457c565b92505060206147198582860161451e565b9150509250929050565b61472c816144fd565b82525050565b60006020820190506147476000830184614723565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61478f82614620565b810181811067ffffffffffffffff821117156147ae576147ad614757565b5b80604052505050565b60006147c16143d5565b90506147cd8282614786565b919050565b600067ffffffffffffffff8211156147ed576147ec614757565b5b6147f682614620565b9050602081019050919050565b82818337600083830152505050565b6000614825614820846147d2565b6147b7565b90508281526020810184848401111561484157614840614752565b5b61484c848285614803565b509392505050565b600082601f8301126148695761486861474d565b5b8135614879848260208601614812565b91505092915050565b600060208284031215614898576148976143df565b5b600082013567ffffffffffffffff8111156148b6576148b56143e4565b5b6148c284828501614854565b91505092915050565b6000806000606084860312156148e4576148e36143df565b5b60006148f28682870161457c565b93505060206149038682870161457c565b92505060406149148682870161451e565b9150509250925092565b6000819050919050565b6149318161491e565b82525050565b600060208201905061494c6000830184614928565b92915050565b600060208284031215614968576149676143df565b5b60006149768482850161457c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6149b4816144fd565b82525050565b60006149c683836149ab565b60208301905092915050565b6000602082019050919050565b60006149ea8261497f565b6149f4818561498a565b93506149ff8361499b565b8060005b83811015614a30578151614a1788826149ba565b9750614a22836149d2565b925050600181019050614a03565b5085935050505092915050565b60006020820190508181036000830152614a5781846149df565b905092915050565b614a688161491e565b8114614a7357600080fd5b50565b600081359050614a8581614a5f565b92915050565b600060208284031215614aa157614aa06143df565b5b6000614aaf84828501614a76565b91505092915050565b60008060408385031215614acf57614ace6143df565b5b6000614add8582860161457c565b9250506020614aee8582860161440c565b9150509250929050565b600067ffffffffffffffff821115614b1357614b12614757565b5b614b1c82614620565b9050602081019050919050565b6000614b3c614b3784614af8565b6147b7565b905082815260208101848484011115614b5857614b57614752565b5b614b63848285614803565b509392505050565b600082601f830112614b8057614b7f61474d565b5b8135614b90848260208601614b29565b91505092915050565b60008060008060808587031215614bb357614bb26143df565b5b6000614bc18782880161457c565b9450506020614bd28782880161457c565b9350506040614be38782880161451e565b925050606085013567ffffffffffffffff811115614c0457614c036143e4565b5b614c1087828801614b6b565b91505092959194509250565b600080fd5b600080fd5b60008083601f840112614c3c57614c3b61474d565b5b8235905067ffffffffffffffff811115614c5957614c58614c1c565b5b602083019150836020820283011115614c7557614c74614c21565b5b9250929050565b600080600060408486031215614c9557614c946143df565b5b6000614ca38682870161451e565b935050602084013567ffffffffffffffff811115614cc457614cc36143e4565b5b614cd086828701614c26565b92509250509250925092565b60008060408385031215614cf357614cf26143df565b5b6000614d018582860161457c565b9250506020614d128582860161457c565b9150509250929050565b60008060208385031215614d3357614d326143df565b5b600083013567ffffffffffffffff811115614d5157614d506143e4565b5b614d5d85828601614c26565b92509250509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d9f6020836145dc565b9150614daa82614d69565b602082019050919050565b60006020820190508181036000830152614dce81614d92565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e0f826144fd565b9150614e1a836144fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e4f57614e4e614dd5565b5b828201905092915050565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b6000614e906008836145dc565b9150614e9b82614e5a565b602082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f0d57607f821691505b602082108103614f2057614f1f614ec6565b5b50919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614f5c601f836145dc565b9150614f6782614f26565b602082019050919050565b60006020820190508181036000830152614f8b81614f4f565b9050919050565b6000614f9d826144fd565b9150614fa8836144fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fe157614fe0614dd5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615026826144fd565b9150615031836144fd565b92508261504157615040614fec565b5b828204905092915050565b600081905092915050565b50565b600061506760008361504c565b915061507282615057565b600082019050919050565b60006150888261505a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006150cc826144fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150fe576150fd614dd5565b5b600182019050919050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b600061513f6012836145dc565b915061514a82615109565b602082019050919050565b6000602082019050818103600083015261516e81615132565b9050919050565b7f4e6f742052656164790000000000000000000000000000000000000000000000600082015250565b60006151ab6009836145dc565b91506151b682615175565b602082019050919050565b600060208201905081810360008301526151da8161519e565b9050919050565b7f416d6f756e74204c696d69740000000000000000000000000000000000000000600082015250565b6000615217600c836145dc565b9150615222826151e1565b602082019050919050565b600060208201905081810360008301526152468161520a565b9050919050565b7f4164647265737320616c726561647920636c61696d6564210000000000000000600082015250565b60006152836018836145dc565b915061528e8261524d565b602082019050919050565b600060208201905081810360008301526152b281615276565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615315602f836145dc565b9150615320826152b9565b604082019050919050565b6000602082019050818103600083015261534481615308565b9050919050565b600081905092915050565b6000615361826145d1565b61536b818561534b565b935061537b8185602086016145ed565b80840191505092915050565b60008190508160005260206000209050919050565b600081546153a981614ef5565b6153b3818661534b565b945060018216600081146153ce57600181146153df57615412565b60ff19831686528186019350615412565b6153e885615387565b60005b8381101561540a578154818901526001820191506020810190506153eb565b838801955050505b50505092915050565b60006154278286615356565b91506154338285615356565b915061543f828461539c565b9150819050949350505050565b60008160601b9050919050565b60006154648261544c565b9050919050565b600061547682615459565b9050919050565b61548e61548982614553565b61546b565b82525050565b60006154a0828461547d565b60148201915081905092915050565b7f4e6f742057686974656c69737400000000000000000000000000000000000000600082015250565b60006154e5600d836145dc565b91506154f0826154af565b602082019050919050565b60006020820190508181036000830152615514816154d8565b9050919050565b7f4e6f7420667265656d696e742061646472657373000000000000000000000000600082015250565b60006155516014836145dc565b915061555c8261551b565b602082019050919050565b6000602082019050818103600083015261558081615544565b9050919050565b7f496e76616c69642070726f6f6621000000000000000000000000000000000000600082015250565b60006155bd600e836145dc565b91506155c882615587565b602082019050919050565b600060208201905081810360008301526155ec816155b0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061564f6026836145dc565b915061565a826155f3565b604082019050919050565b6000602082019050818103600083015261567e81615642565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006156ac82615685565b6156b68185615690565b93506156c68185602086016145ed565b6156cf81614620565b840191505092915050565b60006080820190506156ef60008301876146b9565b6156fc60208301866146b9565b6157096040830185614723565b818103606083015261571b81846156a1565b905095945050505050565b6000815190506157358161447a565b92915050565b600060208284031215615751576157506143df565b5b600061575f84828501615726565b91505092915050565b6000615773826144fd565b915061577e836144fd565b92508282101561579157615790614dd5565b5b828203905092915050565b60006157a7826144fd565b91506157b2836144fd565b9250826157c2576157c1614fec565b5b82820690509291505056fea26469706673582212201d8163d3b982fa4b72411992d07741787ab85405ec39c3c8d66a3599275305f464736f6c634300080d003300000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000022b80000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000054746433344000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000547464333440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046697066733a2f2f516d64346f514854746350713936516267694274657a43314c77487963727054427655697a69315265643154514e2f676663336468696464656e2e6a736f6e0000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061036b5760003560e01c806370a08231116101c6578063b88d4fde116100f7578063e0ec7c3611610095578063eb824f601161006f578063eb824f6014610c56578063f2fde38b14610c7f578063f7b7c28e14610ca8578063f7cb9e5414610cd35761036b565b8063e0ec7c3614610bc0578063e2f36dce14610bfd578063e985e9c514610c195761036b565b8063d2cab056116100d1578063d2cab05614610b25578063d5abeb0114610b41578063d5e13d6514610b6c578063e0a8085314610b975761036b565b8063b88d4fde14610a94578063c87b56dd14610abd578063cb4e832614610afa5761036b565b80638da5cb5b11610164578063a0712d681161013e578063a0712d68146109fb578063a22cb46514610a17578063a45ba8e714610a40578063b767a09814610a6b5761036b565b80638da5cb5b1461097c5780638fca32d8146109a757806395d89b41146109d05761036b565b806376e5ae4f116101a057806376e5ae4f146108c25780637cb64759146108ff5780637ec4a659146109285780637f602f33146109515761036b565b806370a0823114610845578063715018a614610882578063764f735b146108995761036b565b80633ccfd60b116102a05780635503a0e81161023e57806362ad68aa1161021857806362ad68aa1461078757806362b99ad4146107b25780636352211e146107dd5780636caede3d1461081a5761036b565b80635503a0e814610703578063575104921461072e5780635f051be51461074a5761036b565b8063438b63001161027a578063438b63001461064957806344a0d68a146106865780634fdd43cb146106af57806351830227146106d85761036b565b80633ccfd60b146105e057806342842e0e146105f7578063434a2bee146106205761036b565b806313faede61161030d57806323b872dd116102e757806323b872dd1461053a57806326745cb7146105635780632e170b511461058c5780632eb4a7ab146105b55761036b565b806313faede6146104bb57806316ba10e0146104e657806318160ddd1461050f5761036b565b806306fdde031161034957806306fdde03146103ff578063081812fc1461042a578063095ea7b3146104675780630f4161aa146104905761036b565b8063016ac5401461037057806301ffc9a71461039957806303339bcb146103d6575b600080fd5b34801561037c57600080fd5b5061039760048036038101906103929190614421565b610d10565b005b3480156103a557600080fd5b506103c060048036038101906103bb91906144a6565b610da9565b6040516103cd91906144e2565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190614591565b610e8b565b005b34801561040b57600080fd5b50610414610f6e565b604051610421919061466a565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c919061468c565b611000565b60405161045e91906146c8565b60405180910390f35b34801561047357600080fd5b5061048e600480360381019061048991906146e3565b61107c565b005b34801561049c57600080fd5b506104a5611186565b6040516104b291906144e2565b60405180910390f35b3480156104c757600080fd5b506104d0611199565b6040516104dd9190614732565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190614882565b61119f565b005b34801561051b57600080fd5b50610524611235565b6040516105319190614732565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c91906148cb565b61124c565b005b34801561056f57600080fd5b5061058a6004803603810190610585919061468c565b61125c565b005b34801561059857600080fd5b506105b360048036038101906105ae9190614421565b6112e2565b005b3480156105c157600080fd5b506105ca61137b565b6040516105d79190614937565b60405180910390f35b3480156105ec57600080fd5b506105f5611381565b005b34801561060357600080fd5b5061061e600480360381019061061991906148cb565b611575565b005b34801561062c57600080fd5b506106476004803603810190610642919061468c565b611595565b005b34801561065557600080fd5b50610670600480360381019061066b9190614952565b61161b565b60405161067d9190614a3d565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a8919061468c565b611835565b005b3480156106bb57600080fd5b506106d660048036038101906106d19190614882565b6118bb565b005b3480156106e457600080fd5b506106ed611951565b6040516106fa91906144e2565b60405180910390f35b34801561070f57600080fd5b50610718611964565b604051610725919061466a565b60405180910390f35b6107486004803603810190610743919061468c565b6119f2565b005b34801561075657600080fd5b50610771600480360381019061076c9190614952565b611c44565b60405161077e9190614732565b60405180910390f35b34801561079357600080fd5b5061079c611c5c565b6040516107a991906144e2565b60405180910390f35b3480156107be57600080fd5b506107c7611c6f565b6040516107d4919061466a565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff919061468c565b611cfd565b60405161081191906146c8565b60405180910390f35b34801561082657600080fd5b5061082f611d13565b60405161083c91906144e2565b60405180910390f35b34801561085157600080fd5b5061086c60048036038101906108679190614952565b611d26565b6040516108799190614732565b60405180910390f35b34801561088e57600080fd5b50610897611df5565b005b3480156108a557600080fd5b506108c060048036038101906108bb919061468c565b611e7d565b005b3480156108ce57600080fd5b506108e960048036038101906108e49190614952565b611f03565b6040516108f691906144e2565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190614a8b565b611f23565b005b34801561093457600080fd5b5061094f600480360381019061094a9190614882565b611fa9565b005b34801561095d57600080fd5b5061096661203f565b6040516109739190614732565b60405180910390f35b34801561098857600080fd5b50610991612045565b60405161099e91906146c8565b60405180910390f35b3480156109b357600080fd5b506109ce60048036038101906109c99190614421565b61206f565b005b3480156109dc57600080fd5b506109e5612108565b6040516109f2919061466a565b60405180910390f35b610a156004803603810190610a10919061468c565b61219a565b005b348015610a2357600080fd5b50610a3e6004803603810190610a399190614ab8565b6123e0565b005b348015610a4c57600080fd5b50610a55612557565b604051610a62919061466a565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d9190614421565b6125e5565b005b348015610aa057600080fd5b50610abb6004803603810190610ab69190614b99565b61267e565b005b348015610ac957600080fd5b50610ae46004803603810190610adf919061468c565b6126fa565b604051610af1919061466a565b60405180910390f35b348015610b0657600080fd5b50610b0f612852565b604051610b1c9190614732565b60405180910390f35b610b3f6004803603810190610b3a9190614c7c565b612858565b005b348015610b4d57600080fd5b50610b56612b60565b604051610b639190614732565b60405180910390f35b348015610b7857600080fd5b50610b81612b66565b604051610b8e9190614732565b60405180910390f35b348015610ba357600080fd5b50610bbe6004803603810190610bb99190614421565b612b6c565b005b348015610bcc57600080fd5b50610be76004803603810190610be29190614952565b612c05565b604051610bf491906144e2565b60405180910390f35b610c176004803603810190610c129190614c7c565b612c25565b005b348015610c2557600080fd5b50610c406004803603810190610c3b9190614cdc565b612edb565b604051610c4d91906144e2565b60405180910390f35b348015610c6257600080fd5b50610c7d6004803603810190610c789190614d1c565b612f6f565b005b348015610c8b57600080fd5b50610ca66004803603810190610ca19190614952565b613033565b005b348015610cb457600080fd5b50610cbd61312a565b604051610cca91906144e2565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf59190614952565b61313d565b604051610d0791906144e2565b60405180910390f35b610d1861315d565b73ffffffffffffffffffffffffffffffffffffffff16610d36612045565b73ffffffffffffffffffffffffffffffffffffffff1614610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390614db5565b60405180910390fd5b80601760006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e7457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e845750610e8382613165565b5b9050919050565b8160135481610e98611235565b610ea29190614e04565b1115610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda90614ea6565b60405180910390fd5b610eeb61315d565b73ffffffffffffffffffffffffffffffffffffffff16610f09612045565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690614db5565b60405180910390fd5b610f6982846131cf565b505050565b606060028054610f7d90614ef5565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa990614ef5565b8015610ff65780601f10610fcb57610100808354040283529160200191610ff6565b820191906000526020600020905b815481529060010190602001808311610fd957829003601f168201915b5050505050905090565b600061100b826131ed565b611041576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061108782611cfd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110ee576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661110d61315d565b73ffffffffffffffffffffffffffffffffffffffff161415801561113f575061113d8161113861315d565b612edb565b155b15611176576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61118183838361323b565b505050565b601760009054906101000a900460ff1681565b60125481565b6111a761315d565b73ffffffffffffffffffffffffffffffffffffffff166111c5612045565b73ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290614db5565b60405180910390fd5b80601090805190602001906112319291906142ef565b5050565b600061123f6132ed565b6001546000540303905090565b6112578383836132f6565b505050565b61126461315d565b73ffffffffffffffffffffffffffffffffffffffff16611282612045565b73ffffffffffffffffffffffffffffffffffffffff16146112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90614db5565b60405180910390fd5b8060158190555050565b6112ea61315d565b73ffffffffffffffffffffffffffffffffffffffff16611308612045565b73ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135590614db5565b60405180910390fd5b80601760036101000a81548160ff02191690831515021790555050565b600a5481565b61138961315d565b73ffffffffffffffffffffffffffffffffffffffff166113a7612045565b73ffffffffffffffffffffffffffffffffffffffff16146113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f490614db5565b60405180910390fd5b600260095403611442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143990614f72565b60405180910390fd5b600260098190555060007303dc407e7818e803e835f5d6aba950f297d7764273ffffffffffffffffffffffffffffffffffffffff1660646019476114869190614f92565b611490919061501b565b60405161149c9061507d565b60006040518083038185875af1925050503d80600081146114d9576040519150601f19603f3d011682016040523d82523d6000602084013e6114de565b606091505b50509050806114ec57600080fd5b60006114f6612045565b73ffffffffffffffffffffffffffffffffffffffff16476040516115199061507d565b60006040518083038185875af1925050503d8060008114611556576040519150601f19603f3d011682016040523d82523d6000602084013e61155b565b606091505b505090508061156957600080fd5b50506001600981905550565b6115908383836040518060200160405280600081525061267e565b505050565b61159d61315d565b73ffffffffffffffffffffffffffffffffffffffff166115bb612045565b73ffffffffffffffffffffffffffffffffffffffff1614611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890614db5565b60405180910390fd5b8060148190555050565b6060600061162883611d26565b905060008167ffffffffffffffff81111561164657611645614757565b5b6040519080825280602002602001820160405280156116745781602001602082028036833780820191505090505b50905060006116816132ed565b90506000805b848210801561169857506013548311155b15611828576000600460008581526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001511580156117a55750600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614155b156117b257806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361181457838584815181106117f9576117f8615092565b5b6020026020010181815250508280611810906150c1565b9350505b838061181f906150c1565b94505050611687565b8395505050505050919050565b61183d61315d565b73ffffffffffffffffffffffffffffffffffffffff1661185b612045565b73ffffffffffffffffffffffffffffffffffffffff16146118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890614db5565b60405180910390fd5b8060128190555050565b6118c361315d565b73ffffffffffffffffffffffffffffffffffffffff166118e1612045565b73ffffffffffffffffffffffffffffffffffffffff1614611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614db5565b60405180910390fd5b806011908051906020019061194d9291906142ef565b5050565b601760029054906101000a900460ff1681565b6010805461197190614ef5565b80601f016020809104026020016040519081016040528092919081815260200182805461199d90614ef5565b80156119ea5780601f106119bf576101008083540402835291602001916119ea565b820191906000526020600020905b8154815290600101906020018083116119cd57829003601f168201915b505050505081565b80601354816119ff611235565b611a099190614e04565b1115611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190614ea6565b60405180910390fd5b8180601254611a599190614f92565b341015611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290615155565b60405180910390fd5b601760049054906101000a900460ff16611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae1906151c1565b60405180910390fd5b601554831115611b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b269061522d565b60405180910390fd5b600083118015611b92575060155483600e6000611b4a61315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b8f9190614e04565b11155b611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc89061522d565b60405180910390fd5b611be2611bdc61315d565b846131cf565b82600e6000611bef61315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c389190614e04565b92505081905550505050565b600e6020528060005260406000206000915090505481565b601760039054906101000a900460ff1681565b600f8054611c7c90614ef5565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca890614ef5565b8015611cf55780601f10611cca57610100808354040283529160200191611cf5565b820191906000526020600020905b815481529060010190602001808311611cd857829003601f168201915b505050505081565b6000611d08826137aa565b600001519050919050565b601760019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d8d576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611dfd61315d565b73ffffffffffffffffffffffffffffffffffffffff16611e1b612045565b73ffffffffffffffffffffffffffffffffffffffff1614611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6890614db5565b60405180910390fd5b611e7b6000613a39565b565b611e8561315d565b73ffffffffffffffffffffffffffffffffffffffff16611ea3612045565b73ffffffffffffffffffffffffffffffffffffffff1614611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090614db5565b60405180910390fd5b8060168190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b611f2b61315d565b73ffffffffffffffffffffffffffffffffffffffff16611f49612045565b73ffffffffffffffffffffffffffffffffffffffff1614611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614db5565b60405180910390fd5b80600a8190555050565b611fb161315d565b73ffffffffffffffffffffffffffffffffffffffff16611fcf612045565b73ffffffffffffffffffffffffffffffffffffffff1614612025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201c90614db5565b60405180910390fd5b80600f908051906020019061203b9291906142ef565b5050565b60165481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61207761315d565b73ffffffffffffffffffffffffffffffffffffffff16612095612045565b73ffffffffffffffffffffffffffffffffffffffff16146120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290614db5565b60405180910390fd5b80601760046101000a81548160ff02191690831515021790555050565b60606003805461211790614ef5565b80601f016020809104026020016040519081016040528092919081815260200182805461214390614ef5565b80156121905780601f1061216557610100808354040283529160200191612190565b820191906000526020600020905b81548152906001019060200180831161217357829003601f168201915b5050505050905090565b80601354816121a7611235565b6121b19190614e04565b11156121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e990614ea6565b60405180910390fd5b81806012546122019190614f92565b341015612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90615155565b60405180910390fd5b601760009054906101000a900460ff16612292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612289906151c1565b60405180910390fd5b6015548311156122d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ce9061522d565b60405180910390fd5b600d60006122e361315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561236b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236290615299565b60405180910390fd5b61237c61237661315d565b846131cf565b6001600d600061238a61315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6123e861315d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361244c576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061245961315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661250661315d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161254b91906144e2565b60405180910390a35050565b6011805461256490614ef5565b80601f016020809104026020016040519081016040528092919081815260200182805461259090614ef5565b80156125dd5780601f106125b2576101008083540402835291602001916125dd565b820191906000526020600020905b8154815290600101906020018083116125c057829003601f168201915b505050505081565b6125ed61315d565b73ffffffffffffffffffffffffffffffffffffffff1661260b612045565b73ffffffffffffffffffffffffffffffffffffffff1614612661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265890614db5565b60405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b6126898484846132f6565b6126a88373ffffffffffffffffffffffffffffffffffffffff16613aff565b80156126bd57506126bb84848484613b22565b155b156126f4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060612705826131ed565b612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b9061532b565b60405180910390fd5b60001515601760029054906101000a900460ff161515036127f1576011805461276c90614ef5565b80601f016020809104026020016040519081016040528092919081815260200182805461279890614ef5565b80156127e55780601f106127ba576101008083540402835291602001916127e5565b820191906000526020600020905b8154815290600101906020018083116127c857829003601f168201915b5050505050905061284d565b60006127fb613c72565b9050600081511161281b5760405180602001604052806000815250612849565b8061282584613d04565b60106040516020016128399392919061541b565b6040516020818303038152906040525b9150505b919050565b60155481565b8260135481612865611235565b61286f9190614e04565b11156128b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a790614ea6565b60405180910390fd5b83806012546128bf9190614f92565b341015612901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f890615155565b60405180910390fd5b601760019054906101000a900460ff16612950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612947906151c1565b60405180910390fd5b601454851115612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c9061522d565b60405180910390fd5b600c60006129a161315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2090615299565b60405180910390fd5b6000612a3361315d565b604051602001612a439190615494565b604051602081830303815290604052805190602001209050612aa9858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483613e64565b612ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adf906154fb565b60405180910390fd5b612af9612af361315d565b876131cf565b6001600c6000612b0761315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050565b60135481565b60145481565b612b7461315d565b73ffffffffffffffffffffffffffffffffffffffff16612b92612045565b73ffffffffffffffffffffffffffffffffffffffff1614612be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdf90614db5565b60405180910390fd5b80601760026101000a81548160ff02191690831515021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b8260135481612c32611235565b612c3c9190614e04565b1115612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7490614ea6565b60405180910390fd5b601760039054906101000a900460ff16612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc3906151c1565b60405180910390fd5b600b6000612cd861315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5790615299565b60405180910390fd5b601654841115612da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9c9061522d565b60405180910390fd5b6000612daf61315d565b604051602001612dbf9190615494565b604051602081830303815290604052805190602001209050612e25848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483613e64565b612e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5b90615567565b60405180910390fd5b612e75612e6f61315d565b866131cf565b6001600b6000612e8361315d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000612f7961315d565b604051602001612f899190615494565b604051602081830303815290604052805190602001209050612fef838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483613e64565b61302e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613025906155d3565b60405180910390fd5b505050565b61303b61315d565b73ffffffffffffffffffffffffffffffffffffffff16613059612045565b73ffffffffffffffffffffffffffffffffffffffff16146130af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a690614db5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361311e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311590615665565b60405180910390fd5b61312781613a39565b50565b601760049054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6131e9828260405180602001604052806000815250613e7b565b5050565b6000816131f86132ed565b11158015613207575060005482105b8015613234575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000613301826137aa565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461336c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661338d61315d565b73ffffffffffffffffffffffffffffffffffffffff1614806133bc57506133bb856133b661315d565b612edb565b5b8061340157506133ca61315d565b73ffffffffffffffffffffffffffffffffffffffff166133e984611000565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061343a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036134a0576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ad8585856001613e8d565b6134b96000848761323b565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361373857600054821461373757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46137a38585856001613e93565b5050505050565b6137b2614375565b6000829050806137c06132ed565b111580156137cf575060005481105b15613a02576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151613a0057600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146138e4578092505050613a34565b5b6001156139ff57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146139fa578092505050613a34565b6138e5565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613b4861315d565b8786866040518563ffffffff1660e01b8152600401613b6a94939291906156da565b6020604051808303816000875af1925050508015613ba657506040513d601f19601f82011682018060405250810190613ba3919061573b565b60015b613c1f573d8060008114613bd6576040519150601f19603f3d011682016040523d82523d6000602084013e613bdb565b606091505b506000815103613c17576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f8054613c8190614ef5565b80601f0160208091040260200160405190810160405280929190818152602001828054613cad90614ef5565b8015613cfa5780601f10613ccf57610100808354040283529160200191613cfa565b820191906000526020600020905b815481529060010190602001808311613cdd57829003601f168201915b5050505050905090565b606060008203613d4b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613e5f565b600082905060005b60008214613d7d578080613d66906150c1565b915050600a82613d76919061501b565b9150613d53565b60008167ffffffffffffffff811115613d9957613d98614757565b5b6040519080825280601f01601f191660200182016040528015613dcb5781602001600182028036833780820191505090505b5090505b60008514613e5857600182613de49190615768565b9150600a85613df3919061579c565b6030613dff9190614e04565b60f81b818381518110613e1557613e14615092565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613e51919061501b565b9450613dcf565b8093505050505b919050565b600082613e718584613e99565b1490509392505050565b613e888383836001613f0e565b505050565b50505050565b50505050565b60008082905060005b8451811015613f03576000858281518110613ec057613ebf615092565b5b60200260200101519050808311613ee257613edb83826142d8565b9250613eef565b613eec81846142d8565b92505b508080613efb906150c1565b915050613ea2565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603613f7a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403613fb4576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613fc16000868387613e8d565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561418b575061418a8773ffffffffffffffffffffffffffffffffffffffff16613aff565b5b15614250575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46142006000888480600101955088613b22565b614236576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80820361419157826000541461424b57600080fd5b6142bb565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203614251575b8160008190555050506142d16000868387613e93565b5050505050565b600082600052816020526040600020905092915050565b8280546142fb90614ef5565b90600052602060002090601f01602090048101928261431d5760008555614364565b82601f1061433657805160ff1916838001178555614364565b82800160010185558215614364579182015b82811115614363578251825591602001919060010190614348565b5b50905061437191906143b8565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156143d15760008160009055506001016143b9565b5090565b6000604051905090565b600080fd5b600080fd5b60008115159050919050565b6143fe816143e9565b811461440957600080fd5b50565b60008135905061441b816143f5565b92915050565b600060208284031215614437576144366143df565b5b60006144458482850161440c565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6144838161444e565b811461448e57600080fd5b50565b6000813590506144a08161447a565b92915050565b6000602082840312156144bc576144bb6143df565b5b60006144ca84828501614491565b91505092915050565b6144dc816143e9565b82525050565b60006020820190506144f760008301846144d3565b92915050565b6000819050919050565b614510816144fd565b811461451b57600080fd5b50565b60008135905061452d81614507565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061455e82614533565b9050919050565b61456e81614553565b811461457957600080fd5b50565b60008135905061458b81614565565b92915050565b600080604083850312156145a8576145a76143df565b5b60006145b68582860161451e565b92505060206145c78582860161457c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561460b5780820151818401526020810190506145f0565b8381111561461a576000848401525b50505050565b6000601f19601f8301169050919050565b600061463c826145d1565b61464681856145dc565b93506146568185602086016145ed565b61465f81614620565b840191505092915050565b600060208201905081810360008301526146848184614631565b905092915050565b6000602082840312156146a2576146a16143df565b5b60006146b08482850161451e565b91505092915050565b6146c281614553565b82525050565b60006020820190506146dd60008301846146b9565b92915050565b600080604083850312156146fa576146f96143df565b5b60006147088582860161457c565b92505060206147198582860161451e565b9150509250929050565b61472c816144fd565b82525050565b60006020820190506147476000830184614723565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61478f82614620565b810181811067ffffffffffffffff821117156147ae576147ad614757565b5b80604052505050565b60006147c16143d5565b90506147cd8282614786565b919050565b600067ffffffffffffffff8211156147ed576147ec614757565b5b6147f682614620565b9050602081019050919050565b82818337600083830152505050565b6000614825614820846147d2565b6147b7565b90508281526020810184848401111561484157614840614752565b5b61484c848285614803565b509392505050565b600082601f8301126148695761486861474d565b5b8135614879848260208601614812565b91505092915050565b600060208284031215614898576148976143df565b5b600082013567ffffffffffffffff8111156148b6576148b56143e4565b5b6148c284828501614854565b91505092915050565b6000806000606084860312156148e4576148e36143df565b5b60006148f28682870161457c565b93505060206149038682870161457c565b92505060406149148682870161451e565b9150509250925092565b6000819050919050565b6149318161491e565b82525050565b600060208201905061494c6000830184614928565b92915050565b600060208284031215614968576149676143df565b5b60006149768482850161457c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6149b4816144fd565b82525050565b60006149c683836149ab565b60208301905092915050565b6000602082019050919050565b60006149ea8261497f565b6149f4818561498a565b93506149ff8361499b565b8060005b83811015614a30578151614a1788826149ba565b9750614a22836149d2565b925050600181019050614a03565b5085935050505092915050565b60006020820190508181036000830152614a5781846149df565b905092915050565b614a688161491e565b8114614a7357600080fd5b50565b600081359050614a8581614a5f565b92915050565b600060208284031215614aa157614aa06143df565b5b6000614aaf84828501614a76565b91505092915050565b60008060408385031215614acf57614ace6143df565b5b6000614add8582860161457c565b9250506020614aee8582860161440c565b9150509250929050565b600067ffffffffffffffff821115614b1357614b12614757565b5b614b1c82614620565b9050602081019050919050565b6000614b3c614b3784614af8565b6147b7565b905082815260208101848484011115614b5857614b57614752565b5b614b63848285614803565b509392505050565b600082601f830112614b8057614b7f61474d565b5b8135614b90848260208601614b29565b91505092915050565b60008060008060808587031215614bb357614bb26143df565b5b6000614bc18782880161457c565b9450506020614bd28782880161457c565b9350506040614be38782880161451e565b925050606085013567ffffffffffffffff811115614c0457614c036143e4565b5b614c1087828801614b6b565b91505092959194509250565b600080fd5b600080fd5b60008083601f840112614c3c57614c3b61474d565b5b8235905067ffffffffffffffff811115614c5957614c58614c1c565b5b602083019150836020820283011115614c7557614c74614c21565b5b9250929050565b600080600060408486031215614c9557614c946143df565b5b6000614ca38682870161451e565b935050602084013567ffffffffffffffff811115614cc457614cc36143e4565b5b614cd086828701614c26565b92509250509250925092565b60008060408385031215614cf357614cf26143df565b5b6000614d018582860161457c565b9250506020614d128582860161457c565b9150509250929050565b60008060208385031215614d3357614d326143df565b5b600083013567ffffffffffffffff811115614d5157614d506143e4565b5b614d5d85828601614c26565b92509250509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d9f6020836145dc565b9150614daa82614d69565b602082019050919050565b60006020820190508181036000830152614dce81614d92565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e0f826144fd565b9150614e1a836144fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e4f57614e4e614dd5565b5b828201905092915050565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b6000614e906008836145dc565b9150614e9b82614e5a565b602082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f0d57607f821691505b602082108103614f2057614f1f614ec6565b5b50919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614f5c601f836145dc565b9150614f6782614f26565b602082019050919050565b60006020820190508181036000830152614f8b81614f4f565b9050919050565b6000614f9d826144fd565b9150614fa8836144fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fe157614fe0614dd5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615026826144fd565b9150615031836144fd565b92508261504157615040614fec565b5b828204905092915050565b600081905092915050565b50565b600061506760008361504c565b915061507282615057565b600082019050919050565b60006150888261505a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006150cc826144fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150fe576150fd614dd5565b5b600182019050919050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b600061513f6012836145dc565b915061514a82615109565b602082019050919050565b6000602082019050818103600083015261516e81615132565b9050919050565b7f4e6f742052656164790000000000000000000000000000000000000000000000600082015250565b60006151ab6009836145dc565b91506151b682615175565b602082019050919050565b600060208201905081810360008301526151da8161519e565b9050919050565b7f416d6f756e74204c696d69740000000000000000000000000000000000000000600082015250565b6000615217600c836145dc565b9150615222826151e1565b602082019050919050565b600060208201905081810360008301526152468161520a565b9050919050565b7f4164647265737320616c726561647920636c61696d6564210000000000000000600082015250565b60006152836018836145dc565b915061528e8261524d565b602082019050919050565b600060208201905081810360008301526152b281615276565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615315602f836145dc565b9150615320826152b9565b604082019050919050565b6000602082019050818103600083015261534481615308565b9050919050565b600081905092915050565b6000615361826145d1565b61536b818561534b565b935061537b8185602086016145ed565b80840191505092915050565b60008190508160005260206000209050919050565b600081546153a981614ef5565b6153b3818661534b565b945060018216600081146153ce57600181146153df57615412565b60ff19831686528186019350615412565b6153e885615387565b60005b8381101561540a578154818901526001820191506020810190506153eb565b838801955050505b50505092915050565b60006154278286615356565b91506154338285615356565b915061543f828461539c565b9150819050949350505050565b60008160601b9050919050565b60006154648261544c565b9050919050565b600061547682615459565b9050919050565b61548e61548982614553565b61546b565b82525050565b60006154a0828461547d565b60148201915081905092915050565b7f4e6f742057686974656c69737400000000000000000000000000000000000000600082015250565b60006154e5600d836145dc565b91506154f0826154af565b602082019050919050565b60006020820190508181036000830152615514816154d8565b9050919050565b7f4e6f7420667265656d696e742061646472657373000000000000000000000000600082015250565b60006155516014836145dc565b915061555c8261551b565b602082019050919050565b6000602082019050818103600083015261558081615544565b9050919050565b7f496e76616c69642070726f6f6621000000000000000000000000000000000000600082015250565b60006155bd600e836145dc565b91506155c882615587565b602082019050919050565b600060208201905081810360008301526155ec816155b0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061564f6026836145dc565b915061565a826155f3565b604082019050919050565b6000602082019050818103600083015261567e81615642565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006156ac82615685565b6156b68185615690565b93506156c68185602086016145ed565b6156cf81614620565b840191505092915050565b60006080820190506156ef60008301876146b9565b6156fc60208301866146b9565b6157096040830185614723565b818103606083015261571b81846156a1565b905095945050505050565b6000815190506157358161447a565b92915050565b600060208284031215615751576157506143df565b5b600061575f84828501615726565b91505092915050565b6000615773826144fd565b915061577e836144fd565b92508282101561579157615790614dd5565b5b828203905092915050565b60006157a7826144fd565b91506157b2836144fd565b9250826157c2576157c1614fec565b5b82820690509291505056fea26469706673582212201d8163d3b982fa4b72411992d07741787ab85405ec39c3c8d66a3599275305f464736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000022b80000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000054746433344000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000547464333440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046697066733a2f2f516d64346f514854746350713936516267694274657a43314c77487963727054427655697a69315265643154514e2f676663336468696464656e2e6a736f6e0000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): GFC3D
Arg [1] : _tokenSymbol (string): GFC3D
Arg [2] : _cost (uint256): 10000000000000000
Arg [3] : _maxSupply (uint256): 8888
Arg [4] : _capWhitelist (uint256): 5
Arg [5] : _capPublic (uint256): 10
Arg [6] : _capFreemint (uint256): 2
Arg [7] : _hiddenMetadataUri (string): ipfs://Qmd4oQHTtcPq96QbgiBtezC1LwHycrpTBvUizi1Red1TQN/gfc3dhidden.json
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [3] : 00000000000000000000000000000000000000000000000000000000000022b8
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 4746433344000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [11] : 4746433344000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [13] : 697066733a2f2f516d64346f514854746350713936516267694274657a43314c
Arg [14] : 77487963727054427655697a69315265643154514e2f67666333646869646465
Arg [15] : 6e2e6a736f6e0000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
50600:7516:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57280:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32454:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53912:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35567:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37070:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36633:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51221:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51074:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57174:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31703:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37935:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56717:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57609:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50691:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57710:293;;;;;;;;;;;;;:::i;:::-;;38176:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56605:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54647:796;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56195:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56927:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51308:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50996:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53411:437;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50884:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51341:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50946:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35375:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51263:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32823:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10174:103;;;;;;;;;;;;;:::i;:::-;;56819:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50773:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56275:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57068:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51188:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9523:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57498:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35736:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53006:387;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37346:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51034:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57383:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38432:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55556:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51159:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52400:600;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51098:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51127:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56108:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50721:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54065:548;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37704:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56379:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10432:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51381:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50830:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57280:99;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57367:6:::1;57347:17;;:26;;;;;;;;;;;;;;;;;;57280:99:::0;:::o;32454:305::-;32556:4;32608:25;32593:40;;;:11;:40;;;;:105;;;;32665:33;32650:48;;;:11;:48;;;;32593:105;:158;;;;32715:36;32739:11;32715:23;:36::i;:::-;32593:158;32573:178;;32454:305;;;:::o;53912:148::-;53991:11;52098:9;;52083:11;52067:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;52059:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9754:12:::1;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54021:33:::2;54031:9;54042:11;54021:9;:33::i;:::-;53912:148:::0;;;:::o;35567:100::-;35621:13;35654:5;35647:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35567:100;:::o;37070:204::-;37138:7;37163:16;37171:7;37163;:16::i;:::-;37158:64;;37188:34;;;;;;;;;;;;;;37158:64;37242:15;:24;37258:7;37242:24;;;;;;;;;;;;;;;;;;;;;37235:31;;37070:204;;;:::o;36633:371::-;36706:13;36722:24;36738:7;36722:15;:24::i;:::-;36706:40;;36767:5;36761:11;;:2;:11;;;36757:48;;36781:24;;;;;;;;;;;;;;36757:48;36838:5;36822:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;36848:37;36865:5;36872:12;:10;:12::i;:::-;36848:16;:37::i;:::-;36847:38;36822:63;36818:138;;;36909:35;;;;;;;;;;;;;;36818:138;36968:28;36977:2;36981:7;36990:5;36968:8;:28::i;:::-;36695:309;36633:371;;:::o;51221:37::-;;;;;;;;;;;;;:::o;51074:19::-;;;;:::o;57174:100::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57258:10:::1;57246:9;:22;;;;;;;;;;;;:::i;:::-;;57174:100:::0;:::o;31703:303::-;31747:7;31972:15;:13;:15::i;:::-;31957:12;;31941:13;;:28;:46;31934:53;;31703:303;:::o;37935:170::-;38069:28;38079:4;38085:2;38089:7;38069:9;:28::i;:::-;37935:170;;;:::o;56717:98::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56799:10:::1;56787:9;:22;;;;56717:98:::0;:::o;57609:95::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57692:6:::1;57674:15;;:24;;;;;;;;;;;;;;;;;;57609:95:::0;:::o;50691:25::-;;;;:::o;57710:293::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1:::1;2410:7;;:19:::0;2402:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;57768:7:::2;57789:42;57781:56;;57874:3;57869:2;57845:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;57781:101;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57767:115;;;57897:2;57889:11;;;::::0;::::2;;57908:7;57929;:5;:7::i;:::-;57921:21;;57950;57921:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57907:69;;;57991:2;57983:11;;;::::0;::::2;;57760:243;;1768:1:::1;2722:7;:22;;;;57710:293::o:0;38176:185::-;38314:39;38331:4;38337:2;38341:7;38314:39;;;;;;;;;;;;:16;:39::i;:::-;38176:185;;;:::o;56605:106::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56692:13:::1;56677:12;:28;;;;56605:106:::0;:::o;54647:796::-;54707:16;54732:23;54758:17;54768:6;54758:9;:17::i;:::-;54732:43;;54782:30;54829:15;54815:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54782:63;;54852:22;54877:15;:13;:15::i;:::-;54852:40;;54899:23;54933:26;54968:441;54993:15;54975;:33;:64;;;;;55030:9;;55012:14;:27;;54975:64;54968:441;;;55050:31;55084:11;:27;55096:14;55084:27;;;;;;;;;;;55050:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55127:9;:16;;;55126:17;:49;;;;;55173:1;55147:28;;:9;:14;;;:28;;;;55126:49;55122:111;;;55209:9;:14;;;55188:35;;55122:111;55269:6;55247:28;;:18;:28;;;55243:132;;55321:14;55288:13;55302:15;55288:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;55348:17;;;;;:::i;:::-;;;;55243:132;55385:16;;;;;:::i;:::-;;;;55041:368;54968:441;;;55424:13;55417:20;;;;;;;54647:796;;;:::o;56195:74::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56258:5:::1;56251:4;:12;;;;56195:74:::0;:::o;56927:132::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57035:18:::1;57015:17;:38;;;;;;;;;;;;:::i;:::-;;56927:132:::0;:::o;51308:28::-;;;;;;;;;;;;;:::o;50996:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53411:437::-;53483:11;52098:9;;52083:11;52067:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;52059:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;53516:11:::1;52225;52218:4;;:18;;;;:::i;:::-;52205:9;:31;;52197:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53544:18:::2;;;;;;;;;;;53536:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;53606:9;;53591:11;:24;;53583:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;53660:1;53646:11;:15;:78;;;;;53715:9;;53700:11;53665:18;:32;53684:12;:10;:12::i;:::-;53665:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:59;;53646:78;53638:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;53752:36;53762:12;:10;:12::i;:::-;53776:11;53752:9;:36::i;:::-;53831:11;53795:18;:32;53814:12;:10;:12::i;:::-;53795:32;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;52127:1:::1;53411:437:::0;;:::o;50884:53::-;;;;;;;;;;;;;;;;;:::o;51341:35::-;;;;;;;;;;;;;:::o;50946:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35375:125::-;35439:7;35466:21;35479:7;35466:12;:21::i;:::-;:26;;;35459:33;;35375:125;;;:::o;51263:40::-;;;;;;;;;;;;;:::o;32823:206::-;32887:7;32928:1;32911:19;;:5;:19;;;32907:60;;32939:28;;;;;;;;;;;;;;32907:60;32993:12;:19;33006:5;32993:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;32985:36;;32978:43;;32823:206;;;:::o;10174:103::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10239:30:::1;10266:1;10239:18;:30::i;:::-;10174:103::o:0;56819:102::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56903:12:::1;56889:11;:26;;;;56819:102:::0;:::o;50773:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;56275:98::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56356:11:::1;56343:10;:24;;;;56275:98:::0;:::o;57068:100::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57152:10:::1;57140:9;:22;;;;;;;;;;;;:::i;:::-;;57068:100:::0;:::o;51188:26::-;;;;:::o;9523:87::-;9569:7;9596:6;;;;;;;;;;;9589:13;;9523:87;:::o;57498:103::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57589:6:::1;57568:18;;:27;;;;;;;;;;;;;;;;;;57498:103:::0;:::o;35736:104::-;35792:13;35825:7;35818:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35736:104;:::o;53006:387::-;53071:11;52098:9;;52083:11;52067:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;52059:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;53104:11:::1;52225;52218:4;;:18;;;;:::i;:::-;52205:9;:31;;52197:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53132:17:::2;;;;;;;;;;;53124:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;53193:9;;53178:11;:24;;53170:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;53234:17;:31;53252:12;:10;:12::i;:::-;53234:31;;;;;;;;;;;;;;;;;;;;;;;;;53233:32;53225:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;53306:36;53316:12;:10;:12::i;:::-;53330:11;53306:9;:36::i;:::-;53383:4;53349:17;:31;53367:12;:10;:12::i;:::-;53349:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;52127:1:::1;53006:387:::0;;:::o;37346:287::-;37457:12;:10;:12::i;:::-;37445:24;;:8;:24;;;37441:54;;37478:17;;;;;;;;;;;;;;37441:54;37553:8;37508:18;:32;37527:12;:10;:12::i;:::-;37508:32;;;;;;;;;;;;;;;:42;37541:8;37508:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;37606:8;37577:48;;37592:12;:10;:12::i;:::-;37577:48;;;37616:8;37577:48;;;;;;:::i;:::-;;;;;;;;37346:287;;:::o;51034:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;57383:107::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57478:6:::1;57455:20;;:29;;;;;;;;;;;;;;;;;;57383:107:::0;:::o;38432:369::-;38599:28;38609:4;38615:2;38619:7;38599:9;:28::i;:::-;38642:15;:2;:13;;;:15::i;:::-;:76;;;;;38662:56;38693:4;38699:2;38703:7;38712:5;38662:30;:56::i;:::-;38661:57;38642:76;38638:156;;;38742:40;;;;;;;;;;;;;;38638:156;38432:369;;;;:::o;55556:445::-;55630:13;55660:17;55668:8;55660:7;:17::i;:::-;55652:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;55754:5;55742:17;;:8;;;;;;;;;;;:17;;;55738:64;;55777:17;55770:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55738:64;55810:28;55841:10;:8;:10::i;:::-;55810:41;;55896:1;55871:14;55865:28;:32;:130;;;;;;;;;;;;;;;;;55933:14;55949:19;:8;:17;:19::i;:::-;55970:9;55916:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55865:130;55858:137;;;55556:445;;;;:::o;51159:24::-;;;;:::o;52400:600::-;52513:11;52098:9;;52083:11;52067:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;52059:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;52552:11:::1;52225;52218:4;;:18;;;;:::i;:::-;52205:9;:31;;52197:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;52580:20:::2;;;;;;;;;;;52572:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;52644:12;;52629:11;:27;;52621:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;52688:20;:34;52709:12;:10;:12::i;:::-;52688:34;;;;;;;;;;;;;;;;;;;;;;;;;52687:35;52679:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;52758:12;52800;:10;:12::i;:::-;52783:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;52773:41;;;;;;52758:56;;52829:50;52848:12;;52829:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52862:10;;52874:4;52829:18;:50::i;:::-;52821:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;52910:36;52920:12;:10;:12::i;:::-;52934:11;52910:9;:36::i;:::-;52990:4;52953:20;:34;52974:12;:10;:12::i;:::-;52953:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;52565:435;52127:1:::1;52400:600:::0;;;;:::o;51098:24::-;;;;:::o;51127:27::-;;;;:::o;56108:81::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56177:6:::1;56166:8;;:17;;;;;;;;;;;;;;;;;;56108:81:::0;:::o;50721:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;54065:548::-;54173:11;52098:9;;52083:11;52067:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;52059:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;54208:15:::1;;;;;;;;;;;54200:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;54253:15;:29;54269:12;:10;:12::i;:::-;54253:29;;;;;;;;;;;;;;;;;;;;;;;;;54252:30;54244:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;54341:11;;54326;:26;;54318:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;54375:12;54417;:10;:12::i;:::-;54400:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;54390:41;;;;;;54375:56;;54446:50;54465:12;;54446:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54479:10;;54491:4;54446:18;:50::i;:::-;54438:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;54528:36;54538:12;:10;:12::i;:::-;54552:11;54528:9;:36::i;:::-;54603:4;54571:15;:29;54587:12;:10;:12::i;:::-;54571:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;54192:421;54065:548:::0;;;;:::o;37704:164::-;37801:4;37825:18;:25;37844:5;37825:25;;;;;;;;;;;;;;;:35;37851:8;37825:35;;;;;;;;;;;;;;;;;;;;;;;;;37818:42;;37704:164;;;;:::o;56379:220::-;56453:12;56495;:10;:12::i;:::-;56478:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;56468:41;;;;;;56453:56;;56524:50;56543:12;;56524:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56557:10;;56569:4;56524:18;:50::i;:::-;56516:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;56446:153;56379:220;;:::o;10432:201::-;9754:12;:10;:12::i;:::-;9743:23;;:7;:5;:7::i;:::-;:23;;;9735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10541:1:::1;10521:22;;:8;:22;;::::0;10513:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10597:28;10616:8;10597:18;:28::i;:::-;10432:201:::0;:::o;51381:38::-;;;;;;;;;;;;;:::o;50830:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;8247:98::-;8300:7;8327:10;8320:17;;8247:98;:::o;22330:157::-;22415:4;22454:25;22439:40;;;:11;:40;;;;22432:47;;22330:157;;;:::o;39238:104::-;39307:27;39317:2;39321:8;39307:27;;;;;;;;;;;;:9;:27::i;:::-;39238:104;;:::o;39056:174::-;39113:4;39156:7;39137:15;:13;:15::i;:::-;:26;;:53;;;;;39177:13;;39167:7;:23;39137:53;:85;;;;;39195:11;:20;39207:7;39195:20;;;;;;;;;;;:27;;;;;;;;;;;;39194:28;39137:85;39130:92;;39056:174;;;:::o;47213:196::-;47355:2;47328:15;:24;47344:7;47328:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47393:7;47389:2;47373:28;;47382:5;47373:28;;;;;;;;;;;;47213:196;;;:::o;55449:101::-;55514:7;55541:1;55534:8;;55449:101;:::o;42156:2130::-;42271:35;42309:21;42322:7;42309:12;:21::i;:::-;42271:59;;42369:4;42347:26;;:13;:18;;;:26;;;42343:67;;42382:28;;;;;;;;;;;;;;42343:67;42423:22;42465:4;42449:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;42486:36;42503:4;42509:12;:10;:12::i;:::-;42486:16;:36::i;:::-;42449:73;:126;;;;42563:12;:10;:12::i;:::-;42539:36;;:20;42551:7;42539:11;:20::i;:::-;:36;;;42449:126;42423:153;;42594:17;42589:66;;42620:35;;;;;;;;;;;;;;42589:66;42684:1;42670:16;;:2;:16;;;42666:52;;42695:23;;;;;;;;;;;;;;42666:52;42731:43;42753:4;42759:2;42763:7;42772:1;42731:21;:43::i;:::-;42839:35;42856:1;42860:7;42869:4;42839:8;:35::i;:::-;43200:1;43170:12;:18;43183:4;43170:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43244:1;43216:12;:16;43229:2;43216:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43262:31;43296:11;:20;43308:7;43296:20;;;;;;;;;;;43262:54;;43347:2;43331:8;:13;;;:18;;;;;;;;;;;;;;;;;;43397:15;43364:8;:23;;;:49;;;;;;;;;;;;;;;;;;43665:19;43697:1;43687:7;:11;43665:33;;43713:31;43747:11;:24;43759:11;43747:24;;;;;;;;;;;43713:58;;43815:1;43790:27;;:8;:13;;;;;;;;;;;;:27;;;43786:384;;44000:13;;43985:11;:28;43981:174;;44054:4;44038:8;:13;;;:20;;;;;;;;;;;;;;;;;;44107:13;:28;;;44081:8;:23;;;:54;;;;;;;;;;;;;;;;;;43981:174;43786:384;43145:1036;;;44217:7;44213:2;44198:27;;44207:4;44198:27;;;;;;;;;;;;44236:42;44257:4;44263:2;44267:7;44276:1;44236:20;:42::i;:::-;42260:2026;;42156:2130;;;:::o;34204:1109::-;34266:21;;:::i;:::-;34300:12;34315:7;34300:22;;34383:4;34364:15;:13;:15::i;:::-;:23;;:47;;;;;34398:13;;34391:4;:20;34364:47;34360:886;;;34432:31;34466:11;:17;34478:4;34466:17;;;;;;;;;;;34432:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34507:9;:16;;;34502:729;;34578:1;34552:28;;:9;:14;;;:28;;;34548:101;;34616:9;34609:16;;;;;;34548:101;34951:261;34958:4;34951:261;;;34991:6;;;;;;;;35036:11;:17;35048:4;35036:17;;;;;;;;;;;35024:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35110:1;35084:28;;:9;:14;;;:28;;;35080:109;;35152:9;35145:16;;;;;;35080:109;34951:261;;;34502:729;34413:833;34360:886;35274:31;;;;;;;;;;;;;;34204:1109;;;;:::o;10793:191::-;10867:16;10886:6;;;;;;;;;;;10867:25;;10912:8;10903:6;;:17;;;;;;;;;;;;;;;;;;10967:8;10936:40;;10957:8;10936:40;;;;;;;;;;;;10856:128;10793:191;:::o;12224:326::-;12284:4;12541:1;12519:7;:19;;;:23;12512:30;;12224:326;;;:::o;47901:667::-;48064:4;48101:2;48085:36;;;48122:12;:10;:12::i;:::-;48136:4;48142:7;48151:5;48085:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48081:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48336:1;48319:6;:13;:18;48315:235;;48365:40;;;;;;;;;;;;;;48315:235;48508:6;48502:13;48493:6;48489:2;48485:15;48478:38;48081:480;48214:45;;;48204:55;;;:6;:55;;;;48197:62;;;47901:667;;;;;;:::o;58009:104::-;58069:13;58098:9;58091:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58009:104;:::o;5809:723::-;5865:13;6095:1;6086:5;:10;6082:53;;6113:10;;;;;;;;;;;;;;;;;;;;;6082:53;6145:12;6160:5;6145:20;;6176:14;6201:78;6216:1;6208:4;:9;6201:78;;6234:8;;;;;:::i;:::-;;;;6265:2;6257:10;;;;;:::i;:::-;;;6201:78;;;6289:19;6321:6;6311:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6289:39;;6339:154;6355:1;6346:5;:10;6339:154;;6383:1;6373:11;;;;;:::i;:::-;;;6450:2;6442:5;:10;;;;:::i;:::-;6429:2;:24;;;;:::i;:::-;6416:39;;6399:6;6406;6399:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6479:2;6470:11;;;;;:::i;:::-;;;6339:154;;;6517:6;6503:21;;;;;5809:723;;;;:::o;3979:190::-;4104:4;4157;4128:25;4141:5;4148:4;4128:12;:25::i;:::-;:33;4121:40;;3979:190;;;;;:::o;39705:163::-;39828:32;39834:2;39838:8;39848:5;39855:4;39828:5;:32::i;:::-;39705:163;;;:::o;49216:159::-;;;;;:::o;50034:158::-;;;;;:::o;4530:675::-;4613:7;4633:20;4656:4;4633:27;;4676:9;4671:497;4695:5;:12;4691:1;:16;4671:497;;;4729:20;4752:5;4758:1;4752:8;;;;;;;;:::i;:::-;;;;;;;;4729:31;;4795:12;4779;:28;4775:382;;4922:42;4937:12;4951;4922:14;:42::i;:::-;4907:57;;4775:382;;;5099:42;5114:12;5128;5099:14;:42::i;:::-;5084:57;;4775:382;4714:454;4709:3;;;;;:::i;:::-;;;;4671:497;;;;5185:12;5178:19;;;4530:675;;;;:::o;40127:1775::-;40266:20;40289:13;;40266:36;;40331:1;40317:16;;:2;:16;;;40313:48;;40342:19;;;;;;;;;;;;;;40313:48;40388:1;40376:8;:13;40372:44;;40398:18;;;;;;;;;;;;;;40372:44;40429:61;40459:1;40463:2;40467:12;40481:8;40429:21;:61::i;:::-;40802:8;40767:12;:16;40780:2;40767:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40866:8;40826:12;:16;40839:2;40826:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40925:2;40892:11;:25;40904:12;40892:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;40992:15;40942:11;:25;40954:12;40942:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;41025:20;41048:12;41025:35;;41075:11;41104:8;41089:12;:23;41075:37;;41133:4;:23;;;;;41141:15;:2;:13;;;:15::i;:::-;41133:23;41129:641;;;41177:314;41233:12;41229:2;41208:38;;41225:1;41208:38;;;;;;;;;;;;41274:69;41313:1;41317:2;41321:14;;;;;;41337:5;41274:30;:69::i;:::-;41269:174;;41379:40;;;;;;;;;;;;;;41269:174;41486:3;41470:12;:19;41177:314;;41572:12;41555:13;;:29;41551:43;;41586:8;;;41551:43;41129:641;;;41635:120;41691:14;;;;;;41687:2;41666:40;;41683:1;41666:40;;;;;;;;;;;;41750:3;41734:12;:19;41635:120;;41129:641;41800:12;41784:13;:28;;;;40742:1082;;41834:60;41863:1;41867:2;41871:12;41885:8;41834:20;:60::i;:::-;40255:1647;40127:1775;;;;:::o;5213:224::-;5281:13;5344:1;5338:4;5331:15;5373:1;5367:4;5360:15;5414:4;5408;5398:21;5389:30;;5213:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:90;368:7;411:5;404:13;397:21;386:32;;334:90;;;:::o;430:116::-;500:21;515:5;500:21;:::i;:::-;493:5;490:32;480:60;;536:1;533;526:12;480:60;430:116;:::o;552:133::-;595:5;633:6;620:20;611:29;;649:30;673:5;649:30;:::i;:::-;552:133;;;;:::o;691:323::-;747:6;796:2;784:9;775:7;771:23;767:32;764:119;;;802:79;;:::i;:::-;764:119;922:1;947:50;989:7;980:6;969:9;965:22;947:50;:::i;:::-;937:60;;893:114;691:323;;;;:::o;1020:149::-;1056:7;1096:66;1089:5;1085:78;1074:89;;1020:149;;;:::o;1175:120::-;1247:23;1264:5;1247:23;:::i;:::-;1240:5;1237:34;1227:62;;1285:1;1282;1275:12;1227:62;1175:120;:::o;1301:137::-;1346:5;1384:6;1371:20;1362:29;;1400:32;1426:5;1400:32;:::i;:::-;1301:137;;;;:::o;1444:327::-;1502:6;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:52;1746:7;1737:6;1726:9;1722:22;1702:52;:::i;:::-;1692:62;;1648:116;1444:327;;;;:::o;1777:109::-;1858:21;1873:5;1858:21;:::i;:::-;1853:3;1846:34;1777:109;;:::o;1892:210::-;1979:4;2017:2;2006:9;2002:18;1994:26;;2030:65;2092:1;2081:9;2077:17;2068:6;2030:65;:::i;:::-;1892:210;;;;:::o;2108:77::-;2145:7;2174:5;2163:16;;2108:77;;;:::o;2191:122::-;2264:24;2282:5;2264:24;:::i;:::-;2257:5;2254:35;2244:63;;2303:1;2300;2293:12;2244:63;2191:122;:::o;2319:139::-;2365:5;2403:6;2390:20;2381:29;;2419:33;2446:5;2419:33;:::i;:::-;2319:139;;;;:::o;2464:126::-;2501:7;2541:42;2534:5;2530:54;2519:65;;2464:126;;;:::o;2596:96::-;2633:7;2662:24;2680:5;2662:24;:::i;:::-;2651:35;;2596:96;;;:::o;2698:122::-;2771:24;2789:5;2771:24;:::i;:::-;2764:5;2761:35;2751:63;;2810:1;2807;2800:12;2751:63;2698:122;:::o;2826:139::-;2872:5;2910:6;2897:20;2888:29;;2926:33;2953:5;2926:33;:::i;:::-;2826:139;;;;:::o;2971:474::-;3039:6;3047;3096:2;3084:9;3075:7;3071:23;3067:32;3064:119;;;3102:79;;:::i;:::-;3064:119;3222:1;3247:53;3292:7;3283:6;3272:9;3268:22;3247:53;:::i;:::-;3237:63;;3193:117;3349:2;3375:53;3420:7;3411:6;3400:9;3396:22;3375:53;:::i;:::-;3365:63;;3320:118;2971:474;;;;;:::o;3451:99::-;3503:6;3537:5;3531:12;3521:22;;3451:99;;;:::o;3556:169::-;3640:11;3674:6;3669:3;3662:19;3714:4;3709:3;3705:14;3690:29;;3556:169;;;;:::o;3731:307::-;3799:1;3809:113;3823:6;3820:1;3817:13;3809:113;;;3908:1;3903:3;3899:11;3893:18;3889:1;3884:3;3880:11;3873:39;3845:2;3842:1;3838:10;3833:15;;3809:113;;;3940:6;3937:1;3934:13;3931:101;;;4020:1;4011:6;4006:3;4002:16;3995:27;3931:101;3780:258;3731:307;;;:::o;4044:102::-;4085:6;4136:2;4132:7;4127:2;4120:5;4116:14;4112:28;4102:38;;4044:102;;;:::o;4152:364::-;4240:3;4268:39;4301:5;4268:39;:::i;:::-;4323:71;4387:6;4382:3;4323:71;:::i;:::-;4316:78;;4403:52;4448:6;4443:3;4436:4;4429:5;4425:16;4403:52;:::i;:::-;4480:29;4502:6;4480:29;:::i;:::-;4475:3;4471:39;4464:46;;4244:272;4152:364;;;;:::o;4522:313::-;4635:4;4673:2;4662:9;4658:18;4650:26;;4722:9;4716:4;4712:20;4708:1;4697:9;4693:17;4686:47;4750:78;4823:4;4814:6;4750:78;:::i;:::-;4742:86;;4522:313;;;;:::o;4841:329::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:53;5145:7;5136:6;5125:9;5121:22;5100:53;:::i;:::-;5090:63;;5046:117;4841:329;;;;:::o;5176:118::-;5263:24;5281:5;5263:24;:::i;:::-;5258:3;5251:37;5176:118;;:::o;5300:222::-;5393:4;5431:2;5420:9;5416:18;5408:26;;5444:71;5512:1;5501:9;5497:17;5488:6;5444:71;:::i;:::-;5300:222;;;;:::o;5528:474::-;5596:6;5604;5653:2;5641:9;5632:7;5628:23;5624:32;5621:119;;;5659:79;;:::i;:::-;5621:119;5779:1;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5750:117;5906:2;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5877:118;5528:474;;;;;:::o;6008:118::-;6095:24;6113:5;6095:24;:::i;:::-;6090:3;6083:37;6008:118;;:::o;6132:222::-;6225:4;6263:2;6252:9;6248:18;6240:26;;6276:71;6344:1;6333:9;6329:17;6320:6;6276:71;:::i;:::-;6132:222;;;;:::o;6360:117::-;6469:1;6466;6459:12;6483:117;6592:1;6589;6582:12;6606:180;6654:77;6651:1;6644:88;6751:4;6748:1;6741:15;6775:4;6772:1;6765:15;6792:281;6875:27;6897:4;6875:27;:::i;:::-;6867:6;6863:40;7005:6;6993:10;6990:22;6969:18;6957:10;6954:34;6951:62;6948:88;;;7016:18;;:::i;:::-;6948:88;7056:10;7052:2;7045:22;6835:238;6792:281;;:::o;7079:129::-;7113:6;7140:20;;:::i;:::-;7130:30;;7169:33;7197:4;7189:6;7169:33;:::i;:::-;7079:129;;;:::o;7214:308::-;7276:4;7366:18;7358:6;7355:30;7352:56;;;7388:18;;:::i;:::-;7352:56;7426:29;7448:6;7426:29;:::i;:::-;7418:37;;7510:4;7504;7500:15;7492:23;;7214:308;;;:::o;7528:154::-;7612:6;7607:3;7602;7589:30;7674:1;7665:6;7660:3;7656:16;7649:27;7528:154;;;:::o;7688:412::-;7766:5;7791:66;7807:49;7849:6;7807:49;:::i;:::-;7791:66;:::i;:::-;7782:75;;7880:6;7873:5;7866:21;7918:4;7911:5;7907:16;7956:3;7947:6;7942:3;7938:16;7935:25;7932:112;;;7963:79;;:::i;:::-;7932:112;8053:41;8087:6;8082:3;8077;8053:41;:::i;:::-;7772:328;7688:412;;;;;:::o;8120:340::-;8176:5;8225:3;8218:4;8210:6;8206:17;8202:27;8192:122;;8233:79;;:::i;:::-;8192:122;8350:6;8337:20;8375:79;8450:3;8442:6;8435:4;8427:6;8423:17;8375:79;:::i;:::-;8366:88;;8182:278;8120:340;;;;:::o;8466:509::-;8535:6;8584:2;8572:9;8563:7;8559:23;8555:32;8552:119;;;8590:79;;:::i;:::-;8552:119;8738:1;8727:9;8723:17;8710:31;8768:18;8760:6;8757:30;8754:117;;;8790:79;;:::i;:::-;8754:117;8895:63;8950:7;8941:6;8930:9;8926:22;8895:63;:::i;:::-;8885:73;;8681:287;8466:509;;;;:::o;8981:619::-;9058:6;9066;9074;9123:2;9111:9;9102:7;9098:23;9094:32;9091:119;;;9129:79;;:::i;:::-;9091:119;9249:1;9274:53;9319:7;9310:6;9299:9;9295:22;9274:53;:::i;:::-;9264:63;;9220:117;9376:2;9402:53;9447:7;9438:6;9427:9;9423:22;9402:53;:::i;:::-;9392:63;;9347:118;9504:2;9530:53;9575:7;9566:6;9555:9;9551:22;9530:53;:::i;:::-;9520:63;;9475:118;8981:619;;;;;:::o;9606:77::-;9643:7;9672:5;9661:16;;9606:77;;;:::o;9689:118::-;9776:24;9794:5;9776:24;:::i;:::-;9771:3;9764:37;9689:118;;:::o;9813:222::-;9906:4;9944:2;9933:9;9929:18;9921:26;;9957:71;10025:1;10014:9;10010:17;10001:6;9957:71;:::i;:::-;9813:222;;;;:::o;10041:329::-;10100:6;10149:2;10137:9;10128:7;10124:23;10120:32;10117:119;;;10155:79;;:::i;:::-;10117:119;10275:1;10300:53;10345:7;10336:6;10325:9;10321:22;10300:53;:::i;:::-;10290:63;;10246:117;10041:329;;;;:::o;10376:114::-;10443:6;10477:5;10471:12;10461:22;;10376:114;;;:::o;10496:184::-;10595:11;10629:6;10624:3;10617:19;10669:4;10664:3;10660:14;10645:29;;10496:184;;;;:::o;10686:132::-;10753:4;10776:3;10768:11;;10806:4;10801:3;10797:14;10789:22;;10686:132;;;:::o;10824:108::-;10901:24;10919:5;10901:24;:::i;:::-;10896:3;10889:37;10824:108;;:::o;10938:179::-;11007:10;11028:46;11070:3;11062:6;11028:46;:::i;:::-;11106:4;11101:3;11097:14;11083:28;;10938:179;;;;:::o;11123:113::-;11193:4;11225;11220:3;11216:14;11208:22;;11123:113;;;:::o;11272:732::-;11391:3;11420:54;11468:5;11420:54;:::i;:::-;11490:86;11569:6;11564:3;11490:86;:::i;:::-;11483:93;;11600:56;11650:5;11600:56;:::i;:::-;11679:7;11710:1;11695:284;11720:6;11717:1;11714:13;11695:284;;;11796:6;11790:13;11823:63;11882:3;11867:13;11823:63;:::i;:::-;11816:70;;11909:60;11962:6;11909:60;:::i;:::-;11899:70;;11755:224;11742:1;11739;11735:9;11730:14;;11695:284;;;11699:14;11995:3;11988:10;;11396:608;;;11272:732;;;;:::o;12010:373::-;12153:4;12191:2;12180:9;12176:18;12168:26;;12240:9;12234:4;12230:20;12226:1;12215:9;12211:17;12204:47;12268:108;12371:4;12362:6;12268:108;:::i;:::-;12260:116;;12010:373;;;;:::o;12389:122::-;12462:24;12480:5;12462:24;:::i;:::-;12455:5;12452:35;12442:63;;12501:1;12498;12491:12;12442:63;12389:122;:::o;12517:139::-;12563:5;12601:6;12588:20;12579:29;;12617:33;12644:5;12617:33;:::i;:::-;12517:139;;;;:::o;12662:329::-;12721:6;12770:2;12758:9;12749:7;12745:23;12741:32;12738:119;;;12776:79;;:::i;:::-;12738:119;12896:1;12921:53;12966:7;12957:6;12946:9;12942:22;12921:53;:::i;:::-;12911:63;;12867:117;12662:329;;;;:::o;12997:468::-;13062:6;13070;13119:2;13107:9;13098:7;13094:23;13090:32;13087:119;;;13125:79;;:::i;:::-;13087:119;13245:1;13270:53;13315:7;13306:6;13295:9;13291:22;13270:53;:::i;:::-;13260:63;;13216:117;13372:2;13398:50;13440:7;13431:6;13420:9;13416:22;13398:50;:::i;:::-;13388:60;;13343:115;12997:468;;;;;:::o;13471:307::-;13532:4;13622:18;13614:6;13611:30;13608:56;;;13644:18;;:::i;:::-;13608:56;13682:29;13704:6;13682:29;:::i;:::-;13674:37;;13766:4;13760;13756:15;13748:23;;13471:307;;;:::o;13784:410::-;13861:5;13886:65;13902:48;13943:6;13902:48;:::i;:::-;13886:65;:::i;:::-;13877:74;;13974:6;13967:5;13960:21;14012:4;14005:5;14001:16;14050:3;14041:6;14036:3;14032:16;14029:25;14026:112;;;14057:79;;:::i;:::-;14026:112;14147:41;14181:6;14176:3;14171;14147:41;:::i;:::-;13867:327;13784:410;;;;;:::o;14213:338::-;14268:5;14317:3;14310:4;14302:6;14298:17;14294:27;14284:122;;14325:79;;:::i;:::-;14284:122;14442:6;14429:20;14467:78;14541:3;14533:6;14526:4;14518:6;14514:17;14467:78;:::i;:::-;14458:87;;14274:277;14213:338;;;;:::o;14557:943::-;14652:6;14660;14668;14676;14725:3;14713:9;14704:7;14700:23;14696:33;14693:120;;;14732:79;;:::i;:::-;14693:120;14852:1;14877:53;14922:7;14913:6;14902:9;14898:22;14877:53;:::i;:::-;14867:63;;14823:117;14979:2;15005:53;15050:7;15041:6;15030:9;15026:22;15005:53;:::i;:::-;14995:63;;14950:118;15107:2;15133:53;15178:7;15169:6;15158:9;15154:22;15133:53;:::i;:::-;15123:63;;15078:118;15263:2;15252:9;15248:18;15235:32;15294:18;15286:6;15283:30;15280:117;;;15316:79;;:::i;:::-;15280:117;15421:62;15475:7;15466:6;15455:9;15451:22;15421:62;:::i;:::-;15411:72;;15206:287;14557:943;;;;;;;:::o;15506:117::-;15615:1;15612;15605:12;15629:117;15738:1;15735;15728:12;15769:568;15842:8;15852:6;15902:3;15895:4;15887:6;15883:17;15879:27;15869:122;;15910:79;;:::i;:::-;15869:122;16023:6;16010:20;16000:30;;16053:18;16045:6;16042:30;16039:117;;;16075:79;;:::i;:::-;16039:117;16189:4;16181:6;16177:17;16165:29;;16243:3;16235:4;16227:6;16223:17;16213:8;16209:32;16206:41;16203:128;;;16250:79;;:::i;:::-;16203:128;15769:568;;;;;:::o;16343:704::-;16438:6;16446;16454;16503:2;16491:9;16482:7;16478:23;16474:32;16471:119;;;16509:79;;:::i;:::-;16471:119;16629:1;16654:53;16699:7;16690:6;16679:9;16675:22;16654:53;:::i;:::-;16644:63;;16600:117;16784:2;16773:9;16769:18;16756:32;16815:18;16807:6;16804:30;16801:117;;;16837:79;;:::i;:::-;16801:117;16950:80;17022:7;17013:6;17002:9;16998:22;16950:80;:::i;:::-;16932:98;;;;16727:313;16343:704;;;;;:::o;17053:474::-;17121:6;17129;17178:2;17166:9;17157:7;17153:23;17149:32;17146:119;;;17184:79;;:::i;:::-;17146:119;17304:1;17329:53;17374:7;17365:6;17354:9;17350:22;17329:53;:::i;:::-;17319:63;;17275:117;17431:2;17457:53;17502:7;17493:6;17482:9;17478:22;17457:53;:::i;:::-;17447:63;;17402:118;17053:474;;;;;:::o;17533:559::-;17619:6;17627;17676:2;17664:9;17655:7;17651:23;17647:32;17644:119;;;17682:79;;:::i;:::-;17644:119;17830:1;17819:9;17815:17;17802:31;17860:18;17852:6;17849:30;17846:117;;;17882:79;;:::i;:::-;17846:117;17995:80;18067:7;18058:6;18047:9;18043:22;17995:80;:::i;:::-;17977:98;;;;17773:312;17533:559;;;;;:::o;18098:182::-;18238:34;18234:1;18226:6;18222:14;18215:58;18098:182;:::o;18286:366::-;18428:3;18449:67;18513:2;18508:3;18449:67;:::i;:::-;18442:74;;18525:93;18614:3;18525:93;:::i;:::-;18643:2;18638:3;18634:12;18627:19;;18286:366;;;:::o;18658:419::-;18824:4;18862:2;18851:9;18847:18;18839:26;;18911:9;18905:4;18901:20;18897:1;18886:9;18882:17;18875:47;18939:131;19065:4;18939:131;:::i;:::-;18931:139;;18658:419;;;:::o;19083:180::-;19131:77;19128:1;19121:88;19228:4;19225:1;19218:15;19252:4;19249:1;19242:15;19269:305;19309:3;19328:20;19346:1;19328:20;:::i;:::-;19323:25;;19362:20;19380:1;19362:20;:::i;:::-;19357:25;;19516:1;19448:66;19444:74;19441:1;19438:81;19435:107;;;19522:18;;:::i;:::-;19435:107;19566:1;19563;19559:9;19552:16;;19269:305;;;;:::o;19580:158::-;19720:10;19716:1;19708:6;19704:14;19697:34;19580:158;:::o;19744:365::-;19886:3;19907:66;19971:1;19966:3;19907:66;:::i;:::-;19900:73;;19982:93;20071:3;19982:93;:::i;:::-;20100:2;20095:3;20091:12;20084:19;;19744:365;;;:::o;20115:419::-;20281:4;20319:2;20308:9;20304:18;20296:26;;20368:9;20362:4;20358:20;20354:1;20343:9;20339:17;20332:47;20396:131;20522:4;20396:131;:::i;:::-;20388:139;;20115:419;;;:::o;20540:180::-;20588:77;20585:1;20578:88;20685:4;20682:1;20675:15;20709:4;20706:1;20699:15;20726:320;20770:6;20807:1;20801:4;20797:12;20787:22;;20854:1;20848:4;20844:12;20875:18;20865:81;;20931:4;20923:6;20919:17;20909:27;;20865:81;20993:2;20985:6;20982:14;20962:18;20959:38;20956:84;;21012:18;;:::i;:::-;20956:84;20777:269;20726:320;;;:::o;21052:181::-;21192:33;21188:1;21180:6;21176:14;21169:57;21052:181;:::o;21239:366::-;21381:3;21402:67;21466:2;21461:3;21402:67;:::i;:::-;21395:74;;21478:93;21567:3;21478:93;:::i;:::-;21596:2;21591:3;21587:12;21580:19;;21239:366;;;:::o;21611:419::-;21777:4;21815:2;21804:9;21800:18;21792:26;;21864:9;21858:4;21854:20;21850:1;21839:9;21835:17;21828:47;21892:131;22018:4;21892:131;:::i;:::-;21884:139;;21611:419;;;:::o;22036:348::-;22076:7;22099:20;22117:1;22099:20;:::i;:::-;22094:25;;22133:20;22151:1;22133:20;:::i;:::-;22128:25;;22321:1;22253:66;22249:74;22246:1;22243:81;22238:1;22231:9;22224:17;22220:105;22217:131;;;22328:18;;:::i;:::-;22217:131;22376:1;22373;22369:9;22358:20;;22036:348;;;;:::o;22390:180::-;22438:77;22435:1;22428:88;22535:4;22532:1;22525:15;22559:4;22556:1;22549:15;22576:185;22616:1;22633:20;22651:1;22633:20;:::i;:::-;22628:25;;22667:20;22685:1;22667:20;:::i;:::-;22662:25;;22706:1;22696:35;;22711:18;;:::i;:::-;22696:35;22753:1;22750;22746:9;22741:14;;22576:185;;;;:::o;22767:147::-;22868:11;22905:3;22890:18;;22767:147;;;;:::o;22920:114::-;;:::o;23040:398::-;23199:3;23220:83;23301:1;23296:3;23220:83;:::i;:::-;23213:90;;23312:93;23401:3;23312:93;:::i;:::-;23430:1;23425:3;23421:11;23414:18;;23040:398;;;:::o;23444:379::-;23628:3;23650:147;23793:3;23650:147;:::i;:::-;23643:154;;23814:3;23807:10;;23444:379;;;:::o;23829:180::-;23877:77;23874:1;23867:88;23974:4;23971:1;23964:15;23998:4;23995:1;23988:15;24015:233;24054:3;24077:24;24095:5;24077:24;:::i;:::-;24068:33;;24123:66;24116:5;24113:77;24110:103;;24193:18;;:::i;:::-;24110:103;24240:1;24233:5;24229:13;24222:20;;24015:233;;;:::o;24254:168::-;24394:20;24390:1;24382:6;24378:14;24371:44;24254:168;:::o;24428:366::-;24570:3;24591:67;24655:2;24650:3;24591:67;:::i;:::-;24584:74;;24667:93;24756:3;24667:93;:::i;:::-;24785:2;24780:3;24776:12;24769:19;;24428:366;;;:::o;24800:419::-;24966:4;25004:2;24993:9;24989:18;24981:26;;25053:9;25047:4;25043:20;25039:1;25028:9;25024:17;25017:47;25081:131;25207:4;25081:131;:::i;:::-;25073:139;;24800:419;;;:::o;25225:159::-;25365:11;25361:1;25353:6;25349:14;25342:35;25225:159;:::o;25390:365::-;25532:3;25553:66;25617:1;25612:3;25553:66;:::i;:::-;25546:73;;25628:93;25717:3;25628:93;:::i;:::-;25746:2;25741:3;25737:12;25730:19;;25390:365;;;:::o;25761:419::-;25927:4;25965:2;25954:9;25950:18;25942:26;;26014:9;26008:4;26004:20;26000:1;25989:9;25985:17;25978:47;26042:131;26168:4;26042:131;:::i;:::-;26034:139;;25761:419;;;:::o;26186:162::-;26326:14;26322:1;26314:6;26310:14;26303:38;26186:162;:::o;26354:366::-;26496:3;26517:67;26581:2;26576:3;26517:67;:::i;:::-;26510:74;;26593:93;26682:3;26593:93;:::i;:::-;26711:2;26706:3;26702:12;26695:19;;26354:366;;;:::o;26726:419::-;26892:4;26930:2;26919:9;26915:18;26907:26;;26979:9;26973:4;26969:20;26965:1;26954:9;26950:17;26943:47;27007:131;27133:4;27007:131;:::i;:::-;26999:139;;26726:419;;;:::o;27151:174::-;27291:26;27287:1;27279:6;27275:14;27268:50;27151:174;:::o;27331:366::-;27473:3;27494:67;27558:2;27553:3;27494:67;:::i;:::-;27487:74;;27570:93;27659:3;27570:93;:::i;:::-;27688:2;27683:3;27679:12;27672:19;;27331:366;;;:::o;27703:419::-;27869:4;27907:2;27896:9;27892:18;27884:26;;27956:9;27950:4;27946:20;27942:1;27931:9;27927:17;27920:47;27984:131;28110:4;27984:131;:::i;:::-;27976:139;;27703:419;;;:::o;28128:234::-;28268:34;28264:1;28256:6;28252:14;28245:58;28337:17;28332:2;28324:6;28320:15;28313:42;28128:234;:::o;28368:366::-;28510:3;28531:67;28595:2;28590:3;28531:67;:::i;:::-;28524:74;;28607:93;28696:3;28607:93;:::i;:::-;28725:2;28720:3;28716:12;28709:19;;28368:366;;;:::o;28740:419::-;28906:4;28944:2;28933:9;28929:18;28921:26;;28993:9;28987:4;28983:20;28979:1;28968:9;28964:17;28957:47;29021:131;29147:4;29021:131;:::i;:::-;29013:139;;28740:419;;;:::o;29165:148::-;29267:11;29304:3;29289:18;;29165:148;;;;:::o;29319:377::-;29425:3;29453:39;29486:5;29453:39;:::i;:::-;29508:89;29590:6;29585:3;29508:89;:::i;:::-;29501:96;;29606:52;29651:6;29646:3;29639:4;29632:5;29628:16;29606:52;:::i;:::-;29683:6;29678:3;29674:16;29667:23;;29429:267;29319:377;;;;:::o;29702:141::-;29751:4;29774:3;29766:11;;29797:3;29794:1;29787:14;29831:4;29828:1;29818:18;29810:26;;29702:141;;;:::o;29873:845::-;29976:3;30013:5;30007:12;30042:36;30068:9;30042:36;:::i;:::-;30094:89;30176:6;30171:3;30094:89;:::i;:::-;30087:96;;30214:1;30203:9;30199:17;30230:1;30225:137;;;;30376:1;30371:341;;;;30192:520;;30225:137;30309:4;30305:9;30294;30290:25;30285:3;30278:38;30345:6;30340:3;30336:16;30329:23;;30225:137;;30371:341;30438:38;30470:5;30438:38;:::i;:::-;30498:1;30512:154;30526:6;30523:1;30520:13;30512:154;;;30600:7;30594:14;30590:1;30585:3;30581:11;30574:35;30650:1;30641:7;30637:15;30626:26;;30548:4;30545:1;30541:12;30536:17;;30512:154;;;30695:6;30690:3;30686:16;30679:23;;30378:334;;30192:520;;29980:738;;29873:845;;;;:::o;30724:589::-;30949:3;30971:95;31062:3;31053:6;30971:95;:::i;:::-;30964:102;;31083:95;31174:3;31165:6;31083:95;:::i;:::-;31076:102;;31195:92;31283:3;31274:6;31195:92;:::i;:::-;31188:99;;31304:3;31297:10;;30724:589;;;;;;:::o;31319:94::-;31352:8;31400:5;31396:2;31392:14;31371:35;;31319:94;;;:::o;31419:::-;31458:7;31487:20;31501:5;31487:20;:::i;:::-;31476:31;;31419:94;;;:::o;31519:100::-;31558:7;31587:26;31607:5;31587:26;:::i;:::-;31576:37;;31519:100;;;:::o;31625:157::-;31730:45;31750:24;31768:5;31750:24;:::i;:::-;31730:45;:::i;:::-;31725:3;31718:58;31625:157;;:::o;31788:256::-;31900:3;31915:75;31986:3;31977:6;31915:75;:::i;:::-;32015:2;32010:3;32006:12;31999:19;;32035:3;32028:10;;31788:256;;;;:::o;32050:163::-;32190:15;32186:1;32178:6;32174:14;32167:39;32050:163;:::o;32219:366::-;32361:3;32382:67;32446:2;32441:3;32382:67;:::i;:::-;32375:74;;32458:93;32547:3;32458:93;:::i;:::-;32576:2;32571:3;32567:12;32560:19;;32219:366;;;:::o;32591:419::-;32757:4;32795:2;32784:9;32780:18;32772:26;;32844:9;32838:4;32834:20;32830:1;32819:9;32815:17;32808:47;32872:131;32998:4;32872:131;:::i;:::-;32864:139;;32591:419;;;:::o;33016:170::-;33156:22;33152:1;33144:6;33140:14;33133:46;33016:170;:::o;33192:366::-;33334:3;33355:67;33419:2;33414:3;33355:67;:::i;:::-;33348:74;;33431:93;33520:3;33431:93;:::i;:::-;33549:2;33544:3;33540:12;33533:19;;33192:366;;;:::o;33564:419::-;33730:4;33768:2;33757:9;33753:18;33745:26;;33817:9;33811:4;33807:20;33803:1;33792:9;33788:17;33781:47;33845:131;33971:4;33845:131;:::i;:::-;33837:139;;33564:419;;;:::o;33989:164::-;34129:16;34125:1;34117:6;34113:14;34106:40;33989:164;:::o;34159:366::-;34301:3;34322:67;34386:2;34381:3;34322:67;:::i;:::-;34315:74;;34398:93;34487:3;34398:93;:::i;:::-;34516:2;34511:3;34507:12;34500:19;;34159:366;;;:::o;34531:419::-;34697:4;34735:2;34724:9;34720:18;34712:26;;34784:9;34778:4;34774:20;34770:1;34759:9;34755:17;34748:47;34812:131;34938:4;34812:131;:::i;:::-;34804:139;;34531:419;;;:::o;34956:225::-;35096:34;35092:1;35084:6;35080:14;35073:58;35165:8;35160:2;35152:6;35148:15;35141:33;34956:225;:::o;35187:366::-;35329:3;35350:67;35414:2;35409:3;35350:67;:::i;:::-;35343:74;;35426:93;35515:3;35426:93;:::i;:::-;35544:2;35539:3;35535:12;35528:19;;35187:366;;;:::o;35559:419::-;35725:4;35763:2;35752:9;35748:18;35740:26;;35812:9;35806:4;35802:20;35798:1;35787:9;35783:17;35776:47;35840:131;35966:4;35840:131;:::i;:::-;35832:139;;35559:419;;;:::o;35984:98::-;36035:6;36069:5;36063:12;36053:22;;35984:98;;;:::o;36088:168::-;36171:11;36205:6;36200:3;36193:19;36245:4;36240:3;36236:14;36221:29;;36088:168;;;;:::o;36262:360::-;36348:3;36376:38;36408:5;36376:38;:::i;:::-;36430:70;36493:6;36488:3;36430:70;:::i;:::-;36423:77;;36509:52;36554:6;36549:3;36542:4;36535:5;36531:16;36509:52;:::i;:::-;36586:29;36608:6;36586:29;:::i;:::-;36581:3;36577:39;36570:46;;36352:270;36262:360;;;;:::o;36628:640::-;36823:4;36861:3;36850:9;36846:19;36838:27;;36875:71;36943:1;36932:9;36928:17;36919:6;36875:71;:::i;:::-;36956:72;37024:2;37013:9;37009:18;37000:6;36956:72;:::i;:::-;37038;37106:2;37095:9;37091:18;37082:6;37038:72;:::i;:::-;37157:9;37151:4;37147:20;37142:2;37131:9;37127:18;37120:48;37185:76;37256:4;37247:6;37185:76;:::i;:::-;37177:84;;36628:640;;;;;;;:::o;37274:141::-;37330:5;37361:6;37355:13;37346:22;;37377:32;37403:5;37377:32;:::i;:::-;37274:141;;;;:::o;37421:349::-;37490:6;37539:2;37527:9;37518:7;37514:23;37510:32;37507:119;;;37545:79;;:::i;:::-;37507:119;37665:1;37690:63;37745:7;37736:6;37725:9;37721:22;37690:63;:::i;:::-;37680:73;;37636:127;37421:349;;;;:::o;37776:191::-;37816:4;37836:20;37854:1;37836:20;:::i;:::-;37831:25;;37870:20;37888:1;37870:20;:::i;:::-;37865:25;;37909:1;37906;37903:8;37900:34;;;37914:18;;:::i;:::-;37900:34;37959:1;37956;37952:9;37944:17;;37776:191;;;;:::o;37973:176::-;38005:1;38022:20;38040:1;38022:20;:::i;:::-;38017:25;;38056:20;38074:1;38056:20;:::i;:::-;38051:25;;38095:1;38085:35;;38100:18;;:::i;:::-;38085:35;38141:1;38138;38134:9;38129:14;;37973:176;;;;:::o
Swarm Source
ipfs://1d8163d3b982fa4b72411992d07741787ab85405ec39c3c8d66a3599275305f4
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.