ERC-721
Overview
Max Total Supply
5,304 AMA
Holders
200
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 AMALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AutoMintApp
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-14 */ // SPDX-License-Identifier: MIT // 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/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/IERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A is IERC721, IERC721Metadata { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); // 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; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); } // File: erc721a/contracts/ERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @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, IERC721A { using Address for address; using Strings for uint256; // 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 override 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) if (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) if(!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()) if(!_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; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ 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 { 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 (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 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) 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; 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 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/whaleeventsbayc.sol pragma solidity ^0.8.4; contract AutoMintApp is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; uint256 public cost; uint256 public maxSupply; string private BASE_URI; uint256 public MAX_MINT_AMOUNT_PER_TX; bool public IS_SALE_ACTIVE; constructor( uint256 price, uint256 max_Supply, string memory baseUri, uint256 maxMintPerTx, bool isSaleActive ) ERC721A("AutoMintApp", "AMA") { cost = price; maxSupply = max_Supply; BASE_URI = baseUri; MAX_MINT_AMOUNT_PER_TX = maxMintPerTx; IS_SALE_ACTIVE = isSaleActive; } /** GETTERS **/ function _baseURI() internal view virtual override returns (string memory) { return BASE_URI; } /** SETTERS **/ function setPrice(uint256 customPrice) external onlyOwner { cost = customPrice; } function lowerMaxSupply(uint256 newMaxSupply) external onlyOwner { require(newMaxSupply >= _currentIndex, "Invalid new max supply"); maxSupply = newMaxSupply; } function setBaseURI(string memory customBaseURI_) external onlyOwner { BASE_URI = customBaseURI_; } function setMaxMintPerTx(uint256 maxMintPerTx) external onlyOwner { MAX_MINT_AMOUNT_PER_TX = maxMintPerTx; } function setSaleActive(bool saleIsActive) external onlyOwner { IS_SALE_ACTIVE = saleIsActive; } /** MINT **/ modifier mintCompliance(uint256 _mintAmount) { require( _mintAmount > 0 && _mintAmount <= MAX_MINT_AMOUNT_PER_TX, "Invalid mint amount!" ); require( _currentIndex + _mintAmount <= maxSupply, "Max supply exceeded!" ); _; } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(IS_SALE_ACTIVE, "Sale is not active!"); uint256 price = cost * _mintAmount; require(msg.value >= price, "Insufficient funds!"); _safeMint(msg.sender, _mintAmount); } function godMint(address _to, uint256 _mintAmount) public mintCompliance(_mintAmount) onlyOwner { _safeMint(_to, _mintAmount); } /** PAYOUT **/ function withdraw() public onlyOwner nonReentrant { uint256 balance = address(this).balance; Address.sendValue( payable(0x9623B763aAB68154C188709a8A81797aA53f6CC7), balance ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"max_Supply","type":"uint256"},{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"},{"internalType":"bool","name":"isSaleActive","type":"bool"}],"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"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[],"name":"IS_SALE_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_AMOUNT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"godMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"lowerMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"string","name":"customBaseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"customPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"saleIsActive","type":"bool"}],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003f3f38038062003f3f833981810160405281019062000037919062000500565b6040518060400160405280600b81526020017f4175746f4d696e744170700000000000000000000000000000000000000000008152506040518060400160405280600381526020017f414d4100000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000bb9291906200023b565b508060039080519060200190620000d49291906200023b565b50620000e56200016860201b60201c565b60008190555050506200010d620001016200016d60201b60201c565b6200017560201b60201c565b600160098190555084600a8190555083600b8190555082600c90805190602001906200013b9291906200023b565b5081600d8190555080600e60006101000a81548160ff02191690831515021790555050505050506200060b565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024990620005d6565b90600052602060002090601f0160209004810192826200026d5760008555620002b9565b82601f106200028857805160ff1916838001178555620002b9565b82800160010185558215620002b9579182015b82811115620002b85782518255916020019190600101906200029b565b5b509050620002c89190620002cc565b5090565b5b80821115620002e7576000816000905550600101620002cd565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6200031481620002ff565b81146200032057600080fd5b50565b600081519050620003348162000309565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200038f8262000344565b810181811067ffffffffffffffff82111715620003b157620003b062000355565b5b80604052505050565b6000620003c6620002eb565b9050620003d4828262000384565b919050565b600067ffffffffffffffff821115620003f757620003f662000355565b5b620004028262000344565b9050602081019050919050565b60005b838110156200042f57808201518184015260208101905062000412565b838111156200043f576000848401525b50505050565b60006200045c6200045684620003d9565b620003ba565b9050828152602081018484840111156200047b576200047a6200033f565b5b620004888482856200040f565b509392505050565b600082601f830112620004a857620004a76200033a565b5b8151620004ba84826020860162000445565b91505092915050565b60008115159050919050565b620004da81620004c3565b8114620004e657600080fd5b50565b600081519050620004fa81620004cf565b92915050565b600080600080600060a086880312156200051f576200051e620002f5565b5b60006200052f8882890162000323565b9550506020620005428882890162000323565b945050604086015167ffffffffffffffff811115620005665762000565620002fa565b5b620005748882890162000490565b9350506060620005878882890162000323565b92505060806200059a88828901620004e9565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005ef57607f821691505b602082108103620006055762000604620005a7565b5b50919050565b613924806200061b6000396000f3fe6080604052600436106101c25760003560e01c806370a08231116100f7578063a0712d6811610095578063c87b56dd11610064578063c87b56dd146105f5578063d5abeb0114610632578063e985e9c51461065d578063f2fde38b1461069a576101c2565b8063a0712d681461055e578063a22cb4651461057a578063b88d4fde146105a3578063c4e9374d146105cc576101c2565b8063841718a6116100d1578063841718a6146104b65780638da5cb5b146104df57806391b7f5ed1461050a57806395d89b4114610533576101c2565b806370a0823114610437578063715018a61461047457806376d02b711461048b576101c2565b806323b872dd1161016457806342842e0e1161013e57806342842e0e1461037f57806355f804b3146103a8578063616cdb1e146103d15780636352211e146103fa576101c2565b806323b872dd146103165780633ccfd60b1461033f57806341f4a21e14610356576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806309ef65271461029557806313faede6146102c057806318160ddd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906129f8565b6106c3565b6040516101fb9190612a40565b60405180910390f35b34801561021057600080fd5b506102196107a5565b6040516102269190612af4565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612b4c565b610837565b6040516102639190612bba565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612c01565b6108b3565b005b3480156102a157600080fd5b506102aa6109b7565b6040516102b79190612c50565b60405180910390f35b3480156102cc57600080fd5b506102d56109bd565b6040516102e29190612c50565b60405180910390f35b3480156102f757600080fd5b506103006109c3565b60405161030d9190612c50565b60405180910390f35b34801561032257600080fd5b5061033d60048036038101906103389190612c6b565b6109da565b005b34801561034b57600080fd5b506103546109ea565b005b34801561036257600080fd5b5061037d60048036038101906103789190612c01565b610ae1565b005b34801561038b57600080fd5b506103a660048036038101906103a19190612c6b565b610c10565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612df3565b610c30565b005b3480156103dd57600080fd5b506103f860048036038101906103f39190612b4c565b610cc6565b005b34801561040657600080fd5b50610421600480360381019061041c9190612b4c565b610d4c565b60405161042e9190612bba565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612e3c565b610d62565b60405161046b9190612c50565b60405180910390f35b34801561048057600080fd5b50610489610e31565b005b34801561049757600080fd5b506104a0610eb9565b6040516104ad9190612a40565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190612e95565b610ecc565b005b3480156104eb57600080fd5b506104f4610f65565b6040516105019190612bba565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190612b4c565b610f8f565b005b34801561053f57600080fd5b50610548611015565b6040516105559190612af4565b60405180910390f35b61057860048036038101906105739190612b4c565b6110a7565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612ec2565b6111fe565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190612fa3565b611375565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190612b4c565b6113ed565b005b34801561060157600080fd5b5061061c60048036038101906106179190612b4c565b6114b8565b6040516106299190612af4565b60405180910390f35b34801561063e57600080fd5b50610647611556565b6040516106549190612c50565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613026565b61155c565b6040516106919190612a40565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190612e3c565b6115f0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061078e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079e575061079d826116e7565b5b9050919050565b6060600280546107b490613095565b80601f01602080910402602001604051908101604052809291908181526020018280546107e090613095565b801561082d5780601f106108025761010080835404028352916020019161082d565b820191906000526020600020905b81548152906001019060200180831161081057829003601f168201915b5050505050905090565b600061084282611751565b610878576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108be82610d4c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610925576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094461179f565b73ffffffffffffffffffffffffffffffffffffffff16146109a7576109708161096b61179f565b61155c565b6109a6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6109b28383836117a7565b505050565b600d5481565b600a5481565b60006109cd611859565b6001546000540303905090565b6109e583838361185e565b505050565b6109f261179f565b73ffffffffffffffffffffffffffffffffffffffff16610a10610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5d90613112565b60405180910390fd5b600260095403610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa29061317e565b60405180910390fd5b60026009819055506000479050610ad6739623b763aab68154c188709a8a81797aa53f6cc782611d12565b506001600981905550565b80600081118015610af45750600d548111155b610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a906131ea565b60405180910390fd5b600b5481600054610b449190613239565b1115610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906132db565b60405180910390fd5b610b8d61179f565b73ffffffffffffffffffffffffffffffffffffffff16610bab610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613112565b60405180910390fd5b610c0b8383611e06565b505050565b610c2b83838360405180602001604052806000815250611375565b505050565b610c3861179f565b73ffffffffffffffffffffffffffffffffffffffff16610c56610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390613112565b60405180910390fd5b80600c9080519060200190610cc29291906128a6565b5050565b610cce61179f565b73ffffffffffffffffffffffffffffffffffffffff16610cec610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613112565b60405180910390fd5b80600d8190555050565b6000610d5782611e24565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dc9576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e3961179f565b73ffffffffffffffffffffffffffffffffffffffff16610e57610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490613112565b60405180910390fd5b610eb760006120af565b565b600e60009054906101000a900460ff1681565b610ed461179f565b73ffffffffffffffffffffffffffffffffffffffff16610ef2610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613112565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f9761179f565b73ffffffffffffffffffffffffffffffffffffffff16610fb5610f65565b73ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290613112565b60405180910390fd5b80600a8190555050565b60606003805461102490613095565b80601f016020809104026020016040519081016040528092919081815260200182805461105090613095565b801561109d5780601f106110725761010080835404028352916020019161109d565b820191906000526020600020905b81548152906001019060200180831161108057829003601f168201915b5050505050905090565b806000811180156110ba5750600d548111155b6110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f0906131ea565b60405180910390fd5b600b548160005461110a9190613239565b111561114b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611142906132db565b60405180910390fd5b600e60009054906101000a900460ff1661119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190613347565b60405180910390fd5b600082600a546111aa9190613367565b9050803410156111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e69061340d565b60405180910390fd5b6111f93384611e06565b505050565b61120661179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361126a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061127761179f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661132461179f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113699190612a40565b60405180910390a35050565b61138084848461185e565b61139f8373ffffffffffffffffffffffffffffffffffffffff16612175565b156113e7576113b084848484612198565b6113e6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6113f561179f565b73ffffffffffffffffffffffffffffffffffffffff16611413610f65565b73ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090613112565b60405180910390fd5b6000548110156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613479565b60405180910390fd5b80600b8190555050565b60606114c382611751565b6114f9576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115036122e8565b90506000815103611523576040518060200160405280600081525061154e565b8061152d8461237a565b60405160200161153e9291906134d5565b6040516020818303038152906040525b915050919050565b600b5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115f861179f565b73ffffffffffffffffffffffffffffffffffffffff16611616610f65565b73ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613112565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d29061356b565b60405180910390fd5b6116e4816120af565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161175c611859565b1115801561176b575060005482105b8015611798575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061186982611e24565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146118d4576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166118f561179f565b73ffffffffffffffffffffffffffffffffffffffff16148061192457506119238561191e61179f565b61155c565b5b80611969575061193261179f565b73ffffffffffffffffffffffffffffffffffffffff1661195184610837565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806119a2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a08576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a1585858560016124da565b611a21600084876117a7565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611ca0576000548214611c9f57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d0b85858560016124e0565b5050505050565b80471015611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c906135d7565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611d7b90613628565b60006040518083038185875af1925050503d8060008114611db8576040519150601f19603f3d011682016040523d82523d6000602084013e611dbd565b606091505b5050905080611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df8906136af565b60405180910390fd5b505050565b611e208282604051806020016040528060008152506124e6565b5050565b611e2c61292c565b600082905080611e3a611859565b1161207857600054811015612077576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161207557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f595780925050506120aa565b5b60011561207457818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461206f5780925050506120aa565b611f5a565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121be61179f565b8786866040518563ffffffff1660e01b81526004016121e09493929190613724565b6020604051808303816000875af192505050801561221c57506040513d601f19601f820116820180604052508101906122199190613785565b60015b612295573d806000811461224c576040519150601f19603f3d011682016040523d82523d6000602084013e612251565b606091505b50600081510361228d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c80546122f790613095565b80601f016020809104026020016040519081016040528092919081815260200182805461232390613095565b80156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b5050505050905090565b6060600082036123c1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124d5565b600082905060005b600082146123f35780806123dc906137b2565b915050600a826123ec9190613829565b91506123c9565b60008167ffffffffffffffff81111561240f5761240e612cc8565b5b6040519080825280601f01601f1916602001820160405280156124415781602001600182028036833780820191505090505b5090505b600085146124ce5760018261245a919061385a565b9150600a85612469919061388e565b60306124759190613239565b60f81b81838151811061248b5761248a6138bf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124c79190613829565b9450612445565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612552576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000830361258c576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61259960008583866124da565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000848201905061275a8673ffffffffffffffffffffffffffffffffffffffff16612175565b1561281f575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127cf6000878480600101955087612198565b612805576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061276057826000541461281a57600080fd5b61288a565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612820575b8160008190555050506128a060008583866124e0565b50505050565b8280546128b290613095565b90600052602060002090601f0160209004810192826128d4576000855561291b565b82601f106128ed57805160ff191683800117855561291b565b8280016001018555821561291b579182015b8281111561291a5782518255916020019190600101906128ff565b5b509050612928919061296f565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612988576000816000905550600101612970565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129d5816129a0565b81146129e057600080fd5b50565b6000813590506129f2816129cc565b92915050565b600060208284031215612a0e57612a0d612996565b5b6000612a1c848285016129e3565b91505092915050565b60008115159050919050565b612a3a81612a25565b82525050565b6000602082019050612a556000830184612a31565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a95578082015181840152602081019050612a7a565b83811115612aa4576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ac682612a5b565b612ad08185612a66565b9350612ae0818560208601612a77565b612ae981612aaa565b840191505092915050565b60006020820190508181036000830152612b0e8184612abb565b905092915050565b6000819050919050565b612b2981612b16565b8114612b3457600080fd5b50565b600081359050612b4681612b20565b92915050565b600060208284031215612b6257612b61612996565b5b6000612b7084828501612b37565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ba482612b79565b9050919050565b612bb481612b99565b82525050565b6000602082019050612bcf6000830184612bab565b92915050565b612bde81612b99565b8114612be957600080fd5b50565b600081359050612bfb81612bd5565b92915050565b60008060408385031215612c1857612c17612996565b5b6000612c2685828601612bec565b9250506020612c3785828601612b37565b9150509250929050565b612c4a81612b16565b82525050565b6000602082019050612c656000830184612c41565b92915050565b600080600060608486031215612c8457612c83612996565b5b6000612c9286828701612bec565b9350506020612ca386828701612bec565b9250506040612cb486828701612b37565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d0082612aaa565b810181811067ffffffffffffffff82111715612d1f57612d1e612cc8565b5b80604052505050565b6000612d3261298c565b9050612d3e8282612cf7565b919050565b600067ffffffffffffffff821115612d5e57612d5d612cc8565b5b612d6782612aaa565b9050602081019050919050565b82818337600083830152505050565b6000612d96612d9184612d43565b612d28565b905082815260208101848484011115612db257612db1612cc3565b5b612dbd848285612d74565b509392505050565b600082601f830112612dda57612dd9612cbe565b5b8135612dea848260208601612d83565b91505092915050565b600060208284031215612e0957612e08612996565b5b600082013567ffffffffffffffff811115612e2757612e2661299b565b5b612e3384828501612dc5565b91505092915050565b600060208284031215612e5257612e51612996565b5b6000612e6084828501612bec565b91505092915050565b612e7281612a25565b8114612e7d57600080fd5b50565b600081359050612e8f81612e69565b92915050565b600060208284031215612eab57612eaa612996565b5b6000612eb984828501612e80565b91505092915050565b60008060408385031215612ed957612ed8612996565b5b6000612ee785828601612bec565b9250506020612ef885828601612e80565b9150509250929050565b600067ffffffffffffffff821115612f1d57612f1c612cc8565b5b612f2682612aaa565b9050602081019050919050565b6000612f46612f4184612f02565b612d28565b905082815260208101848484011115612f6257612f61612cc3565b5b612f6d848285612d74565b509392505050565b600082601f830112612f8a57612f89612cbe565b5b8135612f9a848260208601612f33565b91505092915050565b60008060008060808587031215612fbd57612fbc612996565b5b6000612fcb87828801612bec565b9450506020612fdc87828801612bec565b9350506040612fed87828801612b37565b925050606085013567ffffffffffffffff81111561300e5761300d61299b565b5b61301a87828801612f75565b91505092959194509250565b6000806040838503121561303d5761303c612996565b5b600061304b85828601612bec565b925050602061305c85828601612bec565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130ad57607f821691505b6020821081036130c0576130bf613066565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130fc602083612a66565b9150613107826130c6565b602082019050919050565b6000602082019050818103600083015261312b816130ef565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613168601f83612a66565b915061317382613132565b602082019050919050565b600060208201905081810360008301526131978161315b565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006131d4601483612a66565b91506131df8261319e565b602082019050919050565b60006020820190508181036000830152613203816131c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061324482612b16565b915061324f83612b16565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132845761328361320a565b5b828201905092915050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006132c5601483612a66565b91506132d08261328f565b602082019050919050565b600060208201905081810360008301526132f4816132b8565b9050919050565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b6000613331601383612a66565b915061333c826132fb565b602082019050919050565b6000602082019050818103600083015261336081613324565b9050919050565b600061337282612b16565b915061337d83612b16565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133b6576133b561320a565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006133f7601383612a66565b9150613402826133c1565b602082019050919050565b60006020820190508181036000830152613426816133ea565b9050919050565b7f496e76616c6964206e6577206d617820737570706c7900000000000000000000600082015250565b6000613463601683612a66565b915061346e8261342d565b602082019050919050565b6000602082019050818103600083015261349281613456565b9050919050565b600081905092915050565b60006134af82612a5b565b6134b98185613499565b93506134c9818560208601612a77565b80840191505092915050565b60006134e182856134a4565b91506134ed82846134a4565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613555602683612a66565b9150613560826134f9565b604082019050919050565b6000602082019050818103600083015261358481613548565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006135c1601d83612a66565b91506135cc8261358b565b602082019050919050565b600060208201905081810360008301526135f0816135b4565b9050919050565b600081905092915050565b50565b60006136126000836135f7565b915061361d82613602565b600082019050919050565b600061363382613605565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613699603a83612a66565b91506136a48261363d565b604082019050919050565b600060208201905081810360008301526136c88161368c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136f6826136cf565b61370081856136da565b9350613710818560208601612a77565b61371981612aaa565b840191505092915050565b60006080820190506137396000830187612bab565b6137466020830186612bab565b6137536040830185612c41565b818103606083015261376581846136eb565b905095945050505050565b60008151905061377f816129cc565b92915050565b60006020828403121561379b5761379a612996565b5b60006137a984828501613770565b91505092915050565b60006137bd82612b16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137ef576137ee61320a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061383482612b16565b915061383f83612b16565b92508261384f5761384e6137fa565b5b828204905092915050565b600061386582612b16565b915061387083612b16565b9250828210156138835761388261320a565b5b828203905092915050565b600061389982612b16565b91506138a483612b16565b9250826138b4576138b36137fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122019e73e573f64604d3e07a39ee7cd2de5164fc32975e9b8caf6dfefa55cd4b51b64736f6c634300080e00330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001e68747470733a2f2f6175746f6d696e742e6170702f6d657461646174612f0000
Deployed Bytecode
0x6080604052600436106101c25760003560e01c806370a08231116100f7578063a0712d6811610095578063c87b56dd11610064578063c87b56dd146105f5578063d5abeb0114610632578063e985e9c51461065d578063f2fde38b1461069a576101c2565b8063a0712d681461055e578063a22cb4651461057a578063b88d4fde146105a3578063c4e9374d146105cc576101c2565b8063841718a6116100d1578063841718a6146104b65780638da5cb5b146104df57806391b7f5ed1461050a57806395d89b4114610533576101c2565b806370a0823114610437578063715018a61461047457806376d02b711461048b576101c2565b806323b872dd1161016457806342842e0e1161013e57806342842e0e1461037f57806355f804b3146103a8578063616cdb1e146103d15780636352211e146103fa576101c2565b806323b872dd146103165780633ccfd60b1461033f57806341f4a21e14610356576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806309ef65271461029557806313faede6146102c057806318160ddd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906129f8565b6106c3565b6040516101fb9190612a40565b60405180910390f35b34801561021057600080fd5b506102196107a5565b6040516102269190612af4565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612b4c565b610837565b6040516102639190612bba565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612c01565b6108b3565b005b3480156102a157600080fd5b506102aa6109b7565b6040516102b79190612c50565b60405180910390f35b3480156102cc57600080fd5b506102d56109bd565b6040516102e29190612c50565b60405180910390f35b3480156102f757600080fd5b506103006109c3565b60405161030d9190612c50565b60405180910390f35b34801561032257600080fd5b5061033d60048036038101906103389190612c6b565b6109da565b005b34801561034b57600080fd5b506103546109ea565b005b34801561036257600080fd5b5061037d60048036038101906103789190612c01565b610ae1565b005b34801561038b57600080fd5b506103a660048036038101906103a19190612c6b565b610c10565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612df3565b610c30565b005b3480156103dd57600080fd5b506103f860048036038101906103f39190612b4c565b610cc6565b005b34801561040657600080fd5b50610421600480360381019061041c9190612b4c565b610d4c565b60405161042e9190612bba565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612e3c565b610d62565b60405161046b9190612c50565b60405180910390f35b34801561048057600080fd5b50610489610e31565b005b34801561049757600080fd5b506104a0610eb9565b6040516104ad9190612a40565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190612e95565b610ecc565b005b3480156104eb57600080fd5b506104f4610f65565b6040516105019190612bba565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190612b4c565b610f8f565b005b34801561053f57600080fd5b50610548611015565b6040516105559190612af4565b60405180910390f35b61057860048036038101906105739190612b4c565b6110a7565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612ec2565b6111fe565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190612fa3565b611375565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190612b4c565b6113ed565b005b34801561060157600080fd5b5061061c60048036038101906106179190612b4c565b6114b8565b6040516106299190612af4565b60405180910390f35b34801561063e57600080fd5b50610647611556565b6040516106549190612c50565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613026565b61155c565b6040516106919190612a40565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc9190612e3c565b6115f0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061078e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079e575061079d826116e7565b5b9050919050565b6060600280546107b490613095565b80601f01602080910402602001604051908101604052809291908181526020018280546107e090613095565b801561082d5780601f106108025761010080835404028352916020019161082d565b820191906000526020600020905b81548152906001019060200180831161081057829003601f168201915b5050505050905090565b600061084282611751565b610878576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108be82610d4c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610925576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094461179f565b73ffffffffffffffffffffffffffffffffffffffff16146109a7576109708161096b61179f565b61155c565b6109a6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6109b28383836117a7565b505050565b600d5481565b600a5481565b60006109cd611859565b6001546000540303905090565b6109e583838361185e565b505050565b6109f261179f565b73ffffffffffffffffffffffffffffffffffffffff16610a10610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5d90613112565b60405180910390fd5b600260095403610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa29061317e565b60405180910390fd5b60026009819055506000479050610ad6739623b763aab68154c188709a8a81797aa53f6cc782611d12565b506001600981905550565b80600081118015610af45750600d548111155b610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a906131ea565b60405180910390fd5b600b5481600054610b449190613239565b1115610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906132db565b60405180910390fd5b610b8d61179f565b73ffffffffffffffffffffffffffffffffffffffff16610bab610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613112565b60405180910390fd5b610c0b8383611e06565b505050565b610c2b83838360405180602001604052806000815250611375565b505050565b610c3861179f565b73ffffffffffffffffffffffffffffffffffffffff16610c56610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390613112565b60405180910390fd5b80600c9080519060200190610cc29291906128a6565b5050565b610cce61179f565b73ffffffffffffffffffffffffffffffffffffffff16610cec610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613112565b60405180910390fd5b80600d8190555050565b6000610d5782611e24565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dc9576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e3961179f565b73ffffffffffffffffffffffffffffffffffffffff16610e57610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490613112565b60405180910390fd5b610eb760006120af565b565b600e60009054906101000a900460ff1681565b610ed461179f565b73ffffffffffffffffffffffffffffffffffffffff16610ef2610f65565b73ffffffffffffffffffffffffffffffffffffffff1614610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613112565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f9761179f565b73ffffffffffffffffffffffffffffffffffffffff16610fb5610f65565b73ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290613112565b60405180910390fd5b80600a8190555050565b60606003805461102490613095565b80601f016020809104026020016040519081016040528092919081815260200182805461105090613095565b801561109d5780601f106110725761010080835404028352916020019161109d565b820191906000526020600020905b81548152906001019060200180831161108057829003601f168201915b5050505050905090565b806000811180156110ba5750600d548111155b6110f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f0906131ea565b60405180910390fd5b600b548160005461110a9190613239565b111561114b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611142906132db565b60405180910390fd5b600e60009054906101000a900460ff1661119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190613347565b60405180910390fd5b600082600a546111aa9190613367565b9050803410156111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e69061340d565b60405180910390fd5b6111f93384611e06565b505050565b61120661179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361126a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061127761179f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661132461179f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113699190612a40565b60405180910390a35050565b61138084848461185e565b61139f8373ffffffffffffffffffffffffffffffffffffffff16612175565b156113e7576113b084848484612198565b6113e6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6113f561179f565b73ffffffffffffffffffffffffffffffffffffffff16611413610f65565b73ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090613112565b60405180910390fd5b6000548110156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613479565b60405180910390fd5b80600b8190555050565b60606114c382611751565b6114f9576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115036122e8565b90506000815103611523576040518060200160405280600081525061154e565b8061152d8461237a565b60405160200161153e9291906134d5565b6040516020818303038152906040525b915050919050565b600b5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115f861179f565b73ffffffffffffffffffffffffffffffffffffffff16611616610f65565b73ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613112565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d29061356b565b60405180910390fd5b6116e4816120af565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161175c611859565b1115801561176b575060005482105b8015611798575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061186982611e24565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146118d4576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166118f561179f565b73ffffffffffffffffffffffffffffffffffffffff16148061192457506119238561191e61179f565b61155c565b5b80611969575061193261179f565b73ffffffffffffffffffffffffffffffffffffffff1661195184610837565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806119a2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a08576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a1585858560016124da565b611a21600084876117a7565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611ca0576000548214611c9f57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d0b85858560016124e0565b5050505050565b80471015611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c906135d7565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611d7b90613628565b60006040518083038185875af1925050503d8060008114611db8576040519150601f19603f3d011682016040523d82523d6000602084013e611dbd565b606091505b5050905080611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df8906136af565b60405180910390fd5b505050565b611e208282604051806020016040528060008152506124e6565b5050565b611e2c61292c565b600082905080611e3a611859565b1161207857600054811015612077576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161207557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f595780925050506120aa565b5b60011561207457818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461206f5780925050506120aa565b611f5a565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121be61179f565b8786866040518563ffffffff1660e01b81526004016121e09493929190613724565b6020604051808303816000875af192505050801561221c57506040513d601f19601f820116820180604052508101906122199190613785565b60015b612295573d806000811461224c576040519150601f19603f3d011682016040523d82523d6000602084013e612251565b606091505b50600081510361228d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c80546122f790613095565b80601f016020809104026020016040519081016040528092919081815260200182805461232390613095565b80156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b5050505050905090565b6060600082036123c1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124d5565b600082905060005b600082146123f35780806123dc906137b2565b915050600a826123ec9190613829565b91506123c9565b60008167ffffffffffffffff81111561240f5761240e612cc8565b5b6040519080825280601f01601f1916602001820160405280156124415781602001600182028036833780820191505090505b5090505b600085146124ce5760018261245a919061385a565b9150600a85612469919061388e565b60306124759190613239565b60f81b81838151811061248b5761248a6138bf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124c79190613829565b9450612445565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612552576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000830361258c576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61259960008583866124da565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000848201905061275a8673ffffffffffffffffffffffffffffffffffffffff16612175565b1561281f575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127cf6000878480600101955087612198565b612805576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061276057826000541461281a57600080fd5b61288a565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612820575b8160008190555050506128a060008583866124e0565b50505050565b8280546128b290613095565b90600052602060002090601f0160209004810192826128d4576000855561291b565b82601f106128ed57805160ff191683800117855561291b565b8280016001018555821561291b579182015b8281111561291a5782518255916020019190600101906128ff565b5b509050612928919061296f565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612988576000816000905550600101612970565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129d5816129a0565b81146129e057600080fd5b50565b6000813590506129f2816129cc565b92915050565b600060208284031215612a0e57612a0d612996565b5b6000612a1c848285016129e3565b91505092915050565b60008115159050919050565b612a3a81612a25565b82525050565b6000602082019050612a556000830184612a31565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a95578082015181840152602081019050612a7a565b83811115612aa4576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ac682612a5b565b612ad08185612a66565b9350612ae0818560208601612a77565b612ae981612aaa565b840191505092915050565b60006020820190508181036000830152612b0e8184612abb565b905092915050565b6000819050919050565b612b2981612b16565b8114612b3457600080fd5b50565b600081359050612b4681612b20565b92915050565b600060208284031215612b6257612b61612996565b5b6000612b7084828501612b37565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ba482612b79565b9050919050565b612bb481612b99565b82525050565b6000602082019050612bcf6000830184612bab565b92915050565b612bde81612b99565b8114612be957600080fd5b50565b600081359050612bfb81612bd5565b92915050565b60008060408385031215612c1857612c17612996565b5b6000612c2685828601612bec565b9250506020612c3785828601612b37565b9150509250929050565b612c4a81612b16565b82525050565b6000602082019050612c656000830184612c41565b92915050565b600080600060608486031215612c8457612c83612996565b5b6000612c9286828701612bec565b9350506020612ca386828701612bec565b9250506040612cb486828701612b37565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d0082612aaa565b810181811067ffffffffffffffff82111715612d1f57612d1e612cc8565b5b80604052505050565b6000612d3261298c565b9050612d3e8282612cf7565b919050565b600067ffffffffffffffff821115612d5e57612d5d612cc8565b5b612d6782612aaa565b9050602081019050919050565b82818337600083830152505050565b6000612d96612d9184612d43565b612d28565b905082815260208101848484011115612db257612db1612cc3565b5b612dbd848285612d74565b509392505050565b600082601f830112612dda57612dd9612cbe565b5b8135612dea848260208601612d83565b91505092915050565b600060208284031215612e0957612e08612996565b5b600082013567ffffffffffffffff811115612e2757612e2661299b565b5b612e3384828501612dc5565b91505092915050565b600060208284031215612e5257612e51612996565b5b6000612e6084828501612bec565b91505092915050565b612e7281612a25565b8114612e7d57600080fd5b50565b600081359050612e8f81612e69565b92915050565b600060208284031215612eab57612eaa612996565b5b6000612eb984828501612e80565b91505092915050565b60008060408385031215612ed957612ed8612996565b5b6000612ee785828601612bec565b9250506020612ef885828601612e80565b9150509250929050565b600067ffffffffffffffff821115612f1d57612f1c612cc8565b5b612f2682612aaa565b9050602081019050919050565b6000612f46612f4184612f02565b612d28565b905082815260208101848484011115612f6257612f61612cc3565b5b612f6d848285612d74565b509392505050565b600082601f830112612f8a57612f89612cbe565b5b8135612f9a848260208601612f33565b91505092915050565b60008060008060808587031215612fbd57612fbc612996565b5b6000612fcb87828801612bec565b9450506020612fdc87828801612bec565b9350506040612fed87828801612b37565b925050606085013567ffffffffffffffff81111561300e5761300d61299b565b5b61301a87828801612f75565b91505092959194509250565b6000806040838503121561303d5761303c612996565b5b600061304b85828601612bec565b925050602061305c85828601612bec565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130ad57607f821691505b6020821081036130c0576130bf613066565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130fc602083612a66565b9150613107826130c6565b602082019050919050565b6000602082019050818103600083015261312b816130ef565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613168601f83612a66565b915061317382613132565b602082019050919050565b600060208201905081810360008301526131978161315b565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b60006131d4601483612a66565b91506131df8261319e565b602082019050919050565b60006020820190508181036000830152613203816131c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061324482612b16565b915061324f83612b16565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132845761328361320a565b5b828201905092915050565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b60006132c5601483612a66565b91506132d08261328f565b602082019050919050565b600060208201905081810360008301526132f4816132b8565b9050919050565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b6000613331601383612a66565b915061333c826132fb565b602082019050919050565b6000602082019050818103600083015261336081613324565b9050919050565b600061337282612b16565b915061337d83612b16565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133b6576133b561320a565b5b828202905092915050565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b60006133f7601383612a66565b9150613402826133c1565b602082019050919050565b60006020820190508181036000830152613426816133ea565b9050919050565b7f496e76616c6964206e6577206d617820737570706c7900000000000000000000600082015250565b6000613463601683612a66565b915061346e8261342d565b602082019050919050565b6000602082019050818103600083015261349281613456565b9050919050565b600081905092915050565b60006134af82612a5b565b6134b98185613499565b93506134c9818560208601612a77565b80840191505092915050565b60006134e182856134a4565b91506134ed82846134a4565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613555602683612a66565b9150613560826134f9565b604082019050919050565b6000602082019050818103600083015261358481613548565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006135c1601d83612a66565b91506135cc8261358b565b602082019050919050565b600060208201905081810360008301526135f0816135b4565b9050919050565b600081905092915050565b50565b60006136126000836135f7565b915061361d82613602565b600082019050919050565b600061363382613605565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000613699603a83612a66565b91506136a48261363d565b604082019050919050565b600060208201905081810360008301526136c88161368c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006136f6826136cf565b61370081856136da565b9350613710818560208601612a77565b61371981612aaa565b840191505092915050565b60006080820190506137396000830187612bab565b6137466020830186612bab565b6137536040830185612c41565b818103606083015261376581846136eb565b905095945050505050565b60008151905061377f816129cc565b92915050565b60006020828403121561379b5761379a612996565b5b60006137a984828501613770565b91505092915050565b60006137bd82612b16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137ef576137ee61320a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061383482612b16565b915061383f83612b16565b92508261384f5761384e6137fa565b5b828204905092915050565b600061386582612b16565b915061387083612b16565b9250828210156138835761388261320a565b5b828203905092915050565b600061389982612b16565b91506138a483612b16565b9250826138b4576138b36137fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122019e73e573f64604d3e07a39ee7cd2de5164fc32975e9b8caf6dfefa55cd4b51b64736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001e68747470733a2f2f6175746f6d696e742e6170702f6d657461646174612f0000
-----Decoded View---------------
Arg [0] : price (uint256): 0
Arg [1] : max_Supply (uint256): 5000
Arg [2] : baseUri (string): https://automint.app/metadata/
Arg [3] : maxMintPerTx (uint256): 50
Arg [4] : isSaleActive (bool): True
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [6] : 68747470733a2f2f6175746f6d696e742e6170702f6d657461646174612f0000
Deployed Bytecode Sourcemap
50238:2620:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31339:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34454:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35958:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35520:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50422:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50335:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30579:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36823:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52618:237;;;;;;;;;;;;;:::i;:::-;;52414:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37064:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51346:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51474:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34262:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31708:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7524:103;;;;;;;;;;;;;:::i;:::-;;50466:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51604:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6873:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51050:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34623:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52074:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36234:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37320:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51155:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34798:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50361:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36592:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7782:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31339:305;31441:4;31493:25;31478:40;;;:11;:40;;;;:105;;;;31550:33;31535:48;;;:11;:48;;;;31478:105;:158;;;;31600:36;31624:11;31600:23;:36::i;:::-;31478:158;31458:178;;31339:305;;;:::o;34454:100::-;34508:13;34541:5;34534:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34454:100;:::o;35958:204::-;36026:7;36051:16;36059:7;36051;:16::i;:::-;36046:64;;36076:34;;;;;;;;;;;;;;36046:64;36130:15;:24;36146:7;36130:24;;;;;;;;;;;;;;;;;;;;;36123:31;;35958:204;;;:::o;35520:372::-;35593:13;35609:24;35625:7;35609:15;:24::i;:::-;35593:40;;35654:5;35648:11;;:2;:11;;;35644:48;;35668:24;;;;;;;;;;;;;;35644:48;35725:5;35709:21;;:12;:10;:12::i;:::-;:21;;;35705:139;;35736:37;35753:5;35760:12;:10;:12::i;:::-;35736:16;:37::i;:::-;35732:112;;35797:35;;;;;;;;;;;;;;35732:112;35705:139;35856:28;35865:2;35869:7;35878:5;35856:8;:28::i;:::-;35582:310;35520:372;;:::o;50422:37::-;;;;:::o;50335:19::-;;;;:::o;30579:312::-;30632:7;30857:15;:13;:15::i;:::-;30842:12;;30826:13;;:28;:46;30819:53;;30579:312;:::o;36823:170::-;36957:28;36967:4;36973:2;36977:7;36957:9;:28::i;:::-;36823:170;;;:::o;52618:237::-;7104:12;:10;:12::i;:::-;7093:23;;:7;:5;:7::i;:::-;:23;;;7085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1847:1:::1;2445:7;;:19:::0;2437:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1847:1;2578:7;:18;;;;52679:15:::2;52697:21;52679:39;;52731:116;52771:42;52829:7;52731:17;:116::i;:::-;52668:187;1803:1:::1;2757:7;:22;;;;52618:237::o:0;52414:174::-;52505:11;51835:1;51821:11;:15;:56;;;;;51855:22;;51840:11;:37;;51821:56;51799:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;51989:9;;51974:11;51958:13;;:27;;;;:::i;:::-;:40;;51936:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;7104:12:::1;:10;:12::i;:::-;7093:23;;:7;:5;:7::i;:::-;:23;;;7085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52553:27:::2;52563:3;52568:11;52553:9;:27::i;:::-;52414:174:::0;;;:::o;37064:185::-;37202:39;37219:4;37225:2;37229:7;37202:39;;;;;;;;;;;;:16;:39::i;:::-;37064:185;;;:::o;51346:113::-;7104:12;:10;:12::i;:::-;7093:23;;:7;:5;:7::i;:::-;:23;;;7085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51437:14:::1;51426:8;:25;;;;;;;;;;;;:::i;:::-;;51346:113:::0;:::o;51474:122::-;7104:12;:10;:12::i;:::-;7093:23;;:7;:5;:7::i;:::-;:23;;;7085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51576:12:::1;51551:22;:37;;;;51474:122:::0;:::o;34262:125::-;34326:7;34353:21;34366:7;34353:12;:21::i;:::-;:26;;;34346:33;;34262:125;;;:::o;31708:206::-;31772:7;31813:1;31796:19;;:5;:19;;;31792:60;;31824:28;;;;;;;;;;;;;;31792:60;31878:12;:19;31891:5;31878:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31870:36;;31863:43;;31708:206;;;:::o;7524:103::-;7104:12;:10;:12::i;:::-;7093:23;;:7;:5;:7::i;:::-;:23;;;7085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7589:30:::1;7616:1;7589:18;:30::i;:::-;7524:103::o:0;50466:26::-;;;;;;;;;;;;;:::o;51604:109::-;7104:12;:10;:12::i;:::-;7093:23;;:7;:5;:7::i;:::-;:23;;;7085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51693:12:::1;51676:14;;:29;;;;;;;;;;;;;;;;;;51604:109:::0;:::o;6873:87::-;6919:7;6946:6;;;;;;;;;;;6939:13;;6873:87;:::o;51050:95::-;7104:12;:10;:12::i;:::-;7093:23;;:7;:5;:7::i;:::-;:23;;;7085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51126:11:::1;51119:4;:18;;;;51050:95:::0;:::o;34623:104::-;34679:13;34712:7;34705:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34623:104;:::o;52074:332::-;52166:11;51835:1;51821:11;:15;:56;;;;;51855:22;;51840:11;:37;;51821:56;51799:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;51989:9;;51974:11;51958:13;;:27;;;;:::i;:::-;:40;;51936:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;52203:14:::1;;;;;;;;;;;52195:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;52254:13;52277:11;52270:4;;:18;;;;:::i;:::-;52254:34;;52322:5;52309:9;:18;;52301:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;52364:34;52374:10;52386:11;52364:9;:34::i;:::-;52184:222;52074:332:::0;;:::o;36234:287::-;36345:12;:10;:12::i;:::-;36333:24;;:8;:24;;;36329:54;;36366:17;;;;;;;;;;;;;;36329:54;36441:8;36396:18;:32;36415:12;:10;:12::i;:::-;36396:32;;;;;;;;;;;;;;;:42;36429:8;36396:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36494:8;36465:48;;36480:12;:10;:12::i;:::-;36465:48;;;36504:8;36465:48;;;;;;:::i;:::-;;;;;;;;36234:287;;:::o;37320:370::-;37487:28;37497:4;37503:2;37507:7;37487:9;:28::i;:::-;37530:15;:2;:13;;;:15::i;:::-;37526:157;;;37551:56;37582:4;37588:2;37592:7;37601:5;37551:30;:56::i;:::-;37547:136;;37631:40;;;;;;;;;;;;;;37547:136;37526:157;37320:370;;;;:::o;51155:183::-;7104:12;:10;:12::i;:::-;7093:23;;:7;:5;:7::i;:::-;:23;;;7085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51255:13:::1;;51239:12;:29;;51231:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;51318:12;51306:9;:24;;;;51155:183:::0;:::o;34798:318::-;34871:13;34902:16;34910:7;34902;:16::i;:::-;34897:59;;34927:29;;;;;;;;;;;;;;34897:59;34969:21;34993:10;:8;:10::i;:::-;34969:34;;35046:1;35027:7;35021:21;:26;:87;;;;;;;;;;;;;;;;;35074:7;35083:18;:7;:16;:18::i;:::-;35057:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35021:87;35014:94;;;34798:318;;;:::o;50361:24::-;;;;:::o;36592:164::-;36689:4;36713:18;:25;36732:5;36713:25;;;;;;;;;;;;;;;:35;36739:8;36713:35;;;;;;;;;;;;;;;;;;;;;;;;;36706:42;;36592:164;;;;:::o;7782:201::-;7104:12;:10;:12::i;:::-;7093:23;;:7;:5;:7::i;:::-;:23;;;7085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7891:1:::1;7871:22;;:8;:22;;::::0;7863:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7947:28;7966:8;7947:18;:28::i;:::-;7782:201:::0;:::o;19680:157::-;19765:4;19804:25;19789:40;;;:11;:40;;;;19782:47;;19680:157;;;:::o;37945:174::-;38002:4;38045:7;38026:15;:13;:15::i;:::-;:26;;:53;;;;;38066:13;;38056:7;:23;38026:53;:85;;;;;38084:11;:20;38096:7;38084:20;;;;;;;;;;;:27;;;;;;;;;;;;38083:28;38026:85;38019:92;;37945:174;;;:::o;5597:98::-;5650:7;5677:10;5670:17;;5597:98;:::o;47167:196::-;47309:2;47282:15;:24;47298:7;47282:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47347:7;47343:2;47327:28;;47336:5;47327:28;;;;;;;;;;;;47167:196;;;:::o;30353:92::-;30409:7;30353:92;:::o;42115:2130::-;42230:35;42268:21;42281:7;42268:12;:21::i;:::-;42230:59;;42328:4;42306:26;;:13;:18;;;:26;;;42302:67;;42341:28;;;;;;;;;;;;;;42302:67;42382:22;42424:4;42408:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;42445:36;42462:4;42468:12;:10;:12::i;:::-;42445:16;:36::i;:::-;42408:73;:126;;;;42522:12;:10;:12::i;:::-;42498:36;;:20;42510:7;42498:11;:20::i;:::-;:36;;;42408:126;42382:153;;42553:17;42548:66;;42579:35;;;;;;;;;;;;;;42548:66;42643:1;42629:16;;:2;:16;;;42625:52;;42654:23;;;;;;;;;;;;;;42625:52;42690:43;42712:4;42718:2;42722:7;42731:1;42690:21;:43::i;:::-;42798:35;42815:1;42819:7;42828:4;42798:8;:35::i;:::-;43159:1;43129:12;:18;43142:4;43129:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43203:1;43175:12;:16;43188:2;43175:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43221:31;43255:11;:20;43267:7;43255:20;;;;;;;;;;;43221:54;;43306:2;43290:8;:13;;;:18;;;;;;;;;;;;;;;;;;43356:15;43323:8;:23;;;:49;;;;;;;;;;;;;;;;;;43624:19;43656:1;43646:7;:11;43624:33;;43672:31;43706:11;:24;43718:11;43706:24;;;;;;;;;;;43672:58;;43774:1;43749:27;;:8;:13;;;;;;;;;;;;:27;;;43745:384;;43959:13;;43944:11;:28;43940:174;;44013:4;43997:8;:13;;;:20;;;;;;;;;;;;;;;;;;44066:13;:28;;;44040:8;:23;;;:54;;;;;;;;;;;;;;;;;;43940:174;43745:384;43104:1036;;;44176:7;44172:2;44157:27;;44166:4;44157:27;;;;;;;;;;;;44195:42;44216:4;44222:2;44226:7;44235:1;44195:20;:42::i;:::-;42219:2026;;42115:2130;;;:::o;10835:317::-;10950:6;10925:21;:31;;10917:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11004:12;11022:9;:14;;11044:6;11022:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11003:52;;;11074:7;11066:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10906:246;10835:317;;:::o;38203:104::-;38272:27;38282:2;38286:8;38272:27;;;;;;;;;;;;:9;:27::i;:::-;38203:104;;:::o;33089:1111::-;33151:21;;:::i;:::-;33185:12;33200:7;33185:22;;33268:4;33249:15;:13;:15::i;:::-;:23;33245:888;;33285:13;;33278:4;:20;33274:859;;;33319:31;33353:11;:17;33365:4;33353:17;;;;;;;;;;;33319:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33394:9;:16;;;33389:729;;33465:1;33439:28;;:9;:14;;;:28;;;33435:101;;33503:9;33496:16;;;;;;33435:101;33838:261;33845:4;33838:261;;;33878:6;;;;;;;;33923:11;:17;33935:4;33923:17;;;;;;;;;;;33911:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33997:1;33971:28;;:9;:14;;;:28;;;33967:109;;34039:9;34032:16;;;;;;33967:109;33838:261;;;33389:729;33300:833;33274:859;33245:888;34161:31;;;;;;;;;;;;;;33089:1111;;;;:::o;8143:191::-;8217:16;8236:6;;;;;;;;;;;8217:25;;8262:8;8253:6;;:17;;;;;;;;;;;;;;;;;;8317:8;8286:40;;8307:8;8286:40;;;;;;;;;;;;8206:128;8143:191;:::o;9574:326::-;9634:4;9891:1;9869:7;:19;;;:23;9862:30;;9574:326;;;:::o;47855:667::-;48018:4;48055:2;48039:36;;;48076:12;:10;:12::i;:::-;48090:4;48096:7;48105:5;48039:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48035:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48290:1;48273:6;:13;:18;48269:235;;48319:40;;;;;;;;;;;;;;48269:235;48462:6;48456:13;48447:6;48443:2;48439:15;48432:38;48035:480;48168:45;;;48158:55;;;:6;:55;;;;48151:62;;;47855:667;;;;;;:::o;50910:109::-;50970:13;51003:8;50996:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50910:109;:::o;3159:723::-;3215:13;3445:1;3436:5;:10;3432:53;;3463:10;;;;;;;;;;;;;;;;;;;;;3432:53;3495:12;3510:5;3495:20;;3526:14;3551:78;3566:1;3558:4;:9;3551:78;;3584:8;;;;;:::i;:::-;;;;3615:2;3607:10;;;;;:::i;:::-;;;3551:78;;;3639:19;3671:6;3661:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3639:39;;3689:154;3705:1;3696:5;:10;3689:154;;3733:1;3723:11;;;;;:::i;:::-;;;3800:2;3792:5;:10;;;;:::i;:::-;3779:2;:24;;;;:::i;:::-;3766:39;;3749:6;3756;3749:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3829:2;3820:11;;;;;:::i;:::-;;;3689:154;;;3867:6;3853:21;;;;;3159:723;;;;:::o;49170:159::-;;;;;:::o;49988:158::-;;;;;:::o;38680:1749::-;38803:20;38826:13;;38803:36;;38868:1;38854:16;;:2;:16;;;38850:48;;38879:19;;;;;;;;;;;;;;38850:48;38925:1;38913:8;:13;38909:44;;38935:18;;;;;;;;;;;;;;38909:44;38966:61;38996:1;39000:2;39004:12;39018:8;38966:21;:61::i;:::-;39339:8;39304:12;:16;39317:2;39304:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39403:8;39363:12;:16;39376:2;39363:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39462:2;39429:11;:25;39441:12;39429:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;39529:15;39479:11;:25;39491:12;39479:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;39562:20;39585:12;39562:35;;39612:11;39641:8;39626:12;:23;39612:37;;39670:15;:2;:13;;;:15::i;:::-;39666:631;;;39706:313;39762:12;39758:2;39737:38;;39754:1;39737:38;;;;;;;;;;;;39803:69;39842:1;39846:2;39850:14;;;;;;39866:5;39803:30;:69::i;:::-;39798:174;;39908:40;;;;;;;;;;;;;;39798:174;40014:3;39999:12;:18;39706:313;;40100:12;40083:13;;:29;40079:43;;40114:8;;;40079:43;39666:631;;;40163:119;40219:14;;;;;;40215:2;40194:40;;40211:1;40194:40;;;;;;;;;;;;40277:3;40262:12;:18;40163:119;;39666:631;40327:12;40311:13;:28;;;;39279:1072;;40361:60;40390:1;40394:2;40398:12;40412:8;40361:20;:60::i;:::-;38792:1637;38680:1749;;;:::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:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:323::-;9188:6;9237:2;9225:9;9216:7;9212:23;9208:32;9205:119;;;9243:79;;:::i;:::-;9205:119;9363:1;9388:50;9430:7;9421:6;9410:9;9406:22;9388:50;:::i;:::-;9378:60;;9334:114;9132:323;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:307::-;9996:4;10086:18;10078:6;10075:30;10072:56;;;10108:18;;:::i;:::-;10072:56;10146:29;10168:6;10146:29;:::i;:::-;10138:37;;10230:4;10224;10220:15;10212:23;;9935:307;;;:::o;10248:410::-;10325:5;10350:65;10366:48;10407:6;10366:48;:::i;:::-;10350:65;:::i;:::-;10341:74;;10438:6;10431:5;10424:21;10476:4;10469:5;10465:16;10514:3;10505:6;10500:3;10496:16;10493:25;10490:112;;;10521:79;;:::i;:::-;10490:112;10611:41;10645:6;10640:3;10635;10611:41;:::i;:::-;10331:327;10248:410;;;;;:::o;10677:338::-;10732:5;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10906:6;10893:20;10931:78;11005:3;10997:6;10990:4;10982:6;10978:17;10931:78;:::i;:::-;10922:87;;10738:277;10677:338;;;;:::o;11021:943::-;11116:6;11124;11132;11140;11189:3;11177:9;11168:7;11164:23;11160:33;11157:120;;;11196:79;;:::i;:::-;11157:120;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11727:2;11716:9;11712:18;11699:32;11758:18;11750:6;11747:30;11744:117;;;11780:79;;:::i;:::-;11744:117;11885:62;11939:7;11930:6;11919:9;11915:22;11885:62;:::i;:::-;11875:72;;11670:287;11021:943;;;;;;;:::o;11970:474::-;12038:6;12046;12095:2;12083:9;12074:7;12070:23;12066:32;12063:119;;;12101:79;;:::i;:::-;12063:119;12221:1;12246:53;12291:7;12282:6;12271:9;12267:22;12246:53;:::i;:::-;12236:63;;12192:117;12348:2;12374:53;12419:7;12410:6;12399:9;12395:22;12374:53;:::i;:::-;12364:63;;12319:118;11970:474;;;;;:::o;12450:180::-;12498:77;12495:1;12488:88;12595:4;12592:1;12585:15;12619:4;12616:1;12609:15;12636:320;12680:6;12717:1;12711:4;12707:12;12697:22;;12764:1;12758:4;12754:12;12785:18;12775:81;;12841:4;12833:6;12829:17;12819:27;;12775:81;12903:2;12895:6;12892:14;12872:18;12869:38;12866:84;;12922:18;;:::i;:::-;12866:84;12687:269;12636:320;;;:::o;12962:182::-;13102:34;13098:1;13090:6;13086:14;13079:58;12962:182;:::o;13150:366::-;13292:3;13313:67;13377:2;13372:3;13313:67;:::i;:::-;13306:74;;13389:93;13478:3;13389:93;:::i;:::-;13507:2;13502:3;13498:12;13491:19;;13150:366;;;:::o;13522:419::-;13688:4;13726:2;13715:9;13711:18;13703:26;;13775:9;13769:4;13765:20;13761:1;13750:9;13746:17;13739:47;13803:131;13929:4;13803:131;:::i;:::-;13795:139;;13522:419;;;:::o;13947:181::-;14087:33;14083:1;14075:6;14071:14;14064:57;13947:181;:::o;14134:366::-;14276:3;14297:67;14361:2;14356:3;14297:67;:::i;:::-;14290:74;;14373:93;14462:3;14373:93;:::i;:::-;14491:2;14486:3;14482:12;14475:19;;14134:366;;;:::o;14506:419::-;14672:4;14710:2;14699:9;14695:18;14687:26;;14759:9;14753:4;14749:20;14745:1;14734:9;14730:17;14723:47;14787:131;14913:4;14787:131;:::i;:::-;14779:139;;14506:419;;;:::o;14931:170::-;15071:22;15067:1;15059:6;15055:14;15048:46;14931:170;:::o;15107:366::-;15249:3;15270:67;15334:2;15329:3;15270:67;:::i;:::-;15263:74;;15346:93;15435:3;15346:93;:::i;:::-;15464:2;15459:3;15455:12;15448:19;;15107:366;;;:::o;15479:419::-;15645:4;15683:2;15672:9;15668:18;15660:26;;15732:9;15726:4;15722:20;15718:1;15707:9;15703:17;15696:47;15760:131;15886:4;15760:131;:::i;:::-;15752:139;;15479:419;;;:::o;15904:180::-;15952:77;15949:1;15942:88;16049:4;16046:1;16039:15;16073:4;16070:1;16063:15;16090:305;16130:3;16149:20;16167:1;16149:20;:::i;:::-;16144:25;;16183:20;16201:1;16183:20;:::i;:::-;16178:25;;16337:1;16269:66;16265:74;16262:1;16259:81;16256:107;;;16343:18;;:::i;:::-;16256:107;16387:1;16384;16380:9;16373:16;;16090:305;;;;:::o;16401:170::-;16541:22;16537:1;16529:6;16525:14;16518:46;16401:170;:::o;16577:366::-;16719:3;16740:67;16804:2;16799:3;16740:67;:::i;:::-;16733:74;;16816:93;16905:3;16816:93;:::i;:::-;16934:2;16929:3;16925:12;16918:19;;16577:366;;;:::o;16949:419::-;17115:4;17153:2;17142:9;17138:18;17130:26;;17202:9;17196:4;17192:20;17188:1;17177:9;17173:17;17166:47;17230:131;17356:4;17230:131;:::i;:::-;17222:139;;16949:419;;;:::o;17374:169::-;17514:21;17510:1;17502:6;17498:14;17491:45;17374:169;:::o;17549:366::-;17691:3;17712:67;17776:2;17771:3;17712:67;:::i;:::-;17705:74;;17788:93;17877:3;17788:93;:::i;:::-;17906:2;17901:3;17897:12;17890:19;;17549:366;;;:::o;17921:419::-;18087:4;18125:2;18114:9;18110:18;18102:26;;18174:9;18168:4;18164:20;18160:1;18149:9;18145:17;18138:47;18202:131;18328:4;18202:131;:::i;:::-;18194:139;;17921:419;;;:::o;18346:348::-;18386:7;18409:20;18427:1;18409:20;:::i;:::-;18404:25;;18443:20;18461:1;18443:20;:::i;:::-;18438:25;;18631:1;18563:66;18559:74;18556:1;18553:81;18548:1;18541:9;18534:17;18530:105;18527:131;;;18638:18;;:::i;:::-;18527:131;18686:1;18683;18679:9;18668:20;;18346:348;;;;:::o;18700:169::-;18840:21;18836:1;18828:6;18824:14;18817:45;18700:169;:::o;18875:366::-;19017:3;19038:67;19102:2;19097:3;19038:67;:::i;:::-;19031:74;;19114:93;19203:3;19114:93;:::i;:::-;19232:2;19227:3;19223:12;19216:19;;18875:366;;;:::o;19247:419::-;19413:4;19451:2;19440:9;19436:18;19428:26;;19500:9;19494:4;19490:20;19486:1;19475:9;19471:17;19464:47;19528:131;19654:4;19528:131;:::i;:::-;19520:139;;19247:419;;;:::o;19672:172::-;19812:24;19808:1;19800:6;19796:14;19789:48;19672:172;:::o;19850:366::-;19992:3;20013:67;20077:2;20072:3;20013:67;:::i;:::-;20006:74;;20089:93;20178:3;20089:93;:::i;:::-;20207:2;20202:3;20198:12;20191:19;;19850:366;;;:::o;20222:419::-;20388:4;20426:2;20415:9;20411:18;20403:26;;20475:9;20469:4;20465:20;20461:1;20450:9;20446:17;20439:47;20503:131;20629:4;20503:131;:::i;:::-;20495:139;;20222:419;;;:::o;20647:148::-;20749:11;20786:3;20771:18;;20647:148;;;;:::o;20801:377::-;20907:3;20935:39;20968:5;20935:39;:::i;:::-;20990:89;21072:6;21067:3;20990:89;:::i;:::-;20983:96;;21088:52;21133:6;21128:3;21121:4;21114:5;21110:16;21088:52;:::i;:::-;21165:6;21160:3;21156:16;21149:23;;20911:267;20801:377;;;;:::o;21184:435::-;21364:3;21386:95;21477:3;21468:6;21386:95;:::i;:::-;21379:102;;21498:95;21589:3;21580:6;21498:95;:::i;:::-;21491:102;;21610:3;21603:10;;21184:435;;;;;:::o;21625:225::-;21765:34;21761:1;21753:6;21749:14;21742:58;21834:8;21829:2;21821:6;21817:15;21810:33;21625:225;:::o;21856:366::-;21998:3;22019:67;22083:2;22078:3;22019:67;:::i;:::-;22012:74;;22095:93;22184:3;22095:93;:::i;:::-;22213:2;22208:3;22204:12;22197:19;;21856:366;;;:::o;22228:419::-;22394:4;22432:2;22421:9;22417:18;22409:26;;22481:9;22475:4;22471:20;22467:1;22456:9;22452:17;22445:47;22509:131;22635:4;22509:131;:::i;:::-;22501:139;;22228:419;;;:::o;22653:179::-;22793:31;22789:1;22781:6;22777:14;22770:55;22653:179;:::o;22838:366::-;22980:3;23001:67;23065:2;23060:3;23001:67;:::i;:::-;22994:74;;23077:93;23166:3;23077:93;:::i;:::-;23195:2;23190:3;23186:12;23179:19;;22838:366;;;:::o;23210:419::-;23376:4;23414:2;23403:9;23399:18;23391:26;;23463:9;23457:4;23453:20;23449:1;23438:9;23434:17;23427:47;23491:131;23617:4;23491:131;:::i;:::-;23483:139;;23210:419;;;:::o;23635:147::-;23736:11;23773:3;23758:18;;23635:147;;;;:::o;23788:114::-;;:::o;23908:398::-;24067:3;24088:83;24169:1;24164:3;24088:83;:::i;:::-;24081:90;;24180:93;24269:3;24180:93;:::i;:::-;24298:1;24293:3;24289:11;24282:18;;23908:398;;;:::o;24312:379::-;24496:3;24518:147;24661:3;24518:147;:::i;:::-;24511:154;;24682:3;24675:10;;24312:379;;;:::o;24697:245::-;24837:34;24833:1;24825:6;24821:14;24814:58;24906:28;24901:2;24893:6;24889:15;24882:53;24697:245;:::o;24948:366::-;25090:3;25111:67;25175:2;25170:3;25111:67;:::i;:::-;25104:74;;25187:93;25276:3;25187:93;:::i;:::-;25305:2;25300:3;25296:12;25289:19;;24948:366;;;:::o;25320:419::-;25486:4;25524:2;25513:9;25509:18;25501:26;;25573:9;25567:4;25563:20;25559:1;25548:9;25544:17;25537:47;25601:131;25727:4;25601:131;:::i;:::-;25593:139;;25320:419;;;:::o;25745:98::-;25796:6;25830:5;25824:12;25814:22;;25745:98;;;:::o;25849:168::-;25932:11;25966:6;25961:3;25954:19;26006:4;26001:3;25997:14;25982:29;;25849:168;;;;:::o;26023:360::-;26109:3;26137:38;26169:5;26137:38;:::i;:::-;26191:70;26254:6;26249:3;26191:70;:::i;:::-;26184:77;;26270:52;26315:6;26310:3;26303:4;26296:5;26292:16;26270:52;:::i;:::-;26347:29;26369:6;26347:29;:::i;:::-;26342:3;26338:39;26331:46;;26113:270;26023:360;;;;:::o;26389:640::-;26584:4;26622:3;26611:9;26607:19;26599:27;;26636:71;26704:1;26693:9;26689:17;26680:6;26636:71;:::i;:::-;26717:72;26785:2;26774:9;26770:18;26761:6;26717:72;:::i;:::-;26799;26867:2;26856:9;26852:18;26843:6;26799:72;:::i;:::-;26918:9;26912:4;26908:20;26903:2;26892:9;26888:18;26881:48;26946:76;27017:4;27008:6;26946:76;:::i;:::-;26938:84;;26389:640;;;;;;;:::o;27035:141::-;27091:5;27122:6;27116:13;27107:22;;27138:32;27164:5;27138:32;:::i;:::-;27035:141;;;;:::o;27182:349::-;27251:6;27300:2;27288:9;27279:7;27275:23;27271:32;27268:119;;;27306:79;;:::i;:::-;27268:119;27426:1;27451:63;27506:7;27497:6;27486:9;27482:22;27451:63;:::i;:::-;27441:73;;27397:127;27182:349;;;;:::o;27537:233::-;27576:3;27599:24;27617:5;27599:24;:::i;:::-;27590:33;;27645:66;27638:5;27635:77;27632:103;;27715:18;;:::i;:::-;27632:103;27762:1;27755:5;27751:13;27744:20;;27537:233;;;:::o;27776:180::-;27824:77;27821:1;27814:88;27921:4;27918:1;27911:15;27945:4;27942:1;27935:15;27962:185;28002:1;28019:20;28037:1;28019:20;:::i;:::-;28014:25;;28053:20;28071:1;28053:20;:::i;:::-;28048:25;;28092:1;28082:35;;28097:18;;:::i;:::-;28082:35;28139:1;28136;28132:9;28127:14;;27962:185;;;;:::o;28153:191::-;28193:4;28213:20;28231:1;28213:20;:::i;:::-;28208:25;;28247:20;28265:1;28247:20;:::i;:::-;28242:25;;28286:1;28283;28280:8;28277:34;;;28291:18;;:::i;:::-;28277:34;28336:1;28333;28329:9;28321:17;;28153:191;;;;:::o;28350:176::-;28382:1;28399:20;28417:1;28399:20;:::i;:::-;28394:25;;28433:20;28451:1;28433:20;:::i;:::-;28428:25;;28472:1;28462:35;;28477:18;;:::i;:::-;28462:35;28518:1;28515;28511:9;28506:14;;28350:176;;;;:::o;28532:180::-;28580:77;28577:1;28570:88;28677:4;28674:1;28667:15;28701:4;28698:1;28691:15
Swarm Source
ipfs://19e73e573f64604d3e07a39ee7cd2de5164fc32975e9b8caf6dfefa55cd4b51b
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.