ERC-721
Overview
Max Total Supply
1,712 YNFT
Holders
130
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
6 YNFTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
YaShogun
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-06 */ // Sources flattened with hardhat v2.10.0 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // 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/[email protected] // 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/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File erc721a/contracts/[email protected] // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A is IERC721, IERC721Metadata { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/utils/[email protected] // 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/[email protected] // 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/[email protected] // 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/[email protected] // 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 erc721a/contracts/[email protected] // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721A { using Address for address; using Strings for uint256; // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File @openzeppelin/contracts/utils/[email protected] // 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 @openzeppelin/contracts/access/[email protected] // 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 contracts/YaShogun.sol /// @author zscarabsz /// @title YaShogun - Yasha NFT (genesis) // SPDX-License-Identifier: MIT pragma solidity ^0.8.11; contract YaShogun is ERC721A , Ownable{ constructor() ERC721A("YaShogun", "YNFT") {} using Counters for Counters.Counter; using Strings for uint256; address payable private _PaymentAddress = payable(0x48f8C548B0370426f4a62BdBbceA6a4bD2AdE7a8); Counters.Counter private _publicYNFT; uint256 private _YNFT_MAX = 2222; uint256 private _activeDateTime = 1665446400; string private _tokenBaseURI = ""; string private _revealURI = "https://ipfs.io/ipfs/QmYCqKkRNqaQfvkD8jAczZqBQq9EyZWUHou1yu4sYvgA4A"; uint256 private PRESALE_PRICE = 0.025 ether; // .025 uint256 private PUBLIC_PRICE = 0.05 ether; // .05 uint256 private REVEAL_DELAY = 96 hours; uint256 private PRESALE_HOURS = 72 hours; uint256 private PRESALE_MINT_LIMIT = 10; uint256 private PUBLIC_MINT_LIMIT = 10; mapping(address => bool) private _mappingWhiteList; mapping(address => uint256) private _mappingPresaleMintCount; mapping(address => uint256) private _mappingPublicMintCount; function setMaxMintAmount(uint256 maxAmount) external onlyOwner { _YNFT_MAX = maxAmount; } function setPaymentAddress(address paymentAddress) external onlyOwner { _PaymentAddress = payable(paymentAddress); } function setActiveDateTime(uint256 activeDateTime, uint256 presaleHours, uint256 revealDelay) external onlyOwner { _activeDateTime = activeDateTime; REVEAL_DELAY = revealDelay; PRESALE_HOURS = presaleHours; } function setWhiteList(address[] memory whiteListAddress, bool bEnable) external onlyOwner { for (uint256 i = 0; i < whiteListAddress.length; i++) { _mappingWhiteList[whiteListAddress[i]] = bEnable; } } function isWhiteListed(address addr) public view returns (bool) { return _mappingWhiteList[addr]; } function setMintPrice(uint256 presaleMintPrice, uint256 publicMintPrice) external onlyOwner { PRESALE_PRICE = presaleMintPrice; PUBLIC_PRICE = publicMintPrice; } function setMintMaxLimit(uint256 presaleMintLimit, uint256 publicsaleMintLimit) external onlyOwner { PRESALE_MINT_LIMIT = presaleMintLimit; PUBLIC_MINT_LIMIT = publicsaleMintLimit; } function getPresaleMintMaxLimit() public view returns (uint256) { return PRESALE_MINT_LIMIT; } function getPublicsaleMintMaxLimit() public view returns (uint256) { return PUBLIC_MINT_LIMIT; } function getMintMax() public view returns (uint256) { return _YNFT_MAX; } function setURIs(string memory revealURI, string memory baseURI) external onlyOwner { _revealURI = revealURI; _tokenBaseURI = baseURI; } function tokenURI(uint256 tokenId) public view override(ERC721A) returns (string memory) { require(_exists(tokenId), "Token does not exist"); if (_activeDateTime + REVEAL_DELAY < block.timestamp) { return string(abi.encodePacked(_tokenBaseURI, tokenId.toString())); } return _revealURI; } function withdraw() external onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function price() public view returns (uint256) { return (block.timestamp < _activeDateTime)? PRESALE_PRICE : PUBLIC_PRICE; } function isPresaleMintActive() public view returns (bool) { if (isPublicMintActive() == true) { return false; } return (block.timestamp > _activeDateTime - PRESALE_HOURS)? true : false; } function isPublicMintActive() public view returns (bool) { return (block.timestamp > _activeDateTime)? true : false; } function adminMint(uint256 adminMintAmt) external onlyOwner { require(_publicYNFT.current() + adminMintAmt < _YNFT_MAX, "Purchase would exceed _YNFT_MAX"); for (uint256 i = 0; i < adminMintAmt; i++) { _publicYNFT.increment(); } _safeMint(msg.sender, adminMintAmt); } function purchase(uint256 numberOfTokens) external payable { require(msg.sender != owner(), "You are owner!"); require(price() * numberOfTokens <= msg.value, "ETH amount is not sufficient"); require(_publicYNFT.current() + numberOfTokens <= _YNFT_MAX, "Purchase would exceed _YNFT_MAX"); if (block.timestamp < _activeDateTime) { require(_mappingWhiteList[msg.sender] == true, "Not registered to WhiteList"); require(block.timestamp > _activeDateTime - PRESALE_HOURS , "Mint is not activated for presale"); require(_mappingPresaleMintCount[msg.sender] + numberOfTokens <= PRESALE_MINT_LIMIT, "Overflow for PRESALE_MINT_LIMIT"); _mappingPresaleMintCount[msg.sender] = _mappingPresaleMintCount[msg.sender] + numberOfTokens; } else { require(block.timestamp > _activeDateTime, "Mint is not activated for public sale"); require(numberOfTokens <= PUBLIC_MINT_LIMIT, "Amount to high for single transaction"); require(_mappingPublicMintCount[msg.sender] + numberOfTokens <= PUBLIC_MINT_LIMIT, "Overflow for PUBLIC_MINT_LIMIT"); _mappingPublicMintCount[msg.sender] = _mappingPublicMintCount[msg.sender] + numberOfTokens; } for(uint256 i =0;i<numberOfTokens;i++){ _publicYNFT.increment(); } _PaymentAddress.transfer(msg.value); _safeMint(msg.sender, numberOfTokens); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"adminMintAmt","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPresaleMintMaxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPublicsaleMintMaxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"purchase","outputs":[],"stateMutability":"payable","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":"uint256","name":"activeDateTime","type":"uint256"},{"internalType":"uint256","name":"presaleHours","type":"uint256"},{"internalType":"uint256","name":"revealDelay","type":"uint256"}],"name":"setActiveDateTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleMintLimit","type":"uint256"},{"internalType":"uint256","name":"publicsaleMintLimit","type":"uint256"}],"name":"setMintMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleMintPrice","type":"uint256"},{"internalType":"uint256","name":"publicMintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"paymentAddress","type":"address"}],"name":"setPaymentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"revealURI","type":"string"},{"internalType":"string","name":"baseURI","type":"string"}],"name":"setURIs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"whiteListAddress","type":"address[]"},{"internalType":"bool","name":"bEnable","type":"bool"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040527348f8c548b0370426f4a62bdbbcea6a4bd2ade7a8600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506108ae600b55636344b200600c5560405180602001604052806000815250600d90805190602001906200008e929190620002ac565b506040518060800160405280604381526020016200423d60439139600e9080519060200190620000c0929190620002ac565b506658d15e17628000600f5566b1a2bc2ec50000601055620546006011556203f480601255600a601355600a601455348015620000fc57600080fd5b506040518060400160405280600881526020017f596153686f67756e0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f594e465400000000000000000000000000000000000000000000000000000000815250816002908051906020019062000181929190620002ac565b5080600390805190602001906200019a929190620002ac565b50620001ab620001d960201b60201c565b6000819055505050620001d3620001c7620001de60201b60201c565b620001e660201b60201c565b620003c1565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ba906200038b565b90600052602060002090601f016020900481019282620002de57600085556200032a565b82601f10620002f957805160ff19168380011785556200032a565b828001600101855582156200032a579182015b82811115620003295782518255916020019190600101906200030c565b5b5090506200033991906200033d565b5090565b5b80821115620003585760008160009055506001016200033e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003a457607f821691505b60208210811415620003bb57620003ba6200035c565b5b50919050565b613e6c80620003d16000396000f3fe6080604052600436106101f95760003560e01c8063715018a61161010d578063c1f26123116100a0578063e43f696e1161006f578063e43f696e1461070b578063e825417414610734578063e985e9c51461075d578063efef39a11461079a578063f2fde38b146107b6576101f9565b8063c1f2612314610651578063c55581981461067a578063c87b56dd146106a5578063d42f21f6146106e2576101f9565b80639791e389116100dc5780639791e389146105ab578063a035b1fe146105d4578063a22cb465146105ff578063b88d4fde14610628576101f9565b8063715018a6146105135780638da5cb5b1461052a578063928dd6e31461055557806395d89b4114610580576101f9565b806323b872dd1161019057806342842e0e1161015f57806342842e0e1461040a5780635e1e1004146104335780636352211e1461045c5780636f9170f61461049957806370a08231146104d6576101f9565b806323b872dd146103745780632483ada01461039d5780632d6b6224146103c85780633ccfd60b146103f3576101f9565b8063088a4ed0116101cc578063088a4ed0146102cc578063095ea7b3146102f557806318160ddd1461031e5780631e51e4a114610349576101f9565b806301ffc9a7146101fe5780630442bfa81461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612c13565b6107df565b6040516102329190612c5b565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612cac565b6108c1565b005b34801561027057600080fd5b506102796108db565b6040516102869190612d85565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190612da7565b61096d565b6040516102c39190612e15565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee9190612da7565b6109e9565b005b34801561030157600080fd5b5061031c60048036038101906103179190612e5c565b6109fb565b005b34801561032a57600080fd5b50610333610b00565b6040516103409190612eab565b60405180910390f35b34801561035557600080fd5b5061035e610b17565b60405161036b9190612eab565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190612ec6565b610b21565b005b3480156103a957600080fd5b506103b2610b31565b6040516103bf9190612eab565b60405180910390f35b3480156103d457600080fd5b506103dd610b3b565b6040516103ea9190612c5b565b60405180910390f35b3480156103ff57600080fd5b50610408610b55565b005b34801561041657600080fd5b50610431600480360381019061042c9190612ec6565b610bac565b005b34801561043f57600080fd5b5061045a60048036038101906104559190612f19565b610bcc565b005b34801561046857600080fd5b50610483600480360381019061047e9190612da7565b610c18565b6040516104909190612e15565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190612f19565b610c2e565b6040516104cd9190612c5b565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190612f19565b610c84565b60405161050a9190612eab565b60405180910390f35b34801561051f57600080fd5b50610528610d54565b005b34801561053657600080fd5b5061053f610d68565b60405161054c9190612e15565b60405180910390f35b34801561056157600080fd5b5061056a610d92565b6040516105779190612eab565b60405180910390f35b34801561058c57600080fd5b50610595610d9c565b6040516105a29190612d85565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190612f46565b610e2e565b005b3480156105e057600080fd5b506105e9610e50565b6040516105f69190612eab565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190612fc5565b610e6c565b005b34801561063457600080fd5b5061064f600480360381019061064a919061313a565b610fe4565b005b34801561065d57600080fd5b5061067860048036038101906106739190612da7565b61105c565b005b34801561068657600080fd5b5061068f6110f2565b60405161069c9190612c5b565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190612da7565b611137565b6040516106d99190612d85565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190612cac565b61125d565b005b34801561071757600080fd5b50610732600480360381019061072d9190613285565b611277565b005b34801561074057600080fd5b5061075b60048036038101906107569190613382565b611314565b005b34801561076957600080fd5b50610784600480360381019061077f91906133fa565b61134e565b6040516107919190612c5b565b60405180910390f35b6107b460048036038101906107af9190612da7565b6113e2565b005b3480156107c257600080fd5b506107dd60048036038101906107d89190612f19565b61195c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108aa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ba57506108b9826119e0565b5b9050919050565b6108c9611a4a565b81600f81905550806010819055505050565b6060600280546108ea90613469565b80601f016020809104026020016040519081016040528092919081815260200182805461091690613469565b80156109635780601f1061093857610100808354040283529160200191610963565b820191906000526020600020905b81548152906001019060200180831161094657829003601f168201915b5050505050905090565b600061097882611ac8565b6109ae576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6109f1611a4a565b80600b8190555050565b6000610a0682610c18565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a6e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a8d611b16565b73ffffffffffffffffffffffffffffffffffffffff1614610af057610ab981610ab4611b16565b61134e565b610aef576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610afb838383611b1e565b505050565b6000610b0a611bd0565b6001546000540303905090565b6000600b54905090565b610b2c838383611bd5565b505050565b6000601354905090565b6000600c544211610b4d576000610b50565b60015b905090565b610b5d611a4a565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ba8573d6000803e3d6000fd5b5050565b610bc783838360405180602001604052806000815250610fe4565b505050565b610bd4611a4a565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610c238261208b565b600001519050919050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cec576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610d5c611a4a565b610d666000612316565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601454905090565b606060038054610dab90613469565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd790613469565b8015610e245780601f10610df957610100808354040283529160200191610e24565b820191906000526020600020905b815481529060010190602001808311610e0757829003601f168201915b5050505050905090565b610e36611a4a565b82600c819055508060118190555081601281905550505050565b6000600c544210610e6357601054610e67565b600f545b905090565b610e74611b16565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ed9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610ee6611b16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f93611b16565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610fd89190612c5b565b60405180910390a35050565b610fef848484611bd5565b61100e8373ffffffffffffffffffffffffffffffffffffffff166123dc565b156110565761101f848484846123ff565b611055576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611064611a4a565b600b5481611072600a612550565b61107c91906134ca565b106110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b39061356c565b60405180910390fd5b60005b818110156110e4576110d1600a61255e565b80806110dc9061358c565b9150506110bf565b506110ef3382612574565b50565b600060011515611100610b3b565b151514156111115760009050611134565b601254600c5461112191906135d5565b421161112e576000611131565b60015b90505b90565b606061114282611ac8565b611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890613655565b60405180910390fd5b42601154600c5461119291906134ca565b10156111ca57600d6111a383612592565b6040516020016111b4929190613745565b6040516020818303038152906040529050611258565b600e80546111d790613469565b80601f016020809104026020016040519081016040528092919081815260200182805461120390613469565b80156112505780601f1061122557610100808354040283529160200191611250565b820191906000526020600020905b81548152906001019060200180831161123357829003601f168201915b505050505090505b919050565b611265611a4a565b81601381905550806014819055505050565b61127f611a4a565b60005b825181101561130f5781601560008584815181106112a3576112a2613769565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113079061358c565b915050611282565b505050565b61131c611a4a565b81600e9080519060200190611332929190612ac1565b5080600d9080519060200190611349929190612ac1565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113ea610d68565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f906137e4565b60405180910390fd5b3481611462610e50565b61146c9190613804565b11156114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a4906138aa565b60405180910390fd5b600b54816114bb600a612550565b6114c591906134ca565b1115611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd9061356c565b60405180910390fd5b600c544210156117165760011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613916565b60405180910390fd5b601254600c546115b391906135d5565b42116115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb906139a8565b60405180910390fd5b60135481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461164291906134ca565b1115611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90613a14565b60405180910390fd5b80601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce91906134ca565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118bd565b600c54421161175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190613aa6565b60405180910390fd5b60145481111561179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690613b38565b60405180910390fd5b60145481601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ed91906134ca565b111561182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590613ba4565b60405180910390fd5b80601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187991906134ca565b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60005b818110156118e5576118d2600a61255e565b80806118dd9061358c565b9150506118c0565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561194e573d6000803e3d6000fd5b506119593382612574565b50565b611964611a4a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613c36565b60405180910390fd5b6119dd81612316565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611a52611b16565b73ffffffffffffffffffffffffffffffffffffffff16611a70610d68565b73ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90613ca2565b60405180910390fd5b565b600081611ad3611bd0565b11158015611ae2575060005482105b8015611b0f575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611be08261208b565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611c4b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611c6c611b16565b73ffffffffffffffffffffffffffffffffffffffff161480611c9b5750611c9a85611c95611b16565b61134e565b5b80611ce05750611ca9611b16565b73ffffffffffffffffffffffffffffffffffffffff16611cc88461096d565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611d19576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d80576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d8d85858560016126f3565b611d9960008487611b1e565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561201957600054821461201857878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461208485858560016126f9565b5050505050565b612093612b47565b6000829050806120a1611bd0565b116122df576000548110156122de576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516122dc57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121c0578092505050612311565b5b6001156122db57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122d6578092505050612311565b6121c1565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612425611b16565b8786866040518563ffffffff1660e01b81526004016124479493929190613d17565b6020604051808303816000875af192505050801561248357506040513d601f19601f820116820180604052508101906124809190613d78565b60015b6124fd573d80600081146124b3576040519150601f19603f3d011682016040523d82523d6000602084013e6124b8565b606091505b506000815114156124f5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61258e8282604051806020016040528060008152506126ff565b5050565b606060008214156125da576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126ee565b600082905060005b6000821461260c5780806125f59061358c565b915050600a826126059190613dd4565b91506125e2565b60008167ffffffffffffffff8111156126285761262761300f565b5b6040519080825280601f01601f19166020018201604052801561265a5781602001600182028036833780820191505090505b5090505b600085146126e75760018261267391906135d5565b9150600a856126829190613e05565b603061268e91906134ca565b60f81b8183815181106126a4576126a3613769565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126e09190613dd4565b945061265e565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561276c576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156127a7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127b460008583866126f3565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506129758673ffffffffffffffffffffffffffffffffffffffff166123dc565b15612a3a575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129ea60008784806001019550876123ff565b612a20576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061297b578260005414612a3557600080fd5b612aa5565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612a3b575b816000819055505050612abb60008583866126f9565b50505050565b828054612acd90613469565b90600052602060002090601f016020900481019282612aef5760008555612b36565b82601f10612b0857805160ff1916838001178555612b36565b82800160010185558215612b36579182015b82811115612b35578251825591602001919060010190612b1a565b5b509050612b439190612b8a565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612ba3576000816000905550600101612b8b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612bf081612bbb565b8114612bfb57600080fd5b50565b600081359050612c0d81612be7565b92915050565b600060208284031215612c2957612c28612bb1565b5b6000612c3784828501612bfe565b91505092915050565b60008115159050919050565b612c5581612c40565b82525050565b6000602082019050612c706000830184612c4c565b92915050565b6000819050919050565b612c8981612c76565b8114612c9457600080fd5b50565b600081359050612ca681612c80565b92915050565b60008060408385031215612cc357612cc2612bb1565b5b6000612cd185828601612c97565b9250506020612ce285828601612c97565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d26578082015181840152602081019050612d0b565b83811115612d35576000848401525b50505050565b6000601f19601f8301169050919050565b6000612d5782612cec565b612d618185612cf7565b9350612d71818560208601612d08565b612d7a81612d3b565b840191505092915050565b60006020820190508181036000830152612d9f8184612d4c565b905092915050565b600060208284031215612dbd57612dbc612bb1565b5b6000612dcb84828501612c97565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dff82612dd4565b9050919050565b612e0f81612df4565b82525050565b6000602082019050612e2a6000830184612e06565b92915050565b612e3981612df4565b8114612e4457600080fd5b50565b600081359050612e5681612e30565b92915050565b60008060408385031215612e7357612e72612bb1565b5b6000612e8185828601612e47565b9250506020612e9285828601612c97565b9150509250929050565b612ea581612c76565b82525050565b6000602082019050612ec06000830184612e9c565b92915050565b600080600060608486031215612edf57612ede612bb1565b5b6000612eed86828701612e47565b9350506020612efe86828701612e47565b9250506040612f0f86828701612c97565b9150509250925092565b600060208284031215612f2f57612f2e612bb1565b5b6000612f3d84828501612e47565b91505092915050565b600080600060608486031215612f5f57612f5e612bb1565b5b6000612f6d86828701612c97565b9350506020612f7e86828701612c97565b9250506040612f8f86828701612c97565b9150509250925092565b612fa281612c40565b8114612fad57600080fd5b50565b600081359050612fbf81612f99565b92915050565b60008060408385031215612fdc57612fdb612bb1565b5b6000612fea85828601612e47565b9250506020612ffb85828601612fb0565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61304782612d3b565b810181811067ffffffffffffffff821117156130665761306561300f565b5b80604052505050565b6000613079612ba7565b9050613085828261303e565b919050565b600067ffffffffffffffff8211156130a5576130a461300f565b5b6130ae82612d3b565b9050602081019050919050565b82818337600083830152505050565b60006130dd6130d88461308a565b61306f565b9050828152602081018484840111156130f9576130f861300a565b5b6131048482856130bb565b509392505050565b600082601f83011261312157613120613005565b5b81356131318482602086016130ca565b91505092915050565b6000806000806080858703121561315457613153612bb1565b5b600061316287828801612e47565b945050602061317387828801612e47565b935050604061318487828801612c97565b925050606085013567ffffffffffffffff8111156131a5576131a4612bb6565b5b6131b18782880161310c565b91505092959194509250565b600067ffffffffffffffff8211156131d8576131d761300f565b5b602082029050602081019050919050565b600080fd5b60006132016131fc846131bd565b61306f565b90508083825260208201905060208402830185811115613224576132236131e9565b5b835b8181101561324d57806132398882612e47565b845260208401935050602081019050613226565b5050509392505050565b600082601f83011261326c5761326b613005565b5b813561327c8482602086016131ee565b91505092915050565b6000806040838503121561329c5761329b612bb1565b5b600083013567ffffffffffffffff8111156132ba576132b9612bb6565b5b6132c685828601613257565b92505060206132d785828601612fb0565b9150509250929050565b600067ffffffffffffffff8211156132fc576132fb61300f565b5b61330582612d3b565b9050602081019050919050565b6000613325613320846132e1565b61306f565b9050828152602081018484840111156133415761334061300a565b5b61334c8482856130bb565b509392505050565b600082601f83011261336957613368613005565b5b8135613379848260208601613312565b91505092915050565b6000806040838503121561339957613398612bb1565b5b600083013567ffffffffffffffff8111156133b7576133b6612bb6565b5b6133c385828601613354565b925050602083013567ffffffffffffffff8111156133e4576133e3612bb6565b5b6133f085828601613354565b9150509250929050565b6000806040838503121561341157613410612bb1565b5b600061341f85828601612e47565b925050602061343085828601612e47565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061348157607f821691505b602082108114156134955761349461343a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134d582612c76565b91506134e083612c76565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135155761351461349b565b5b828201905092915050565b7f507572636861736520776f756c6420657863656564205f594e46545f4d415800600082015250565b6000613556601f83612cf7565b915061356182613520565b602082019050919050565b6000602082019050818103600083015261358581613549565b9050919050565b600061359782612c76565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135ca576135c961349b565b5b600182019050919050565b60006135e082612c76565b91506135eb83612c76565b9250828210156135fe576135fd61349b565b5b828203905092915050565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b600061363f601483612cf7565b915061364a82613609565b602082019050919050565b6000602082019050818103600083015261366e81613632565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546136a281613469565b6136ac8186613675565b945060018216600081146136c757600181146136d85761370b565b60ff1983168652818601935061370b565b6136e185613680565b60005b83811015613703578154818901526001820191506020810190506136e4565b838801955050505b50505092915050565b600061371f82612cec565b6137298185613675565b9350613739818560208601612d08565b80840191505092915050565b60006137518285613695565b915061375d8284613714565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f596f7520617265206f776e657221000000000000000000000000000000000000600082015250565b60006137ce600e83612cf7565b91506137d982613798565b602082019050919050565b600060208201905081810360008301526137fd816137c1565b9050919050565b600061380f82612c76565b915061381a83612c76565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138535761385261349b565b5b828202905092915050565b7f45544820616d6f756e74206973206e6f742073756666696369656e7400000000600082015250565b6000613894601c83612cf7565b915061389f8261385e565b602082019050919050565b600060208201905081810360008301526138c381613887565b9050919050565b7f4e6f74207265676973746572656420746f2057686974654c6973740000000000600082015250565b6000613900601b83612cf7565b915061390b826138ca565b602082019050919050565b6000602082019050818103600083015261392f816138f3565b9050919050565b7f4d696e74206973206e6f742061637469766174656420666f722070726573616c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613992602183612cf7565b915061399d82613936565b604082019050919050565b600060208201905081810360008301526139c181613985565b9050919050565b7f4f766572666c6f7720666f722050524553414c455f4d494e545f4c494d495400600082015250565b60006139fe601f83612cf7565b9150613a09826139c8565b602082019050919050565b60006020820190508181036000830152613a2d816139f1565b9050919050565b7f4d696e74206973206e6f742061637469766174656420666f72207075626c696360008201527f2073616c65000000000000000000000000000000000000000000000000000000602082015250565b6000613a90602583612cf7565b9150613a9b82613a34565b604082019050919050565b60006020820190508181036000830152613abf81613a83565b9050919050565b7f416d6f756e7420746f206869676820666f722073696e676c65207472616e736160008201527f6374696f6e000000000000000000000000000000000000000000000000000000602082015250565b6000613b22602583612cf7565b9150613b2d82613ac6565b604082019050919050565b60006020820190508181036000830152613b5181613b15565b9050919050565b7f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d49540000600082015250565b6000613b8e601e83612cf7565b9150613b9982613b58565b602082019050919050565b60006020820190508181036000830152613bbd81613b81565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c20602683612cf7565b9150613c2b82613bc4565b604082019050919050565b60006020820190508181036000830152613c4f81613c13565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c8c602083612cf7565b9150613c9782613c56565b602082019050919050565b60006020820190508181036000830152613cbb81613c7f565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613ce982613cc2565b613cf38185613ccd565b9350613d03818560208601612d08565b613d0c81612d3b565b840191505092915050565b6000608082019050613d2c6000830187612e06565b613d396020830186612e06565b613d466040830185612e9c565b8181036060830152613d588184613cde565b905095945050505050565b600081519050613d7281612be7565b92915050565b600060208284031215613d8e57613d8d612bb1565b5b6000613d9c84828501613d63565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ddf82612c76565b9150613dea83612c76565b925082613dfa57613df9613da5565b5b828204905092915050565b6000613e1082612c76565b9150613e1b83612c76565b925082613e2b57613e2a613da5565b5b82820690509291505056fea26469706673582212205d5d11dcebc9d358593e89f712d94790a362a2c346147d69ed7a74f38420dd5264736f6c634300080b003368747470733a2f2f697066732e696f2f697066732f516d5943714b6b524e71615166766b44386a41637a5a714251713945795a5755486f753179753473597667413441
Deployed Bytecode
0x6080604052600436106101f95760003560e01c8063715018a61161010d578063c1f26123116100a0578063e43f696e1161006f578063e43f696e1461070b578063e825417414610734578063e985e9c51461075d578063efef39a11461079a578063f2fde38b146107b6576101f9565b8063c1f2612314610651578063c55581981461067a578063c87b56dd146106a5578063d42f21f6146106e2576101f9565b80639791e389116100dc5780639791e389146105ab578063a035b1fe146105d4578063a22cb465146105ff578063b88d4fde14610628576101f9565b8063715018a6146105135780638da5cb5b1461052a578063928dd6e31461055557806395d89b4114610580576101f9565b806323b872dd1161019057806342842e0e1161015f57806342842e0e1461040a5780635e1e1004146104335780636352211e1461045c5780636f9170f61461049957806370a08231146104d6576101f9565b806323b872dd146103745780632483ada01461039d5780632d6b6224146103c85780633ccfd60b146103f3576101f9565b8063088a4ed0116101cc578063088a4ed0146102cc578063095ea7b3146102f557806318160ddd1461031e5780631e51e4a114610349576101f9565b806301ffc9a7146101fe5780630442bfa81461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612c13565b6107df565b6040516102329190612c5b565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612cac565b6108c1565b005b34801561027057600080fd5b506102796108db565b6040516102869190612d85565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190612da7565b61096d565b6040516102c39190612e15565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee9190612da7565b6109e9565b005b34801561030157600080fd5b5061031c60048036038101906103179190612e5c565b6109fb565b005b34801561032a57600080fd5b50610333610b00565b6040516103409190612eab565b60405180910390f35b34801561035557600080fd5b5061035e610b17565b60405161036b9190612eab565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190612ec6565b610b21565b005b3480156103a957600080fd5b506103b2610b31565b6040516103bf9190612eab565b60405180910390f35b3480156103d457600080fd5b506103dd610b3b565b6040516103ea9190612c5b565b60405180910390f35b3480156103ff57600080fd5b50610408610b55565b005b34801561041657600080fd5b50610431600480360381019061042c9190612ec6565b610bac565b005b34801561043f57600080fd5b5061045a60048036038101906104559190612f19565b610bcc565b005b34801561046857600080fd5b50610483600480360381019061047e9190612da7565b610c18565b6040516104909190612e15565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190612f19565b610c2e565b6040516104cd9190612c5b565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190612f19565b610c84565b60405161050a9190612eab565b60405180910390f35b34801561051f57600080fd5b50610528610d54565b005b34801561053657600080fd5b5061053f610d68565b60405161054c9190612e15565b60405180910390f35b34801561056157600080fd5b5061056a610d92565b6040516105779190612eab565b60405180910390f35b34801561058c57600080fd5b50610595610d9c565b6040516105a29190612d85565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190612f46565b610e2e565b005b3480156105e057600080fd5b506105e9610e50565b6040516105f69190612eab565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190612fc5565b610e6c565b005b34801561063457600080fd5b5061064f600480360381019061064a919061313a565b610fe4565b005b34801561065d57600080fd5b5061067860048036038101906106739190612da7565b61105c565b005b34801561068657600080fd5b5061068f6110f2565b60405161069c9190612c5b565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190612da7565b611137565b6040516106d99190612d85565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190612cac565b61125d565b005b34801561071757600080fd5b50610732600480360381019061072d9190613285565b611277565b005b34801561074057600080fd5b5061075b60048036038101906107569190613382565b611314565b005b34801561076957600080fd5b50610784600480360381019061077f91906133fa565b61134e565b6040516107919190612c5b565b60405180910390f35b6107b460048036038101906107af9190612da7565b6113e2565b005b3480156107c257600080fd5b506107dd60048036038101906107d89190612f19565b61195c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108aa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ba57506108b9826119e0565b5b9050919050565b6108c9611a4a565b81600f81905550806010819055505050565b6060600280546108ea90613469565b80601f016020809104026020016040519081016040528092919081815260200182805461091690613469565b80156109635780601f1061093857610100808354040283529160200191610963565b820191906000526020600020905b81548152906001019060200180831161094657829003601f168201915b5050505050905090565b600061097882611ac8565b6109ae576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6109f1611a4a565b80600b8190555050565b6000610a0682610c18565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a6e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a8d611b16565b73ffffffffffffffffffffffffffffffffffffffff1614610af057610ab981610ab4611b16565b61134e565b610aef576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610afb838383611b1e565b505050565b6000610b0a611bd0565b6001546000540303905090565b6000600b54905090565b610b2c838383611bd5565b505050565b6000601354905090565b6000600c544211610b4d576000610b50565b60015b905090565b610b5d611a4a565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ba8573d6000803e3d6000fd5b5050565b610bc783838360405180602001604052806000815250610fe4565b505050565b610bd4611a4a565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610c238261208b565b600001519050919050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cec576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610d5c611a4a565b610d666000612316565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601454905090565b606060038054610dab90613469565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd790613469565b8015610e245780601f10610df957610100808354040283529160200191610e24565b820191906000526020600020905b815481529060010190602001808311610e0757829003601f168201915b5050505050905090565b610e36611a4a565b82600c819055508060118190555081601281905550505050565b6000600c544210610e6357601054610e67565b600f545b905090565b610e74611b16565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ed9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000610ee6611b16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610f93611b16565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610fd89190612c5b565b60405180910390a35050565b610fef848484611bd5565b61100e8373ffffffffffffffffffffffffffffffffffffffff166123dc565b156110565761101f848484846123ff565b611055576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611064611a4a565b600b5481611072600a612550565b61107c91906134ca565b106110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b39061356c565b60405180910390fd5b60005b818110156110e4576110d1600a61255e565b80806110dc9061358c565b9150506110bf565b506110ef3382612574565b50565b600060011515611100610b3b565b151514156111115760009050611134565b601254600c5461112191906135d5565b421161112e576000611131565b60015b90505b90565b606061114282611ac8565b611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890613655565b60405180910390fd5b42601154600c5461119291906134ca565b10156111ca57600d6111a383612592565b6040516020016111b4929190613745565b6040516020818303038152906040529050611258565b600e80546111d790613469565b80601f016020809104026020016040519081016040528092919081815260200182805461120390613469565b80156112505780601f1061122557610100808354040283529160200191611250565b820191906000526020600020905b81548152906001019060200180831161123357829003601f168201915b505050505090505b919050565b611265611a4a565b81601381905550806014819055505050565b61127f611a4a565b60005b825181101561130f5781601560008584815181106112a3576112a2613769565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113079061358c565b915050611282565b505050565b61131c611a4a565b81600e9080519060200190611332929190612ac1565b5080600d9080519060200190611349929190612ac1565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113ea610d68565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f906137e4565b60405180910390fd5b3481611462610e50565b61146c9190613804565b11156114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a4906138aa565b60405180910390fd5b600b54816114bb600a612550565b6114c591906134ca565b1115611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd9061356c565b60405180910390fd5b600c544210156117165760011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613916565b60405180910390fd5b601254600c546115b391906135d5565b42116115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb906139a8565b60405180910390fd5b60135481601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461164291906134ca565b1115611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90613a14565b60405180910390fd5b80601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ce91906134ca565b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118bd565b600c54421161175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190613aa6565b60405180910390fd5b60145481111561179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690613b38565b60405180910390fd5b60145481601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117ed91906134ca565b111561182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590613ba4565b60405180910390fd5b80601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187991906134ca565b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60005b818110156118e5576118d2600a61255e565b80806118dd9061358c565b9150506118c0565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561194e573d6000803e3d6000fd5b506119593382612574565b50565b611964611a4a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613c36565b60405180910390fd5b6119dd81612316565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611a52611b16565b73ffffffffffffffffffffffffffffffffffffffff16611a70610d68565b73ffffffffffffffffffffffffffffffffffffffff1614611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90613ca2565b60405180910390fd5b565b600081611ad3611bd0565b11158015611ae2575060005482105b8015611b0f575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611be08261208b565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611c4b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611c6c611b16565b73ffffffffffffffffffffffffffffffffffffffff161480611c9b5750611c9a85611c95611b16565b61134e565b5b80611ce05750611ca9611b16565b73ffffffffffffffffffffffffffffffffffffffff16611cc88461096d565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611d19576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d80576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d8d85858560016126f3565b611d9960008487611b1e565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561201957600054821461201857878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461208485858560016126f9565b5050505050565b612093612b47565b6000829050806120a1611bd0565b116122df576000548110156122de576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516122dc57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121c0578092505050612311565b5b6001156122db57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122d6578092505050612311565b6121c1565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612425611b16565b8786866040518563ffffffff1660e01b81526004016124479493929190613d17565b6020604051808303816000875af192505050801561248357506040513d601f19601f820116820180604052508101906124809190613d78565b60015b6124fd573d80600081146124b3576040519150601f19603f3d011682016040523d82523d6000602084013e6124b8565b606091505b506000815114156124f5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61258e8282604051806020016040528060008152506126ff565b5050565b606060008214156125da576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126ee565b600082905060005b6000821461260c5780806125f59061358c565b915050600a826126059190613dd4565b91506125e2565b60008167ffffffffffffffff8111156126285761262761300f565b5b6040519080825280601f01601f19166020018201604052801561265a5781602001600182028036833780820191505090505b5090505b600085146126e75760018261267391906135d5565b9150600a856126829190613e05565b603061268e91906134ca565b60f81b8183815181106126a4576126a3613769565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126e09190613dd4565b945061265e565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561276c576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156127a7576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127b460008583866126f3565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506129758673ffffffffffffffffffffffffffffffffffffffff166123dc565b15612a3a575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129ea60008784806001019550876123ff565b612a20576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061297b578260005414612a3557600080fd5b612aa5565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612a3b575b816000819055505050612abb60008583866126f9565b50505050565b828054612acd90613469565b90600052602060002090601f016020900481019282612aef5760008555612b36565b82601f10612b0857805160ff1916838001178555612b36565b82800160010185558215612b36579182015b82811115612b35578251825591602001919060010190612b1a565b5b509050612b439190612b8a565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612ba3576000816000905550600101612b8b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612bf081612bbb565b8114612bfb57600080fd5b50565b600081359050612c0d81612be7565b92915050565b600060208284031215612c2957612c28612bb1565b5b6000612c3784828501612bfe565b91505092915050565b60008115159050919050565b612c5581612c40565b82525050565b6000602082019050612c706000830184612c4c565b92915050565b6000819050919050565b612c8981612c76565b8114612c9457600080fd5b50565b600081359050612ca681612c80565b92915050565b60008060408385031215612cc357612cc2612bb1565b5b6000612cd185828601612c97565b9250506020612ce285828601612c97565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d26578082015181840152602081019050612d0b565b83811115612d35576000848401525b50505050565b6000601f19601f8301169050919050565b6000612d5782612cec565b612d618185612cf7565b9350612d71818560208601612d08565b612d7a81612d3b565b840191505092915050565b60006020820190508181036000830152612d9f8184612d4c565b905092915050565b600060208284031215612dbd57612dbc612bb1565b5b6000612dcb84828501612c97565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dff82612dd4565b9050919050565b612e0f81612df4565b82525050565b6000602082019050612e2a6000830184612e06565b92915050565b612e3981612df4565b8114612e4457600080fd5b50565b600081359050612e5681612e30565b92915050565b60008060408385031215612e7357612e72612bb1565b5b6000612e8185828601612e47565b9250506020612e9285828601612c97565b9150509250929050565b612ea581612c76565b82525050565b6000602082019050612ec06000830184612e9c565b92915050565b600080600060608486031215612edf57612ede612bb1565b5b6000612eed86828701612e47565b9350506020612efe86828701612e47565b9250506040612f0f86828701612c97565b9150509250925092565b600060208284031215612f2f57612f2e612bb1565b5b6000612f3d84828501612e47565b91505092915050565b600080600060608486031215612f5f57612f5e612bb1565b5b6000612f6d86828701612c97565b9350506020612f7e86828701612c97565b9250506040612f8f86828701612c97565b9150509250925092565b612fa281612c40565b8114612fad57600080fd5b50565b600081359050612fbf81612f99565b92915050565b60008060408385031215612fdc57612fdb612bb1565b5b6000612fea85828601612e47565b9250506020612ffb85828601612fb0565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61304782612d3b565b810181811067ffffffffffffffff821117156130665761306561300f565b5b80604052505050565b6000613079612ba7565b9050613085828261303e565b919050565b600067ffffffffffffffff8211156130a5576130a461300f565b5b6130ae82612d3b565b9050602081019050919050565b82818337600083830152505050565b60006130dd6130d88461308a565b61306f565b9050828152602081018484840111156130f9576130f861300a565b5b6131048482856130bb565b509392505050565b600082601f83011261312157613120613005565b5b81356131318482602086016130ca565b91505092915050565b6000806000806080858703121561315457613153612bb1565b5b600061316287828801612e47565b945050602061317387828801612e47565b935050604061318487828801612c97565b925050606085013567ffffffffffffffff8111156131a5576131a4612bb6565b5b6131b18782880161310c565b91505092959194509250565b600067ffffffffffffffff8211156131d8576131d761300f565b5b602082029050602081019050919050565b600080fd5b60006132016131fc846131bd565b61306f565b90508083825260208201905060208402830185811115613224576132236131e9565b5b835b8181101561324d57806132398882612e47565b845260208401935050602081019050613226565b5050509392505050565b600082601f83011261326c5761326b613005565b5b813561327c8482602086016131ee565b91505092915050565b6000806040838503121561329c5761329b612bb1565b5b600083013567ffffffffffffffff8111156132ba576132b9612bb6565b5b6132c685828601613257565b92505060206132d785828601612fb0565b9150509250929050565b600067ffffffffffffffff8211156132fc576132fb61300f565b5b61330582612d3b565b9050602081019050919050565b6000613325613320846132e1565b61306f565b9050828152602081018484840111156133415761334061300a565b5b61334c8482856130bb565b509392505050565b600082601f83011261336957613368613005565b5b8135613379848260208601613312565b91505092915050565b6000806040838503121561339957613398612bb1565b5b600083013567ffffffffffffffff8111156133b7576133b6612bb6565b5b6133c385828601613354565b925050602083013567ffffffffffffffff8111156133e4576133e3612bb6565b5b6133f085828601613354565b9150509250929050565b6000806040838503121561341157613410612bb1565b5b600061341f85828601612e47565b925050602061343085828601612e47565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061348157607f821691505b602082108114156134955761349461343a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134d582612c76565b91506134e083612c76565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135155761351461349b565b5b828201905092915050565b7f507572636861736520776f756c6420657863656564205f594e46545f4d415800600082015250565b6000613556601f83612cf7565b915061356182613520565b602082019050919050565b6000602082019050818103600083015261358581613549565b9050919050565b600061359782612c76565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135ca576135c961349b565b5b600182019050919050565b60006135e082612c76565b91506135eb83612c76565b9250828210156135fe576135fd61349b565b5b828203905092915050565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b600061363f601483612cf7565b915061364a82613609565b602082019050919050565b6000602082019050818103600083015261366e81613632565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546136a281613469565b6136ac8186613675565b945060018216600081146136c757600181146136d85761370b565b60ff1983168652818601935061370b565b6136e185613680565b60005b83811015613703578154818901526001820191506020810190506136e4565b838801955050505b50505092915050565b600061371f82612cec565b6137298185613675565b9350613739818560208601612d08565b80840191505092915050565b60006137518285613695565b915061375d8284613714565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f596f7520617265206f776e657221000000000000000000000000000000000000600082015250565b60006137ce600e83612cf7565b91506137d982613798565b602082019050919050565b600060208201905081810360008301526137fd816137c1565b9050919050565b600061380f82612c76565b915061381a83612c76565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138535761385261349b565b5b828202905092915050565b7f45544820616d6f756e74206973206e6f742073756666696369656e7400000000600082015250565b6000613894601c83612cf7565b915061389f8261385e565b602082019050919050565b600060208201905081810360008301526138c381613887565b9050919050565b7f4e6f74207265676973746572656420746f2057686974654c6973740000000000600082015250565b6000613900601b83612cf7565b915061390b826138ca565b602082019050919050565b6000602082019050818103600083015261392f816138f3565b9050919050565b7f4d696e74206973206e6f742061637469766174656420666f722070726573616c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613992602183612cf7565b915061399d82613936565b604082019050919050565b600060208201905081810360008301526139c181613985565b9050919050565b7f4f766572666c6f7720666f722050524553414c455f4d494e545f4c494d495400600082015250565b60006139fe601f83612cf7565b9150613a09826139c8565b602082019050919050565b60006020820190508181036000830152613a2d816139f1565b9050919050565b7f4d696e74206973206e6f742061637469766174656420666f72207075626c696360008201527f2073616c65000000000000000000000000000000000000000000000000000000602082015250565b6000613a90602583612cf7565b9150613a9b82613a34565b604082019050919050565b60006020820190508181036000830152613abf81613a83565b9050919050565b7f416d6f756e7420746f206869676820666f722073696e676c65207472616e736160008201527f6374696f6e000000000000000000000000000000000000000000000000000000602082015250565b6000613b22602583612cf7565b9150613b2d82613ac6565b604082019050919050565b60006020820190508181036000830152613b5181613b15565b9050919050565b7f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d49540000600082015250565b6000613b8e601e83612cf7565b9150613b9982613b58565b602082019050919050565b60006020820190508181036000830152613bbd81613b81565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c20602683612cf7565b9150613c2b82613bc4565b604082019050919050565b60006020820190508181036000830152613c4f81613c13565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c8c602083612cf7565b9150613c9782613c56565b602082019050919050565b60006020820190508181036000830152613cbb81613c7f565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613ce982613cc2565b613cf38185613ccd565b9350613d03818560208601612d08565b613d0c81612d3b565b840191505092915050565b6000608082019050613d2c6000830187612e06565b613d396020830186612e06565b613d466040830185612e9c565b8181036060830152613d588184613cde565b905095945050505050565b600081519050613d7281612be7565b92915050565b600060208284031215613d8e57613d8d612bb1565b5b6000613d9c84828501613d63565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ddf82612c76565b9150613dea83612c76565b925082613dfa57613df9613da5565b5b828204905092915050565b6000613e1082612c76565b9150613e1b83612c76565b925082613e2b57613e2a613da5565b5b82820690509291505056fea26469706673582212205d5d11dcebc9d358593e89f712d94790a362a2c346147d69ed7a74f38420dd5264736f6c634300080b0033
Deployed Bytecode Sourcemap
49700:5498:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26548:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51614:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29663:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31167:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50750:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30729:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25788:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52225:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32032:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52013:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53322:123;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52823:145;;;;;;;;;;;;;:::i;:::-;;32273:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50862:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29471:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51493:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26917:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48720:103;;;;;;;;;;;;;:::i;:::-;;48072:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52118:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29832:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51000:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52976:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31443:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32529:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53453:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53114:202;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52471:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51808:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51248:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52309:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31801:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53758:1432;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48978:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26548:305;26650:4;26702:25;26687:40;;;:11;:40;;;;:105;;;;26759:33;26744:48;;;:11;:48;;;;26687:105;:158;;;;26809:36;26833:11;26809:23;:36::i;:::-;26687:158;26667:178;;26548:305;;;:::o;51614:186::-;47958:13;:11;:13::i;:::-;51733:16:::1;51717:13;:32;;;;51776:15;51761:12;:30;;;;51614:186:::0;;:::o;29663:100::-;29717:13;29750:5;29743:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29663:100;:::o;31167:204::-;31235:7;31260:16;31268:7;31260;:16::i;:::-;31255:64;;31285:34;;;;;;;;;;;;;;31255:64;31339:15;:24;31355:7;31339:24;;;;;;;;;;;;;;;;;;;;;31332:31;;31167:204;;;:::o;50750:104::-;47958:13;:11;:13::i;:::-;50837:9:::1;50825;:21;;;;50750:104:::0;:::o;30729:372::-;30802:13;30818:24;30834:7;30818:15;:24::i;:::-;30802:40;;30863:5;30857:11;;:2;:11;;;30853:48;;;30877:24;;;;;;;;;;;;;;30853:48;30934:5;30918:21;;:12;:10;:12::i;:::-;:21;;;30914:139;;30945:37;30962:5;30969:12;:10;:12::i;:::-;30945:16;:37::i;:::-;30941:112;;31006:35;;;;;;;;;;;;;;30941:112;30914:139;31065:28;31074:2;31078:7;31087:5;31065:8;:28::i;:::-;30791:310;30729:372;;:::o;25788:312::-;25841:7;26066:15;:13;:15::i;:::-;26051:12;;26035:13;;:28;:46;26028:53;;25788:312;:::o;52225:78::-;52268:7;52289:9;;52282:16;;52225:78;:::o;32032:170::-;32166:28;32176:4;32182:2;32186:7;32166:9;:28::i;:::-;32032:170;;;:::o;52013:99::-;52068:7;52089:18;;52082:25;;52013:99;:::o;53322:123::-;53373:4;53410:15;;53392;:33;53391:49;;53435:5;53391:49;;;53428:4;53391:49;53384:56;;53322:123;:::o;52823:145::-;47958:13;:11;:13::i;:::-;52873:15:::1;52891:21;52873:39;;52931:10;52923:28;;:37;52952:7;52923:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52862:106;52823:145::o:0;32273:185::-;32411:39;32428:4;32434:2;32438:7;32411:39;;;;;;;;;;;;:16;:39::i;:::-;32273:185;;;:::o;50862:130::-;47958:13;:11;:13::i;:::-;50969:14:::1;50943:15;;:41;;;;;;;;;;;;;;;;;;50862:130:::0;:::o;29471:125::-;29535:7;29562:21;29575:7;29562:12;:21::i;:::-;:26;;;29555:33;;29471:125;;;:::o;51493:113::-;51551:4;51575:17;:23;51593:4;51575:23;;;;;;;;;;;;;;;;;;;;;;;;;51568:30;;51493:113;;;:::o;26917:206::-;26981:7;27022:1;27005:19;;:5;:19;;;27001:60;;;27033:28;;;;;;;;;;;;;;27001:60;27087:12;:19;27100:5;27087:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27079:36;;27072:43;;26917:206;;;:::o;48720:103::-;47958:13;:11;:13::i;:::-;48785:30:::1;48812:1;48785:18;:30::i;:::-;48720:103::o:0;48072:87::-;48118:7;48145:6;;;;;;;;;;;48138:13;;48072:87;:::o;52118:101::-;52176:7;52197:17;;52190:24;;52118:101;:::o;29832:104::-;29888:13;29921:7;29914:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29832:104;:::o;51000:240::-;47958:13;:11;:13::i;:::-;51142:14:::1;51124:15;:32;;;;51182:11;51167:12;:26;;;;51220:12;51204:13;:28;;;;51000:240:::0;;;:::o;52976:132::-;53014:7;53054:15;;53036;:33;53035:65;;53088:12;;53035:65;;;53072:13;;53035:65;53028:72;;52976:132;:::o;31443:287::-;31554:12;:10;:12::i;:::-;31542:24;;:8;:24;;;31538:54;;;31575:17;;;;;;;;;;;;;;31538:54;31650:8;31605:18;:32;31624:12;:10;:12::i;:::-;31605:32;;;;;;;;;;;;;;;:42;31638:8;31605:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31703:8;31674:48;;31689:12;:10;:12::i;:::-;31674:48;;;31713:8;31674:48;;;;;;:::i;:::-;;;;;;;;31443:287;;:::o;32529:370::-;32696:28;32706:4;32712:2;32716:7;32696:9;:28::i;:::-;32739:15;:2;:13;;;:15::i;:::-;32735:157;;;32760:56;32791:4;32797:2;32801:7;32810:5;32760:30;:56::i;:::-;32756:136;;32840:40;;;;;;;;;;;;;;32756:136;32735:157;32529:370;;;;:::o;53453:297::-;47958:13;:11;:13::i;:::-;53565:9:::1;;53550:12;53526:21;:11;:19;:21::i;:::-;:36;;;;:::i;:::-;:48;53518:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;53624:9;53619:78;53643:12;53639:1;:16;53619:78;;;53668:23;:11;:21;:23::i;:::-;53657:3;;;;;:::i;:::-;;;;53619:78;;;;53707:35;53717:10;53729:12;53707:9;:35::i;:::-;53453:297:::0;:::o;53114:202::-;53166:4;53205;53181:28;;:20;:18;:20::i;:::-;:28;;;53177:58;;;53224:5;53217:12;;;;53177:58;53283:13;;53265:15;;:31;;;;:::i;:::-;53247:15;:49;53246:65;;53306:5;53246:65;;;53299:4;53246:65;53239:72;;53114:202;;:::o;52471:344::-;52545:13;52579:16;52587:7;52579;:16::i;:::-;52571:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;52670:15;52655:12;;52637:15;;:30;;;;:::i;:::-;:48;52633:147;;;52733:13;52748:18;:7;:16;:18::i;:::-;52716:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52702:66;;;;52633:147;52797:10;52790:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52471:344;;;;:::o;51808:199::-;47958:13;:11;:13::i;:::-;51939:16:::1;51918:18;:37;;;;51980:19;51960:17;:39;;;;51808:199:::0;;:::o;51248:237::-;47958:13;:11;:13::i;:::-;51354:9:::1;51349:129;51373:16;:23;51369:1;:27;51349:129;;;51459:7;51418:17;:38;51436:16;51453:1;51436:19;;;;;;;;:::i;:::-;;;;;;;;51418:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;51398:3;;;;;:::i;:::-;;;;51349:129;;;;51248:237:::0;;:::o;52309:153::-;47958:13;:11;:13::i;:::-;52417:9:::1;52404:10;:22;;;;;;;;;;;;:::i;:::-;;52447:7;52431:13;:23;;;;;;;;;;;;:::i;:::-;;52309:153:::0;;:::o;31801:164::-;31898:4;31922:18;:25;31941:5;31922:25;;;;;;;;;;;;;;;:35;31948:8;31922:35;;;;;;;;;;;;;;;;;;;;;;;;;31915:42;;31801:164;;;;:::o;53758:1432::-;53850:7;:5;:7::i;:::-;53836:21;;:10;:21;;;;53828:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;53923:9;53905:14;53895:7;:5;:7::i;:::-;:24;;;;:::i;:::-;:37;;53887:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;54026:9;;54008:14;53984:21;:11;:19;:21::i;:::-;:38;;;;:::i;:::-;:51;;53976:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;54106:15;;54088;:33;54084:911;;;54179:4;54146:37;;:17;:29;54164:10;54146:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;54138:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;54277:13;;54259:15;;:31;;;;:::i;:::-;54241:15;:49;54233:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;54409:18;;54391:14;54352:24;:36;54377:10;54352:36;;;;;;;;;;;;;;;;:53;;;;:::i;:::-;:75;;54344:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;54556:14;54517:24;:36;54542:10;54517:36;;;;;;;;;;;;;;;;:53;;;;:::i;:::-;54478:24;:36;54503:10;54478:36;;;;;;;;;;;;;;;:92;;;;54084:911;;;54623:15;;54605;:33;54597:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;54712:17;;54694:14;:35;;54686:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;54841:17;;54823:14;54785:23;:35;54809:10;54785:35;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;:73;;54777:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;54975:14;54937:23;:35;54961:10;54937:35;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;54899:23;:35;54923:10;54899:35;;;;;;;;;;;;;;;:90;;;;54084:911;55011:9;55007:88;55026:14;55024:1;:16;55007:88;;;55060:23;:11;:21;:23::i;:::-;55041:3;;;;;:::i;:::-;;;;55007:88;;;;55099:15;;;;;;;;;;;:24;;:35;55124:9;55099:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55145:37;55155:10;55167:14;55145:9;:37::i;:::-;53758:1432;:::o;48978:201::-;47958:13;:11;:13::i;:::-;49087:1:::1;49067:22;;:8;:22;;;;49059:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49143:28;49162:8;49143:18;:28::i;:::-;48978:201:::0;:::o;23531:157::-;23616:4;23655:25;23640:40;;;:11;:40;;;;23633:47;;23531:157;;;:::o;48237:132::-;48312:12;:10;:12::i;:::-;48301:23;;:7;:5;:7::i;:::-;:23;;;48293:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48237:132::o;33154:174::-;33211:4;33254:7;33235:15;:13;:15::i;:::-;:26;;:53;;;;;33275:13;;33265:7;:23;33235:53;:85;;;;;33293:11;:20;33305:7;33293:20;;;;;;;;;;;:27;;;;;;;;;;;;33292:28;33235:85;33228:92;;33154:174;;;:::o;19945:98::-;19998:7;20025:10;20018:17;;19945:98;:::o;42376:196::-;42518:2;42491:15;:24;42507:7;42491:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42556:7;42552:2;42536:28;;42545:5;42536:28;;;;;;;;;;;;42376:196;;;:::o;25562:92::-;25618:7;25562:92;:::o;37324:2130::-;37439:35;37477:21;37490:7;37477:12;:21::i;:::-;37439:59;;37537:4;37515:26;;:13;:18;;;:26;;;37511:67;;37550:28;;;;;;;;;;;;;;37511:67;37591:22;37633:4;37617:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;37654:36;37671:4;37677:12;:10;:12::i;:::-;37654:16;:36::i;:::-;37617:73;:126;;;;37731:12;:10;:12::i;:::-;37707:36;;:20;37719:7;37707:11;:20::i;:::-;:36;;;37617:126;37591:153;;37762:17;37757:66;;37788:35;;;;;;;;;;;;;;37757:66;37852:1;37838:16;;:2;:16;;;37834:52;;;37863:23;;;;;;;;;;;;;;37834:52;37899:43;37921:4;37927:2;37931:7;37940:1;37899:21;:43::i;:::-;38007:35;38024:1;38028:7;38037:4;38007:8;:35::i;:::-;38368:1;38338:12;:18;38351:4;38338:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38412:1;38384:12;:16;38397:2;38384:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38430:31;38464:11;:20;38476:7;38464:20;;;;;;;;;;;38430:54;;38515:2;38499:8;:13;;;:18;;;;;;;;;;;;;;;;;;38565:15;38532:8;:23;;;:49;;;;;;;;;;;;;;;;;;38833:19;38865:1;38855:7;:11;38833:33;;38881:31;38915:11;:24;38927:11;38915:24;;;;;;;;;;;38881:58;;38983:1;38958:27;;:8;:13;;;;;;;;;;;;:27;;;38954:384;;;39168:13;;39153:11;:28;39149:174;;39222:4;39206:8;:13;;;:20;;;;;;;;;;;;;;;;;;39275:13;:28;;;39249:8;:23;;;:54;;;;;;;;;;;;;;;;;;39149:174;38954:384;38313:1036;;;39385:7;39381:2;39366:27;;39375:4;39366:27;;;;;;;;;;;;39404:42;39425:4;39431:2;39435:7;39444:1;39404:20;:42::i;:::-;37428:2026;;37324:2130;;;:::o;28298:1111::-;28360:21;;:::i;:::-;28394:12;28409:7;28394:22;;28477:4;28458:15;:13;:15::i;:::-;:23;28454:888;;28494:13;;28487:4;:20;28483:859;;;28528:31;28562:11;:17;28574:4;28562:17;;;;;;;;;;;28528:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28603:9;:16;;;28598:729;;28674:1;28648:28;;:9;:14;;;:28;;;28644:101;;28712:9;28705:16;;;;;;28644:101;29047:261;29054:4;29047:261;;;29087:6;;;;;;;;29132:11;:17;29144:4;29132:17;;;;;;;;;;;29120:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29206:1;29180:28;;:9;:14;;;:28;;;29176:109;;29248:9;29241:16;;;;;;29176:109;29047:261;;;28598:729;28509:833;28483:859;28454:888;29370:31;;;;;;;;;;;;;;28298:1111;;;;:::o;49339:191::-;49413:16;49432:6;;;;;;;;;;;49413:25;;49458:8;49449:6;;:17;;;;;;;;;;;;;;;;;;49513:8;49482:40;;49503:8;49482:40;;;;;;;;;;;;49402:128;49339:191;:::o;11940:326::-;12000:4;12257:1;12235:7;:19;;;:23;12228:30;;11940:326;;;:::o;43064:667::-;43227:4;43264:2;43248:36;;;43285:12;:10;:12::i;:::-;43299:4;43305:7;43314:5;43248:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43244:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43499:1;43482:6;:13;:18;43478:235;;;43528:40;;;;;;;;;;;;;;43478:235;43671:6;43665:13;43656:6;43652:2;43648:15;43641:38;43244:480;43377:45;;;43367:55;;;:6;:55;;;;43360:62;;;43064:667;;;;;;:::o;46240:114::-;46305:7;46332;:14;;;46325:21;;46240:114;;;:::o;46362:127::-;46469:1;46451:7;:14;;;:19;;;;;;;;;;;46362:127;:::o;33412:104::-;33481:27;33491:2;33495:8;33481:27;;;;;;;;;;;;:9;:27::i;:::-;33412:104;;:::o;20595:723::-;20651:13;20881:1;20872:5;:10;20868:53;;;20899:10;;;;;;;;;;;;;;;;;;;;;20868:53;20931:12;20946:5;20931:20;;20962:14;20987:78;21002:1;20994:4;:9;20987:78;;21020:8;;;;;:::i;:::-;;;;21051:2;21043:10;;;;;:::i;:::-;;;20987:78;;;21075:19;21107:6;21097:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21075:39;;21125:154;21141:1;21132:5;:10;21125:154;;21169:1;21159:11;;;;;:::i;:::-;;;21236:2;21228:5;:10;;;;:::i;:::-;21215:2;:24;;;;:::i;:::-;21202:39;;21185:6;21192;21185:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;21265:2;21256:11;;;;;:::i;:::-;;;21125:154;;;21303:6;21289:21;;;;;20595:723;;;;:::o;44379:159::-;;;;;:::o;45197:158::-;;;;;:::o;33889:1749::-;34012:20;34035:13;;34012:36;;34077:1;34063:16;;:2;:16;;;34059:48;;;34088:19;;;;;;;;;;;;;;34059:48;34134:1;34122:8;:13;34118:44;;;34144:18;;;;;;;;;;;;;;34118:44;34175:61;34205:1;34209:2;34213:12;34227:8;34175:21;:61::i;:::-;34548:8;34513:12;:16;34526:2;34513:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34612:8;34572:12;:16;34585:2;34572:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34671:2;34638:11;:25;34650:12;34638:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;34738:15;34688:11;:25;34700:12;34688:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;34771:20;34794:12;34771:35;;34821:11;34850:8;34835:12;:23;34821:37;;34879:15;:2;:13;;;:15::i;:::-;34875:631;;;34915:313;34971:12;34967:2;34946:38;;34963:1;34946:38;;;;;;;;;;;;35012:69;35051:1;35055:2;35059:14;;;;;;35075:5;35012:30;:69::i;:::-;35007:174;;35117:40;;;;;;;;;;;;;;35007:174;35223:3;35208:12;:18;34915:313;;35309:12;35292:13;;:29;35288:43;;35323:8;;;35288:43;34875:631;;;35372:119;35428:14;;;;;;35424:2;35403:40;;35420:1;35403:40;;;;;;;;;;;;35486:3;35471:12;:18;35372:119;;34875:631;35536:12;35520:13;:28;;;;34488:1072;;35570:60;35599:1;35603:2;35607:12;35621:8;35570:20;:60::i;:::-;34001:1637;33889:1749;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:122::-;1674:24;1692:5;1674:24;:::i;:::-;1667:5;1664:35;1654:63;;1713:1;1710;1703:12;1654:63;1601:122;:::o;1729:139::-;1775:5;1813:6;1800:20;1791:29;;1829:33;1856:5;1829:33;:::i;:::-;1729:139;;;;:::o;1874:474::-;1942:6;1950;1999:2;1987:9;1978:7;1974:23;1970:32;1967:119;;;2005:79;;:::i;:::-;1967:119;2125:1;2150:53;2195:7;2186:6;2175:9;2171:22;2150:53;:::i;:::-;2140:63;;2096:117;2252:2;2278:53;2323:7;2314:6;2303:9;2299:22;2278:53;:::i;:::-;2268:63;;2223:118;1874:474;;;;;:::o;2354:99::-;2406:6;2440:5;2434:12;2424:22;;2354:99;;;:::o;2459:169::-;2543:11;2577:6;2572:3;2565:19;2617:4;2612:3;2608:14;2593:29;;2459:169;;;;:::o;2634:307::-;2702:1;2712:113;2726:6;2723:1;2720:13;2712:113;;;2811:1;2806:3;2802:11;2796:18;2792:1;2787:3;2783:11;2776:39;2748:2;2745:1;2741:10;2736:15;;2712:113;;;2843:6;2840:1;2837:13;2834:101;;;2923:1;2914:6;2909:3;2905:16;2898:27;2834:101;2683:258;2634:307;;;:::o;2947:102::-;2988:6;3039:2;3035:7;3030:2;3023:5;3019:14;3015:28;3005:38;;2947:102;;;:::o;3055:364::-;3143:3;3171:39;3204:5;3171:39;:::i;:::-;3226:71;3290:6;3285:3;3226:71;:::i;:::-;3219:78;;3306:52;3351:6;3346:3;3339:4;3332:5;3328:16;3306:52;:::i;:::-;3383:29;3405:6;3383:29;:::i;:::-;3378:3;3374:39;3367:46;;3147:272;3055:364;;;;:::o;3425:313::-;3538:4;3576:2;3565:9;3561:18;3553:26;;3625:9;3619:4;3615:20;3611:1;3600:9;3596:17;3589:47;3653:78;3726:4;3717:6;3653:78;:::i;:::-;3645:86;;3425:313;;;;:::o;3744:329::-;3803:6;3852:2;3840:9;3831:7;3827:23;3823:32;3820:119;;;3858:79;;:::i;:::-;3820:119;3978:1;4003:53;4048:7;4039:6;4028:9;4024:22;4003:53;:::i;:::-;3993:63;;3949:117;3744:329;;;;:::o;4079:126::-;4116:7;4156:42;4149:5;4145:54;4134:65;;4079:126;;;:::o;4211:96::-;4248:7;4277:24;4295:5;4277:24;:::i;:::-;4266:35;;4211:96;;;:::o;4313:118::-;4400:24;4418:5;4400:24;:::i;:::-;4395:3;4388:37;4313:118;;:::o;4437:222::-;4530:4;4568:2;4557:9;4553:18;4545:26;;4581:71;4649:1;4638:9;4634:17;4625:6;4581:71;:::i;:::-;4437:222;;;;:::o;4665:122::-;4738:24;4756:5;4738:24;:::i;:::-;4731:5;4728:35;4718:63;;4777:1;4774;4767:12;4718:63;4665:122;:::o;4793:139::-;4839:5;4877:6;4864:20;4855:29;;4893:33;4920:5;4893:33;:::i;:::-;4793:139;;;;:::o;4938:474::-;5006:6;5014;5063:2;5051:9;5042:7;5038:23;5034:32;5031:119;;;5069:79;;:::i;:::-;5031:119;5189:1;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5160:117;5316:2;5342:53;5387:7;5378:6;5367:9;5363:22;5342:53;:::i;:::-;5332:63;;5287:118;4938:474;;;;;:::o;5418:118::-;5505:24;5523:5;5505:24;:::i;:::-;5500:3;5493:37;5418:118;;:::o;5542:222::-;5635:4;5673:2;5662:9;5658:18;5650:26;;5686:71;5754:1;5743:9;5739:17;5730:6;5686:71;:::i;:::-;5542:222;;;;:::o;5770:619::-;5847:6;5855;5863;5912:2;5900:9;5891:7;5887:23;5883:32;5880:119;;;5918:79;;:::i;:::-;5880:119;6038:1;6063:53;6108:7;6099:6;6088:9;6084:22;6063:53;:::i;:::-;6053:63;;6009:117;6165:2;6191:53;6236:7;6227:6;6216:9;6212:22;6191:53;:::i;:::-;6181:63;;6136:118;6293:2;6319:53;6364:7;6355:6;6344:9;6340:22;6319:53;:::i;:::-;6309:63;;6264:118;5770:619;;;;;:::o;6395:329::-;6454:6;6503:2;6491:9;6482:7;6478:23;6474:32;6471:119;;;6509:79;;:::i;:::-;6471:119;6629:1;6654:53;6699:7;6690:6;6679:9;6675:22;6654:53;:::i;:::-;6644:63;;6600:117;6395:329;;;;:::o;6730:619::-;6807:6;6815;6823;6872:2;6860:9;6851:7;6847:23;6843:32;6840:119;;;6878:79;;:::i;:::-;6840:119;6998:1;7023:53;7068:7;7059:6;7048:9;7044:22;7023:53;:::i;:::-;7013:63;;6969:117;7125:2;7151:53;7196:7;7187:6;7176:9;7172:22;7151:53;:::i;:::-;7141:63;;7096:118;7253:2;7279:53;7324:7;7315:6;7304:9;7300:22;7279:53;:::i;:::-;7269:63;;7224:118;6730:619;;;;;:::o;7355:116::-;7425:21;7440:5;7425:21;:::i;:::-;7418:5;7415:32;7405:60;;7461:1;7458;7451:12;7405:60;7355:116;:::o;7477:133::-;7520:5;7558:6;7545:20;7536:29;;7574:30;7598:5;7574:30;:::i;:::-;7477:133;;;;:::o;7616:468::-;7681:6;7689;7738:2;7726:9;7717:7;7713:23;7709:32;7706:119;;;7744:79;;:::i;:::-;7706:119;7864:1;7889:53;7934:7;7925:6;7914:9;7910:22;7889:53;:::i;:::-;7879:63;;7835:117;7991:2;8017:50;8059:7;8050:6;8039:9;8035:22;8017:50;:::i;:::-;8007:60;;7962:115;7616:468;;;;;:::o;8090:117::-;8199:1;8196;8189:12;8213:117;8322:1;8319;8312:12;8336:180;8384:77;8381:1;8374:88;8481:4;8478:1;8471:15;8505:4;8502:1;8495:15;8522:281;8605:27;8627:4;8605:27;:::i;:::-;8597:6;8593:40;8735:6;8723:10;8720:22;8699:18;8687:10;8684:34;8681:62;8678:88;;;8746:18;;:::i;:::-;8678:88;8786:10;8782:2;8775:22;8565:238;8522:281;;:::o;8809:129::-;8843:6;8870:20;;:::i;:::-;8860:30;;8899:33;8927:4;8919:6;8899:33;:::i;:::-;8809:129;;;:::o;8944:307::-;9005:4;9095:18;9087:6;9084:30;9081:56;;;9117:18;;:::i;:::-;9081:56;9155:29;9177:6;9155:29;:::i;:::-;9147:37;;9239:4;9233;9229:15;9221:23;;8944:307;;;:::o;9257:154::-;9341:6;9336:3;9331;9318:30;9403:1;9394:6;9389:3;9385:16;9378:27;9257:154;;;:::o;9417:410::-;9494:5;9519:65;9535:48;9576:6;9535:48;:::i;:::-;9519:65;:::i;:::-;9510:74;;9607:6;9600:5;9593:21;9645:4;9638:5;9634:16;9683:3;9674:6;9669:3;9665:16;9662:25;9659:112;;;9690:79;;:::i;:::-;9659:112;9780:41;9814:6;9809:3;9804;9780:41;:::i;:::-;9500:327;9417:410;;;;;:::o;9846:338::-;9901:5;9950:3;9943:4;9935:6;9931:17;9927:27;9917:122;;9958:79;;:::i;:::-;9917:122;10075:6;10062:20;10100:78;10174:3;10166:6;10159:4;10151:6;10147:17;10100:78;:::i;:::-;10091:87;;9907:277;9846:338;;;;:::o;10190:943::-;10285:6;10293;10301;10309;10358:3;10346:9;10337:7;10333:23;10329:33;10326:120;;;10365:79;;:::i;:::-;10326:120;10485:1;10510:53;10555:7;10546:6;10535:9;10531:22;10510:53;:::i;:::-;10500:63;;10456:117;10612:2;10638:53;10683:7;10674:6;10663:9;10659:22;10638:53;:::i;:::-;10628:63;;10583:118;10740:2;10766:53;10811:7;10802:6;10791:9;10787:22;10766:53;:::i;:::-;10756:63;;10711:118;10896:2;10885:9;10881:18;10868:32;10927:18;10919:6;10916:30;10913:117;;;10949:79;;:::i;:::-;10913:117;11054:62;11108:7;11099:6;11088:9;11084:22;11054:62;:::i;:::-;11044:72;;10839:287;10190:943;;;;;;;:::o;11139:311::-;11216:4;11306:18;11298:6;11295:30;11292:56;;;11328:18;;:::i;:::-;11292:56;11378:4;11370:6;11366:17;11358:25;;11438:4;11432;11428:15;11420:23;;11139:311;;;:::o;11456:117::-;11565:1;11562;11555:12;11596:710;11692:5;11717:81;11733:64;11790:6;11733:64;:::i;:::-;11717:81;:::i;:::-;11708:90;;11818:5;11847:6;11840:5;11833:21;11881:4;11874:5;11870:16;11863:23;;11934:4;11926:6;11922:17;11914:6;11910:30;11963:3;11955:6;11952:15;11949:122;;;11982:79;;:::i;:::-;11949:122;12097:6;12080:220;12114:6;12109:3;12106:15;12080:220;;;12189:3;12218:37;12251:3;12239:10;12218:37;:::i;:::-;12213:3;12206:50;12285:4;12280:3;12276:14;12269:21;;12156:144;12140:4;12135:3;12131:14;12124:21;;12080:220;;;12084:21;11698:608;;11596:710;;;;;:::o;12329:370::-;12400:5;12449:3;12442:4;12434:6;12430:17;12426:27;12416:122;;12457:79;;:::i;:::-;12416:122;12574:6;12561:20;12599:94;12689:3;12681:6;12674:4;12666:6;12662:17;12599:94;:::i;:::-;12590:103;;12406:293;12329:370;;;;:::o;12705:678::-;12795:6;12803;12852:2;12840:9;12831:7;12827:23;12823:32;12820:119;;;12858:79;;:::i;:::-;12820:119;13006:1;12995:9;12991:17;12978:31;13036:18;13028:6;13025:30;13022:117;;;13058:79;;:::i;:::-;13022:117;13163:78;13233:7;13224:6;13213:9;13209:22;13163:78;:::i;:::-;13153:88;;12949:302;13290:2;13316:50;13358:7;13349:6;13338:9;13334:22;13316:50;:::i;:::-;13306:60;;13261:115;12705:678;;;;;:::o;13389:308::-;13451:4;13541:18;13533:6;13530:30;13527:56;;;13563:18;;:::i;:::-;13527:56;13601:29;13623:6;13601:29;:::i;:::-;13593:37;;13685:4;13679;13675:15;13667:23;;13389:308;;;:::o;13703:412::-;13781:5;13806:66;13822:49;13864:6;13822:49;:::i;:::-;13806:66;:::i;:::-;13797:75;;13895:6;13888:5;13881:21;13933:4;13926:5;13922:16;13971:3;13962:6;13957:3;13953:16;13950:25;13947:112;;;13978:79;;:::i;:::-;13947:112;14068:41;14102:6;14097:3;14092;14068:41;:::i;:::-;13787:328;13703:412;;;;;:::o;14135:340::-;14191:5;14240:3;14233:4;14225:6;14221:17;14217:27;14207:122;;14248:79;;:::i;:::-;14207:122;14365:6;14352:20;14390:79;14465:3;14457:6;14450:4;14442:6;14438:17;14390:79;:::i;:::-;14381:88;;14197:278;14135:340;;;;:::o;14481:834::-;14569:6;14577;14626:2;14614:9;14605:7;14601:23;14597:32;14594:119;;;14632:79;;:::i;:::-;14594:119;14780:1;14769:9;14765:17;14752:31;14810:18;14802:6;14799:30;14796:117;;;14832:79;;:::i;:::-;14796:117;14937:63;14992:7;14983:6;14972:9;14968:22;14937:63;:::i;:::-;14927:73;;14723:287;15077:2;15066:9;15062:18;15049:32;15108:18;15100:6;15097:30;15094:117;;;15130:79;;:::i;:::-;15094:117;15235:63;15290:7;15281:6;15270:9;15266:22;15235:63;:::i;:::-;15225:73;;15020:288;14481:834;;;;;:::o;15321:474::-;15389:6;15397;15446:2;15434:9;15425:7;15421:23;15417:32;15414:119;;;15452:79;;:::i;:::-;15414:119;15572:1;15597:53;15642:7;15633:6;15622:9;15618:22;15597:53;:::i;:::-;15587:63;;15543:117;15699:2;15725:53;15770:7;15761:6;15750:9;15746:22;15725:53;:::i;:::-;15715:63;;15670:118;15321:474;;;;;:::o;15801:180::-;15849:77;15846:1;15839:88;15946:4;15943:1;15936:15;15970:4;15967:1;15960:15;15987:320;16031:6;16068:1;16062:4;16058:12;16048:22;;16115:1;16109:4;16105:12;16136:18;16126:81;;16192:4;16184:6;16180:17;16170:27;;16126:81;16254:2;16246:6;16243:14;16223:18;16220:38;16217:84;;;16273:18;;:::i;:::-;16217:84;16038:269;15987:320;;;:::o;16313:180::-;16361:77;16358:1;16351:88;16458:4;16455:1;16448:15;16482:4;16479:1;16472:15;16499:305;16539:3;16558:20;16576:1;16558:20;:::i;:::-;16553:25;;16592:20;16610:1;16592:20;:::i;:::-;16587:25;;16746:1;16678:66;16674:74;16671:1;16668:81;16665:107;;;16752:18;;:::i;:::-;16665:107;16796:1;16793;16789:9;16782:16;;16499:305;;;;:::o;16810:181::-;16950:33;16946:1;16938:6;16934:14;16927:57;16810:181;:::o;16997:366::-;17139:3;17160:67;17224:2;17219:3;17160:67;:::i;:::-;17153:74;;17236:93;17325:3;17236:93;:::i;:::-;17354:2;17349:3;17345:12;17338:19;;16997:366;;;:::o;17369:419::-;17535:4;17573:2;17562:9;17558:18;17550:26;;17622:9;17616:4;17612:20;17608:1;17597:9;17593:17;17586:47;17650:131;17776:4;17650:131;:::i;:::-;17642:139;;17369:419;;;:::o;17794:233::-;17833:3;17856:24;17874:5;17856:24;:::i;:::-;17847:33;;17902:66;17895:5;17892:77;17889:103;;;17972:18;;:::i;:::-;17889:103;18019:1;18012:5;18008:13;18001:20;;17794:233;;;:::o;18033:191::-;18073:4;18093:20;18111:1;18093:20;:::i;:::-;18088:25;;18127:20;18145:1;18127:20;:::i;:::-;18122:25;;18166:1;18163;18160:8;18157:34;;;18171:18;;:::i;:::-;18157:34;18216:1;18213;18209:9;18201:17;;18033:191;;;;:::o;18230:170::-;18370:22;18366:1;18358:6;18354:14;18347:46;18230:170;:::o;18406:366::-;18548:3;18569:67;18633:2;18628:3;18569:67;:::i;:::-;18562:74;;18645:93;18734:3;18645:93;:::i;:::-;18763:2;18758:3;18754:12;18747:19;;18406:366;;;:::o;18778:419::-;18944:4;18982:2;18971:9;18967:18;18959:26;;19031:9;19025:4;19021:20;19017:1;19006:9;19002:17;18995:47;19059:131;19185:4;19059:131;:::i;:::-;19051:139;;18778:419;;;:::o;19203:148::-;19305:11;19342:3;19327:18;;19203:148;;;;:::o;19357:141::-;19406:4;19429:3;19421:11;;19452:3;19449:1;19442:14;19486:4;19483:1;19473:18;19465:26;;19357:141;;;:::o;19528:845::-;19631:3;19668:5;19662:12;19697:36;19723:9;19697:36;:::i;:::-;19749:89;19831:6;19826:3;19749:89;:::i;:::-;19742:96;;19869:1;19858:9;19854:17;19885:1;19880:137;;;;20031:1;20026:341;;;;19847:520;;19880:137;19964:4;19960:9;19949;19945:25;19940:3;19933:38;20000:6;19995:3;19991:16;19984:23;;19880:137;;20026:341;20093:38;20125:5;20093:38;:::i;:::-;20153:1;20167:154;20181:6;20178:1;20175:13;20167:154;;;20255:7;20249:14;20245:1;20240:3;20236:11;20229:35;20305:1;20296:7;20292:15;20281:26;;20203:4;20200:1;20196:12;20191:17;;20167:154;;;20350:6;20345:3;20341:16;20334:23;;20033:334;;19847:520;;19635:738;;19528:845;;;;:::o;20379:377::-;20485:3;20513:39;20546:5;20513:39;:::i;:::-;20568:89;20650:6;20645:3;20568:89;:::i;:::-;20561:96;;20666:52;20711:6;20706:3;20699:4;20692:5;20688:16;20666:52;:::i;:::-;20743:6;20738:3;20734:16;20727:23;;20489:267;20379:377;;;;:::o;20762:429::-;20939:3;20961:92;21049:3;21040:6;20961:92;:::i;:::-;20954:99;;21070:95;21161:3;21152:6;21070:95;:::i;:::-;21063:102;;21182:3;21175:10;;20762:429;;;;;:::o;21197:180::-;21245:77;21242:1;21235:88;21342:4;21339:1;21332:15;21366:4;21363:1;21356:15;21383:164;21523:16;21519:1;21511:6;21507:14;21500:40;21383:164;:::o;21553:366::-;21695:3;21716:67;21780:2;21775:3;21716:67;:::i;:::-;21709:74;;21792:93;21881:3;21792:93;:::i;:::-;21910:2;21905:3;21901:12;21894:19;;21553:366;;;:::o;21925:419::-;22091:4;22129:2;22118:9;22114:18;22106:26;;22178:9;22172:4;22168:20;22164:1;22153:9;22149:17;22142:47;22206:131;22332:4;22206:131;:::i;:::-;22198:139;;21925:419;;;:::o;22350:348::-;22390:7;22413:20;22431:1;22413:20;:::i;:::-;22408:25;;22447:20;22465:1;22447:20;:::i;:::-;22442:25;;22635:1;22567:66;22563:74;22560:1;22557:81;22552:1;22545:9;22538:17;22534:105;22531:131;;;22642:18;;:::i;:::-;22531:131;22690:1;22687;22683:9;22672:20;;22350:348;;;;:::o;22704:178::-;22844:30;22840:1;22832:6;22828:14;22821:54;22704:178;:::o;22888:366::-;23030:3;23051:67;23115:2;23110:3;23051:67;:::i;:::-;23044:74;;23127:93;23216:3;23127:93;:::i;:::-;23245:2;23240:3;23236:12;23229:19;;22888:366;;;:::o;23260:419::-;23426:4;23464:2;23453:9;23449:18;23441:26;;23513:9;23507:4;23503:20;23499:1;23488:9;23484:17;23477:47;23541:131;23667:4;23541:131;:::i;:::-;23533:139;;23260:419;;;:::o;23685:177::-;23825:29;23821:1;23813:6;23809:14;23802:53;23685:177;:::o;23868:366::-;24010:3;24031:67;24095:2;24090:3;24031:67;:::i;:::-;24024:74;;24107:93;24196:3;24107:93;:::i;:::-;24225:2;24220:3;24216:12;24209:19;;23868:366;;;:::o;24240:419::-;24406:4;24444:2;24433:9;24429:18;24421:26;;24493:9;24487:4;24483:20;24479:1;24468:9;24464:17;24457:47;24521:131;24647:4;24521:131;:::i;:::-;24513:139;;24240:419;;;:::o;24665:220::-;24805:34;24801:1;24793:6;24789:14;24782:58;24874:3;24869:2;24861:6;24857:15;24850:28;24665:220;:::o;24891:366::-;25033:3;25054:67;25118:2;25113:3;25054:67;:::i;:::-;25047:74;;25130:93;25219:3;25130:93;:::i;:::-;25248:2;25243:3;25239:12;25232:19;;24891:366;;;:::o;25263:419::-;25429:4;25467:2;25456:9;25452:18;25444:26;;25516:9;25510:4;25506:20;25502:1;25491:9;25487:17;25480:47;25544:131;25670:4;25544:131;:::i;:::-;25536:139;;25263:419;;;:::o;25688:181::-;25828:33;25824:1;25816:6;25812:14;25805:57;25688:181;:::o;25875:366::-;26017:3;26038:67;26102:2;26097:3;26038:67;:::i;:::-;26031:74;;26114:93;26203:3;26114:93;:::i;:::-;26232:2;26227:3;26223:12;26216:19;;25875:366;;;:::o;26247:419::-;26413:4;26451:2;26440:9;26436:18;26428:26;;26500:9;26494:4;26490:20;26486:1;26475:9;26471:17;26464:47;26528:131;26654:4;26528:131;:::i;:::-;26520:139;;26247:419;;;:::o;26672:224::-;26812:34;26808:1;26800:6;26796:14;26789:58;26881:7;26876:2;26868:6;26864:15;26857:32;26672:224;:::o;26902:366::-;27044:3;27065:67;27129:2;27124:3;27065:67;:::i;:::-;27058:74;;27141:93;27230:3;27141:93;:::i;:::-;27259:2;27254:3;27250:12;27243:19;;26902:366;;;:::o;27274:419::-;27440:4;27478:2;27467:9;27463:18;27455:26;;27527:9;27521:4;27517:20;27513:1;27502:9;27498:17;27491:47;27555:131;27681:4;27555:131;:::i;:::-;27547:139;;27274:419;;;:::o;27699:224::-;27839:34;27835:1;27827:6;27823:14;27816:58;27908:7;27903:2;27895:6;27891:15;27884:32;27699:224;:::o;27929:366::-;28071:3;28092:67;28156:2;28151:3;28092:67;:::i;:::-;28085:74;;28168:93;28257:3;28168:93;:::i;:::-;28286:2;28281:3;28277:12;28270:19;;27929:366;;;:::o;28301:419::-;28467:4;28505:2;28494:9;28490:18;28482:26;;28554:9;28548:4;28544:20;28540:1;28529:9;28525:17;28518:47;28582:131;28708:4;28582:131;:::i;:::-;28574:139;;28301:419;;;:::o;28726:180::-;28866:32;28862:1;28854:6;28850:14;28843:56;28726:180;:::o;28912:366::-;29054:3;29075:67;29139:2;29134:3;29075:67;:::i;:::-;29068:74;;29151:93;29240:3;29151:93;:::i;:::-;29269:2;29264:3;29260:12;29253:19;;28912:366;;;:::o;29284:419::-;29450:4;29488:2;29477:9;29473:18;29465:26;;29537:9;29531:4;29527:20;29523:1;29512:9;29508:17;29501:47;29565:131;29691:4;29565:131;:::i;:::-;29557:139;;29284:419;;;:::o;29709:225::-;29849:34;29845:1;29837:6;29833:14;29826:58;29918:8;29913:2;29905:6;29901:15;29894:33;29709:225;:::o;29940:366::-;30082:3;30103:67;30167:2;30162:3;30103:67;:::i;:::-;30096:74;;30179:93;30268:3;30179:93;:::i;:::-;30297:2;30292:3;30288:12;30281:19;;29940:366;;;:::o;30312:419::-;30478:4;30516:2;30505:9;30501:18;30493:26;;30565:9;30559:4;30555:20;30551:1;30540:9;30536:17;30529:47;30593:131;30719:4;30593:131;:::i;:::-;30585:139;;30312:419;;;:::o;30737:182::-;30877:34;30873:1;30865:6;30861:14;30854:58;30737:182;:::o;30925:366::-;31067:3;31088:67;31152:2;31147:3;31088:67;:::i;:::-;31081:74;;31164:93;31253:3;31164:93;:::i;:::-;31282:2;31277:3;31273:12;31266:19;;30925:366;;;:::o;31297:419::-;31463:4;31501:2;31490:9;31486:18;31478:26;;31550:9;31544:4;31540:20;31536:1;31525:9;31521:17;31514:47;31578:131;31704:4;31578:131;:::i;:::-;31570:139;;31297:419;;;:::o;31722:98::-;31773:6;31807:5;31801:12;31791:22;;31722:98;;;:::o;31826:168::-;31909:11;31943:6;31938:3;31931:19;31983:4;31978:3;31974:14;31959:29;;31826:168;;;;:::o;32000:360::-;32086:3;32114:38;32146:5;32114:38;:::i;:::-;32168:70;32231:6;32226:3;32168:70;:::i;:::-;32161:77;;32247:52;32292:6;32287:3;32280:4;32273:5;32269:16;32247:52;:::i;:::-;32324:29;32346:6;32324:29;:::i;:::-;32319:3;32315:39;32308:46;;32090:270;32000:360;;;;:::o;32366:640::-;32561:4;32599:3;32588:9;32584:19;32576:27;;32613:71;32681:1;32670:9;32666:17;32657:6;32613:71;:::i;:::-;32694:72;32762:2;32751:9;32747:18;32738:6;32694:72;:::i;:::-;32776;32844:2;32833:9;32829:18;32820:6;32776:72;:::i;:::-;32895:9;32889:4;32885:20;32880:2;32869:9;32865:18;32858:48;32923:76;32994:4;32985:6;32923:76;:::i;:::-;32915:84;;32366:640;;;;;;;:::o;33012:141::-;33068:5;33099:6;33093:13;33084:22;;33115:32;33141:5;33115:32;:::i;:::-;33012:141;;;;:::o;33159:349::-;33228:6;33277:2;33265:9;33256:7;33252:23;33248:32;33245:119;;;33283:79;;:::i;:::-;33245:119;33403:1;33428:63;33483:7;33474:6;33463:9;33459:22;33428:63;:::i;:::-;33418:73;;33374:127;33159:349;;;;:::o;33514:180::-;33562:77;33559:1;33552:88;33659:4;33656:1;33649:15;33683:4;33680:1;33673:15;33700:185;33740:1;33757:20;33775:1;33757:20;:::i;:::-;33752:25;;33791:20;33809:1;33791:20;:::i;:::-;33786:25;;33830:1;33820:35;;33835:18;;:::i;:::-;33820:35;33877:1;33874;33870:9;33865:14;;33700:185;;;;:::o;33891:176::-;33923:1;33940:20;33958:1;33940:20;:::i;:::-;33935:25;;33974:20;33992:1;33974:20;:::i;:::-;33969:25;;34013:1;34003:35;;34018:18;;:::i;:::-;34003:35;34059:1;34056;34052:9;34047:14;;33891:176;;;;:::o
Swarm Source
ipfs://5d5d11dcebc9d358593e89f712d94790a362a2c346147d69ed7a74f38420dd52
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.