ERC-721
Overview
Max Total Supply
500 PROJECTMAYBE
Holders
383
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 PROJECTMAYBELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ProjectMaybeMintPass
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-24 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.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 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/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/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: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // 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/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // 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; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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 virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @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) { _requireMinted(tokenId); 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 overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _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 { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @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. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @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`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: contracts/ProjectMaybeMintPass.sol pragma solidity ^0.8.1; contract ProjectMaybeMintPass is ERC721Enumerable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; string private _baseUri; string uriSuffix = ".json"; uint256 public constant MAX_SUPPLY = 500; uint256 public constant OG_SUPPLY = 130; uint256 public maxMintQuantity = 1; bool public isOGSalesActive = true; bool public isWLSalesActive = false; bool public isSalesActive = true; mapping(address => bool) private OGAddresses; mapping(address => bool) private WLAddresses; constructor(string memory baseUri) ERC721("Project Maybe Mint Pass", "PROJECTMAYBE") { _baseUri = baseUri; } function mint() external payable { uint256 supply = totalSupply(); uint256[] memory ownerTokenIds = walletOfOwner(msg.sender); require(isSalesActive, "mint is not active"); require(ownerTokenIds.length < maxMintQuantity, "Cannot mint more than maximum quantity"); if (isOGSalesActive) { require(OGAddresses[msg.sender] == true, "address not in the OG list"); require(supply < OG_SUPPLY, "Exceeds maximum OG supply"); } if (isWLSalesActive) { require(WLAddresses[msg.sender] == true, "address not in the whitelist"); } require(supply < MAX_SUPPLY, "Exceeds maximum supply"); safeMint(msg.sender); } function safeMint(address to) internal { _tokenIdCounter.increment(); uint256 tokenId = _tokenIdCounter.current(); _safeMint(to, tokenId); } // mint unclaimed tokens to _to function mintUnclaimed(address _to, uint256[] memory _tokenIds) external onlyOwner { for(uint256 i=0; i < _tokenIds.length; i++) { _safeMint(_to, _tokenIds[i]); } } // give presale access to whitelist addresses function giveWLAccess(address[] memory _addresses) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { WLAddresses[_addresses[i]] = true; } } // give presale access to OG addresses function giveOGAccess(address[] memory _addresses) external onlyOwner { for (uint256 i = 0; i < _addresses.length; i++) { OGAddresses[_addresses[i]] = true; } } // get token URI of given token ID function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(_baseUri, Strings.toString(_tokenId), uriSuffix)); } // return all token IDs minted by _owner function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function baseURI() external view returns (string memory) { return _baseUri; } function setBaseURI(string memory newBaseUri) external onlyOwner { _baseUri = newBaseUri; } function toggleOGSales() external onlyOwner { isOGSalesActive = !isOGSalesActive; } function toggleWLSales() external onlyOwner { isWLSalesActive = !isWLSalesActive; } function toggleSales() external onlyOwner { isSalesActive = !isSalesActive; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OG_SUPPLY","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"_addresses","type":"address[]"}],"name":"giveOGAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"giveWLAccess","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":[],"name":"isOGSalesActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSalesActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWLSalesActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"mintUnclaimed","outputs":[],"stateMutability":"nonpayable","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":"newBaseUri","type":"string"}],"name":"setBaseURI","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":[],"name":"toggleOGSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWLSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d90816200004a9190620004e7565b506001600e556001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550348015620000ae57600080fd5b5060405162004c5638038062004c568339818101604052810190620000d4919062000732565b6040518060400160405280601781526020017f50726f6a656374204d61796265204d696e7420506173730000000000000000008152506040518060400160405280600c81526020017f50524f4a4543544d4159424500000000000000000000000000000000000000008152508160009081620001519190620004e7565b508060019081620001639190620004e7565b505050620001866200017a6200019f60201b60201c565b620001a760201b60201c565b80600c9081620001979190620004e7565b505062000783565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002ef57607f821691505b602082108103620003055762000304620002a7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200036f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000330565b6200037b868362000330565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003c8620003c2620003bc8462000393565b6200039d565b62000393565b9050919050565b6000819050919050565b620003e483620003a7565b620003fc620003f382620003cf565b8484546200033d565b825550505050565b600090565b6200041362000404565b62000420818484620003d9565b505050565b5b8181101562000448576200043c60008262000409565b60018101905062000426565b5050565b601f821115620004975762000461816200030b565b6200046c8462000320565b810160208510156200047c578190505b620004946200048b8562000320565b83018262000425565b50505b505050565b600082821c905092915050565b6000620004bc600019846008026200049c565b1980831691505092915050565b6000620004d78383620004a9565b9150826002028217905092915050565b620004f2826200026d565b67ffffffffffffffff8111156200050e576200050d62000278565b5b6200051a8254620002d6565b620005278282856200044c565b600060209050601f8311600181146200055f57600084156200054a578287015190505b620005568582620004c9565b865550620005c6565b601f1984166200056f866200030b565b60005b82811015620005995784890151825560018201915060208501945060208101905062000572565b86831015620005b95784890151620005b5601f891682620004a9565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200060882620005ec565b810181811067ffffffffffffffff821117156200062a576200062962000278565b5b80604052505050565b60006200063f620005ce565b90506200064d8282620005fd565b919050565b600067ffffffffffffffff82111562000670576200066f62000278565b5b6200067b82620005ec565b9050602081019050919050565b60005b83811015620006a85780820151818401526020810190506200068b565b60008484015250505050565b6000620006cb620006c58462000652565b62000633565b905082815260208101848484011115620006ea57620006e9620005e7565b5b620006f784828562000688565b509392505050565b600082601f830112620007175762000716620005e2565b5b815162000729848260208601620006b4565b91505092915050565b6000602082840312156200074b576200074a620005d8565b5b600082015167ffffffffffffffff8111156200076c576200076b620005dd565b5b6200077a84828501620006ff565b91505092915050565b6144c380620007936000396000f3fe6080604052600436106102045760003560e01c806370a0823111610118578063b88d4fde116100a0578063daa81cdd1161006f578063daa81cdd14610748578063dbd30ae014610773578063e985e9c51461078a578063f2fde38b146107c7578063fcfeee64146107f057610204565b8063b88d4fde1461068e578063bbe68f96146106b7578063c71e7d4d146106e2578063c87b56dd1461070b57610204565b806395d89b41116100e757806395d89b41146105bb57806395f49634146105e6578063a22cb46514610611578063ae9aea6d1461063a578063b2dbf0581461066557610204565b806370a0823114610511578063715018a61461054e5780637935ad3f146105655780638da5cb5b1461059057610204565b806332cb6b0c1161019b578063521674431161016a578063521674431461044057806355f804b3146104575780636352211e146104805780636c0360eb146104bd578063707f24ca146104e857610204565b806332cb6b0c1461037257806342842e0e1461039d578063438b6300146103c65780634f6ccce71461040357610204565b80631249c58b116101d75780631249c58b146102d757806318160ddd146102e157806323b872dd1461030c5780632f745c591461033557610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906129b6565b610807565b60405161023d91906129fe565b60405180910390f35b34801561025257600080fd5b5061025b610881565b6040516102689190612aa9565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612b01565b610913565b6040516102a59190612b6f565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612bb6565b610959565b005b6102df610a70565b005b3480156102ed57600080fd5b506102f6610d03565b6040516103039190612c05565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190612c20565b610d10565b005b34801561034157600080fd5b5061035c60048036038101906103579190612bb6565b610d70565b6040516103699190612c05565b60405180910390f35b34801561037e57600080fd5b50610387610e15565b6040516103949190612c05565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190612c20565b610e1b565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190612c73565b610e3b565b6040516103fa9190612d5e565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190612b01565b610ee9565b6040516104379190612c05565b60405180910390f35b34801561044c57600080fd5b50610455610f5a565b005b34801561046357600080fd5b5061047e60048036038101906104799190612eb5565b610f8e565b005b34801561048c57600080fd5b506104a760048036038101906104a29190612b01565b610fa9565b6040516104b49190612b6f565b60405180910390f35b3480156104c957600080fd5b506104d261105a565b6040516104df9190612aa9565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190612fc6565b6110ec565b005b34801561051d57600080fd5b5061053860048036038101906105339190612c73565b611189565b6040516105459190612c05565b60405180910390f35b34801561055a57600080fd5b50610563611240565b005b34801561057157600080fd5b5061057a611254565b60405161058791906129fe565b60405180910390f35b34801561059c57600080fd5b506105a5611267565b6040516105b29190612b6f565b60405180910390f35b3480156105c757600080fd5b506105d0611291565b6040516105dd9190612aa9565b60405180910390f35b3480156105f257600080fd5b506105fb611323565b6040516106089190612c05565b60405180910390f35b34801561061d57600080fd5b506106386004803603810190610633919061303b565b611328565b005b34801561064657600080fd5b5061064f61133e565b60405161065c9190612c05565b60405180910390f35b34801561067157600080fd5b5061068c6004803603810190610687919061313e565b611344565b005b34801561069a57600080fd5b506106b560048036038101906106b0919061323b565b611394565b005b3480156106c357600080fd5b506106cc6113f6565b6040516106d991906129fe565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190612fc6565b611409565b005b34801561071757600080fd5b50610732600480360381019061072d9190612b01565b6114a6565b60405161073f9190612aa9565b60405180910390f35b34801561075457600080fd5b5061075d611525565b60405161076a91906129fe565b60405180910390f35b34801561077f57600080fd5b50610788611538565b005b34801561079657600080fd5b506107b160048036038101906107ac91906132be565b61156c565b6040516107be91906129fe565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190612c73565b611600565b005b3480156107fc57600080fd5b50610805611683565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087a5750610879826116b7565b5b9050919050565b6060600080546108909061332d565b80601f01602080910402602001604051908101604052809291908181526020018280546108bc9061332d565b80156109095780601f106108de57610100808354040283529160200191610909565b820191906000526020600020905b8154815290600101906020018083116108ec57829003601f168201915b5050505050905090565b600061091e82611799565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096482610fa9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb906133d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f36117e4565b73ffffffffffffffffffffffffffffffffffffffff161480610a225750610a2181610a1c6117e4565b61156c565b5b610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5890613462565b60405180910390fd5b610a6b83836117ec565b505050565b6000610a7a610d03565b90506000610a8733610e3b565b9050600f60029054906101000a900460ff16610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf906134ce565b60405180910390fd5b600e54815110610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613560565b60405180910390fd5b600f60009054906101000a900460ff1615610c095760011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc906135cc565b60405180910390fd5b60828210610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90613638565b60405180910390fd5b5b600f60019054906101000a900460ff1615610cb25760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca8906136a4565b60405180910390fd5b5b6101f48210610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90613710565b60405180910390fd5b610cff336118a5565b5050565b6000600880549050905090565b610d21610d1b6117e4565b826118cb565b610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d57906137a2565b60405180910390fd5b610d6b838383611960565b505050565b6000610d7b83611189565b8210610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390613834565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6101f481565b610e3683838360405180602001604052806000815250611394565b505050565b60606000610e4883611189565b905060008167ffffffffffffffff811115610e6657610e65612d8a565b5b604051908082528060200260200182016040528015610e945781602001602082028036833780820191505090505b50905060005b82811015610ede57610eac8582610d70565b828281518110610ebf57610ebe613854565b5b6020026020010181815250508080610ed6906138b2565b915050610e9a565b508092505050919050565b6000610ef3610d03565b8210610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b9061396c565b60405180910390fd5b60088281548110610f4857610f47613854565b5b90600052602060002001549050919050565b610f62611bc6565b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b610f96611bc6565b80600c9081610fa59190613b38565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613c56565b60405180910390fd5b80915050919050565b6060600c80546110699061332d565b80601f01602080910402602001604051908101604052809291908181526020018280546110959061332d565b80156110e25780601f106110b7576101008083540402835291602001916110e2565b820191906000526020600020905b8154815290600101906020018083116110c557829003601f168201915b5050505050905090565b6110f4611bc6565b60005b81518110156111855760016011600084848151811061111957611118613854565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061117d906138b2565b9150506110f7565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f090613ce8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611248611bc6565b6112526000611c44565b565b600f60009054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112a09061332d565b80601f01602080910402602001604051908101604052809291908181526020018280546112cc9061332d565b80156113195780601f106112ee57610100808354040283529160200191611319565b820191906000526020600020905b8154815290600101906020018083116112fc57829003601f168201915b5050505050905090565b608281565b61133a6113336117e4565b8383611d0a565b5050565b600e5481565b61134c611bc6565b60005b815181101561138f5761137c8383838151811061136f5761136e613854565b5b6020026020010151611e76565b8080611387906138b2565b91505061134f565b505050565b6113a561139f6117e4565b836118cb565b6113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db906137a2565b60405180910390fd5b6113f084848484611e94565b50505050565b600f60019054906101000a900460ff1681565b611411611bc6565b60005b81518110156114a25760016010600084848151811061143657611435613854565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061149a906138b2565b915050611414565b5050565b60606114b182611ef0565b6114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790613d7a565b60405180910390fd5b600c6114fb83611f5c565b600d60405160200161150f93929190613e59565b6040516020818303038152906040529050919050565b600f60029054906101000a900460ff1681565b611540611bc6565b600f60029054906101000a900460ff1615600f60026101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611608611bc6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e90613efc565b60405180910390fd5b61168081611c44565b50565b61168b611bc6565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061178257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117925750611791826120bc565b5b9050919050565b6117a281611ef0565b6117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890613c56565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661185f83610fa9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6118af600b612126565b60006118bb600b61213c565b90506118c78282611e76565b5050565b6000806118d783610fa9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119195750611918818561156c565b5b8061195757508373ffffffffffffffffffffffffffffffffffffffff1661193f84610913565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661198082610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90613f8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3c90614020565b60405180910390fd5b611a5083838361214a565b611a5b6000826117ec565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aab9190614040565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b029190614074565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bc183838361225c565b505050565b611bce6117e4565b73ffffffffffffffffffffffffffffffffffffffff16611bec611267565b73ffffffffffffffffffffffffffffffffffffffff1614611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c39906140f4565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90614160565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e6991906129fe565b60405180910390a3505050565b611e90828260405180602001604052806000815250612261565b5050565b611e9f848484611960565b611eab848484846122bc565b611eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee1906141f2565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060008203611fa3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120b7565b600082905060005b60008214611fd5578080611fbe906138b2565b915050600a82611fce9190614241565b9150611fab565b60008167ffffffffffffffff811115611ff157611ff0612d8a565b5b6040519080825280601f01601f1916602001820160405280156120235781602001600182028036833780820191505090505b5090505b600085146120b05760018261203c9190614040565b9150600a8561204b9190614272565b60306120579190614074565b60f81b81838151811061206d5761206c613854565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120a99190614241565b9450612027565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b612155838383612443565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121975761219281612448565b6121d6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121d5576121d48382612491565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361221857612213816125fe565b612257565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122565761225582826126cf565b5b5b505050565b505050565b61226b838361274e565b61227860008484846122bc565b6122b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ae906141f2565b60405180910390fd5b505050565b60006122dd8473ffffffffffffffffffffffffffffffffffffffff16612927565b15612436578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123066117e4565b8786866040518563ffffffff1660e01b815260040161232894939291906142f8565b6020604051808303816000875af192505050801561236457506040513d601f19601f820116820180604052508101906123619190614359565b60015b6123e6573d8060008114612394576040519150601f19603f3d011682016040523d82523d6000602084013e612399565b606091505b5060008151036123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d5906141f2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061243b565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161249e84611189565b6124a89190614040565b905060006007600084815260200190815260200160002054905081811461258d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126129190614040565b905060006009600084815260200190815260200160002054905060006008838154811061264257612641613854565b5b90600052602060002001549050806008838154811061266457612663613854565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806126b3576126b2614386565b5b6001900381819060005260206000200160009055905550505050565b60006126da83611189565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b490614401565b60405180910390fd5b6127c681611ef0565b15612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd9061446d565b60405180910390fd5b6128126000838361214a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128629190614074565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129236000838361225c565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129938161295e565b811461299e57600080fd5b50565b6000813590506129b08161298a565b92915050565b6000602082840312156129cc576129cb612954565b5b60006129da848285016129a1565b91505092915050565b60008115159050919050565b6129f8816129e3565b82525050565b6000602082019050612a1360008301846129ef565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a53578082015181840152602081019050612a38565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a7b82612a19565b612a858185612a24565b9350612a95818560208601612a35565b612a9e81612a5f565b840191505092915050565b60006020820190508181036000830152612ac38184612a70565b905092915050565b6000819050919050565b612ade81612acb565b8114612ae957600080fd5b50565b600081359050612afb81612ad5565b92915050565b600060208284031215612b1757612b16612954565b5b6000612b2584828501612aec565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b5982612b2e565b9050919050565b612b6981612b4e565b82525050565b6000602082019050612b846000830184612b60565b92915050565b612b9381612b4e565b8114612b9e57600080fd5b50565b600081359050612bb081612b8a565b92915050565b60008060408385031215612bcd57612bcc612954565b5b6000612bdb85828601612ba1565b9250506020612bec85828601612aec565b9150509250929050565b612bff81612acb565b82525050565b6000602082019050612c1a6000830184612bf6565b92915050565b600080600060608486031215612c3957612c38612954565b5b6000612c4786828701612ba1565b9350506020612c5886828701612ba1565b9250506040612c6986828701612aec565b9150509250925092565b600060208284031215612c8957612c88612954565b5b6000612c9784828501612ba1565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612cd581612acb565b82525050565b6000612ce78383612ccc565b60208301905092915050565b6000602082019050919050565b6000612d0b82612ca0565b612d158185612cab565b9350612d2083612cbc565b8060005b83811015612d51578151612d388882612cdb565b9750612d4383612cf3565b925050600181019050612d24565b5085935050505092915050565b60006020820190508181036000830152612d788184612d00565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612dc282612a5f565b810181811067ffffffffffffffff82111715612de157612de0612d8a565b5b80604052505050565b6000612df461294a565b9050612e008282612db9565b919050565b600067ffffffffffffffff821115612e2057612e1f612d8a565b5b612e2982612a5f565b9050602081019050919050565b82818337600083830152505050565b6000612e58612e5384612e05565b612dea565b905082815260208101848484011115612e7457612e73612d85565b5b612e7f848285612e36565b509392505050565b600082601f830112612e9c57612e9b612d80565b5b8135612eac848260208601612e45565b91505092915050565b600060208284031215612ecb57612eca612954565b5b600082013567ffffffffffffffff811115612ee957612ee8612959565b5b612ef584828501612e87565b91505092915050565b600067ffffffffffffffff821115612f1957612f18612d8a565b5b602082029050602081019050919050565b600080fd5b6000612f42612f3d84612efe565b612dea565b90508083825260208201905060208402830185811115612f6557612f64612f2a565b5b835b81811015612f8e5780612f7a8882612ba1565b845260208401935050602081019050612f67565b5050509392505050565b600082601f830112612fad57612fac612d80565b5b8135612fbd848260208601612f2f565b91505092915050565b600060208284031215612fdc57612fdb612954565b5b600082013567ffffffffffffffff811115612ffa57612ff9612959565b5b61300684828501612f98565b91505092915050565b613018816129e3565b811461302357600080fd5b50565b6000813590506130358161300f565b92915050565b6000806040838503121561305257613051612954565b5b600061306085828601612ba1565b925050602061307185828601613026565b9150509250929050565b600067ffffffffffffffff82111561309657613095612d8a565b5b602082029050602081019050919050565b60006130ba6130b58461307b565b612dea565b905080838252602082019050602084028301858111156130dd576130dc612f2a565b5b835b8181101561310657806130f28882612aec565b8452602084019350506020810190506130df565b5050509392505050565b600082601f83011261312557613124612d80565b5b81356131358482602086016130a7565b91505092915050565b6000806040838503121561315557613154612954565b5b600061316385828601612ba1565b925050602083013567ffffffffffffffff81111561318457613183612959565b5b61319085828601613110565b9150509250929050565b600067ffffffffffffffff8211156131b5576131b4612d8a565b5b6131be82612a5f565b9050602081019050919050565b60006131de6131d98461319a565b612dea565b9050828152602081018484840111156131fa576131f9612d85565b5b613205848285612e36565b509392505050565b600082601f83011261322257613221612d80565b5b81356132328482602086016131cb565b91505092915050565b6000806000806080858703121561325557613254612954565b5b600061326387828801612ba1565b945050602061327487828801612ba1565b935050604061328587828801612aec565b925050606085013567ffffffffffffffff8111156132a6576132a5612959565b5b6132b28782880161320d565b91505092959194509250565b600080604083850312156132d5576132d4612954565b5b60006132e385828601612ba1565b92505060206132f485828601612ba1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061334557607f821691505b602082108103613358576133576132fe565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006133ba602183612a24565b91506133c58261335e565b604082019050919050565b600060208201905081810360008301526133e9816133ad565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b600061344c603e83612a24565b9150613457826133f0565b604082019050919050565b6000602082019050818103600083015261347b8161343f565b9050919050565b7f6d696e74206973206e6f74206163746976650000000000000000000000000000600082015250565b60006134b8601283612a24565b91506134c382613482565b602082019050919050565b600060208201905081810360008301526134e7816134ab565b9050919050565b7f43616e6e6f74206d696e74206d6f7265207468616e206d6178696d756d20717560008201527f616e746974790000000000000000000000000000000000000000000000000000602082015250565b600061354a602683612a24565b9150613555826134ee565b604082019050919050565b600060208201905081810360008301526135798161353d565b9050919050565b7f61646472657373206e6f7420696e20746865204f47206c697374000000000000600082015250565b60006135b6601a83612a24565b91506135c182613580565b602082019050919050565b600060208201905081810360008301526135e5816135a9565b9050919050565b7f45786365656473206d6178696d756d204f4720737570706c7900000000000000600082015250565b6000613622601983612a24565b915061362d826135ec565b602082019050919050565b6000602082019050818103600083015261365181613615565b9050919050565b7f61646472657373206e6f7420696e207468652077686974656c69737400000000600082015250565b600061368e601c83612a24565b915061369982613658565b602082019050919050565b600060208201905081810360008301526136bd81613681565b9050919050565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b60006136fa601683612a24565b9150613705826136c4565b602082019050919050565b60006020820190508181036000830152613729816136ed565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b600061378c602e83612a24565b915061379782613730565b604082019050919050565b600060208201905081810360008301526137bb8161377f565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061381e602b83612a24565b9150613829826137c2565b604082019050919050565b6000602082019050818103600083015261384d81613811565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138bd82612acb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138ef576138ee613883565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613956602c83612a24565b9150613961826138fa565b604082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139b1565b6139f886836139b1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613a35613a30613a2b84612acb565b613a10565b612acb565b9050919050565b6000819050919050565b613a4f83613a1a565b613a63613a5b82613a3c565b8484546139be565b825550505050565b600090565b613a78613a6b565b613a83818484613a46565b505050565b5b81811015613aa757613a9c600082613a70565b600181019050613a89565b5050565b601f821115613aec57613abd8161398c565b613ac6846139a1565b81016020851015613ad5578190505b613ae9613ae1856139a1565b830182613a88565b50505b505050565b600082821c905092915050565b6000613b0f60001984600802613af1565b1980831691505092915050565b6000613b288383613afe565b9150826002028217905092915050565b613b4182612a19565b67ffffffffffffffff811115613b5a57613b59612d8a565b5b613b64825461332d565b613b6f828285613aab565b600060209050601f831160018114613ba25760008415613b90578287015190505b613b9a8582613b1c565b865550613c02565b601f198416613bb08661398c565b60005b82811015613bd857848901518255600182019150602085019450602081019050613bb3565b86831015613bf55784890151613bf1601f891682613afe565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613c40601883612a24565b9150613c4b82613c0a565b602082019050919050565b60006020820190508181036000830152613c6f81613c33565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613cd2602983612a24565b9150613cdd82613c76565b604082019050919050565b60006020820190508181036000830152613d0181613cc5565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613d64602f83612a24565b9150613d6f82613d08565b604082019050919050565b60006020820190508181036000830152613d9381613d57565b9050919050565b600081905092915050565b60008154613db28161332d565b613dbc8186613d9a565b94506001821660008114613dd75760018114613dec57613e1f565b60ff1983168652811515820286019350613e1f565b613df58561398c565b60005b83811015613e1757815481890152600182019150602081019050613df8565b838801955050505b50505092915050565b6000613e3382612a19565b613e3d8185613d9a565b9350613e4d818560208601612a35565b80840191505092915050565b6000613e658286613da5565b9150613e718285613e28565b9150613e7d8284613da5565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ee6602683612a24565b9150613ef182613e8a565b604082019050919050565b60006020820190508181036000830152613f1581613ed9565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613f78602583612a24565b9150613f8382613f1c565b604082019050919050565b60006020820190508181036000830152613fa781613f6b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061400a602483612a24565b915061401582613fae565b604082019050919050565b6000602082019050818103600083015261403981613ffd565b9050919050565b600061404b82612acb565b915061405683612acb565b925082820390508181111561406e5761406d613883565b5b92915050565b600061407f82612acb565b915061408a83612acb565b92508282019050808211156140a2576140a1613883565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140de602083612a24565b91506140e9826140a8565b602082019050919050565b6000602082019050818103600083015261410d816140d1565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061414a601983612a24565b915061415582614114565b602082019050919050565b600060208201905081810360008301526141798161413d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006141dc603283612a24565b91506141e782614180565b604082019050919050565b6000602082019050818103600083015261420b816141cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061424c82612acb565b915061425783612acb565b92508261426757614266614212565b5b828204905092915050565b600061427d82612acb565b915061428883612acb565b92508261429857614297614212565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006142ca826142a3565b6142d481856142ae565b93506142e4818560208601612a35565b6142ed81612a5f565b840191505092915050565b600060808201905061430d6000830187612b60565b61431a6020830186612b60565b6143276040830185612bf6565b818103606083015261433981846142bf565b905095945050505050565b6000815190506143538161298a565b92915050565b60006020828403121561436f5761436e612954565b5b600061437d84828501614344565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006143eb602083612a24565b91506143f6826143b5565b602082019050919050565b6000602082019050818103600083015261441a816143de565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614457601c83612a24565b915061446282614421565b602082019050919050565b600060208201905081810360008301526144868161444a565b905091905056fea26469706673582212209d7c2bbc0326e164adf8436fb866e5d3a9b4ae9b7af7c15f22876299c73bb7f964736f6c634300081100330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5665575a6d524c5a54455a774d634a4a444e39786556564d73616656505a385656775a5a70584b526473736e2f000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102045760003560e01c806370a0823111610118578063b88d4fde116100a0578063daa81cdd1161006f578063daa81cdd14610748578063dbd30ae014610773578063e985e9c51461078a578063f2fde38b146107c7578063fcfeee64146107f057610204565b8063b88d4fde1461068e578063bbe68f96146106b7578063c71e7d4d146106e2578063c87b56dd1461070b57610204565b806395d89b41116100e757806395d89b41146105bb57806395f49634146105e6578063a22cb46514610611578063ae9aea6d1461063a578063b2dbf0581461066557610204565b806370a0823114610511578063715018a61461054e5780637935ad3f146105655780638da5cb5b1461059057610204565b806332cb6b0c1161019b578063521674431161016a578063521674431461044057806355f804b3146104575780636352211e146104805780636c0360eb146104bd578063707f24ca146104e857610204565b806332cb6b0c1461037257806342842e0e1461039d578063438b6300146103c65780634f6ccce71461040357610204565b80631249c58b116101d75780631249c58b146102d757806318160ddd146102e157806323b872dd1461030c5780632f745c591461033557610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906129b6565b610807565b60405161023d91906129fe565b60405180910390f35b34801561025257600080fd5b5061025b610881565b6040516102689190612aa9565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612b01565b610913565b6040516102a59190612b6f565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612bb6565b610959565b005b6102df610a70565b005b3480156102ed57600080fd5b506102f6610d03565b6040516103039190612c05565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190612c20565b610d10565b005b34801561034157600080fd5b5061035c60048036038101906103579190612bb6565b610d70565b6040516103699190612c05565b60405180910390f35b34801561037e57600080fd5b50610387610e15565b6040516103949190612c05565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190612c20565b610e1b565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190612c73565b610e3b565b6040516103fa9190612d5e565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190612b01565b610ee9565b6040516104379190612c05565b60405180910390f35b34801561044c57600080fd5b50610455610f5a565b005b34801561046357600080fd5b5061047e60048036038101906104799190612eb5565b610f8e565b005b34801561048c57600080fd5b506104a760048036038101906104a29190612b01565b610fa9565b6040516104b49190612b6f565b60405180910390f35b3480156104c957600080fd5b506104d261105a565b6040516104df9190612aa9565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190612fc6565b6110ec565b005b34801561051d57600080fd5b5061053860048036038101906105339190612c73565b611189565b6040516105459190612c05565b60405180910390f35b34801561055a57600080fd5b50610563611240565b005b34801561057157600080fd5b5061057a611254565b60405161058791906129fe565b60405180910390f35b34801561059c57600080fd5b506105a5611267565b6040516105b29190612b6f565b60405180910390f35b3480156105c757600080fd5b506105d0611291565b6040516105dd9190612aa9565b60405180910390f35b3480156105f257600080fd5b506105fb611323565b6040516106089190612c05565b60405180910390f35b34801561061d57600080fd5b506106386004803603810190610633919061303b565b611328565b005b34801561064657600080fd5b5061064f61133e565b60405161065c9190612c05565b60405180910390f35b34801561067157600080fd5b5061068c6004803603810190610687919061313e565b611344565b005b34801561069a57600080fd5b506106b560048036038101906106b0919061323b565b611394565b005b3480156106c357600080fd5b506106cc6113f6565b6040516106d991906129fe565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190612fc6565b611409565b005b34801561071757600080fd5b50610732600480360381019061072d9190612b01565b6114a6565b60405161073f9190612aa9565b60405180910390f35b34801561075457600080fd5b5061075d611525565b60405161076a91906129fe565b60405180910390f35b34801561077f57600080fd5b50610788611538565b005b34801561079657600080fd5b506107b160048036038101906107ac91906132be565b61156c565b6040516107be91906129fe565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190612c73565b611600565b005b3480156107fc57600080fd5b50610805611683565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087a5750610879826116b7565b5b9050919050565b6060600080546108909061332d565b80601f01602080910402602001604051908101604052809291908181526020018280546108bc9061332d565b80156109095780601f106108de57610100808354040283529160200191610909565b820191906000526020600020905b8154815290600101906020018083116108ec57829003601f168201915b5050505050905090565b600061091e82611799565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096482610fa9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cb906133d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f36117e4565b73ffffffffffffffffffffffffffffffffffffffff161480610a225750610a2181610a1c6117e4565b61156c565b5b610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5890613462565b60405180910390fd5b610a6b83836117ec565b505050565b6000610a7a610d03565b90506000610a8733610e3b565b9050600f60029054906101000a900460ff16610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf906134ce565b60405180910390fd5b600e54815110610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613560565b60405180910390fd5b600f60009054906101000a900460ff1615610c095760011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc906135cc565b60405180910390fd5b60828210610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90613638565b60405180910390fd5b5b600f60019054906101000a900460ff1615610cb25760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca8906136a4565b60405180910390fd5b5b6101f48210610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90613710565b60405180910390fd5b610cff336118a5565b5050565b6000600880549050905090565b610d21610d1b6117e4565b826118cb565b610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d57906137a2565b60405180910390fd5b610d6b838383611960565b505050565b6000610d7b83611189565b8210610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390613834565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6101f481565b610e3683838360405180602001604052806000815250611394565b505050565b60606000610e4883611189565b905060008167ffffffffffffffff811115610e6657610e65612d8a565b5b604051908082528060200260200182016040528015610e945781602001602082028036833780820191505090505b50905060005b82811015610ede57610eac8582610d70565b828281518110610ebf57610ebe613854565b5b6020026020010181815250508080610ed6906138b2565b915050610e9a565b508092505050919050565b6000610ef3610d03565b8210610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b9061396c565b60405180910390fd5b60088281548110610f4857610f47613854565b5b90600052602060002001549050919050565b610f62611bc6565b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b610f96611bc6565b80600c9081610fa59190613b38565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613c56565b60405180910390fd5b80915050919050565b6060600c80546110699061332d565b80601f01602080910402602001604051908101604052809291908181526020018280546110959061332d565b80156110e25780601f106110b7576101008083540402835291602001916110e2565b820191906000526020600020905b8154815290600101906020018083116110c557829003601f168201915b5050505050905090565b6110f4611bc6565b60005b81518110156111855760016011600084848151811061111957611118613854565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061117d906138b2565b9150506110f7565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f090613ce8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611248611bc6565b6112526000611c44565b565b600f60009054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112a09061332d565b80601f01602080910402602001604051908101604052809291908181526020018280546112cc9061332d565b80156113195780601f106112ee57610100808354040283529160200191611319565b820191906000526020600020905b8154815290600101906020018083116112fc57829003601f168201915b5050505050905090565b608281565b61133a6113336117e4565b8383611d0a565b5050565b600e5481565b61134c611bc6565b60005b815181101561138f5761137c8383838151811061136f5761136e613854565b5b6020026020010151611e76565b8080611387906138b2565b91505061134f565b505050565b6113a561139f6117e4565b836118cb565b6113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db906137a2565b60405180910390fd5b6113f084848484611e94565b50505050565b600f60019054906101000a900460ff1681565b611411611bc6565b60005b81518110156114a25760016010600084848151811061143657611435613854565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061149a906138b2565b915050611414565b5050565b60606114b182611ef0565b6114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790613d7a565b60405180910390fd5b600c6114fb83611f5c565b600d60405160200161150f93929190613e59565b6040516020818303038152906040529050919050565b600f60029054906101000a900460ff1681565b611540611bc6565b600f60029054906101000a900460ff1615600f60026101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611608611bc6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e90613efc565b60405180910390fd5b61168081611c44565b50565b61168b611bc6565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061178257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806117925750611791826120bc565b5b9050919050565b6117a281611ef0565b6117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890613c56565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661185f83610fa9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6118af600b612126565b60006118bb600b61213c565b90506118c78282611e76565b5050565b6000806118d783610fa9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119195750611918818561156c565b5b8061195757508373ffffffffffffffffffffffffffffffffffffffff1661193f84610913565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661198082610fa9565b73ffffffffffffffffffffffffffffffffffffffff16146119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90613f8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3c90614020565b60405180910390fd5b611a5083838361214a565b611a5b6000826117ec565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611aab9190614040565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b029190614074565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bc183838361225c565b505050565b611bce6117e4565b73ffffffffffffffffffffffffffffffffffffffff16611bec611267565b73ffffffffffffffffffffffffffffffffffffffff1614611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c39906140f4565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90614160565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e6991906129fe565b60405180910390a3505050565b611e90828260405180602001604052806000815250612261565b5050565b611e9f848484611960565b611eab848484846122bc565b611eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee1906141f2565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060008203611fa3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120b7565b600082905060005b60008214611fd5578080611fbe906138b2565b915050600a82611fce9190614241565b9150611fab565b60008167ffffffffffffffff811115611ff157611ff0612d8a565b5b6040519080825280601f01601f1916602001820160405280156120235781602001600182028036833780820191505090505b5090505b600085146120b05760018261203c9190614040565b9150600a8561204b9190614272565b60306120579190614074565b60f81b81838151811061206d5761206c613854565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120a99190614241565b9450612027565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b612155838383612443565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121975761219281612448565b6121d6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121d5576121d48382612491565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361221857612213816125fe565b612257565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122565761225582826126cf565b5b5b505050565b505050565b61226b838361274e565b61227860008484846122bc565b6122b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ae906141f2565b60405180910390fd5b505050565b60006122dd8473ffffffffffffffffffffffffffffffffffffffff16612927565b15612436578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123066117e4565b8786866040518563ffffffff1660e01b815260040161232894939291906142f8565b6020604051808303816000875af192505050801561236457506040513d601f19601f820116820180604052508101906123619190614359565b60015b6123e6573d8060008114612394576040519150601f19603f3d011682016040523d82523d6000602084013e612399565b606091505b5060008151036123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d5906141f2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061243b565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161249e84611189565b6124a89190614040565b905060006007600084815260200190815260200160002054905081811461258d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126129190614040565b905060006009600084815260200190815260200160002054905060006008838154811061264257612641613854565b5b90600052602060002001549050806008838154811061266457612663613854565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806126b3576126b2614386565b5b6001900381819060005260206000200160009055905550505050565b60006126da83611189565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b490614401565b60405180910390fd5b6127c681611ef0565b15612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd9061446d565b60405180910390fd5b6128126000838361214a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128629190614074565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129236000838361225c565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129938161295e565b811461299e57600080fd5b50565b6000813590506129b08161298a565b92915050565b6000602082840312156129cc576129cb612954565b5b60006129da848285016129a1565b91505092915050565b60008115159050919050565b6129f8816129e3565b82525050565b6000602082019050612a1360008301846129ef565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a53578082015181840152602081019050612a38565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a7b82612a19565b612a858185612a24565b9350612a95818560208601612a35565b612a9e81612a5f565b840191505092915050565b60006020820190508181036000830152612ac38184612a70565b905092915050565b6000819050919050565b612ade81612acb565b8114612ae957600080fd5b50565b600081359050612afb81612ad5565b92915050565b600060208284031215612b1757612b16612954565b5b6000612b2584828501612aec565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b5982612b2e565b9050919050565b612b6981612b4e565b82525050565b6000602082019050612b846000830184612b60565b92915050565b612b9381612b4e565b8114612b9e57600080fd5b50565b600081359050612bb081612b8a565b92915050565b60008060408385031215612bcd57612bcc612954565b5b6000612bdb85828601612ba1565b9250506020612bec85828601612aec565b9150509250929050565b612bff81612acb565b82525050565b6000602082019050612c1a6000830184612bf6565b92915050565b600080600060608486031215612c3957612c38612954565b5b6000612c4786828701612ba1565b9350506020612c5886828701612ba1565b9250506040612c6986828701612aec565b9150509250925092565b600060208284031215612c8957612c88612954565b5b6000612c9784828501612ba1565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612cd581612acb565b82525050565b6000612ce78383612ccc565b60208301905092915050565b6000602082019050919050565b6000612d0b82612ca0565b612d158185612cab565b9350612d2083612cbc565b8060005b83811015612d51578151612d388882612cdb565b9750612d4383612cf3565b925050600181019050612d24565b5085935050505092915050565b60006020820190508181036000830152612d788184612d00565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612dc282612a5f565b810181811067ffffffffffffffff82111715612de157612de0612d8a565b5b80604052505050565b6000612df461294a565b9050612e008282612db9565b919050565b600067ffffffffffffffff821115612e2057612e1f612d8a565b5b612e2982612a5f565b9050602081019050919050565b82818337600083830152505050565b6000612e58612e5384612e05565b612dea565b905082815260208101848484011115612e7457612e73612d85565b5b612e7f848285612e36565b509392505050565b600082601f830112612e9c57612e9b612d80565b5b8135612eac848260208601612e45565b91505092915050565b600060208284031215612ecb57612eca612954565b5b600082013567ffffffffffffffff811115612ee957612ee8612959565b5b612ef584828501612e87565b91505092915050565b600067ffffffffffffffff821115612f1957612f18612d8a565b5b602082029050602081019050919050565b600080fd5b6000612f42612f3d84612efe565b612dea565b90508083825260208201905060208402830185811115612f6557612f64612f2a565b5b835b81811015612f8e5780612f7a8882612ba1565b845260208401935050602081019050612f67565b5050509392505050565b600082601f830112612fad57612fac612d80565b5b8135612fbd848260208601612f2f565b91505092915050565b600060208284031215612fdc57612fdb612954565b5b600082013567ffffffffffffffff811115612ffa57612ff9612959565b5b61300684828501612f98565b91505092915050565b613018816129e3565b811461302357600080fd5b50565b6000813590506130358161300f565b92915050565b6000806040838503121561305257613051612954565b5b600061306085828601612ba1565b925050602061307185828601613026565b9150509250929050565b600067ffffffffffffffff82111561309657613095612d8a565b5b602082029050602081019050919050565b60006130ba6130b58461307b565b612dea565b905080838252602082019050602084028301858111156130dd576130dc612f2a565b5b835b8181101561310657806130f28882612aec565b8452602084019350506020810190506130df565b5050509392505050565b600082601f83011261312557613124612d80565b5b81356131358482602086016130a7565b91505092915050565b6000806040838503121561315557613154612954565b5b600061316385828601612ba1565b925050602083013567ffffffffffffffff81111561318457613183612959565b5b61319085828601613110565b9150509250929050565b600067ffffffffffffffff8211156131b5576131b4612d8a565b5b6131be82612a5f565b9050602081019050919050565b60006131de6131d98461319a565b612dea565b9050828152602081018484840111156131fa576131f9612d85565b5b613205848285612e36565b509392505050565b600082601f83011261322257613221612d80565b5b81356132328482602086016131cb565b91505092915050565b6000806000806080858703121561325557613254612954565b5b600061326387828801612ba1565b945050602061327487828801612ba1565b935050604061328587828801612aec565b925050606085013567ffffffffffffffff8111156132a6576132a5612959565b5b6132b28782880161320d565b91505092959194509250565b600080604083850312156132d5576132d4612954565b5b60006132e385828601612ba1565b92505060206132f485828601612ba1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061334557607f821691505b602082108103613358576133576132fe565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006133ba602183612a24565b91506133c58261335e565b604082019050919050565b600060208201905081810360008301526133e9816133ad565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b600061344c603e83612a24565b9150613457826133f0565b604082019050919050565b6000602082019050818103600083015261347b8161343f565b9050919050565b7f6d696e74206973206e6f74206163746976650000000000000000000000000000600082015250565b60006134b8601283612a24565b91506134c382613482565b602082019050919050565b600060208201905081810360008301526134e7816134ab565b9050919050565b7f43616e6e6f74206d696e74206d6f7265207468616e206d6178696d756d20717560008201527f616e746974790000000000000000000000000000000000000000000000000000602082015250565b600061354a602683612a24565b9150613555826134ee565b604082019050919050565b600060208201905081810360008301526135798161353d565b9050919050565b7f61646472657373206e6f7420696e20746865204f47206c697374000000000000600082015250565b60006135b6601a83612a24565b91506135c182613580565b602082019050919050565b600060208201905081810360008301526135e5816135a9565b9050919050565b7f45786365656473206d6178696d756d204f4720737570706c7900000000000000600082015250565b6000613622601983612a24565b915061362d826135ec565b602082019050919050565b6000602082019050818103600083015261365181613615565b9050919050565b7f61646472657373206e6f7420696e207468652077686974656c69737400000000600082015250565b600061368e601c83612a24565b915061369982613658565b602082019050919050565b600060208201905081810360008301526136bd81613681565b9050919050565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b60006136fa601683612a24565b9150613705826136c4565b602082019050919050565b60006020820190508181036000830152613729816136ed565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b600061378c602e83612a24565b915061379782613730565b604082019050919050565b600060208201905081810360008301526137bb8161377f565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061381e602b83612a24565b9150613829826137c2565b604082019050919050565b6000602082019050818103600083015261384d81613811565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138bd82612acb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138ef576138ee613883565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613956602c83612a24565b9150613961826138fa565b604082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139b1565b6139f886836139b1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613a35613a30613a2b84612acb565b613a10565b612acb565b9050919050565b6000819050919050565b613a4f83613a1a565b613a63613a5b82613a3c565b8484546139be565b825550505050565b600090565b613a78613a6b565b613a83818484613a46565b505050565b5b81811015613aa757613a9c600082613a70565b600181019050613a89565b5050565b601f821115613aec57613abd8161398c565b613ac6846139a1565b81016020851015613ad5578190505b613ae9613ae1856139a1565b830182613a88565b50505b505050565b600082821c905092915050565b6000613b0f60001984600802613af1565b1980831691505092915050565b6000613b288383613afe565b9150826002028217905092915050565b613b4182612a19565b67ffffffffffffffff811115613b5a57613b59612d8a565b5b613b64825461332d565b613b6f828285613aab565b600060209050601f831160018114613ba25760008415613b90578287015190505b613b9a8582613b1c565b865550613c02565b601f198416613bb08661398c565b60005b82811015613bd857848901518255600182019150602085019450602081019050613bb3565b86831015613bf55784890151613bf1601f891682613afe565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613c40601883612a24565b9150613c4b82613c0a565b602082019050919050565b60006020820190508181036000830152613c6f81613c33565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613cd2602983612a24565b9150613cdd82613c76565b604082019050919050565b60006020820190508181036000830152613d0181613cc5565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613d64602f83612a24565b9150613d6f82613d08565b604082019050919050565b60006020820190508181036000830152613d9381613d57565b9050919050565b600081905092915050565b60008154613db28161332d565b613dbc8186613d9a565b94506001821660008114613dd75760018114613dec57613e1f565b60ff1983168652811515820286019350613e1f565b613df58561398c565b60005b83811015613e1757815481890152600182019150602081019050613df8565b838801955050505b50505092915050565b6000613e3382612a19565b613e3d8185613d9a565b9350613e4d818560208601612a35565b80840191505092915050565b6000613e658286613da5565b9150613e718285613e28565b9150613e7d8284613da5565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ee6602683612a24565b9150613ef182613e8a565b604082019050919050565b60006020820190508181036000830152613f1581613ed9565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613f78602583612a24565b9150613f8382613f1c565b604082019050919050565b60006020820190508181036000830152613fa781613f6b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061400a602483612a24565b915061401582613fae565b604082019050919050565b6000602082019050818103600083015261403981613ffd565b9050919050565b600061404b82612acb565b915061405683612acb565b925082820390508181111561406e5761406d613883565b5b92915050565b600061407f82612acb565b915061408a83612acb565b92508282019050808211156140a2576140a1613883565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140de602083612a24565b91506140e9826140a8565b602082019050919050565b6000602082019050818103600083015261410d816140d1565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061414a601983612a24565b915061415582614114565b602082019050919050565b600060208201905081810360008301526141798161413d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006141dc603283612a24565b91506141e782614180565b604082019050919050565b6000602082019050818103600083015261420b816141cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061424c82612acb565b915061425783612acb565b92508261426757614266614212565b5b828204905092915050565b600061427d82612acb565b915061428883612acb565b92508261429857614297614212565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006142ca826142a3565b6142d481856142ae565b93506142e4818560208601612a35565b6142ed81612a5f565b840191505092915050565b600060808201905061430d6000830187612b60565b61431a6020830186612b60565b6143276040830185612bf6565b818103606083015261433981846142bf565b905095945050505050565b6000815190506143538161298a565b92915050565b60006020828403121561436f5761436e612954565b5b600061437d84828501614344565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006143eb602083612a24565b91506143f6826143b5565b602082019050919050565b6000602082019050818103600083015261441a816143de565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614457601c83612a24565b915061446282614421565b602082019050919050565b600060208201905081810360008301526144868161444a565b905091905056fea26469706673582212209d7c2bbc0326e164adf8436fb866e5d3a9b4ae9b7af7c15f22876299c73bb7f964736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5665575a6d524c5a54455a774d634a4a444e39786556564d73616656505a385656775a5a70584b526473736e2f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseUri (string): https://gateway.pinata.cloud/ipfs/QmVeWZmRLZTEZwMcJJDN9xeVVMsafVPZ8VVwZZpXKRdssn/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f516d5665575a6d524c5a54455a774d634a4a444e39786556564d73616656
Arg [4] : 505a385656775a5a70584b526473736e2f000000000000000000000000000000
Deployed Bytecode Sourcemap
47722:3640:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37329:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22987:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24500:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24017:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48448:742;;;:::i;:::-;;37969:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25200:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37637:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47948:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25607:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50496:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38159:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51163:97;;;;;;;;;;;;;:::i;:::-;;50945:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22698:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50846:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49674:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22429:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45358:103;;;;;;;;;;;;;:::i;:::-;;48082:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44710:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23156:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47995:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24743:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48041:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49415:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25863:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48123:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49922:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50166:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48165:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51268:91;;;;;;;;;;;;;:::i;:::-;;24969:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45616:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51058:97;;;;;;;;;;;;;:::i;:::-;;37329:224;37431:4;37470:35;37455:50;;;:11;:50;;;;:90;;;;37509:36;37533:11;37509:23;:36::i;:::-;37455:90;37448:97;;37329:224;;;:::o;22987:100::-;23041:13;23074:5;23067:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22987:100;:::o;24500:171::-;24576:7;24596:23;24611:7;24596:14;:23::i;:::-;24639:15;:24;24655:7;24639:24;;;;;;;;;;;;;;;;;;;;;24632:31;;24500:171;;;:::o;24017:417::-;24098:13;24114:23;24129:7;24114:14;:23::i;:::-;24098:39;;24162:5;24156:11;;:2;:11;;;24148:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24256:5;24240:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24265:37;24282:5;24289:12;:10;:12::i;:::-;24265:16;:37::i;:::-;24240:62;24218:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;24405:21;24414:2;24418:7;24405:8;:21::i;:::-;24087:347;24017:417;;:::o;48448:742::-;48493:14;48510:13;:11;:13::i;:::-;48493:30;;48534;48567:25;48581:10;48567:13;:25::i;:::-;48534:58;;48611:13;;;;;;;;;;;48603:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;48689:15;;48666:13;:20;:38;48658:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;48762:15;;;;;;;;;;;48758:189;;;48829:4;48802:31;;:11;:23;48814:10;48802:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;48794:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;48031:3;48887:6;:18;48879:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;48758:189;48961:15;;;;;;;;;;;48957:120;;;49028:4;49001:31;;:11;:23;49013:10;49001:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;48993:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;48957:120;47985:3;49095:6;:19;49087:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;49162:20;49171:10;49162:8;:20::i;:::-;48481:709;;48448:742::o;37969:113::-;38030:7;38057:10;:17;;;;38050:24;;37969:113;:::o;25200:336::-;25395:41;25414:12;:10;:12::i;:::-;25428:7;25395:18;:41::i;:::-;25387:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25500:28;25510:4;25516:2;25520:7;25500:9;:28::i;:::-;25200:336;;;:::o;37637:256::-;37734:7;37770:23;37787:5;37770:16;:23::i;:::-;37762:5;:31;37754:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37859:12;:19;37872:5;37859:19;;;;;;;;;;;;;;;:26;37879:5;37859:26;;;;;;;;;;;;37852:33;;37637:256;;;;:::o;47948:40::-;47985:3;47948:40;:::o;25607:185::-;25745:39;25762:4;25768:2;25772:7;25745:39;;;;;;;;;;;;:16;:39::i;:::-;25607:185;;;:::o;50496:342::-;50555:16;50584:18;50605:17;50615:6;50605:9;:17::i;:::-;50584:38;;50635:25;50677:10;50663:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50635:53;;50703:9;50699:106;50718:10;50714:1;:14;50699:106;;;50763:30;50783:6;50791:1;50763:19;:30::i;:::-;50749:8;50758:1;50749:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;50730:3;;;;;:::i;:::-;;;;50699:106;;;;50822:8;50815:15;;;;50496:342;;;:::o;38159:233::-;38234:7;38270:30;:28;:30::i;:::-;38262:5;:38;38254:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38367:10;38378:5;38367:17;;;;;;;;:::i;:::-;;;;;;;;;;38360:24;;38159:233;;;:::o;51163:97::-;44596:13;:11;:13::i;:::-;51237:15:::1;;;;;;;;;;;51236:16;51218:15;;:34;;;;;;;;;;;;;;;;;;51163:97::o:0;50945:105::-;44596:13;:11;:13::i;:::-;51032:10:::1;51021:8;:21;;;;;;:::i;:::-;;50945:105:::0;:::o;22698:222::-;22770:7;22790:13;22806:7;:16;22814:7;22806:16;;;;;;;;;;;;;;;;;;;;;22790:32;;22858:1;22841:19;;:5;:19;;;22833:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22907:5;22900:12;;;22698:222;;;:::o;50846:91::-;50888:13;50921:8;50914:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50846:91;:::o;49674:196::-;44596:13;:11;:13::i;:::-;49760:9:::1;49755:108;49779:10;:17;49775:1;:21;49755:108;;;49847:4;49818:11;:26;49830:10;49841:1;49830:13;;;;;;;;:::i;:::-;;;;;;;;49818:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;49798:3;;;;;:::i;:::-;;;;49755:108;;;;49674:196:::0;:::o;22429:207::-;22501:7;22546:1;22529:19;;:5;:19;;;22521:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22612:9;:16;22622:5;22612:16;;;;;;;;;;;;;;;;22605:23;;22429:207;;;:::o;45358:103::-;44596:13;:11;:13::i;:::-;45423:30:::1;45450:1;45423:18;:30::i;:::-;45358:103::o:0;48082:34::-;;;;;;;;;;;;;:::o;44710:87::-;44756:7;44783:6;;;;;;;;;;;44776:13;;44710:87;:::o;23156:104::-;23212:13;23245:7;23238:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23156:104;:::o;47995:39::-;48031:3;47995:39;:::o;24743:155::-;24838:52;24857:12;:10;:12::i;:::-;24871:8;24881;24838:18;:52::i;:::-;24743:155;;:::o;48041:34::-;;;;:::o;49415:200::-;44596:13;:11;:13::i;:::-;49513:9:::1;49509:99;49530:9;:16;49526:1;:20;49509:99;;;49568:28;49578:3;49583:9;49593:1;49583:12;;;;;;;;:::i;:::-;;;;;;;;49568:9;:28::i;:::-;49548:3;;;;;:::i;:::-;;;;49509:99;;;;49415:200:::0;;:::o;25863:323::-;26037:41;26056:12;:10;:12::i;:::-;26070:7;26037:18;:41::i;:::-;26029:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;26140:38;26154:4;26160:2;26164:7;26173:4;26140:13;:38::i;:::-;25863:323;;;;:::o;48123:35::-;;;;;;;;;;;;;:::o;49922:196::-;44596:13;:11;:13::i;:::-;50008:9:::1;50003:108;50027:10;:17;50023:1;:21;50003:108;;;50095:4;50066:11;:26;50078:10;50089:1;50078:13;;;;;;;;:::i;:::-;;;;;;;;50066:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;50046:3;;;;;:::i;:::-;;;;50003:108;;;;49922:196:::0;:::o;50166:276::-;50240:13;50274:17;50282:8;50274:7;:17::i;:::-;50266:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;50385:8;50395:26;50412:8;50395:16;:26::i;:::-;50423:9;50368:65;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50354:80;;50166:276;;;:::o;48165:32::-;;;;;;;;;;;;;:::o;51268:91::-;44596:13;:11;:13::i;:::-;51338::::1;;;;;;;;;;;51337:14;51321:13;;:30;;;;;;;;;;;;;;;;;;51268:91::o:0;24969:164::-;25066:4;25090:18;:25;25109:5;25090:25;;;;;;;;;;;;;;;:35;25116:8;25090:35;;;;;;;;;;;;;;;;;;;;;;;;;25083:42;;24969:164;;;;:::o;45616:201::-;44596:13;:11;:13::i;:::-;45725:1:::1;45705:22;;:8;:22;;::::0;45697:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;45781:28;45800:8;45781:18;:28::i;:::-;45616:201:::0;:::o;51058:97::-;44596:13;:11;:13::i;:::-;51132:15:::1;;;;;;;;;;;51131:16;51113:15;;:34;;;;;;;;;;;;;;;;;;51058:97::o:0;22060:305::-;22162:4;22214:25;22199:40;;;:11;:40;;;;:105;;;;22271:33;22256:48;;;:11;:48;;;;22199:105;:158;;;;22321:36;22345:11;22321:23;:36::i;:::-;22199:158;22179:178;;22060:305;;;:::o;32475:135::-;32557:16;32565:7;32557;:16::i;:::-;32549:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32475:135;:::o;16917:98::-;16970:7;16997:10;16990:17;;16917:98;:::o;31754:174::-;31856:2;31829:15;:24;31845:7;31829:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31912:7;31908:2;31874:46;;31883:23;31898:7;31883:14;:23::i;:::-;31874:46;;;;;;;;;;;;31754:174;;:::o;49198:172::-;49248:27;:15;:25;:27::i;:::-;49286:15;49304:25;:15;:23;:25::i;:::-;49286:43;;49340:22;49350:2;49354:7;49340:9;:22::i;:::-;49237:133;49198:172;:::o;27987:264::-;28080:4;28097:13;28113:23;28128:7;28113:14;:23::i;:::-;28097:39;;28166:5;28155:16;;:7;:16;;;:52;;;;28175:32;28192:5;28199:7;28175:16;:32::i;:::-;28155:52;:87;;;;28235:7;28211:31;;:20;28223:7;28211:11;:20::i;:::-;:31;;;28155:87;28147:96;;;27987:264;;;;:::o;31010:625::-;31169:4;31142:31;;:23;31157:7;31142:14;:23::i;:::-;:31;;;31134:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31248:1;31234:16;;:2;:16;;;31226:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31304:39;31325:4;31331:2;31335:7;31304:20;:39::i;:::-;31408:29;31425:1;31429:7;31408:8;:29::i;:::-;31469:1;31450:9;:15;31460:4;31450:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31498:1;31481:9;:13;31491:2;31481:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31529:2;31510:7;:16;31518:7;31510:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31568:7;31564:2;31549:27;;31558:4;31549:27;;;;;;;;;;;;31589:38;31609:4;31615:2;31619:7;31589:19;:38::i;:::-;31010:625;;;:::o;44875:132::-;44950:12;:10;:12::i;:::-;44939:23;;:7;:5;:7::i;:::-;:23;;;44931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44875:132::o;45977:191::-;46051:16;46070:6;;;;;;;;;;;46051:25;;46096:8;46087:6;;:17;;;;;;;;;;;;;;;;;;46151:8;46120:40;;46141:8;46120:40;;;;;;;;;;;;46040:128;45977:191;:::o;32071:315::-;32226:8;32217:17;;:5;:17;;;32209:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32313:8;32275:18;:25;32294:5;32275:25;;;;;;;;;;;;;;;:35;32301:8;32275:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32359:8;32337:41;;32352:5;32337:41;;;32369:8;32337:41;;;;;;:::i;:::-;;;;;;;;32071:315;;;:::o;28593:110::-;28669:26;28679:2;28683:7;28669:26;;;;;;;;;;;;:9;:26::i;:::-;28593:110;;:::o;27067:313::-;27223:28;27233:4;27239:2;27243:7;27223:9;:28::i;:::-;27270:47;27293:4;27299:2;27303:7;27312:4;27270:22;:47::i;:::-;27262:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27067:313;;;;:::o;27693:127::-;27758:4;27810:1;27782:30;;:7;:16;27790:7;27782:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27775:37;;27693:127;;;:::o;17561:723::-;17617:13;17847:1;17838:5;:10;17834:53;;17865:10;;;;;;;;;;;;;;;;;;;;;17834:53;17897:12;17912:5;17897:20;;17928:14;17953:78;17968:1;17960:4;:9;17953:78;;17986:8;;;;;:::i;:::-;;;;18017:2;18009:10;;;;;:::i;:::-;;;17953:78;;;18041:19;18073:6;18063:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18041:39;;18091:154;18107:1;18098:5;:10;18091:154;;18135:1;18125:11;;;;;:::i;:::-;;;18202:2;18194:5;:10;;;;:::i;:::-;18181:2;:24;;;;:::i;:::-;18168:39;;18151:6;18158;18151:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18231:2;18222:11;;;;;:::i;:::-;;;18091:154;;;18269:6;18255:21;;;;;17561:723;;;;:::o;20491:157::-;20576:4;20615:25;20600:40;;;:11;:40;;;;20593:47;;20491:157;;;:::o;47169:127::-;47276:1;47258:7;:14;;;:19;;;;;;;;;;;47169:127;:::o;47047:114::-;47112:7;47139;:14;;;47132:21;;47047:114;;;:::o;39005:589::-;39149:45;39176:4;39182:2;39186:7;39149:26;:45::i;:::-;39227:1;39211:18;;:4;:18;;;39207:187;;39246:40;39278:7;39246:31;:40::i;:::-;39207:187;;;39316:2;39308:10;;:4;:10;;;39304:90;;39335:47;39368:4;39374:7;39335:32;:47::i;:::-;39304:90;39207:187;39422:1;39408:16;;:2;:16;;;39404:183;;39441:45;39478:7;39441:36;:45::i;:::-;39404:183;;;39514:4;39508:10;;:2;:10;;;39504:83;;39535:40;39563:2;39567:7;39535:27;:40::i;:::-;39504:83;39404:183;39005:589;;;:::o;35110:125::-;;;;:::o;28930:319::-;29059:18;29065:2;29069:7;29059:5;:18::i;:::-;29110:53;29141:1;29145:2;29149:7;29158:4;29110:22;:53::i;:::-;29088:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;28930:319;;;:::o;33174:853::-;33328:4;33349:15;:2;:13;;;:15::i;:::-;33345:675;;;33401:2;33385:36;;;33422:12;:10;:12::i;:::-;33436:4;33442:7;33451:4;33385:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33381:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33643:1;33626:6;:13;:18;33622:328;;33669:60;;;;;;;;;;:::i;:::-;;;;;;;;33622:328;33900:6;33894:13;33885:6;33881:2;33877:15;33870:38;33381:584;33517:41;;;33507:51;;;:6;:51;;;;33500:58;;;;;33345:675;34004:4;33997:11;;33174:853;;;;;;;:::o;34599:126::-;;;;:::o;40317:164::-;40421:10;:17;;;;40394:15;:24;40410:7;40394:24;;;;;;;;;;;:44;;;;40449:10;40465:7;40449:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40317:164;:::o;41108:988::-;41374:22;41424:1;41399:22;41416:4;41399:16;:22::i;:::-;:26;;;;:::i;:::-;41374:51;;41436:18;41457:17;:26;41475:7;41457:26;;;;;;;;;;;;41436:47;;41604:14;41590:10;:28;41586:328;;41635:19;41657:12;:18;41670:4;41657:18;;;;;;;;;;;;;;;:34;41676:14;41657:34;;;;;;;;;;;;41635:56;;41741:11;41708:12;:18;41721:4;41708:18;;;;;;;;;;;;;;;:30;41727:10;41708:30;;;;;;;;;;;:44;;;;41858:10;41825:17;:30;41843:11;41825:30;;;;;;;;;;;:43;;;;41620:294;41586:328;42010:17;:26;42028:7;42010:26;;;;;;;;;;;42003:33;;;42054:12;:18;42067:4;42054:18;;;;;;;;;;;;;;;:34;42073:14;42054:34;;;;;;;;;;;42047:41;;;41189:907;;41108:988;;:::o;42391:1079::-;42644:22;42689:1;42669:10;:17;;;;:21;;;;:::i;:::-;42644:46;;42701:18;42722:15;:24;42738:7;42722:24;;;;;;;;;;;;42701:45;;43073:19;43095:10;43106:14;43095:26;;;;;;;;:::i;:::-;;;;;;;;;;43073:48;;43159:11;43134:10;43145;43134:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;43270:10;43239:15;:28;43255:11;43239:28;;;;;;;;;;;:41;;;;43411:15;:24;43427:7;43411:24;;;;;;;;;;;43404:31;;;43446:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42462:1008;;;42391:1079;:::o;39895:221::-;39980:14;39997:20;40014:2;39997:16;:20::i;:::-;39980:37;;40055:7;40028:12;:16;40041:2;40028:16;;;;;;;;;;;;;;;:24;40045:6;40028:24;;;;;;;;;;;:34;;;;40102:6;40073:17;:26;40091:7;40073:26;;;;;;;;;;;:35;;;;39969:147;39895:221;;:::o;29585:439::-;29679:1;29665:16;;:2;:16;;;29657:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29738:16;29746:7;29738;:16::i;:::-;29737:17;29729:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29800:45;29829:1;29833:2;29837:7;29800:20;:45::i;:::-;29875:1;29858:9;:13;29868:2;29858:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29906:2;29887:7;:16;29895:7;29887:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29951:7;29947:2;29926:33;;29943:1;29926:33;;;;;;;;;;;;29972:44;30000:1;30004:2;30008:7;29972:19;:44::i;:::-;29585:439;;:::o;8918:326::-;8978:4;9235:1;9213:7;:19;;;:23;9206:30;;8918:326;;;:::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:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:329::-;5926:6;5975:2;5963:9;5954:7;5950:23;5946:32;5943:119;;;5981:79;;:::i;:::-;5943:119;6101:1;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6072:117;5867:329;;;;:::o;6202:114::-;6269:6;6303:5;6297:12;6287:22;;6202:114;;;:::o;6322:184::-;6421:11;6455:6;6450:3;6443:19;6495:4;6490:3;6486:14;6471:29;;6322:184;;;;:::o;6512:132::-;6579:4;6602:3;6594:11;;6632:4;6627:3;6623:14;6615:22;;6512:132;;;:::o;6650:108::-;6727:24;6745:5;6727:24;:::i;:::-;6722:3;6715:37;6650:108;;:::o;6764:179::-;6833:10;6854:46;6896:3;6888:6;6854:46;:::i;:::-;6932:4;6927:3;6923:14;6909:28;;6764:179;;;;:::o;6949:113::-;7019:4;7051;7046:3;7042:14;7034:22;;6949:113;;;:::o;7098:732::-;7217:3;7246:54;7294:5;7246:54;:::i;:::-;7316:86;7395:6;7390:3;7316:86;:::i;:::-;7309:93;;7426:56;7476:5;7426:56;:::i;:::-;7505:7;7536:1;7521:284;7546:6;7543:1;7540:13;7521:284;;;7622:6;7616:13;7649:63;7708:3;7693:13;7649:63;:::i;:::-;7642:70;;7735:60;7788:6;7735:60;:::i;:::-;7725:70;;7581:224;7568:1;7565;7561:9;7556:14;;7521:284;;;7525:14;7821:3;7814:10;;7222:608;;;7098:732;;;;:::o;7836:373::-;7979:4;8017:2;8006:9;8002:18;7994:26;;8066:9;8060:4;8056:20;8052:1;8041:9;8037:17;8030:47;8094:108;8197:4;8188:6;8094:108;:::i;:::-;8086:116;;7836:373;;;;:::o;8215:117::-;8324:1;8321;8314:12;8338:117;8447:1;8444;8437:12;8461:180;8509:77;8506:1;8499:88;8606:4;8603:1;8596:15;8630:4;8627:1;8620:15;8647:281;8730:27;8752:4;8730:27;:::i;:::-;8722:6;8718:40;8860:6;8848:10;8845:22;8824:18;8812:10;8809:34;8806:62;8803:88;;;8871:18;;:::i;:::-;8803:88;8911:10;8907:2;8900:22;8690:238;8647:281;;:::o;8934:129::-;8968:6;8995:20;;:::i;:::-;8985:30;;9024:33;9052:4;9044:6;9024:33;:::i;:::-;8934:129;;;:::o;9069:308::-;9131:4;9221:18;9213:6;9210:30;9207:56;;;9243:18;;:::i;:::-;9207:56;9281:29;9303:6;9281:29;:::i;:::-;9273:37;;9365:4;9359;9355:15;9347:23;;9069:308;;;:::o;9383:146::-;9480:6;9475:3;9470;9457:30;9521:1;9512:6;9507:3;9503:16;9496:27;9383:146;;;:::o;9535:425::-;9613:5;9638:66;9654:49;9696:6;9654:49;:::i;:::-;9638:66;:::i;:::-;9629:75;;9727:6;9720:5;9713:21;9765:4;9758:5;9754:16;9803:3;9794:6;9789:3;9785:16;9782:25;9779:112;;;9810:79;;:::i;:::-;9779:112;9900:54;9947:6;9942:3;9937;9900:54;:::i;:::-;9619:341;9535:425;;;;;:::o;9980:340::-;10036:5;10085:3;10078:4;10070:6;10066:17;10062:27;10052:122;;10093:79;;:::i;:::-;10052:122;10210:6;10197:20;10235:79;10310:3;10302:6;10295:4;10287:6;10283:17;10235:79;:::i;:::-;10226:88;;10042:278;9980:340;;;;:::o;10326:509::-;10395:6;10444:2;10432:9;10423:7;10419:23;10415:32;10412:119;;;10450:79;;:::i;:::-;10412:119;10598:1;10587:9;10583:17;10570:31;10628:18;10620:6;10617:30;10614:117;;;10650:79;;:::i;:::-;10614:117;10755:63;10810:7;10801:6;10790:9;10786:22;10755:63;:::i;:::-;10745:73;;10541:287;10326:509;;;;:::o;10841:311::-;10918:4;11008:18;11000:6;10997:30;10994:56;;;11030:18;;:::i;:::-;10994:56;11080:4;11072:6;11068:17;11060:25;;11140:4;11134;11130:15;11122:23;;10841:311;;;:::o;11158:117::-;11267:1;11264;11257:12;11298:710;11394:5;11419:81;11435:64;11492:6;11435:64;:::i;:::-;11419:81;:::i;:::-;11410:90;;11520:5;11549:6;11542:5;11535:21;11583:4;11576:5;11572:16;11565:23;;11636:4;11628:6;11624:17;11616:6;11612:30;11665:3;11657:6;11654:15;11651:122;;;11684:79;;:::i;:::-;11651:122;11799:6;11782:220;11816:6;11811:3;11808:15;11782:220;;;11891:3;11920:37;11953:3;11941:10;11920:37;:::i;:::-;11915:3;11908:50;11987:4;11982:3;11978:14;11971:21;;11858:144;11842:4;11837:3;11833:14;11826:21;;11782:220;;;11786:21;11400:608;;11298:710;;;;;:::o;12031:370::-;12102:5;12151:3;12144:4;12136:6;12132:17;12128:27;12118:122;;12159:79;;:::i;:::-;12118:122;12276:6;12263:20;12301:94;12391:3;12383:6;12376:4;12368:6;12364:17;12301:94;:::i;:::-;12292:103;;12108:293;12031:370;;;;:::o;12407:539::-;12491:6;12540:2;12528:9;12519:7;12515:23;12511:32;12508:119;;;12546:79;;:::i;:::-;12508:119;12694:1;12683:9;12679:17;12666:31;12724:18;12716:6;12713:30;12710:117;;;12746:79;;:::i;:::-;12710:117;12851:78;12921:7;12912:6;12901:9;12897:22;12851:78;:::i;:::-;12841:88;;12637:302;12407:539;;;;:::o;12952:116::-;13022:21;13037:5;13022:21;:::i;:::-;13015:5;13012:32;13002:60;;13058:1;13055;13048:12;13002:60;12952:116;:::o;13074:133::-;13117:5;13155:6;13142:20;13133:29;;13171:30;13195:5;13171:30;:::i;:::-;13074:133;;;;:::o;13213:468::-;13278:6;13286;13335:2;13323:9;13314:7;13310:23;13306:32;13303:119;;;13341:79;;:::i;:::-;13303:119;13461:1;13486:53;13531:7;13522:6;13511:9;13507:22;13486:53;:::i;:::-;13476:63;;13432:117;13588:2;13614:50;13656:7;13647:6;13636:9;13632:22;13614:50;:::i;:::-;13604:60;;13559:115;13213:468;;;;;:::o;13687:311::-;13764:4;13854:18;13846:6;13843:30;13840:56;;;13876:18;;:::i;:::-;13840:56;13926:4;13918:6;13914:17;13906:25;;13986:4;13980;13976:15;13968:23;;13687:311;;;:::o;14021:710::-;14117:5;14142:81;14158:64;14215:6;14158:64;:::i;:::-;14142:81;:::i;:::-;14133:90;;14243:5;14272:6;14265:5;14258:21;14306:4;14299:5;14295:16;14288:23;;14359:4;14351:6;14347:17;14339:6;14335:30;14388:3;14380:6;14377:15;14374:122;;;14407:79;;:::i;:::-;14374:122;14522:6;14505:220;14539:6;14534:3;14531:15;14505:220;;;14614:3;14643:37;14676:3;14664:10;14643:37;:::i;:::-;14638:3;14631:50;14710:4;14705:3;14701:14;14694:21;;14581:144;14565:4;14560:3;14556:14;14549:21;;14505:220;;;14509:21;14123:608;;14021:710;;;;;:::o;14754:370::-;14825:5;14874:3;14867:4;14859:6;14855:17;14851:27;14841:122;;14882:79;;:::i;:::-;14841:122;14999:6;14986:20;15024:94;15114:3;15106:6;15099:4;15091:6;15087:17;15024:94;:::i;:::-;15015:103;;14831:293;14754:370;;;;:::o;15130:684::-;15223:6;15231;15280:2;15268:9;15259:7;15255:23;15251:32;15248:119;;;15286:79;;:::i;:::-;15248:119;15406:1;15431:53;15476:7;15467:6;15456:9;15452:22;15431:53;:::i;:::-;15421:63;;15377:117;15561:2;15550:9;15546:18;15533:32;15592:18;15584:6;15581:30;15578:117;;;15614:79;;:::i;:::-;15578:117;15719:78;15789:7;15780:6;15769:9;15765:22;15719:78;:::i;:::-;15709:88;;15504:303;15130:684;;;;;:::o;15820:307::-;15881:4;15971:18;15963:6;15960:30;15957:56;;;15993:18;;:::i;:::-;15957:56;16031:29;16053:6;16031:29;:::i;:::-;16023:37;;16115:4;16109;16105:15;16097:23;;15820:307;;;:::o;16133:423::-;16210:5;16235:65;16251:48;16292:6;16251:48;:::i;:::-;16235:65;:::i;:::-;16226:74;;16323:6;16316:5;16309:21;16361:4;16354:5;16350:16;16399:3;16390:6;16385:3;16381:16;16378:25;16375:112;;;16406:79;;:::i;:::-;16375:112;16496:54;16543:6;16538:3;16533;16496:54;:::i;:::-;16216:340;16133:423;;;;;:::o;16575:338::-;16630:5;16679:3;16672:4;16664:6;16660:17;16656:27;16646:122;;16687:79;;:::i;:::-;16646:122;16804:6;16791:20;16829:78;16903:3;16895:6;16888:4;16880:6;16876:17;16829:78;:::i;:::-;16820:87;;16636:277;16575:338;;;;:::o;16919:943::-;17014:6;17022;17030;17038;17087:3;17075:9;17066:7;17062:23;17058:33;17055:120;;;17094:79;;:::i;:::-;17055:120;17214:1;17239:53;17284:7;17275:6;17264:9;17260:22;17239:53;:::i;:::-;17229:63;;17185:117;17341:2;17367:53;17412:7;17403:6;17392:9;17388:22;17367:53;:::i;:::-;17357:63;;17312:118;17469:2;17495:53;17540:7;17531:6;17520:9;17516:22;17495:53;:::i;:::-;17485:63;;17440:118;17625:2;17614:9;17610:18;17597:32;17656:18;17648:6;17645:30;17642:117;;;17678:79;;:::i;:::-;17642:117;17783:62;17837:7;17828:6;17817:9;17813:22;17783:62;:::i;:::-;17773:72;;17568:287;16919:943;;;;;;;:::o;17868:474::-;17936:6;17944;17993:2;17981:9;17972:7;17968:23;17964:32;17961:119;;;17999:79;;:::i;:::-;17961:119;18119:1;18144:53;18189:7;18180:6;18169:9;18165:22;18144:53;:::i;:::-;18134:63;;18090:117;18246:2;18272:53;18317:7;18308:6;18297:9;18293:22;18272:53;:::i;:::-;18262:63;;18217:118;17868:474;;;;;:::o;18348:180::-;18396:77;18393:1;18386:88;18493:4;18490:1;18483:15;18517:4;18514:1;18507:15;18534:320;18578:6;18615:1;18609:4;18605:12;18595:22;;18662:1;18656:4;18652:12;18683:18;18673:81;;18739:4;18731:6;18727:17;18717:27;;18673:81;18801:2;18793:6;18790:14;18770:18;18767:38;18764:84;;18820:18;;:::i;:::-;18764:84;18585:269;18534:320;;;:::o;18860:220::-;19000:34;18996:1;18988:6;18984:14;18977:58;19069:3;19064:2;19056:6;19052:15;19045:28;18860:220;:::o;19086:366::-;19228:3;19249:67;19313:2;19308:3;19249:67;:::i;:::-;19242:74;;19325:93;19414:3;19325:93;:::i;:::-;19443:2;19438:3;19434:12;19427:19;;19086:366;;;:::o;19458:419::-;19624:4;19662:2;19651:9;19647:18;19639:26;;19711:9;19705:4;19701:20;19697:1;19686:9;19682:17;19675:47;19739:131;19865:4;19739:131;:::i;:::-;19731:139;;19458:419;;;:::o;19883:249::-;20023:34;20019:1;20011:6;20007:14;20000:58;20092:32;20087:2;20079:6;20075:15;20068:57;19883:249;:::o;20138:366::-;20280:3;20301:67;20365:2;20360:3;20301:67;:::i;:::-;20294:74;;20377:93;20466:3;20377:93;:::i;:::-;20495:2;20490:3;20486:12;20479:19;;20138:366;;;:::o;20510:419::-;20676:4;20714:2;20703:9;20699:18;20691:26;;20763:9;20757:4;20753:20;20749:1;20738:9;20734:17;20727:47;20791:131;20917:4;20791:131;:::i;:::-;20783:139;;20510:419;;;:::o;20935:168::-;21075:20;21071:1;21063:6;21059:14;21052:44;20935:168;:::o;21109:366::-;21251:3;21272:67;21336:2;21331:3;21272:67;:::i;:::-;21265:74;;21348:93;21437:3;21348:93;:::i;:::-;21466:2;21461:3;21457:12;21450:19;;21109:366;;;:::o;21481:419::-;21647:4;21685:2;21674:9;21670:18;21662:26;;21734:9;21728:4;21724:20;21720:1;21709:9;21705:17;21698:47;21762:131;21888:4;21762:131;:::i;:::-;21754:139;;21481:419;;;:::o;21906:225::-;22046:34;22042:1;22034:6;22030:14;22023:58;22115:8;22110:2;22102:6;22098:15;22091:33;21906:225;:::o;22137:366::-;22279:3;22300:67;22364:2;22359:3;22300:67;:::i;:::-;22293:74;;22376:93;22465:3;22376:93;:::i;:::-;22494:2;22489:3;22485:12;22478:19;;22137:366;;;:::o;22509:419::-;22675:4;22713:2;22702:9;22698:18;22690:26;;22762:9;22756:4;22752:20;22748:1;22737:9;22733:17;22726:47;22790:131;22916:4;22790:131;:::i;:::-;22782:139;;22509:419;;;:::o;22934:176::-;23074:28;23070:1;23062:6;23058:14;23051:52;22934:176;:::o;23116:366::-;23258:3;23279:67;23343:2;23338:3;23279:67;:::i;:::-;23272:74;;23355:93;23444:3;23355:93;:::i;:::-;23473:2;23468:3;23464:12;23457:19;;23116:366;;;:::o;23488:419::-;23654:4;23692:2;23681:9;23677:18;23669:26;;23741:9;23735:4;23731:20;23727:1;23716:9;23712:17;23705:47;23769:131;23895:4;23769:131;:::i;:::-;23761:139;;23488:419;;;:::o;23913:175::-;24053:27;24049:1;24041:6;24037:14;24030:51;23913:175;:::o;24094:366::-;24236:3;24257:67;24321:2;24316:3;24257:67;:::i;:::-;24250:74;;24333:93;24422:3;24333:93;:::i;:::-;24451:2;24446:3;24442:12;24435:19;;24094:366;;;:::o;24466:419::-;24632:4;24670:2;24659:9;24655:18;24647:26;;24719:9;24713:4;24709:20;24705:1;24694:9;24690:17;24683:47;24747:131;24873:4;24747:131;:::i;:::-;24739:139;;24466:419;;;:::o;24891:178::-;25031:30;25027:1;25019:6;25015:14;25008:54;24891:178;:::o;25075:366::-;25217:3;25238:67;25302:2;25297:3;25238:67;:::i;:::-;25231:74;;25314:93;25403:3;25314:93;:::i;:::-;25432:2;25427:3;25423:12;25416:19;;25075:366;;;:::o;25447:419::-;25613:4;25651:2;25640:9;25636:18;25628:26;;25700:9;25694:4;25690:20;25686:1;25675:9;25671:17;25664:47;25728:131;25854:4;25728:131;:::i;:::-;25720:139;;25447:419;;;:::o;25872:172::-;26012:24;26008:1;26000:6;25996:14;25989:48;25872:172;:::o;26050:366::-;26192:3;26213:67;26277:2;26272:3;26213:67;:::i;:::-;26206:74;;26289:93;26378:3;26289:93;:::i;:::-;26407:2;26402:3;26398:12;26391:19;;26050:366;;;:::o;26422:419::-;26588:4;26626:2;26615:9;26611:18;26603:26;;26675:9;26669:4;26665:20;26661:1;26650:9;26646:17;26639:47;26703:131;26829:4;26703:131;:::i;:::-;26695:139;;26422:419;;;:::o;26847:233::-;26987:34;26983:1;26975:6;26971:14;26964:58;27056:16;27051:2;27043:6;27039:15;27032:41;26847:233;:::o;27086:366::-;27228:3;27249:67;27313:2;27308:3;27249:67;:::i;:::-;27242:74;;27325:93;27414:3;27325:93;:::i;:::-;27443:2;27438:3;27434:12;27427:19;;27086:366;;;:::o;27458:419::-;27624:4;27662:2;27651:9;27647:18;27639:26;;27711:9;27705:4;27701:20;27697:1;27686:9;27682:17;27675:47;27739:131;27865:4;27739:131;:::i;:::-;27731:139;;27458:419;;;:::o;27883:230::-;28023:34;28019:1;28011:6;28007:14;28000:58;28092:13;28087:2;28079:6;28075:15;28068:38;27883:230;:::o;28119:366::-;28261:3;28282:67;28346:2;28341:3;28282:67;:::i;:::-;28275:74;;28358:93;28447:3;28358:93;:::i;:::-;28476:2;28471:3;28467:12;28460:19;;28119:366;;;:::o;28491:419::-;28657:4;28695:2;28684:9;28680:18;28672:26;;28744:9;28738:4;28734:20;28730:1;28719:9;28715:17;28708:47;28772:131;28898:4;28772:131;:::i;:::-;28764:139;;28491:419;;;:::o;28916:180::-;28964:77;28961:1;28954:88;29061:4;29058:1;29051:15;29085:4;29082:1;29075:15;29102:180;29150:77;29147:1;29140:88;29247:4;29244:1;29237:15;29271:4;29268:1;29261:15;29288:233;29327:3;29350:24;29368:5;29350:24;:::i;:::-;29341:33;;29396:66;29389:5;29386:77;29383:103;;29466:18;;:::i;:::-;29383:103;29513:1;29506:5;29502:13;29495:20;;29288:233;;;:::o;29527:231::-;29667:34;29663:1;29655:6;29651:14;29644:58;29736:14;29731:2;29723:6;29719:15;29712:39;29527:231;:::o;29764:366::-;29906:3;29927:67;29991:2;29986:3;29927:67;:::i;:::-;29920:74;;30003:93;30092:3;30003:93;:::i;:::-;30121:2;30116:3;30112:12;30105:19;;29764:366;;;:::o;30136:419::-;30302:4;30340:2;30329:9;30325:18;30317:26;;30389:9;30383:4;30379:20;30375:1;30364:9;30360:17;30353:47;30417:131;30543:4;30417:131;:::i;:::-;30409:139;;30136:419;;;:::o;30561:141::-;30610:4;30633:3;30625:11;;30656:3;30653:1;30646:14;30690:4;30687:1;30677:18;30669:26;;30561:141;;;:::o;30708:93::-;30745:6;30792:2;30787;30780:5;30776:14;30772:23;30762:33;;30708:93;;;:::o;30807:107::-;30851:8;30901:5;30895:4;30891:16;30870:37;;30807:107;;;;:::o;30920:393::-;30989:6;31039:1;31027:10;31023:18;31062:97;31092:66;31081:9;31062:97;:::i;:::-;31180:39;31210:8;31199:9;31180:39;:::i;:::-;31168:51;;31252:4;31248:9;31241:5;31237:21;31228:30;;31301:4;31291:8;31287:19;31280:5;31277:30;31267:40;;30996:317;;30920:393;;;;;:::o;31319:60::-;31347:3;31368:5;31361:12;;31319:60;;;:::o;31385:142::-;31435:9;31468:53;31486:34;31495:24;31513:5;31495:24;:::i;:::-;31486:34;:::i;:::-;31468:53;:::i;:::-;31455:66;;31385:142;;;:::o;31533:75::-;31576:3;31597:5;31590:12;;31533:75;;;:::o;31614:269::-;31724:39;31755:7;31724:39;:::i;:::-;31785:91;31834:41;31858:16;31834:41;:::i;:::-;31826:6;31819:4;31813:11;31785:91;:::i;:::-;31779:4;31772:105;31690:193;31614:269;;;:::o;31889:73::-;31934:3;31889:73;:::o;31968:189::-;32045:32;;:::i;:::-;32086:65;32144:6;32136;32130:4;32086:65;:::i;:::-;32021:136;31968:189;;:::o;32163:186::-;32223:120;32240:3;32233:5;32230:14;32223:120;;;32294:39;32331:1;32324:5;32294:39;:::i;:::-;32267:1;32260:5;32256:13;32247:22;;32223:120;;;32163:186;;:::o;32355:543::-;32456:2;32451:3;32448:11;32445:446;;;32490:38;32522:5;32490:38;:::i;:::-;32574:29;32592:10;32574:29;:::i;:::-;32564:8;32560:44;32757:2;32745:10;32742:18;32739:49;;;32778:8;32763:23;;32739:49;32801:80;32857:22;32875:3;32857:22;:::i;:::-;32847:8;32843:37;32830:11;32801:80;:::i;:::-;32460:431;;32445:446;32355:543;;;:::o;32904:117::-;32958:8;33008:5;33002:4;32998:16;32977:37;;32904:117;;;;:::o;33027:169::-;33071:6;33104:51;33152:1;33148:6;33140:5;33137:1;33133:13;33104:51;:::i;:::-;33100:56;33185:4;33179;33175:15;33165:25;;33078:118;33027:169;;;;:::o;33201:295::-;33277:4;33423:29;33448:3;33442:4;33423:29;:::i;:::-;33415:37;;33485:3;33482:1;33478:11;33472:4;33469:21;33461:29;;33201:295;;;;:::o;33501:1395::-;33618:37;33651:3;33618:37;:::i;:::-;33720:18;33712:6;33709:30;33706:56;;;33742:18;;:::i;:::-;33706:56;33786:38;33818:4;33812:11;33786:38;:::i;:::-;33871:67;33931:6;33923;33917:4;33871:67;:::i;:::-;33965:1;33989:4;33976:17;;34021:2;34013:6;34010:14;34038:1;34033:618;;;;34695:1;34712:6;34709:77;;;34761:9;34756:3;34752:19;34746:26;34737:35;;34709:77;34812:67;34872:6;34865:5;34812:67;:::i;:::-;34806:4;34799:81;34668:222;34003:887;;34033:618;34085:4;34081:9;34073:6;34069:22;34119:37;34151:4;34119:37;:::i;:::-;34178:1;34192:208;34206:7;34203:1;34200:14;34192:208;;;34285:9;34280:3;34276:19;34270:26;34262:6;34255:42;34336:1;34328:6;34324:14;34314:24;;34383:2;34372:9;34368:18;34355:31;;34229:4;34226:1;34222:12;34217:17;;34192:208;;;34428:6;34419:7;34416:19;34413:179;;;34486:9;34481:3;34477:19;34471:26;34529:48;34571:4;34563:6;34559:17;34548:9;34529:48;:::i;:::-;34521:6;34514:64;34436:156;34413:179;34638:1;34634;34626:6;34622:14;34618:22;34612:4;34605:36;34040:611;;;34003:887;;33593:1303;;;33501:1395;;:::o;34902:174::-;35042:26;35038:1;35030:6;35026:14;35019:50;34902:174;:::o;35082:366::-;35224:3;35245:67;35309:2;35304:3;35245:67;:::i;:::-;35238:74;;35321:93;35410:3;35321:93;:::i;:::-;35439:2;35434:3;35430:12;35423:19;;35082:366;;;:::o;35454:419::-;35620:4;35658:2;35647:9;35643:18;35635:26;;35707:9;35701:4;35697:20;35693:1;35682:9;35678:17;35671:47;35735:131;35861:4;35735:131;:::i;:::-;35727:139;;35454:419;;;:::o;35879:228::-;36019:34;36015:1;36007:6;36003:14;35996:58;36088:11;36083:2;36075:6;36071:15;36064:36;35879:228;:::o;36113:366::-;36255:3;36276:67;36340:2;36335:3;36276:67;:::i;:::-;36269:74;;36352:93;36441:3;36352:93;:::i;:::-;36470:2;36465:3;36461:12;36454:19;;36113:366;;;:::o;36485:419::-;36651:4;36689:2;36678:9;36674:18;36666:26;;36738:9;36732:4;36728:20;36724:1;36713:9;36709:17;36702:47;36766:131;36892:4;36766:131;:::i;:::-;36758:139;;36485:419;;;:::o;36910:234::-;37050:34;37046:1;37038:6;37034:14;37027:58;37119:17;37114:2;37106:6;37102:15;37095:42;36910:234;:::o;37150:366::-;37292:3;37313:67;37377:2;37372:3;37313:67;:::i;:::-;37306:74;;37389:93;37478:3;37389:93;:::i;:::-;37507:2;37502:3;37498:12;37491:19;;37150:366;;;:::o;37522:419::-;37688:4;37726:2;37715:9;37711:18;37703:26;;37775:9;37769:4;37765:20;37761:1;37750:9;37746:17;37739:47;37803:131;37929:4;37803:131;:::i;:::-;37795:139;;37522:419;;;:::o;37947:148::-;38049:11;38086:3;38071:18;;37947:148;;;;:::o;38125:874::-;38228:3;38265:5;38259:12;38294:36;38320:9;38294:36;:::i;:::-;38346:89;38428:6;38423:3;38346:89;:::i;:::-;38339:96;;38466:1;38455:9;38451:17;38482:1;38477:166;;;;38657:1;38652:341;;;;38444:549;;38477:166;38561:4;38557:9;38546;38542:25;38537:3;38530:38;38623:6;38616:14;38609:22;38601:6;38597:35;38592:3;38588:45;38581:52;;38477:166;;38652:341;38719:38;38751:5;38719:38;:::i;:::-;38779:1;38793:154;38807:6;38804:1;38801:13;38793:154;;;38881:7;38875:14;38871:1;38866:3;38862:11;38855:35;38931:1;38922:7;38918:15;38907:26;;38829:4;38826:1;38822:12;38817:17;;38793:154;;;38976:6;38971:3;38967:16;38960:23;;38659:334;;38444:549;;38232:767;;38125:874;;;;:::o;39005:390::-;39111:3;39139:39;39172:5;39139:39;:::i;:::-;39194:89;39276:6;39271:3;39194:89;:::i;:::-;39187:96;;39292:65;39350:6;39345:3;39338:4;39331:5;39327:16;39292:65;:::i;:::-;39382:6;39377:3;39373:16;39366:23;;39115:280;39005:390;;;;:::o;39401:583::-;39623:3;39645:92;39733:3;39724:6;39645:92;:::i;:::-;39638:99;;39754:95;39845:3;39836:6;39754:95;:::i;:::-;39747:102;;39866:92;39954:3;39945:6;39866:92;:::i;:::-;39859:99;;39975:3;39968:10;;39401:583;;;;;;:::o;39990:225::-;40130:34;40126:1;40118:6;40114:14;40107:58;40199:8;40194:2;40186:6;40182:15;40175:33;39990:225;:::o;40221:366::-;40363:3;40384:67;40448:2;40443:3;40384:67;:::i;:::-;40377:74;;40460:93;40549:3;40460:93;:::i;:::-;40578:2;40573:3;40569:12;40562:19;;40221:366;;;:::o;40593:419::-;40759:4;40797:2;40786:9;40782:18;40774:26;;40846:9;40840:4;40836:20;40832:1;40821:9;40817:17;40810:47;40874:131;41000:4;40874:131;:::i;:::-;40866:139;;40593:419;;;:::o;41018:224::-;41158:34;41154:1;41146:6;41142:14;41135:58;41227:7;41222:2;41214:6;41210:15;41203:32;41018:224;:::o;41248:366::-;41390:3;41411:67;41475:2;41470:3;41411:67;:::i;:::-;41404:74;;41487:93;41576:3;41487:93;:::i;:::-;41605:2;41600:3;41596:12;41589:19;;41248:366;;;:::o;41620:419::-;41786:4;41824:2;41813:9;41809:18;41801:26;;41873:9;41867:4;41863:20;41859:1;41848:9;41844:17;41837:47;41901:131;42027:4;41901:131;:::i;:::-;41893:139;;41620:419;;;:::o;42045:223::-;42185:34;42181:1;42173:6;42169:14;42162:58;42254:6;42249:2;42241:6;42237:15;42230:31;42045:223;:::o;42274:366::-;42416:3;42437:67;42501:2;42496:3;42437:67;:::i;:::-;42430:74;;42513:93;42602:3;42513:93;:::i;:::-;42631:2;42626:3;42622:12;42615:19;;42274:366;;;:::o;42646:419::-;42812:4;42850:2;42839:9;42835:18;42827:26;;42899:9;42893:4;42889:20;42885:1;42874:9;42870:17;42863:47;42927:131;43053:4;42927:131;:::i;:::-;42919:139;;42646:419;;;:::o;43071:194::-;43111:4;43131:20;43149:1;43131:20;:::i;:::-;43126:25;;43165:20;43183:1;43165:20;:::i;:::-;43160:25;;43209:1;43206;43202:9;43194:17;;43233:1;43227:4;43224:11;43221:37;;;43238:18;;:::i;:::-;43221:37;43071:194;;;;:::o;43271:191::-;43311:3;43330:20;43348:1;43330:20;:::i;:::-;43325:25;;43364:20;43382:1;43364:20;:::i;:::-;43359:25;;43407:1;43404;43400:9;43393:16;;43428:3;43425:1;43422:10;43419:36;;;43435:18;;:::i;:::-;43419:36;43271:191;;;;:::o;43468:182::-;43608:34;43604:1;43596:6;43592:14;43585:58;43468:182;:::o;43656:366::-;43798:3;43819:67;43883:2;43878:3;43819:67;:::i;:::-;43812:74;;43895:93;43984:3;43895:93;:::i;:::-;44013:2;44008:3;44004:12;43997:19;;43656:366;;;:::o;44028:419::-;44194:4;44232:2;44221:9;44217:18;44209:26;;44281:9;44275:4;44271:20;44267:1;44256:9;44252:17;44245:47;44309:131;44435:4;44309:131;:::i;:::-;44301:139;;44028:419;;;:::o;44453:175::-;44593:27;44589:1;44581:6;44577:14;44570:51;44453:175;:::o;44634:366::-;44776:3;44797:67;44861:2;44856:3;44797:67;:::i;:::-;44790:74;;44873:93;44962:3;44873:93;:::i;:::-;44991:2;44986:3;44982:12;44975:19;;44634:366;;;:::o;45006:419::-;45172:4;45210:2;45199:9;45195:18;45187:26;;45259:9;45253:4;45249:20;45245:1;45234:9;45230:17;45223:47;45287:131;45413:4;45287:131;:::i;:::-;45279:139;;45006:419;;;:::o;45431:237::-;45571:34;45567:1;45559:6;45555:14;45548:58;45640:20;45635:2;45627:6;45623:15;45616:45;45431:237;:::o;45674:366::-;45816:3;45837:67;45901:2;45896:3;45837:67;:::i;:::-;45830:74;;45913:93;46002:3;45913:93;:::i;:::-;46031:2;46026:3;46022:12;46015:19;;45674:366;;;:::o;46046:419::-;46212:4;46250:2;46239:9;46235:18;46227:26;;46299:9;46293:4;46289:20;46285:1;46274:9;46270:17;46263:47;46327:131;46453:4;46327:131;:::i;:::-;46319:139;;46046:419;;;:::o;46471:180::-;46519:77;46516:1;46509:88;46616:4;46613:1;46606:15;46640:4;46637:1;46630:15;46657:185;46697:1;46714:20;46732:1;46714:20;:::i;:::-;46709:25;;46748:20;46766:1;46748:20;:::i;:::-;46743:25;;46787:1;46777:35;;46792:18;;:::i;:::-;46777:35;46834:1;46831;46827:9;46822:14;;46657:185;;;;:::o;46848:176::-;46880:1;46897:20;46915:1;46897:20;:::i;:::-;46892:25;;46931:20;46949:1;46931:20;:::i;:::-;46926:25;;46970:1;46960:35;;46975:18;;:::i;:::-;46960:35;47016:1;47013;47009:9;47004:14;;46848:176;;;;:::o;47030:98::-;47081:6;47115:5;47109:12;47099:22;;47030:98;;;:::o;47134:168::-;47217:11;47251:6;47246:3;47239:19;47291:4;47286:3;47282:14;47267:29;;47134:168;;;;:::o;47308:373::-;47394:3;47422:38;47454:5;47422:38;:::i;:::-;47476:70;47539:6;47534:3;47476:70;:::i;:::-;47469:77;;47555:65;47613:6;47608:3;47601:4;47594:5;47590:16;47555:65;:::i;:::-;47645:29;47667:6;47645:29;:::i;:::-;47640:3;47636:39;47629:46;;47398:283;47308:373;;;;:::o;47687:640::-;47882:4;47920:3;47909:9;47905:19;47897:27;;47934:71;48002:1;47991:9;47987:17;47978:6;47934:71;:::i;:::-;48015:72;48083:2;48072:9;48068:18;48059:6;48015:72;:::i;:::-;48097;48165:2;48154:9;48150:18;48141:6;48097:72;:::i;:::-;48216:9;48210:4;48206:20;48201:2;48190:9;48186:18;48179:48;48244:76;48315:4;48306:6;48244:76;:::i;:::-;48236:84;;47687:640;;;;;;;:::o;48333:141::-;48389:5;48420:6;48414:13;48405:22;;48436:32;48462:5;48436:32;:::i;:::-;48333:141;;;;:::o;48480:349::-;48549:6;48598:2;48586:9;48577:7;48573:23;48569:32;48566:119;;;48604:79;;:::i;:::-;48566:119;48724:1;48749:63;48804:7;48795:6;48784:9;48780:22;48749:63;:::i;:::-;48739:73;;48695:127;48480:349;;;;:::o;48835:180::-;48883:77;48880:1;48873:88;48980:4;48977:1;48970:15;49004:4;49001:1;48994:15;49021:182;49161:34;49157:1;49149:6;49145:14;49138:58;49021:182;:::o;49209:366::-;49351:3;49372:67;49436:2;49431:3;49372:67;:::i;:::-;49365:74;;49448:93;49537:3;49448:93;:::i;:::-;49566:2;49561:3;49557:12;49550:19;;49209:366;;;:::o;49581:419::-;49747:4;49785:2;49774:9;49770:18;49762:26;;49834:9;49828:4;49824:20;49820:1;49809:9;49805:17;49798:47;49862:131;49988:4;49862:131;:::i;:::-;49854:139;;49581:419;;;:::o;50006:178::-;50146:30;50142:1;50134:6;50130:14;50123:54;50006:178;:::o;50190:366::-;50332:3;50353:67;50417:2;50412:3;50353:67;:::i;:::-;50346:74;;50429:93;50518:3;50429:93;:::i;:::-;50547:2;50542:3;50538:12;50531:19;;50190:366;;;:::o;50562:419::-;50728:4;50766:2;50755:9;50751:18;50743:26;;50815:9;50809:4;50805:20;50801:1;50790:9;50786:17;50779:47;50843:131;50969:4;50843:131;:::i;:::-;50835:139;;50562:419;;;:::o
Swarm Source
ipfs://9d7c2bbc0326e164adf8436fb866e5d3a9b4ae9b7af7c15f22876299c73bb7f9
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.