ERC-721
Overview
Max Total Supply
111 WTFB
Holders
24
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
WTFBoats
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-01-20 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); 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 virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/WTF_Boats.sol pragma solidity ^0.8.2; /// @custom:security-contact [email protected] contract WTFBoats is ERC721, ERC721Enumerable, ERC721URIStorage, Pausable, Ownable { using Strings for uint256; string private baseURI = 'ipfs://QmWBRNy69NTkQcRiXXYLh2zthFekfKHMhndfv2aZArw5P2/'; // string private baseExtension = '.json'; uint256 private costBasic = 0.05 ether; // CHANGE THIS uint256 private costAdvance = 0.075 ether; // BEFORE RELEASE uint256 private refundAmount = 0.005 ether; // AlSO THIS uint16 private maxSupply = 111; address private nullAddress = 0x0000000000000000000000000000000000000000; // mapping(address => bool) public whitelisted; mapping(uint32 => address) public mapPoolidToAddress; event LogPoolId(address indexed sender, uint256 poolId); constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) { _safeMint(0x098cc045229d04D95F8A8860B87Ca0c3b914b784, 3); // Seaduction _safeMint(0x1eCf959C6c2D6CbAaa05507852d14EB14D15Ad31, 66); // Master Bait _safeMint(0xcEF6616deaD86726c321E0fc81Bd7D9e6ba2b49c, 1); // Shellfish in Bed _safeMint(0xcEF6616deaD86726c321E0fc81Bd7D9e6ba2b49c, 11); // Ship Happens _safeMint(0xcEF6616deaD86726c321E0fc81Bd7D9e6ba2b49c, 2); // Playbouy _safeMint(0xcEF6616deaD86726c321E0fc81Bd7D9e6ba2b49c, 4); // Alotta Ocean _safeMint(0xcEF6616deaD86726c321E0fc81Bd7D9e6ba2b49c, 6); // Easy Catch _safeMint(0xcEF6616deaD86726c321E0fc81Bd7D9e6ba2b49c, 8); // Aboat Time _safeMint(0x6522c9b5cc63023b76766F85BeEF2518C1C67DD1, 5); // Reely Expensive _safeMint(0x7b8981A1472f43E65446175358b43660a23C1526, 101); // Nuclear fishin’ _safeMint(0x7f0B9CE42435dB2CFa3d78DB96c9452122CF67fE, 10); // Fishing for Compliments _safeMint(0x7f0B9CE42435dB2CFa3d78DB96c9452122CF67fE, 52); // Laguna Matata _safeMint(0x7f0B9CE42435dB2CFa3d78DB96c9452122CF67fE, 9); // The Codfather _safeMint(0x7f0B9CE42435dB2CFa3d78DB96c9452122CF67fE, 98); // Do You like Fish Sticks? _safeMint(0x816793c4D6C44B3aFE91e3EEEc82586667ad809c, 22); // Looking for Fish _safeMint(0x8Fc496228E38517D798b1373CB8d701Bb5C5fB71, 54); // Usain Boat _safeMint(0x95aC8Dc9247f36aAE07552a3a887a5bF3FD7207D, 7); // Tide Pool _safeMint(0x9eb304992d81D5060C3f348Bee740771886DE472, 20); // Bad Attitude _safeMint(0xa45a8332200f96EAe9E1f0cFe601f25D94745469, 108); // A Salt Weapon _safeMint(0xa45a8332200f96EAe9E1f0cFe601f25D94745469, 84); // Boaty McBoatface _safeMint(0xA851C7E0690267fcCd3f7b04b88B40E376CCD321, 69); // Fishing Nemo _safeMint(0xBC1565E11B097d37Ee1eCD37f28162427BF6b6Ae, 64); // For Reels _safeMint(0xc3d7063eE9D75E4F082b897B38025040a4dBB573, 92); // 404 Fish Not Found _safeMint(0xc74fE043A56f29B647033E3CD1a8044b3e79B151, 67); // The Rodfather _safeMint(0xEd46433Fd22b9302d7401Df0844cb8d2Dbc30ef1, 16); // Liquid Asset _safeMint(0xf08ABA4CFa1bBbDa000ad434FfA25993a19d78D2, 77); // Yea Buoy _safeMint(0x99BACb844BC114f76cB020f2ed83DcB5Ae6a02ce, 99); // Test Tackles } function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function requestMint(uint32 _poolId) public payable whenNotPaused { // require(whitelisted[msg.sender], 'Not on whitelist'); require(msg.value >= costBasic, 'Not enought ETH'); // require(balanceOf(msg.sender) < 2, 'Max 2 per wallet'); require(mapPoolidToAddress[_poolId] == nullAddress, 'Pool already claimed'); uint256 supply = totalSupply(); require(supply + 1 <= maxSupply); mapPoolidToAddress[_poolId] = msg.sender; emit LogPoolId(msg.sender, _poolId); } function poolMint(uint32 _poolId, uint256 _tokenId) public onlyOwner { uint256 supply = totalSupply(); require(supply + 1 <= maxSupply); address sender = mapPoolidToAddress[_poolId]; // require(balanceOf(sender) < 2, 'Max 2 per wallet'); _safeMint(sender, _tokenId); } function safeMint(address to, uint256 tokenId) public onlyOwner { uint256 supply = totalSupply(); require(supply + 1 <= maxSupply); _safeMint(to, tokenId); } // function refundMint(address _to, uint256 _amount) public onlyOwner { // uint8 mintType = mapSenderToType[sender]; // uint256 refundTotal = mintType == 1 ? costBasic : costAdvance; // payable(sender).transfer(refundTotal - refundAmount); // } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i += 1) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function setCost(uint256 _newBasicCost, uint256 _newAdvanceCost) public onlyOwner { costBasic = _newBasicCost; costAdvance = _newAdvanceCost; } // function whitelistUser(address _user) public onlyOwner { // whitelisted[_user] = true; // } // function removeWhitelistUser(address _user) public onlyOwner { // whitelisted[_user] = false; // } function withdrawETH() public onlyOwner { payable(msg.sender).transfer(address(this).balance); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override(ERC721, ERC721Enumerable) whenNotPaused { super._beforeTokenTransfer(from, to, tokenId); } function tokenURI(uint256 _tokenId) public view virtual override(ERC721, ERC721URIStorage) returns (string memory) { return string(abi.encodePacked(_baseURI(), _tokenId.toString(), '.json')); } // The following functions are overrides required by Solidity. function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } // function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { // return super.tokenURI(tokenId); // } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"LogPoolId","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"mapPoolidToAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_poolId","type":"uint32"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"poolMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_poolId","type":"uint32"}],"name":"requestMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBasicCost","type":"uint256"},{"internalType":"uint256","name":"_newAdvanceCost","type":"uint256"}],"name":"setCost","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180606001604052806036815260200162005deb60369139600c908051906020019062000035929190620010be565b5066b1a2bc2ec50000600d5567010a741a46278000600e556611c37937e08000600f55606f601060006101000a81548161ffff021916908361ffff1602179055506000601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000c557600080fd5b5060405162005e2138038062005e218339818101604052810190620000eb919062001235565b8181816000908051906020019062000105929190620010be565b5080600190805190602001906200011e929190620010be565b5050506000600b60006101000a81548160ff0219169083151502179055506200015c620001506200058160201b60201c565b6200058960201b60201c565b6200018373098cc045229d04d95f8a8860b87ca0c3b914b78460036200064f60201b60201c565b620001aa731ecf959c6c2d6cbaaa05507852d14eb14d15ad3160426200064f60201b60201c565b620001d173cef6616dead86726c321e0fc81bd7d9e6ba2b49c60016200064f60201b60201c565b620001f873cef6616dead86726c321e0fc81bd7d9e6ba2b49c600b6200064f60201b60201c565b6200021f73cef6616dead86726c321e0fc81bd7d9e6ba2b49c60026200064f60201b60201c565b6200024673cef6616dead86726c321e0fc81bd7d9e6ba2b49c60046200064f60201b60201c565b6200026d73cef6616dead86726c321e0fc81bd7d9e6ba2b49c60066200064f60201b60201c565b6200029473cef6616dead86726c321e0fc81bd7d9e6ba2b49c60086200064f60201b60201c565b620002bb736522c9b5cc63023b76766f85beef2518c1c67dd160056200064f60201b60201c565b620002e2737b8981a1472f43e65446175358b43660a23c152660656200064f60201b60201c565b62000309737f0b9ce42435db2cfa3d78db96c9452122cf67fe600a6200064f60201b60201c565b62000330737f0b9ce42435db2cfa3d78db96c9452122cf67fe60346200064f60201b60201c565b62000357737f0b9ce42435db2cfa3d78db96c9452122cf67fe60096200064f60201b60201c565b6200037e737f0b9ce42435db2cfa3d78db96c9452122cf67fe60626200064f60201b60201c565b620003a573816793c4d6c44b3afe91e3eeec82586667ad809c60166200064f60201b60201c565b620003cc738fc496228e38517d798b1373cb8d701bb5c5fb7160366200064f60201b60201c565b620003f37395ac8dc9247f36aae07552a3a887a5bf3fd7207d60076200064f60201b60201c565b6200041a739eb304992d81d5060c3f348bee740771886de47260146200064f60201b60201c565b6200044173a45a8332200f96eae9e1f0cfe601f25d94745469606c6200064f60201b60201c565b6200046873a45a8332200f96eae9e1f0cfe601f25d9474546960546200064f60201b60201c565b6200048f73a851c7e0690267fccd3f7b04b88b40e376ccd32160456200064f60201b60201c565b620004b673bc1565e11b097d37ee1ecd37f28162427bf6b6ae60406200064f60201b60201c565b620004dd73c3d7063ee9d75e4f082b897b38025040a4dbb573605c6200064f60201b60201c565b6200050473c74fe043a56f29b647033e3cd1a8044b3e79b15160436200064f60201b60201c565b6200052b73ed46433fd22b9302d7401df0844cb8d2dbc30ef160106200064f60201b60201c565b6200055273f08aba4cfa1bbbda000ad434ffa25993a19d78d2604d6200064f60201b60201c565b620005797399bacb844bc114f76cb020f2ed83dcb5ae6a02ce60636200064f60201b60201c565b505062001951565b600033905090565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006718282604051806020016040528060008152506200067560201b60201c565b5050565b620006878383620006e360201b60201c565b6200069c6000848484620008c960201b60201c565b620006de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d59062001434565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074d90620014bc565b60405180910390fd5b620007678162000a8360201b60201c565b15620007aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a19062001456565b60405180910390fd5b620007be6000838362000aef60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200081091906200156a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620008f78473ffffffffffffffffffffffffffffffffffffffff1662000b5f60201b620017ed1760201c565b1562000a76578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620009296200058160201b60201c565b8786866040518563ffffffff1660e01b81526004016200094d9493929190620013e0565b602060405180830381600087803b1580156200096857600080fd5b505af19250505080156200099c57506040513d601f19601f8201168201806040525081019062000999919062001203565b60015b62000a25573d8060008114620009cf576040519150601f19603f3d011682016040523d82523d6000602084013e620009d4565b606091505b5060008151141562000a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a149062001434565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000a7b565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000aff62000b7260201b60201c565b1562000b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b399062001478565b60405180910390fd5b62000b5a83838362000b8960201b620018001760201c565b505050565b600080823b905060008111915050919050565b6000600b60009054906101000a900460ff16905090565b62000ba183838362000cd060201b620019141760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000bee5762000be88162000cd560201b60201c565b62000c36565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000c355762000c34838262000d1e60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c835762000c7d8162000e9b60201b60201c565b62000ccb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000cca5762000cc9828262000f7760201b60201c565b5b5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000d38846200100360201b62000dc81760201c565b62000d449190620015c7565b905060006007600084815260200190815260200160002054905081811462000e2a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000eb19190620015c7565b905060006009600084815260200190815260200160002054905060006008838154811062000ee45762000ee36200179b565b5b90600052602060002001549050806008838154811062000f095762000f086200179b565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000f5b5762000f5a6200176c565b5b6001900381819060005260206000200160009055905550505050565b600062000f8f836200100360201b62000dc81760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001077576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200106e906200149a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b828054620010cc90620016a2565b90600052602060002090601f016020900481019282620010f057600085556200113c565b82601f106200110b57805160ff19168380011785556200113c565b828001600101855582156200113c579182015b828111156200113b5782518255916020019190600101906200111e565b5b5090506200114b91906200114f565b5090565b5b808211156200116a57600081600090555060010162001150565b5090565b6000620011856200117f8462001507565b620014de565b905082815260208101848484011115620011a457620011a3620017fe565b5b620011b18482856200166c565b509392505050565b600081519050620011ca8162001937565b92915050565b600082601f830112620011e857620011e7620017f9565b5b8151620011fa8482602086016200116e565b91505092915050565b6000602082840312156200121c576200121b62001808565b5b60006200122c84828501620011b9565b91505092915050565b600080604083850312156200124f576200124e62001808565b5b600083015167ffffffffffffffff81111562001270576200126f62001803565b5b6200127e85828601620011d0565b925050602083015167ffffffffffffffff811115620012a257620012a162001803565b5b620012b085828601620011d0565b9150509250929050565b620012c58162001602565b82525050565b6000620012d8826200153d565b620012e4818562001548565b9350620012f68185602086016200166c565b62001301816200180d565b840191505092915050565b60006200131b60328362001559565b915062001328826200181e565b604082019050919050565b600062001342601c8362001559565b91506200134f826200186d565b602082019050919050565b60006200136960108362001559565b9150620013768262001896565b602082019050919050565b600062001390602a8362001559565b91506200139d82620018bf565b604082019050919050565b6000620013b760208362001559565b9150620013c4826200190e565b602082019050919050565b620013da8162001662565b82525050565b6000608082019050620013f76000830187620012ba565b620014066020830186620012ba565b620014156040830185620013cf565b8181036060830152620014298184620012cb565b905095945050505050565b600060208201905081810360008301526200144f816200130c565b9050919050565b60006020820190508181036000830152620014718162001333565b9050919050565b6000602082019050818103600083015262001493816200135a565b9050919050565b60006020820190508181036000830152620014b58162001381565b9050919050565b60006020820190508181036000830152620014d781620013a8565b9050919050565b6000620014ea620014fd565b9050620014f88282620016d8565b919050565b6000604051905090565b600067ffffffffffffffff821115620015255762001524620017ca565b5b62001530826200180d565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620015778262001662565b9150620015848362001662565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620015bc57620015bb6200170e565b5b828201905092915050565b6000620015d48262001662565b9150620015e18362001662565b925082821015620015f757620015f66200170e565b5b828203905092915050565b60006200160f8262001642565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200168c5780820151818401526020810190506200166f565b838111156200169c576000848401525b50505050565b60006002820490506001821680620016bb57607f821691505b60208210811415620016d257620016d16200173d565b5b50919050565b620016e3826200180d565b810181811067ffffffffffffffff82111715620017055762001704620017ca565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b620019428162001616565b81146200194e57600080fd5b50565b61448a80620019616000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f7578063a144819411610095578063da95da6611610064578063da95da6614610684578063e086e5ec146106a0578063e985e9c5146106b7578063f2fde38b146106f4576101cd565b8063a1448194146105cc578063a22cb465146105f5578063b88d4fde1461061e578063c87b56dd14610647576101cd565b80638456cb59116100d15780638456cb59146105365780638da5cb5b1461054d57806395d89b4114610578578063986c020e146105a3576101cd565b806370a08231146104b9578063715018a6146104f65780637696e0881461050d576101cd565b80633f4ba83a1161016f57806355f804b31161013e57806355f804b3146103eb5780635c975abb146104145780636352211e1461043f5780636619ecc51461047c576101cd565b80633f4ba83a1461033157806342842e0e14610348578063438b6300146103715780634f6ccce7146103ae576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632f745c59146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061300d565b61071d565b60405161020691906136a8565b60405180910390f35b34801561021b57600080fd5b5061022461072f565b60405161023191906136c3565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906130b0565b6107c1565b60405161026e919061361f565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612fcd565b610846565b005b3480156102ac57600080fd5b506102b561095e565b6040516102c29190613985565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190612eb7565b61096b565b005b34801561030057600080fd5b5061031b60048036038101906103169190612fcd565b6109cb565b6040516103289190613985565b60405180910390f35b34801561033d57600080fd5b50610346610a70565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612eb7565b610af6565b005b34801561037d57600080fd5b5061039860048036038101906103939190612e4a565b610b16565b6040516103a59190613686565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d091906130b0565b610bc5565b6040516103e29190613985565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190613067565b610c36565b005b34801561042057600080fd5b50610429610ccc565b60405161043691906136a8565b60405180910390f35b34801561044b57600080fd5b50610466600480360381019061046191906130b0565b610ce3565b604051610473919061361f565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061311d565b610d95565b6040516104b0919061361f565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190612e4a565b610dc8565b6040516104ed9190613985565b60405180910390f35b34801561050257600080fd5b5061050b610e80565b005b34801561051957600080fd5b50610534600480360381019061052f91906130dd565b610f08565b005b34801561054257600080fd5b5061054b610f96565b005b34801561055957600080fd5b5061056261101c565b60405161056f919061361f565b60405180910390f35b34801561058457600080fd5b5061058d611046565b60405161059a91906136c3565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c5919061314a565b6110d8565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190612fcd565b6111e1565b005b34801561060157600080fd5b5061061c60048036038101906106179190612f8d565b6112a5565b005b34801561062a57600080fd5b5061064560048036038101906106409190612f0a565b6112bb565b005b34801561065357600080fd5b5061066e600480360381019061066991906130b0565b61131d565b60405161067b91906136c3565b60405180910390f35b61069e6004803603810190610699919061311d565b611357565b005b3480156106ac57600080fd5b506106b561159c565b005b3480156106c357600080fd5b506106de60048036038101906106d99190612e77565b611661565b6040516106eb91906136a8565b60405180910390f35b34801561070057600080fd5b5061071b60048036038101906107169190612e4a565b6116f5565b005b600061072882611919565b9050919050565b60606000805461073e90613c51565b80601f016020809104026020016040519081016040528092919081815260200182805461076a90613c51565b80156107b75780601f1061078c576101008083540402835291602001916107b7565b820191906000526020600020905b81548152906001019060200180831161079a57829003601f168201915b5050505050905090565b60006107cc82611993565b61080b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610802906138a5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085182610ce3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990613905565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108e16119ff565b73ffffffffffffffffffffffffffffffffffffffff161480610910575061090f8161090a6119ff565b611661565b5b61094f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094690613825565b60405180910390fd5b6109598383611a07565b505050565b6000600880549050905090565b61097c6109766119ff565b82611ac0565b6109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b290613925565b60405180910390fd5b6109c6838383611b9e565b505050565b60006109d683610dc8565b8210610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e90613705565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610a786119ff565b73ffffffffffffffffffffffffffffffffffffffff16610a9661101c565b73ffffffffffffffffffffffffffffffffffffffff1614610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae3906138c5565b60405180910390fd5b610af4611dfa565b565b610b11838383604051806020016040528060008152506112bb565b505050565b60606000610b2383610dc8565b905060008167ffffffffffffffff811115610b4157610b40613e19565b5b604051908082528060200260200182016040528015610b6f5781602001602082028036833780820191505090505b50905060005b82811015610bba57610b8785826109cb565b828281518110610b9a57610b99613dea565b5b602002602001018181525050600181610bb39190613abe565b9050610b75565b508092505050919050565b6000610bcf61095e565b8210610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0790613945565b60405180910390fd5b60088281548110610c2457610c23613dea565b5b90600052602060002001549050919050565b610c3e6119ff565b73ffffffffffffffffffffffffffffffffffffffff16610c5c61101c565b73ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca9906138c5565b60405180910390fd5b80600c9080519060200190610cc8929190612c49565b5050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390613865565b60405180910390fd5b80915050919050565b60116020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613845565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e886119ff565b73ffffffffffffffffffffffffffffffffffffffff16610ea661101c565b73ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef3906138c5565b60405180910390fd5b610f066000611e9c565b565b610f106119ff565b73ffffffffffffffffffffffffffffffffffffffff16610f2e61101c565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b906138c5565b60405180910390fd5b81600d8190555080600e819055505050565b610f9e6119ff565b73ffffffffffffffffffffffffffffffffffffffff16610fbc61101c565b73ffffffffffffffffffffffffffffffffffffffff1614611012576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611009906138c5565b60405180910390fd5b61101a611f62565b565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461105590613c51565b80601f016020809104026020016040519081016040528092919081815260200182805461108190613c51565b80156110ce5780601f106110a3576101008083540402835291602001916110ce565b820191906000526020600020905b8154815290600101906020018083116110b157829003601f168201915b5050505050905090565b6110e06119ff565b73ffffffffffffffffffffffffffffffffffffffff166110fe61101c565b73ffffffffffffffffffffffffffffffffffffffff1614611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b906138c5565b60405180910390fd5b600061115e61095e565b9050601060009054906101000a900461ffff1661ffff166001826111829190613abe565b111561118d57600080fd5b6000601160008563ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506111db8184612005565b50505050565b6111e96119ff565b73ffffffffffffffffffffffffffffffffffffffff1661120761101c565b73ffffffffffffffffffffffffffffffffffffffff161461125d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611254906138c5565b60405180910390fd5b600061126761095e565b9050601060009054906101000a900461ffff1661ffff1660018261128b9190613abe565b111561129657600080fd5b6112a08383612005565b505050565b6112b76112b06119ff565b8383612023565b5050565b6112cc6112c66119ff565b83611ac0565b61130b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130290613925565b60405180910390fd5b61131784848484612190565b50505050565b60606113276121ec565b6113308361227e565b6040516020016113419291906135f0565b6040516020818303038152906040529050919050565b61135f610ccc565b1561139f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139690613805565b60405180910390fd5b600d543410156113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db90613965565b60405180910390fd5b601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601160008363ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90613785565b60405180910390fd5b60006114bd61095e565b9050601060009054906101000a900461ffff1661ffff166001826114e19190613abe565b11156114ec57600080fd5b33601160008463ffffffff1663ffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f56b7bb8ead01fecfd3ce9511be22132f044fea58a0ad923f592fa0928c3064ad8360405161159091906139a0565b60405180910390a25050565b6115a46119ff565b73ffffffffffffffffffffffffffffffffffffffff166115c261101c565b73ffffffffffffffffffffffffffffffffffffffff1614611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f906138c5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561165e573d6000803e3d6000fd5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116fd6119ff565b73ffffffffffffffffffffffffffffffffffffffff1661171b61101c565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611768906138c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890613745565b60405180910390fd5b6117ea81611e9c565b50565b600080823b905060008111915050919050565b61180b838383611914565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561184e57611849816123df565b61188d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461188c5761188b8382612428565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d0576118cb81612595565b61190f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461190e5761190d8282612666565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061198c575061198b826126e5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a7a83610ce3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611acb82611993565b611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b01906137e5565b60405180910390fd5b6000611b1583610ce3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b8457508373ffffffffffffffffffffffffffffffffffffffff16611b6c846107c1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b955750611b948185611661565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bbe82610ce3565b73ffffffffffffffffffffffffffffffffffffffff1614611c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0b906138e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b906137a5565b60405180910390fd5b611c8f8383836127c7565b611c9a600082611a07565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cea9190613b45565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d419190613abe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e02610ccc565b611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e38906136e5565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611e856119ff565b604051611e92919061361f565b60405180910390a1565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f6a610ccc565b15611faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa190613805565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611fee6119ff565b604051611ffb919061361f565b60405180910390a1565b61201f82826040518060200160405280600081525061281f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612092576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612089906137c5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161218391906136a8565b60405180910390a3505050565b61219b848484611b9e565b6121a78484848461287a565b6121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90613725565b60405180910390fd5b50505050565b6060600c80546121fb90613c51565b80601f016020809104026020016040519081016040528092919081815260200182805461222790613c51565b80156122745780601f1061224957610100808354040283529160200191612274565b820191906000526020600020905b81548152906001019060200180831161225757829003601f168201915b5050505050905090565b606060008214156122c6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123da565b600082905060005b600082146122f85780806122e190613cb4565b915050600a826122f19190613b14565b91506122ce565b60008167ffffffffffffffff81111561231457612313613e19565b5b6040519080825280601f01601f1916602001820160405280156123465781602001600182028036833780820191505090505b5090505b600085146123d35760018261235f9190613b45565b9150600a8561236e9190613cfd565b603061237a9190613abe565b60f81b8183815181106123905761238f613dea565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123cc9190613b14565b945061234a565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161243584610dc8565b61243f9190613b45565b9050600060076000848152602001908152602001600020549050818114612524576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506125a99190613b45565b90506000600960008481526020019081526020016000205490506000600883815481106125d9576125d8613dea565b5b9060005260206000200154905080600883815481106125fb576125fa613dea565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061264a57612649613dbb565b5b6001900381819060005260206000200160009055905550505050565b600061267183610dc8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127b057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127c057506127bf82612a11565b5b9050919050565b6127cf610ccc565b1561280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690613805565b60405180910390fd5b61281a838383611800565b505050565b6128298383612a7b565b612836600084848461287a565b612875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286c90613725565b60405180910390fd5b505050565b600061289b8473ffffffffffffffffffffffffffffffffffffffff166117ed565b15612a04578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128c46119ff565b8786866040518563ffffffff1660e01b81526004016128e6949392919061363a565b602060405180830381600087803b15801561290057600080fd5b505af192505050801561293157506040513d601f19601f8201168201806040525081019061292e919061303a565b60015b6129b4573d8060008114612961576040519150601f19603f3d011682016040523d82523d6000602084013e612966565b606091505b506000815114156129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a390613725565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a09565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae290613885565b60405180910390fd5b612af481611993565b15612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90613765565b60405180910390fd5b612b40600083836127c7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b909190613abe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612c5590613c51565b90600052602060002090601f016020900481019282612c775760008555612cbe565b82601f10612c9057805160ff1916838001178555612cbe565b82800160010185558215612cbe579182015b82811115612cbd578251825591602001919060010190612ca2565b5b509050612ccb9190612ccf565b5090565b5b80821115612ce8576000816000905550600101612cd0565b5090565b6000612cff612cfa846139e0565b6139bb565b905082815260208101848484011115612d1b57612d1a613e4d565b5b612d26848285613c0f565b509392505050565b6000612d41612d3c84613a11565b6139bb565b905082815260208101848484011115612d5d57612d5c613e4d565b5b612d68848285613c0f565b509392505050565b600081359050612d7f816143e1565b92915050565b600081359050612d94816143f8565b92915050565b600081359050612da98161440f565b92915050565b600081519050612dbe8161440f565b92915050565b600082601f830112612dd957612dd8613e48565b5b8135612de9848260208601612cec565b91505092915050565b600082601f830112612e0757612e06613e48565b5b8135612e17848260208601612d2e565b91505092915050565b600081359050612e2f81614426565b92915050565b600081359050612e448161443d565b92915050565b600060208284031215612e6057612e5f613e57565b5b6000612e6e84828501612d70565b91505092915050565b60008060408385031215612e8e57612e8d613e57565b5b6000612e9c85828601612d70565b9250506020612ead85828601612d70565b9150509250929050565b600080600060608486031215612ed057612ecf613e57565b5b6000612ede86828701612d70565b9350506020612eef86828701612d70565b9250506040612f0086828701612e20565b9150509250925092565b60008060008060808587031215612f2457612f23613e57565b5b6000612f3287828801612d70565b9450506020612f4387828801612d70565b9350506040612f5487828801612e20565b925050606085013567ffffffffffffffff811115612f7557612f74613e52565b5b612f8187828801612dc4565b91505092959194509250565b60008060408385031215612fa457612fa3613e57565b5b6000612fb285828601612d70565b9250506020612fc385828601612d85565b9150509250929050565b60008060408385031215612fe457612fe3613e57565b5b6000612ff285828601612d70565b925050602061300385828601612e20565b9150509250929050565b60006020828403121561302357613022613e57565b5b600061303184828501612d9a565b91505092915050565b6000602082840312156130505761304f613e57565b5b600061305e84828501612daf565b91505092915050565b60006020828403121561307d5761307c613e57565b5b600082013567ffffffffffffffff81111561309b5761309a613e52565b5b6130a784828501612df2565b91505092915050565b6000602082840312156130c6576130c5613e57565b5b60006130d484828501612e20565b91505092915050565b600080604083850312156130f4576130f3613e57565b5b600061310285828601612e20565b925050602061311385828601612e20565b9150509250929050565b60006020828403121561313357613132613e57565b5b600061314184828501612e35565b91505092915050565b6000806040838503121561316157613160613e57565b5b600061316f85828601612e35565b925050602061318085828601612e20565b9150509250929050565b600061319683836135c3565b60208301905092915050565b6131ab81613b79565b82525050565b60006131bc82613a52565b6131c68185613a80565b93506131d183613a42565b8060005b838110156132025781516131e9888261318a565b97506131f483613a73565b9250506001810190506131d5565b5085935050505092915050565b61321881613b8b565b82525050565b600061322982613a5d565b6132338185613a91565b9350613243818560208601613c1e565b61324c81613e5c565b840191505092915050565b600061326282613a68565b61326c8185613aa2565b935061327c818560208601613c1e565b61328581613e5c565b840191505092915050565b600061329b82613a68565b6132a58185613ab3565b93506132b5818560208601613c1e565b80840191505092915050565b60006132ce601483613aa2565b91506132d982613e6d565b602082019050919050565b60006132f1602b83613aa2565b91506132fc82613e96565b604082019050919050565b6000613314603283613aa2565b915061331f82613ee5565b604082019050919050565b6000613337602683613aa2565b915061334282613f34565b604082019050919050565b600061335a601c83613aa2565b915061336582613f83565b602082019050919050565b600061337d601483613aa2565b915061338882613fac565b602082019050919050565b60006133a0602483613aa2565b91506133ab82613fd5565b604082019050919050565b60006133c3601983613aa2565b91506133ce82614024565b602082019050919050565b60006133e6602c83613aa2565b91506133f18261404d565b604082019050919050565b6000613409601083613aa2565b91506134148261409c565b602082019050919050565b600061342c603883613aa2565b9150613437826140c5565b604082019050919050565b600061344f602a83613aa2565b915061345a82614114565b604082019050919050565b6000613472602983613aa2565b915061347d82614163565b604082019050919050565b6000613495602083613aa2565b91506134a0826141b2565b602082019050919050565b60006134b8602c83613aa2565b91506134c3826141db565b604082019050919050565b60006134db600583613ab3565b91506134e68261422a565b600582019050919050565b60006134fe602083613aa2565b915061350982614253565b602082019050919050565b6000613521602983613aa2565b915061352c8261427c565b604082019050919050565b6000613544602183613aa2565b915061354f826142cb565b604082019050919050565b6000613567603183613aa2565b91506135728261431a565b604082019050919050565b600061358a602c83613aa2565b915061359582614369565b604082019050919050565b60006135ad600f83613aa2565b91506135b8826143b8565b602082019050919050565b6135cc81613be3565b82525050565b6135db81613be3565b82525050565b6135ea81613bfd565b82525050565b60006135fc8285613290565b91506136088284613290565b9150613613826134ce565b91508190509392505050565b600060208201905061363460008301846131a2565b92915050565b600060808201905061364f60008301876131a2565b61365c60208301866131a2565b61366960408301856135d2565b818103606083015261367b818461321e565b905095945050505050565b600060208201905081810360008301526136a081846131b1565b905092915050565b60006020820190506136bd600083018461320f565b92915050565b600060208201905081810360008301526136dd8184613257565b905092915050565b600060208201905081810360008301526136fe816132c1565b9050919050565b6000602082019050818103600083015261371e816132e4565b9050919050565b6000602082019050818103600083015261373e81613307565b9050919050565b6000602082019050818103600083015261375e8161332a565b9050919050565b6000602082019050818103600083015261377e8161334d565b9050919050565b6000602082019050818103600083015261379e81613370565b9050919050565b600060208201905081810360008301526137be81613393565b9050919050565b600060208201905081810360008301526137de816133b6565b9050919050565b600060208201905081810360008301526137fe816133d9565b9050919050565b6000602082019050818103600083015261381e816133fc565b9050919050565b6000602082019050818103600083015261383e8161341f565b9050919050565b6000602082019050818103600083015261385e81613442565b9050919050565b6000602082019050818103600083015261387e81613465565b9050919050565b6000602082019050818103600083015261389e81613488565b9050919050565b600060208201905081810360008301526138be816134ab565b9050919050565b600060208201905081810360008301526138de816134f1565b9050919050565b600060208201905081810360008301526138fe81613514565b9050919050565b6000602082019050818103600083015261391e81613537565b9050919050565b6000602082019050818103600083015261393e8161355a565b9050919050565b6000602082019050818103600083015261395e8161357d565b9050919050565b6000602082019050818103600083015261397e816135a0565b9050919050565b600060208201905061399a60008301846135d2565b92915050565b60006020820190506139b560008301846135e1565b92915050565b60006139c56139d6565b90506139d18282613c83565b919050565b6000604051905090565b600067ffffffffffffffff8211156139fb576139fa613e19565b5b613a0482613e5c565b9050602081019050919050565b600067ffffffffffffffff821115613a2c57613a2b613e19565b5b613a3582613e5c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ac982613be3565b9150613ad483613be3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b0957613b08613d2e565b5b828201905092915050565b6000613b1f82613be3565b9150613b2a83613be3565b925082613b3a57613b39613d5d565b5b828204905092915050565b6000613b5082613be3565b9150613b5b83613be3565b925082821015613b6e57613b6d613d2e565b5b828203905092915050565b6000613b8482613bc3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b6000613c0882613bed565b9050919050565b82818337600083830152505050565b60005b83811015613c3c578082015181840152602081019050613c21565b83811115613c4b576000848401525b50505050565b60006002820490506001821680613c6957607f821691505b60208210811415613c7d57613c7c613d8c565b5b50919050565b613c8c82613e5c565b810181811067ffffffffffffffff82111715613cab57613caa613e19565b5b80604052505050565b6000613cbf82613be3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cf257613cf1613d2e565b5b600182019050919050565b6000613d0882613be3565b9150613d1383613be3565b925082613d2357613d22613d5d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f506f6f6c20616c726561647920636c61696d6564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676874204554480000000000000000000000000000000000600082015250565b6143ea81613b79565b81146143f557600080fd5b50565b61440181613b8b565b811461440c57600080fd5b50565b61441881613b97565b811461442357600080fd5b50565b61442f81613be3565b811461443a57600080fd5b50565b61444681613bed565b811461445157600080fd5b5056fea26469706673582212205f425dbd5aed35036b742a6ee720425877f4724b51f5c31db6cfadde4efaa3a064736f6c63430008070033697066733a2f2f516d5742524e7936394e546b516352695858594c68327a746846656b664b484d686e64667632615a4172773550322f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008575446426f61747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045754464200000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c806370a08231116100f7578063a144819411610095578063da95da6611610064578063da95da6614610684578063e086e5ec146106a0578063e985e9c5146106b7578063f2fde38b146106f4576101cd565b8063a1448194146105cc578063a22cb465146105f5578063b88d4fde1461061e578063c87b56dd14610647576101cd565b80638456cb59116100d15780638456cb59146105365780638da5cb5b1461054d57806395d89b4114610578578063986c020e146105a3576101cd565b806370a08231146104b9578063715018a6146104f65780637696e0881461050d576101cd565b80633f4ba83a1161016f57806355f804b31161013e57806355f804b3146103eb5780635c975abb146104145780636352211e1461043f5780636619ecc51461047c576101cd565b80633f4ba83a1461033157806342842e0e14610348578063438b6300146103715780634f6ccce7146103ae576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632f745c59146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061300d565b61071d565b60405161020691906136a8565b60405180910390f35b34801561021b57600080fd5b5061022461072f565b60405161023191906136c3565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906130b0565b6107c1565b60405161026e919061361f565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612fcd565b610846565b005b3480156102ac57600080fd5b506102b561095e565b6040516102c29190613985565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190612eb7565b61096b565b005b34801561030057600080fd5b5061031b60048036038101906103169190612fcd565b6109cb565b6040516103289190613985565b60405180910390f35b34801561033d57600080fd5b50610346610a70565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612eb7565b610af6565b005b34801561037d57600080fd5b5061039860048036038101906103939190612e4a565b610b16565b6040516103a59190613686565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d091906130b0565b610bc5565b6040516103e29190613985565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190613067565b610c36565b005b34801561042057600080fd5b50610429610ccc565b60405161043691906136a8565b60405180910390f35b34801561044b57600080fd5b50610466600480360381019061046191906130b0565b610ce3565b604051610473919061361f565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061311d565b610d95565b6040516104b0919061361f565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190612e4a565b610dc8565b6040516104ed9190613985565b60405180910390f35b34801561050257600080fd5b5061050b610e80565b005b34801561051957600080fd5b50610534600480360381019061052f91906130dd565b610f08565b005b34801561054257600080fd5b5061054b610f96565b005b34801561055957600080fd5b5061056261101c565b60405161056f919061361f565b60405180910390f35b34801561058457600080fd5b5061058d611046565b60405161059a91906136c3565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c5919061314a565b6110d8565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190612fcd565b6111e1565b005b34801561060157600080fd5b5061061c60048036038101906106179190612f8d565b6112a5565b005b34801561062a57600080fd5b5061064560048036038101906106409190612f0a565b6112bb565b005b34801561065357600080fd5b5061066e600480360381019061066991906130b0565b61131d565b60405161067b91906136c3565b60405180910390f35b61069e6004803603810190610699919061311d565b611357565b005b3480156106ac57600080fd5b506106b561159c565b005b3480156106c357600080fd5b506106de60048036038101906106d99190612e77565b611661565b6040516106eb91906136a8565b60405180910390f35b34801561070057600080fd5b5061071b60048036038101906107169190612e4a565b6116f5565b005b600061072882611919565b9050919050565b60606000805461073e90613c51565b80601f016020809104026020016040519081016040528092919081815260200182805461076a90613c51565b80156107b75780601f1061078c576101008083540402835291602001916107b7565b820191906000526020600020905b81548152906001019060200180831161079a57829003601f168201915b5050505050905090565b60006107cc82611993565b61080b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610802906138a5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085182610ce3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990613905565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108e16119ff565b73ffffffffffffffffffffffffffffffffffffffff161480610910575061090f8161090a6119ff565b611661565b5b61094f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094690613825565b60405180910390fd5b6109598383611a07565b505050565b6000600880549050905090565b61097c6109766119ff565b82611ac0565b6109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b290613925565b60405180910390fd5b6109c6838383611b9e565b505050565b60006109d683610dc8565b8210610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e90613705565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610a786119ff565b73ffffffffffffffffffffffffffffffffffffffff16610a9661101c565b73ffffffffffffffffffffffffffffffffffffffff1614610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae3906138c5565b60405180910390fd5b610af4611dfa565b565b610b11838383604051806020016040528060008152506112bb565b505050565b60606000610b2383610dc8565b905060008167ffffffffffffffff811115610b4157610b40613e19565b5b604051908082528060200260200182016040528015610b6f5781602001602082028036833780820191505090505b50905060005b82811015610bba57610b8785826109cb565b828281518110610b9a57610b99613dea565b5b602002602001018181525050600181610bb39190613abe565b9050610b75565b508092505050919050565b6000610bcf61095e565b8210610c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0790613945565b60405180910390fd5b60088281548110610c2457610c23613dea565b5b90600052602060002001549050919050565b610c3e6119ff565b73ffffffffffffffffffffffffffffffffffffffff16610c5c61101c565b73ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca9906138c5565b60405180910390fd5b80600c9080519060200190610cc8929190612c49565b5050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8390613865565b60405180910390fd5b80915050919050565b60116020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613845565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e886119ff565b73ffffffffffffffffffffffffffffffffffffffff16610ea661101c565b73ffffffffffffffffffffffffffffffffffffffff1614610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef3906138c5565b60405180910390fd5b610f066000611e9c565b565b610f106119ff565b73ffffffffffffffffffffffffffffffffffffffff16610f2e61101c565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b906138c5565b60405180910390fd5b81600d8190555080600e819055505050565b610f9e6119ff565b73ffffffffffffffffffffffffffffffffffffffff16610fbc61101c565b73ffffffffffffffffffffffffffffffffffffffff1614611012576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611009906138c5565b60405180910390fd5b61101a611f62565b565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461105590613c51565b80601f016020809104026020016040519081016040528092919081815260200182805461108190613c51565b80156110ce5780601f106110a3576101008083540402835291602001916110ce565b820191906000526020600020905b8154815290600101906020018083116110b157829003601f168201915b5050505050905090565b6110e06119ff565b73ffffffffffffffffffffffffffffffffffffffff166110fe61101c565b73ffffffffffffffffffffffffffffffffffffffff1614611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b906138c5565b60405180910390fd5b600061115e61095e565b9050601060009054906101000a900461ffff1661ffff166001826111829190613abe565b111561118d57600080fd5b6000601160008563ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506111db8184612005565b50505050565b6111e96119ff565b73ffffffffffffffffffffffffffffffffffffffff1661120761101c565b73ffffffffffffffffffffffffffffffffffffffff161461125d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611254906138c5565b60405180910390fd5b600061126761095e565b9050601060009054906101000a900461ffff1661ffff1660018261128b9190613abe565b111561129657600080fd5b6112a08383612005565b505050565b6112b76112b06119ff565b8383612023565b5050565b6112cc6112c66119ff565b83611ac0565b61130b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130290613925565b60405180910390fd5b61131784848484612190565b50505050565b60606113276121ec565b6113308361227e565b6040516020016113419291906135f0565b6040516020818303038152906040529050919050565b61135f610ccc565b1561139f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139690613805565b60405180910390fd5b600d543410156113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db90613965565b60405180910390fd5b601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601160008363ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90613785565b60405180910390fd5b60006114bd61095e565b9050601060009054906101000a900461ffff1661ffff166001826114e19190613abe565b11156114ec57600080fd5b33601160008463ffffffff1663ffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f56b7bb8ead01fecfd3ce9511be22132f044fea58a0ad923f592fa0928c3064ad8360405161159091906139a0565b60405180910390a25050565b6115a46119ff565b73ffffffffffffffffffffffffffffffffffffffff166115c261101c565b73ffffffffffffffffffffffffffffffffffffffff1614611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f906138c5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561165e573d6000803e3d6000fd5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116fd6119ff565b73ffffffffffffffffffffffffffffffffffffffff1661171b61101c565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611768906138c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890613745565b60405180910390fd5b6117ea81611e9c565b50565b600080823b905060008111915050919050565b61180b838383611914565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561184e57611849816123df565b61188d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461188c5761188b8382612428565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d0576118cb81612595565b61190f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461190e5761190d8282612666565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061198c575061198b826126e5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a7a83610ce3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611acb82611993565b611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b01906137e5565b60405180910390fd5b6000611b1583610ce3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b8457508373ffffffffffffffffffffffffffffffffffffffff16611b6c846107c1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b955750611b948185611661565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bbe82610ce3565b73ffffffffffffffffffffffffffffffffffffffff1614611c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0b906138e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b906137a5565b60405180910390fd5b611c8f8383836127c7565b611c9a600082611a07565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cea9190613b45565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d419190613abe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e02610ccc565b611e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e38906136e5565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611e856119ff565b604051611e92919061361f565b60405180910390a1565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f6a610ccc565b15611faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa190613805565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611fee6119ff565b604051611ffb919061361f565b60405180910390a1565b61201f82826040518060200160405280600081525061281f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612092576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612089906137c5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161218391906136a8565b60405180910390a3505050565b61219b848484611b9e565b6121a78484848461287a565b6121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90613725565b60405180910390fd5b50505050565b6060600c80546121fb90613c51565b80601f016020809104026020016040519081016040528092919081815260200182805461222790613c51565b80156122745780601f1061224957610100808354040283529160200191612274565b820191906000526020600020905b81548152906001019060200180831161225757829003601f168201915b5050505050905090565b606060008214156122c6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123da565b600082905060005b600082146122f85780806122e190613cb4565b915050600a826122f19190613b14565b91506122ce565b60008167ffffffffffffffff81111561231457612313613e19565b5b6040519080825280601f01601f1916602001820160405280156123465781602001600182028036833780820191505090505b5090505b600085146123d35760018261235f9190613b45565b9150600a8561236e9190613cfd565b603061237a9190613abe565b60f81b8183815181106123905761238f613dea565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123cc9190613b14565b945061234a565b8093505050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161243584610dc8565b61243f9190613b45565b9050600060076000848152602001908152602001600020549050818114612524576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506125a99190613b45565b90506000600960008481526020019081526020016000205490506000600883815481106125d9576125d8613dea565b5b9060005260206000200154905080600883815481106125fb576125fa613dea565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061264a57612649613dbb565b5b6001900381819060005260206000200160009055905550505050565b600061267183610dc8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127b057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127c057506127bf82612a11565b5b9050919050565b6127cf610ccc565b1561280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690613805565b60405180910390fd5b61281a838383611800565b505050565b6128298383612a7b565b612836600084848461287a565b612875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286c90613725565b60405180910390fd5b505050565b600061289b8473ffffffffffffffffffffffffffffffffffffffff166117ed565b15612a04578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128c46119ff565b8786866040518563ffffffff1660e01b81526004016128e6949392919061363a565b602060405180830381600087803b15801561290057600080fd5b505af192505050801561293157506040513d601f19601f8201168201806040525081019061292e919061303a565b60015b6129b4573d8060008114612961576040519150601f19603f3d011682016040523d82523d6000602084013e612966565b606091505b506000815114156129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a390613725565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a09565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae290613885565b60405180910390fd5b612af481611993565b15612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90613765565b60405180910390fd5b612b40600083836127c7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b909190613abe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612c5590613c51565b90600052602060002090601f016020900481019282612c775760008555612cbe565b82601f10612c9057805160ff1916838001178555612cbe565b82800160010185558215612cbe579182015b82811115612cbd578251825591602001919060010190612ca2565b5b509050612ccb9190612ccf565b5090565b5b80821115612ce8576000816000905550600101612cd0565b5090565b6000612cff612cfa846139e0565b6139bb565b905082815260208101848484011115612d1b57612d1a613e4d565b5b612d26848285613c0f565b509392505050565b6000612d41612d3c84613a11565b6139bb565b905082815260208101848484011115612d5d57612d5c613e4d565b5b612d68848285613c0f565b509392505050565b600081359050612d7f816143e1565b92915050565b600081359050612d94816143f8565b92915050565b600081359050612da98161440f565b92915050565b600081519050612dbe8161440f565b92915050565b600082601f830112612dd957612dd8613e48565b5b8135612de9848260208601612cec565b91505092915050565b600082601f830112612e0757612e06613e48565b5b8135612e17848260208601612d2e565b91505092915050565b600081359050612e2f81614426565b92915050565b600081359050612e448161443d565b92915050565b600060208284031215612e6057612e5f613e57565b5b6000612e6e84828501612d70565b91505092915050565b60008060408385031215612e8e57612e8d613e57565b5b6000612e9c85828601612d70565b9250506020612ead85828601612d70565b9150509250929050565b600080600060608486031215612ed057612ecf613e57565b5b6000612ede86828701612d70565b9350506020612eef86828701612d70565b9250506040612f0086828701612e20565b9150509250925092565b60008060008060808587031215612f2457612f23613e57565b5b6000612f3287828801612d70565b9450506020612f4387828801612d70565b9350506040612f5487828801612e20565b925050606085013567ffffffffffffffff811115612f7557612f74613e52565b5b612f8187828801612dc4565b91505092959194509250565b60008060408385031215612fa457612fa3613e57565b5b6000612fb285828601612d70565b9250506020612fc385828601612d85565b9150509250929050565b60008060408385031215612fe457612fe3613e57565b5b6000612ff285828601612d70565b925050602061300385828601612e20565b9150509250929050565b60006020828403121561302357613022613e57565b5b600061303184828501612d9a565b91505092915050565b6000602082840312156130505761304f613e57565b5b600061305e84828501612daf565b91505092915050565b60006020828403121561307d5761307c613e57565b5b600082013567ffffffffffffffff81111561309b5761309a613e52565b5b6130a784828501612df2565b91505092915050565b6000602082840312156130c6576130c5613e57565b5b60006130d484828501612e20565b91505092915050565b600080604083850312156130f4576130f3613e57565b5b600061310285828601612e20565b925050602061311385828601612e20565b9150509250929050565b60006020828403121561313357613132613e57565b5b600061314184828501612e35565b91505092915050565b6000806040838503121561316157613160613e57565b5b600061316f85828601612e35565b925050602061318085828601612e20565b9150509250929050565b600061319683836135c3565b60208301905092915050565b6131ab81613b79565b82525050565b60006131bc82613a52565b6131c68185613a80565b93506131d183613a42565b8060005b838110156132025781516131e9888261318a565b97506131f483613a73565b9250506001810190506131d5565b5085935050505092915050565b61321881613b8b565b82525050565b600061322982613a5d565b6132338185613a91565b9350613243818560208601613c1e565b61324c81613e5c565b840191505092915050565b600061326282613a68565b61326c8185613aa2565b935061327c818560208601613c1e565b61328581613e5c565b840191505092915050565b600061329b82613a68565b6132a58185613ab3565b93506132b5818560208601613c1e565b80840191505092915050565b60006132ce601483613aa2565b91506132d982613e6d565b602082019050919050565b60006132f1602b83613aa2565b91506132fc82613e96565b604082019050919050565b6000613314603283613aa2565b915061331f82613ee5565b604082019050919050565b6000613337602683613aa2565b915061334282613f34565b604082019050919050565b600061335a601c83613aa2565b915061336582613f83565b602082019050919050565b600061337d601483613aa2565b915061338882613fac565b602082019050919050565b60006133a0602483613aa2565b91506133ab82613fd5565b604082019050919050565b60006133c3601983613aa2565b91506133ce82614024565b602082019050919050565b60006133e6602c83613aa2565b91506133f18261404d565b604082019050919050565b6000613409601083613aa2565b91506134148261409c565b602082019050919050565b600061342c603883613aa2565b9150613437826140c5565b604082019050919050565b600061344f602a83613aa2565b915061345a82614114565b604082019050919050565b6000613472602983613aa2565b915061347d82614163565b604082019050919050565b6000613495602083613aa2565b91506134a0826141b2565b602082019050919050565b60006134b8602c83613aa2565b91506134c3826141db565b604082019050919050565b60006134db600583613ab3565b91506134e68261422a565b600582019050919050565b60006134fe602083613aa2565b915061350982614253565b602082019050919050565b6000613521602983613aa2565b915061352c8261427c565b604082019050919050565b6000613544602183613aa2565b915061354f826142cb565b604082019050919050565b6000613567603183613aa2565b91506135728261431a565b604082019050919050565b600061358a602c83613aa2565b915061359582614369565b604082019050919050565b60006135ad600f83613aa2565b91506135b8826143b8565b602082019050919050565b6135cc81613be3565b82525050565b6135db81613be3565b82525050565b6135ea81613bfd565b82525050565b60006135fc8285613290565b91506136088284613290565b9150613613826134ce565b91508190509392505050565b600060208201905061363460008301846131a2565b92915050565b600060808201905061364f60008301876131a2565b61365c60208301866131a2565b61366960408301856135d2565b818103606083015261367b818461321e565b905095945050505050565b600060208201905081810360008301526136a081846131b1565b905092915050565b60006020820190506136bd600083018461320f565b92915050565b600060208201905081810360008301526136dd8184613257565b905092915050565b600060208201905081810360008301526136fe816132c1565b9050919050565b6000602082019050818103600083015261371e816132e4565b9050919050565b6000602082019050818103600083015261373e81613307565b9050919050565b6000602082019050818103600083015261375e8161332a565b9050919050565b6000602082019050818103600083015261377e8161334d565b9050919050565b6000602082019050818103600083015261379e81613370565b9050919050565b600060208201905081810360008301526137be81613393565b9050919050565b600060208201905081810360008301526137de816133b6565b9050919050565b600060208201905081810360008301526137fe816133d9565b9050919050565b6000602082019050818103600083015261381e816133fc565b9050919050565b6000602082019050818103600083015261383e8161341f565b9050919050565b6000602082019050818103600083015261385e81613442565b9050919050565b6000602082019050818103600083015261387e81613465565b9050919050565b6000602082019050818103600083015261389e81613488565b9050919050565b600060208201905081810360008301526138be816134ab565b9050919050565b600060208201905081810360008301526138de816134f1565b9050919050565b600060208201905081810360008301526138fe81613514565b9050919050565b6000602082019050818103600083015261391e81613537565b9050919050565b6000602082019050818103600083015261393e8161355a565b9050919050565b6000602082019050818103600083015261395e8161357d565b9050919050565b6000602082019050818103600083015261397e816135a0565b9050919050565b600060208201905061399a60008301846135d2565b92915050565b60006020820190506139b560008301846135e1565b92915050565b60006139c56139d6565b90506139d18282613c83565b919050565b6000604051905090565b600067ffffffffffffffff8211156139fb576139fa613e19565b5b613a0482613e5c565b9050602081019050919050565b600067ffffffffffffffff821115613a2c57613a2b613e19565b5b613a3582613e5c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ac982613be3565b9150613ad483613be3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b0957613b08613d2e565b5b828201905092915050565b6000613b1f82613be3565b9150613b2a83613be3565b925082613b3a57613b39613d5d565b5b828204905092915050565b6000613b5082613be3565b9150613b5b83613be3565b925082821015613b6e57613b6d613d2e565b5b828203905092915050565b6000613b8482613bc3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b6000613c0882613bed565b9050919050565b82818337600083830152505050565b60005b83811015613c3c578082015181840152602081019050613c21565b83811115613c4b576000848401525b50505050565b60006002820490506001821680613c6957607f821691505b60208210811415613c7d57613c7c613d8c565b5b50919050565b613c8c82613e5c565b810181811067ffffffffffffffff82111715613cab57613caa613e19565b5b80604052505050565b6000613cbf82613be3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cf257613cf1613d2e565b5b600182019050919050565b6000613d0882613be3565b9150613d1383613be3565b925082613d2357613d22613d5d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f506f6f6c20616c726561647920636c61696d6564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676874204554480000000000000000000000000000000000600082015250565b6143ea81613b79565b81146143f557600080fd5b50565b61440181613b8b565b811461440c57600080fd5b50565b61441881613b97565b811461442357600080fd5b50565b61442f81613be3565b811461443a57600080fd5b50565b61444681613bed565b811461445157600080fd5b5056fea26469706673582212205f425dbd5aed35036b742a6ee720425877f4724b51f5c31db6cfadde4efaa3a064736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008575446426f61747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045754464200000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): WTFBoats
Arg [1] : _symbol (string): WTFB
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 575446426f617473000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 5754464200000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
48890:6364:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55086:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28111:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29670:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29193:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43262:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30420:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42930:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52149:59;;;;;;;;;;;;;:::i;:::-;;30830:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53483:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43452:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51984:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6712:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27805:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49489:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27535:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4763:103;;;;;;;;;;;;;:::i;:::-;;53822:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52088:55;;;;;;;;;;;;;:::i;:::-;;4112:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28280:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52728:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53034:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29963:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31086:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54532:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52214:508;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54207:104;;;;;;;;;;;;;:::i;:::-;;30189:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5021:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55086:165;55189:4;55209:36;55233:11;55209:23;:36::i;:::-;55202:43;;55086:165;;;:::o;28111:100::-;28165:13;28198:5;28191:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28111:100;:::o;29670:221::-;29746:7;29774:16;29782:7;29774;:16::i;:::-;29766:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29859:15;:24;29875:7;29859:24;;;;;;;;;;;;;;;;;;;;;29852:31;;29670:221;;;:::o;29193:411::-;29274:13;29290:23;29305:7;29290:14;:23::i;:::-;29274:39;;29338:5;29332:11;;:2;:11;;;;29324:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29432:5;29416:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29441:37;29458:5;29465:12;:10;:12::i;:::-;29441:16;:37::i;:::-;29416:62;29394:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29575:21;29584:2;29588:7;29575:8;:21::i;:::-;29263:341;29193:411;;:::o;43262:113::-;43323:7;43350:10;:17;;;;43343:24;;43262:113;:::o;30420:339::-;30615:41;30634:12;:10;:12::i;:::-;30648:7;30615:18;:41::i;:::-;30607:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30723:28;30733:4;30739:2;30743:7;30723:9;:28::i;:::-;30420:339;;;:::o;42930:256::-;43027:7;43063:23;43080:5;43063:16;:23::i;:::-;43055:5;:31;43047:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43152:12;:19;43165:5;43152:19;;;;;;;;;;;;;;;:26;43172:5;43152:26;;;;;;;;;;;;43145:33;;42930:256;;;;:::o;52149:59::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52192:10:::1;:8;:10::i;:::-;52149:59::o:0;30830:185::-;30968:39;30985:4;30991:2;30995:7;30968:39;;;;;;;;;;;;:16;:39::i;:::-;30830:185;;;:::o;53483:333::-;53543:16;53568:23;53594:17;53604:6;53594:9;:17::i;:::-;53568:43;;53618:25;53660:15;53646:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53618:58;;53688:9;53683:106;53703:15;53699:1;:19;53683:106;;;53751:30;53771:6;53779:1;53751:19;:30::i;:::-;53737:8;53746:1;53737:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;53725:1;53720:6;;;;;:::i;:::-;;;53683:106;;;;53802:8;53795:15;;;;53483:333;;;:::o;43452:233::-;43527:7;43563:30;:28;:30::i;:::-;43555:5;:38;43547:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43660:10;43671:5;43660:17;;;;;;;;:::i;:::-;;;;;;;;;;43653:24;;43452:233;;;:::o;51984:98::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52065:11:::1;52055:7;:21;;;;;;;;;;;;:::i;:::-;;51984:98:::0;:::o;6712:86::-;6759:4;6783:7;;;;;;;;;;;6776:14;;6712:86;:::o;27805:239::-;27877:7;27897:13;27913:7;:16;27921:7;27913:16;;;;;;;;;;;;;;;;;;;;;27897:32;;27965:1;27948:19;;:5;:19;;;;27940:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28031:5;28024:12;;;27805:239;;;:::o;49489:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;27535:208::-;27607:7;27652:1;27635:19;;:5;:19;;;;27627:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27719:9;:16;27729:5;27719:16;;;;;;;;;;;;;;;;27712:23;;27535:208;;;:::o;4763:103::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4828:30:::1;4855:1;4828:18;:30::i;:::-;4763:103::o:0;53822:156::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53923:13:::1;53911:9;:25;;;;53957:15;53943:11;:29;;;;53822:156:::0;;:::o;52088:55::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52129:8:::1;:6;:8::i;:::-;52088:55::o:0;4112:87::-;4158:7;4185:6;;;;;;;;;;;4178:13;;4112:87;:::o;28280:104::-;28336:13;28369:7;28362:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28280:104;:::o;52728:300::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52804:14:::1;52821:13;:11;:13::i;:::-;52804:30;;52863:9;;;;;;;;;;;52849:23;;52858:1;52849:6;:10;;;;:::i;:::-;:23;;52841:32;;;::::0;::::1;;52882:14;52899:18;:27;52918:7;52899:27;;;;;;;;;;;;;;;;;;;;;;;;;52882:44;;52995:27;53005:6;53013:8;52995:9;:27::i;:::-;52797:231;;52728:300:::0;;:::o;53034:175::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53105:14:::1;53122:13;:11;:13::i;:::-;53105:30;;53164:9;;;;;;;;;;;53150:23;;53159:1;53150:6;:10;;;;:::i;:::-;:23;;53142:32;;;::::0;::::1;;53181:22;53191:2;53195:7;53181:9;:22::i;:::-;53098:111;53034:175:::0;;:::o;29963:155::-;30058:52;30077:12;:10;:12::i;:::-;30091:8;30101;30058:18;:52::i;:::-;29963:155;;:::o;31086:328::-;31261:41;31280:12;:10;:12::i;:::-;31294:7;31261:18;:41::i;:::-;31253:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31367:39;31381:4;31387:2;31391:7;31400:5;31367:13;:39::i;:::-;31086:328;;;;:::o;54532:201::-;54632:13;54685:10;:8;:10::i;:::-;54697:19;:8;:17;:19::i;:::-;54668:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54654:73;;54532:201;;;:::o;52214:508::-;7038:8;:6;:8::i;:::-;7037:9;7029:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;52370:9:::1;;52357;:22;;52349:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;52511:11;;;;;;;;;;;52480:42;;:18;:27;52499:7;52480:27;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;52472:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;52556:14;52573:13;:11;:13::i;:::-;52556:30;;52615:9;;;;;;;;;;;52601:23;;52610:1;52601:6;:10;;;;:::i;:::-;:23;;52593:32;;;::::0;::::1;;52664:10;52634:18;:27;52653:7;52634:27;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;52696:10;52686:30;;;52708:7;52686:30;;;;;;:::i;:::-;;;;;;;;52280:442;52214:508:::0;:::o;54207:104::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54262:10:::1;54254:28;;:51;54283:21;54254:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54207:104::o:0;30189:164::-;30286:4;30310:18;:25;30329:5;30310:25;;;;;;;;;;;;;;;:35;30336:8;30310:35;;;;;;;;;;;;;;;;;;;;;;;;;30303:42;;30189:164;;;;:::o;5021:201::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5130:1:::1;5110:22;;:8;:22;;;;5102:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5186:28;5205:8;5186:18;:28::i;:::-;5021:201:::0;:::o;8718:387::-;8778:4;8986:12;9053:7;9041:20;9033:28;;9096:1;9089:4;:8;9082:15;;;8718:387;;;:::o;44298:589::-;44442:45;44469:4;44475:2;44479:7;44442:26;:45::i;:::-;44520:1;44504:18;;:4;:18;;;44500:187;;;44539:40;44571:7;44539:31;:40::i;:::-;44500:187;;;44609:2;44601:10;;:4;:10;;;44597:90;;44628:47;44661:4;44667:7;44628:32;:47::i;:::-;44597:90;44500:187;44715:1;44701:16;;:2;:16;;;44697:183;;;44734:45;44771:7;44734:36;:45::i;:::-;44697:183;;;44807:4;44801:10;;:2;:10;;;44797:83;;44828:40;44856:2;44860:7;44828:27;:40::i;:::-;44797:83;44697:183;44298:589;;;:::o;39473:126::-;;;;:::o;42622:224::-;42724:4;42763:35;42748:50;;;:11;:50;;;;:90;;;;42802:36;42826:11;42802:23;:36::i;:::-;42748:90;42741:97;;42622:224;;;:::o;32924:127::-;32989:4;33041:1;33013:30;;:7;:16;33021:7;33013:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33006:37;;32924:127;;;:::o;2836:98::-;2889:7;2916:10;2909:17;;2836:98;:::o;36906:174::-;37008:2;36981:15;:24;36997:7;36981:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37064:7;37060:2;37026:46;;37035:23;37050:7;37035:14;:23::i;:::-;37026:46;;;;;;;;;;;;36906:174;;:::o;33218:348::-;33311:4;33336:16;33344:7;33336;:16::i;:::-;33328:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33412:13;33428:23;33443:7;33428:14;:23::i;:::-;33412:39;;33481:5;33470:16;;:7;:16;;;:51;;;;33514:7;33490:31;;:20;33502:7;33490:11;:20::i;:::-;:31;;;33470:51;:87;;;;33525:32;33542:5;33549:7;33525:16;:32::i;:::-;33470:87;33462:96;;;33218:348;;;;:::o;36210:578::-;36369:4;36342:31;;:23;36357:7;36342:14;:23::i;:::-;:31;;;36334:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36452:1;36438:16;;:2;:16;;;;36430:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36508:39;36529:4;36535:2;36539:7;36508:20;:39::i;:::-;36612:29;36629:1;36633:7;36612:8;:29::i;:::-;36673:1;36654:9;:15;36664:4;36654:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36702:1;36685:9;:13;36695:2;36685:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36733:2;36714:7;:16;36722:7;36714:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36772:7;36768:2;36753:27;;36762:4;36753:27;;;;;;;;;;;;36210:578;;;:::o;7771:120::-;7315:8;:6;:8::i;:::-;7307:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7840:5:::1;7830:7;;:15;;;;;;;;;;;;;;;;;;7861:22;7870:12;:10;:12::i;:::-;7861:22;;;;;;:::i;:::-;;;;;;;;7771:120::o:0;5382:191::-;5456:16;5475:6;;;;;;;;;;;5456:25;;5501:8;5492:6;;:17;;;;;;;;;;;;;;;;;;5556:8;5525:40;;5546:8;5525:40;;;;;;;;;;;;5445:128;5382:191;:::o;7512:118::-;7038:8;:6;:8::i;:::-;7037:9;7029:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7582:4:::1;7572:7;;:14;;;;;;;;;;;;;;;;;;7602:20;7609:12;:10;:12::i;:::-;7602:20;;;;;;:::i;:::-;;;;;;;;7512:118::o:0;33908:110::-;33984:26;33994:2;33998:7;33984:26;;;;;;;;;;;;:9;:26::i;:::-;33908:110;;:::o;37222:315::-;37377:8;37368:17;;:5;:17;;;;37360:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37464:8;37426:18;:25;37445:5;37426:25;;;;;;;;;;;;;;;:35;37452:8;37426:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37510:8;37488:41;;37503:5;37488:41;;;37520:8;37488:41;;;;;;:::i;:::-;;;;;;;;37222:315;;;:::o;32296:::-;32453:28;32463:4;32469:2;32473:7;32453:9;:28::i;:::-;32500:48;32523:4;32529:2;32533:7;32542:5;32500:22;:48::i;:::-;32492:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32296:315;;;;:::o;51884:94::-;51936:13;51965:7;51958:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51884:94;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;45610:164::-;45714:10;:17;;;;45687:15;:24;45703:7;45687:24;;;;;;;;;;;:44;;;;45742:10;45758:7;45742:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45610:164;:::o;46401:988::-;46667:22;46717:1;46692:22;46709:4;46692:16;:22::i;:::-;:26;;;;:::i;:::-;46667:51;;46729:18;46750:17;:26;46768:7;46750:26;;;;;;;;;;;;46729:47;;46897:14;46883:10;:28;46879:328;;46928:19;46950:12;:18;46963:4;46950:18;;;;;;;;;;;;;;;:34;46969:14;46950:34;;;;;;;;;;;;46928:56;;47034:11;47001:12;:18;47014:4;47001:18;;;;;;;;;;;;;;;:30;47020:10;47001:30;;;;;;;;;;;:44;;;;47151:10;47118:17;:30;47136:11;47118:30;;;;;;;;;;;:43;;;;46913:294;46879:328;47303:17;:26;47321:7;47303:26;;;;;;;;;;;47296:33;;;47347:12;:18;47360:4;47347:18;;;;;;;;;;;;;;;:34;47366:14;47347:34;;;;;;;;;;;47340:41;;;46482:907;;46401:988;;:::o;47684:1079::-;47937:22;47982:1;47962:10;:17;;;;:21;;;;:::i;:::-;47937:46;;47994:18;48015:15;:24;48031:7;48015:24;;;;;;;;;;;;47994:45;;48366:19;48388:10;48399:14;48388:26;;;;;;;;:::i;:::-;;;;;;;;;;48366:48;;48452:11;48427:10;48438;48427:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48563:10;48532:15;:28;48548:11;48532:28;;;;;;;;;;;:41;;;;48704:15;:24;48720:7;48704:24;;;;;;;;;;;48697:31;;;48739:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47755:1008;;;47684:1079;:::o;45188:221::-;45273:14;45290:20;45307:2;45290:16;:20::i;:::-;45273:37;;45348:7;45321:12;:16;45334:2;45321:16;;;;;;;;;;;;;;;:24;45338:6;45321:24;;;;;;;;;;;:34;;;;45395:6;45366:17;:26;45384:7;45366:26;;;;;;;;;;;:35;;;;45262:147;45188:221;;:::o;27166:305::-;27268:4;27320:25;27305:40;;;:11;:40;;;;:105;;;;27377:33;27362:48;;;:11;:48;;;;27305:105;:158;;;;27427:36;27451:11;27427:23;:36::i;:::-;27305:158;27285:178;;27166:305;;;:::o;54317:209::-;7038:8;:6;:8::i;:::-;7037:9;7029:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;54475:45:::1;54502:4;54508:2;54512:7;54475:26;:45::i;:::-;54317:209:::0;;;:::o;34245:321::-;34375:18;34381:2;34385:7;34375:5;:18::i;:::-;34426:54;34457:1;34461:2;34465:7;34474:5;34426:22;:54::i;:::-;34404:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34245:321;;;:::o;38102:799::-;38257:4;38278:15;:2;:13;;;:15::i;:::-;38274:620;;;38330:2;38314:36;;;38351:12;:10;:12::i;:::-;38365:4;38371:7;38380:5;38314:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38310:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38573:1;38556:6;:13;:18;38552:272;;;38599:60;;;;;;;;;;:::i;:::-;;;;;;;;38552:272;38774:6;38768:13;38759:6;38755:2;38751:15;38744:38;38310:529;38447:41;;;38437:51;;;:6;:51;;;;38430:58;;;;;38274:620;38878:4;38871:11;;38102:799;;;;;;;:::o;18862:157::-;18947:4;18986:25;18971:40;;;:11;:40;;;;18964:47;;18862:157;;;:::o;34902:382::-;34996:1;34982:16;;:2;:16;;;;34974:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35055:16;35063:7;35055;:16::i;:::-;35054:17;35046:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35117:45;35146:1;35150:2;35154:7;35117:20;:45::i;:::-;35192:1;35175:9;:13;35185:2;35175:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35223:2;35204:7;:16;35212:7;35204:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35268:7;35264:2;35243:33;;35260:1;35243:33;;;;;;;;;;;;34902:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:137::-;2322:5;2360:6;2347:20;2338:29;;2376:32;2402:5;2376:32;:::i;:::-;2277:137;;;;:::o;2420:329::-;2479:6;2528:2;2516:9;2507:7;2503:23;2499:32;2496:119;;;2534:79;;:::i;:::-;2496:119;2654:1;2679:53;2724:7;2715:6;2704:9;2700:22;2679:53;:::i;:::-;2669:63;;2625:117;2420:329;;;;:::o;2755:474::-;2823:6;2831;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:53;3076:7;3067:6;3056:9;3052:22;3031:53;:::i;:::-;3021:63;;2977:117;3133:2;3159:53;3204:7;3195:6;3184:9;3180:22;3159:53;:::i;:::-;3149:63;;3104:118;2755:474;;;;;:::o;3235:619::-;3312:6;3320;3328;3377:2;3365:9;3356:7;3352:23;3348:32;3345:119;;;3383:79;;:::i;:::-;3345:119;3503:1;3528:53;3573:7;3564:6;3553:9;3549:22;3528:53;:::i;:::-;3518:63;;3474:117;3630:2;3656:53;3701:7;3692:6;3681:9;3677:22;3656:53;:::i;:::-;3646:63;;3601:118;3758:2;3784:53;3829:7;3820:6;3809:9;3805:22;3784:53;:::i;:::-;3774:63;;3729:118;3235:619;;;;;:::o;3860:943::-;3955:6;3963;3971;3979;4028:3;4016:9;4007:7;4003:23;3999:33;3996:120;;;4035:79;;:::i;:::-;3996:120;4155:1;4180:53;4225:7;4216:6;4205:9;4201:22;4180:53;:::i;:::-;4170:63;;4126:117;4282:2;4308:53;4353:7;4344:6;4333:9;4329:22;4308:53;:::i;:::-;4298:63;;4253:118;4410:2;4436:53;4481:7;4472:6;4461:9;4457:22;4436:53;:::i;:::-;4426:63;;4381:118;4566:2;4555:9;4551:18;4538:32;4597:18;4589:6;4586:30;4583:117;;;4619:79;;:::i;:::-;4583:117;4724:62;4778:7;4769:6;4758:9;4754:22;4724:62;:::i;:::-;4714:72;;4509:287;3860:943;;;;;;;:::o;4809:468::-;4874:6;4882;4931:2;4919:9;4910:7;4906:23;4902:32;4899:119;;;4937:79;;:::i;:::-;4899:119;5057:1;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5028:117;5184:2;5210:50;5252:7;5243:6;5232:9;5228:22;5210:50;:::i;:::-;5200:60;;5155:115;4809:468;;;;;:::o;5283:474::-;5351:6;5359;5408:2;5396:9;5387:7;5383:23;5379:32;5376:119;;;5414:79;;:::i;:::-;5376:119;5534:1;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5505:117;5661:2;5687:53;5732:7;5723:6;5712:9;5708:22;5687:53;:::i;:::-;5677:63;;5632:118;5283:474;;;;;:::o;5763:327::-;5821:6;5870:2;5858:9;5849:7;5845:23;5841:32;5838:119;;;5876:79;;:::i;:::-;5838:119;5996:1;6021:52;6065:7;6056:6;6045:9;6041:22;6021:52;:::i;:::-;6011:62;;5967:116;5763:327;;;;:::o;6096:349::-;6165:6;6214:2;6202:9;6193:7;6189:23;6185:32;6182:119;;;6220:79;;:::i;:::-;6182:119;6340:1;6365:63;6420:7;6411:6;6400:9;6396:22;6365:63;:::i;:::-;6355:73;;6311:127;6096:349;;;;:::o;6451:509::-;6520:6;6569:2;6557:9;6548:7;6544:23;6540:32;6537:119;;;6575:79;;:::i;:::-;6537:119;6723:1;6712:9;6708:17;6695:31;6753:18;6745:6;6742:30;6739:117;;;6775:79;;:::i;:::-;6739:117;6880:63;6935:7;6926:6;6915:9;6911:22;6880:63;:::i;:::-;6870:73;;6666:287;6451:509;;;;:::o;6966:329::-;7025:6;7074:2;7062:9;7053:7;7049:23;7045:32;7042:119;;;7080:79;;:::i;:::-;7042:119;7200:1;7225:53;7270:7;7261:6;7250:9;7246:22;7225:53;:::i;:::-;7215:63;;7171:117;6966:329;;;;:::o;7301:474::-;7369:6;7377;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:53;7622:7;7613:6;7602:9;7598:22;7577:53;:::i;:::-;7567:63;;7523:117;7679:2;7705:53;7750:7;7741:6;7730:9;7726:22;7705:53;:::i;:::-;7695:63;;7650:118;7301:474;;;;;:::o;7781:327::-;7839:6;7888:2;7876:9;7867:7;7863:23;7859:32;7856:119;;;7894:79;;:::i;:::-;7856:119;8014:1;8039:52;8083:7;8074:6;8063:9;8059:22;8039:52;:::i;:::-;8029:62;;7985:116;7781:327;;;;:::o;8114:472::-;8181:6;8189;8238:2;8226:9;8217:7;8213:23;8209:32;8206:119;;;8244:79;;:::i;:::-;8206:119;8364:1;8389:52;8433:7;8424:6;8413:9;8409:22;8389:52;:::i;:::-;8379:62;;8335:116;8490:2;8516:53;8561:7;8552:6;8541:9;8537:22;8516:53;:::i;:::-;8506:63;;8461:118;8114:472;;;;;:::o;8592:179::-;8661:10;8682:46;8724:3;8716:6;8682:46;:::i;:::-;8760:4;8755:3;8751:14;8737:28;;8592:179;;;;:::o;8777:118::-;8864:24;8882:5;8864:24;:::i;:::-;8859:3;8852:37;8777:118;;:::o;8931:732::-;9050:3;9079:54;9127:5;9079:54;:::i;:::-;9149:86;9228:6;9223:3;9149:86;:::i;:::-;9142:93;;9259:56;9309:5;9259:56;:::i;:::-;9338:7;9369:1;9354:284;9379:6;9376:1;9373:13;9354:284;;;9455:6;9449:13;9482:63;9541:3;9526:13;9482:63;:::i;:::-;9475:70;;9568:60;9621:6;9568:60;:::i;:::-;9558:70;;9414:224;9401:1;9398;9394:9;9389:14;;9354:284;;;9358:14;9654:3;9647:10;;9055:608;;;8931:732;;;;:::o;9669:109::-;9750:21;9765:5;9750:21;:::i;:::-;9745:3;9738:34;9669:109;;:::o;9784:360::-;9870:3;9898:38;9930:5;9898:38;:::i;:::-;9952:70;10015:6;10010:3;9952:70;:::i;:::-;9945:77;;10031:52;10076:6;10071:3;10064:4;10057:5;10053:16;10031:52;:::i;:::-;10108:29;10130:6;10108:29;:::i;:::-;10103:3;10099:39;10092:46;;9874:270;9784:360;;;;:::o;10150:364::-;10238:3;10266:39;10299:5;10266:39;:::i;:::-;10321:71;10385:6;10380:3;10321:71;:::i;:::-;10314:78;;10401:52;10446:6;10441:3;10434:4;10427:5;10423:16;10401:52;:::i;:::-;10478:29;10500:6;10478:29;:::i;:::-;10473:3;10469:39;10462:46;;10242:272;10150:364;;;;:::o;10520:377::-;10626:3;10654:39;10687:5;10654:39;:::i;:::-;10709:89;10791:6;10786:3;10709:89;:::i;:::-;10702:96;;10807:52;10852:6;10847:3;10840:4;10833:5;10829:16;10807:52;:::i;:::-;10884:6;10879:3;10875:16;10868:23;;10630:267;10520:377;;;;:::o;10903:366::-;11045:3;11066:67;11130:2;11125:3;11066:67;:::i;:::-;11059:74;;11142:93;11231:3;11142:93;:::i;:::-;11260:2;11255:3;11251:12;11244:19;;10903:366;;;:::o;11275:::-;11417:3;11438:67;11502:2;11497:3;11438:67;:::i;:::-;11431:74;;11514:93;11603:3;11514:93;:::i;:::-;11632:2;11627:3;11623:12;11616:19;;11275:366;;;:::o;11647:::-;11789:3;11810:67;11874:2;11869:3;11810:67;:::i;:::-;11803:74;;11886:93;11975:3;11886:93;:::i;:::-;12004:2;11999:3;11995:12;11988:19;;11647:366;;;:::o;12019:::-;12161:3;12182:67;12246:2;12241:3;12182:67;:::i;:::-;12175:74;;12258:93;12347:3;12258:93;:::i;:::-;12376:2;12371:3;12367:12;12360:19;;12019:366;;;:::o;12391:::-;12533:3;12554:67;12618:2;12613:3;12554:67;:::i;:::-;12547:74;;12630:93;12719:3;12630:93;:::i;:::-;12748:2;12743:3;12739:12;12732:19;;12391:366;;;:::o;12763:::-;12905:3;12926:67;12990:2;12985:3;12926:67;:::i;:::-;12919:74;;13002:93;13091:3;13002:93;:::i;:::-;13120:2;13115:3;13111:12;13104:19;;12763:366;;;:::o;13135:::-;13277:3;13298:67;13362:2;13357:3;13298:67;:::i;:::-;13291:74;;13374:93;13463:3;13374:93;:::i;:::-;13492:2;13487:3;13483:12;13476:19;;13135:366;;;:::o;13507:::-;13649:3;13670:67;13734:2;13729:3;13670:67;:::i;:::-;13663:74;;13746:93;13835:3;13746:93;:::i;:::-;13864:2;13859:3;13855:12;13848:19;;13507:366;;;:::o;13879:::-;14021:3;14042:67;14106:2;14101:3;14042:67;:::i;:::-;14035:74;;14118:93;14207:3;14118:93;:::i;:::-;14236:2;14231:3;14227:12;14220:19;;13879:366;;;:::o;14251:::-;14393:3;14414:67;14478:2;14473:3;14414:67;:::i;:::-;14407:74;;14490:93;14579:3;14490:93;:::i;:::-;14608:2;14603:3;14599:12;14592:19;;14251:366;;;:::o;14623:::-;14765:3;14786:67;14850:2;14845:3;14786:67;:::i;:::-;14779:74;;14862:93;14951:3;14862:93;:::i;:::-;14980:2;14975:3;14971:12;14964:19;;14623:366;;;:::o;14995:::-;15137:3;15158:67;15222:2;15217:3;15158:67;:::i;:::-;15151:74;;15234:93;15323:3;15234:93;:::i;:::-;15352:2;15347:3;15343:12;15336:19;;14995:366;;;:::o;15367:::-;15509:3;15530:67;15594:2;15589:3;15530:67;:::i;:::-;15523:74;;15606:93;15695:3;15606:93;:::i;:::-;15724:2;15719:3;15715:12;15708:19;;15367:366;;;:::o;15739:::-;15881:3;15902:67;15966:2;15961:3;15902:67;:::i;:::-;15895:74;;15978:93;16067:3;15978:93;:::i;:::-;16096:2;16091:3;16087:12;16080:19;;15739:366;;;:::o;16111:::-;16253:3;16274:67;16338:2;16333:3;16274:67;:::i;:::-;16267:74;;16350:93;16439:3;16350:93;:::i;:::-;16468:2;16463:3;16459:12;16452:19;;16111:366;;;:::o;16483:400::-;16643:3;16664:84;16746:1;16741:3;16664:84;:::i;:::-;16657:91;;16757:93;16846:3;16757:93;:::i;:::-;16875:1;16870:3;16866:11;16859:18;;16483:400;;;:::o;16889:366::-;17031:3;17052:67;17116:2;17111:3;17052:67;:::i;:::-;17045:74;;17128:93;17217:3;17128:93;:::i;:::-;17246:2;17241:3;17237:12;17230:19;;16889:366;;;:::o;17261:::-;17403:3;17424:67;17488:2;17483:3;17424:67;:::i;:::-;17417:74;;17500:93;17589:3;17500:93;:::i;:::-;17618:2;17613:3;17609:12;17602:19;;17261:366;;;:::o;17633:::-;17775:3;17796:67;17860:2;17855:3;17796:67;:::i;:::-;17789:74;;17872:93;17961:3;17872:93;:::i;:::-;17990:2;17985:3;17981:12;17974:19;;17633:366;;;:::o;18005:::-;18147:3;18168:67;18232:2;18227:3;18168:67;:::i;:::-;18161:74;;18244:93;18333:3;18244:93;:::i;:::-;18362:2;18357:3;18353:12;18346:19;;18005:366;;;:::o;18377:::-;18519:3;18540:67;18604:2;18599:3;18540:67;:::i;:::-;18533:74;;18616:93;18705:3;18616:93;:::i;:::-;18734:2;18729:3;18725:12;18718:19;;18377:366;;;:::o;18749:::-;18891:3;18912:67;18976:2;18971:3;18912:67;:::i;:::-;18905:74;;18988:93;19077:3;18988:93;:::i;:::-;19106:2;19101:3;19097:12;19090:19;;18749:366;;;:::o;19121:108::-;19198:24;19216:5;19198:24;:::i;:::-;19193:3;19186:37;19121:108;;:::o;19235:118::-;19322:24;19340:5;19322:24;:::i;:::-;19317:3;19310:37;19235:118;;:::o;19359:129::-;19445:36;19475:5;19445:36;:::i;:::-;19440:3;19433:49;19359:129;;:::o;19494:701::-;19775:3;19797:95;19888:3;19879:6;19797:95;:::i;:::-;19790:102;;19909:95;20000:3;19991:6;19909:95;:::i;:::-;19902:102;;20021:148;20165:3;20021:148;:::i;:::-;20014:155;;20186:3;20179:10;;19494:701;;;;;:::o;20201:222::-;20294:4;20332:2;20321:9;20317:18;20309:26;;20345:71;20413:1;20402:9;20398:17;20389:6;20345:71;:::i;:::-;20201:222;;;;:::o;20429:640::-;20624:4;20662:3;20651:9;20647:19;20639:27;;20676:71;20744:1;20733:9;20729:17;20720:6;20676:71;:::i;:::-;20757:72;20825:2;20814:9;20810:18;20801:6;20757:72;:::i;:::-;20839;20907:2;20896:9;20892:18;20883:6;20839:72;:::i;:::-;20958:9;20952:4;20948:20;20943:2;20932:9;20928:18;20921:48;20986:76;21057:4;21048:6;20986:76;:::i;:::-;20978:84;;20429:640;;;;;;;:::o;21075:373::-;21218:4;21256:2;21245:9;21241:18;21233:26;;21305:9;21299:4;21295:20;21291:1;21280:9;21276:17;21269:47;21333:108;21436:4;21427:6;21333:108;:::i;:::-;21325:116;;21075:373;;;;:::o;21454:210::-;21541:4;21579:2;21568:9;21564:18;21556:26;;21592:65;21654:1;21643:9;21639:17;21630:6;21592:65;:::i;:::-;21454:210;;;;:::o;21670:313::-;21783:4;21821:2;21810:9;21806:18;21798:26;;21870:9;21864:4;21860:20;21856:1;21845:9;21841:17;21834:47;21898:78;21971:4;21962:6;21898:78;:::i;:::-;21890:86;;21670:313;;;;:::o;21989:419::-;22155:4;22193:2;22182:9;22178:18;22170:26;;22242:9;22236:4;22232:20;22228:1;22217:9;22213:17;22206:47;22270:131;22396:4;22270:131;:::i;:::-;22262:139;;21989:419;;;:::o;22414:::-;22580:4;22618:2;22607:9;22603:18;22595:26;;22667:9;22661:4;22657:20;22653:1;22642:9;22638:17;22631:47;22695:131;22821:4;22695:131;:::i;:::-;22687:139;;22414:419;;;:::o;22839:::-;23005:4;23043:2;23032:9;23028:18;23020:26;;23092:9;23086:4;23082:20;23078:1;23067:9;23063:17;23056:47;23120:131;23246:4;23120:131;:::i;:::-;23112:139;;22839:419;;;:::o;23264:::-;23430:4;23468:2;23457:9;23453:18;23445:26;;23517:9;23511:4;23507:20;23503:1;23492:9;23488:17;23481:47;23545:131;23671:4;23545:131;:::i;:::-;23537:139;;23264:419;;;:::o;23689:::-;23855:4;23893:2;23882:9;23878:18;23870:26;;23942:9;23936:4;23932:20;23928:1;23917:9;23913:17;23906:47;23970:131;24096:4;23970:131;:::i;:::-;23962:139;;23689:419;;;:::o;24114:::-;24280:4;24318:2;24307:9;24303:18;24295:26;;24367:9;24361:4;24357:20;24353:1;24342:9;24338:17;24331:47;24395:131;24521:4;24395:131;:::i;:::-;24387:139;;24114:419;;;:::o;24539:::-;24705:4;24743:2;24732:9;24728:18;24720:26;;24792:9;24786:4;24782:20;24778:1;24767:9;24763:17;24756:47;24820:131;24946:4;24820:131;:::i;:::-;24812:139;;24539:419;;;:::o;24964:::-;25130:4;25168:2;25157:9;25153:18;25145:26;;25217:9;25211:4;25207:20;25203:1;25192:9;25188:17;25181:47;25245:131;25371:4;25245:131;:::i;:::-;25237:139;;24964:419;;;:::o;25389:::-;25555:4;25593:2;25582:9;25578:18;25570:26;;25642:9;25636:4;25632:20;25628:1;25617:9;25613:17;25606:47;25670:131;25796:4;25670:131;:::i;:::-;25662:139;;25389:419;;;:::o;25814:::-;25980:4;26018:2;26007:9;26003:18;25995:26;;26067:9;26061:4;26057:20;26053:1;26042:9;26038:17;26031:47;26095:131;26221:4;26095:131;:::i;:::-;26087:139;;25814:419;;;:::o;26239:::-;26405:4;26443:2;26432:9;26428:18;26420:26;;26492:9;26486:4;26482:20;26478:1;26467:9;26463:17;26456:47;26520:131;26646:4;26520:131;:::i;:::-;26512:139;;26239:419;;;:::o;26664:::-;26830:4;26868:2;26857:9;26853:18;26845:26;;26917:9;26911:4;26907:20;26903:1;26892:9;26888:17;26881:47;26945:131;27071:4;26945:131;:::i;:::-;26937:139;;26664:419;;;:::o;27089:::-;27255:4;27293:2;27282:9;27278:18;27270:26;;27342:9;27336:4;27332:20;27328:1;27317:9;27313:17;27306:47;27370:131;27496:4;27370:131;:::i;:::-;27362:139;;27089:419;;;:::o;27514:::-;27680:4;27718:2;27707:9;27703:18;27695:26;;27767:9;27761:4;27757:20;27753:1;27742:9;27738:17;27731:47;27795:131;27921:4;27795:131;:::i;:::-;27787:139;;27514:419;;;:::o;27939:::-;28105:4;28143:2;28132:9;28128:18;28120:26;;28192:9;28186:4;28182:20;28178:1;28167:9;28163:17;28156:47;28220:131;28346:4;28220:131;:::i;:::-;28212:139;;27939:419;;;:::o;28364:::-;28530:4;28568:2;28557:9;28553:18;28545:26;;28617:9;28611:4;28607:20;28603:1;28592:9;28588:17;28581:47;28645:131;28771:4;28645:131;:::i;:::-;28637:139;;28364:419;;;:::o;28789:::-;28955:4;28993:2;28982:9;28978:18;28970:26;;29042:9;29036:4;29032:20;29028:1;29017:9;29013:17;29006:47;29070:131;29196:4;29070:131;:::i;:::-;29062:139;;28789:419;;;:::o;29214:::-;29380:4;29418:2;29407:9;29403:18;29395:26;;29467:9;29461:4;29457:20;29453:1;29442:9;29438:17;29431:47;29495:131;29621:4;29495:131;:::i;:::-;29487:139;;29214:419;;;:::o;29639:::-;29805:4;29843:2;29832:9;29828:18;29820:26;;29892:9;29886:4;29882:20;29878:1;29867:9;29863:17;29856:47;29920:131;30046:4;29920:131;:::i;:::-;29912:139;;29639:419;;;:::o;30064:::-;30230:4;30268:2;30257:9;30253:18;30245:26;;30317:9;30311:4;30307:20;30303:1;30292:9;30288:17;30281:47;30345:131;30471:4;30345:131;:::i;:::-;30337:139;;30064:419;;;:::o;30489:::-;30655:4;30693:2;30682:9;30678:18;30670:26;;30742:9;30736:4;30732:20;30728:1;30717:9;30713:17;30706:47;30770:131;30896:4;30770:131;:::i;:::-;30762:139;;30489:419;;;:::o;30914:222::-;31007:4;31045:2;31034:9;31030:18;31022:26;;31058:71;31126:1;31115:9;31111:17;31102:6;31058:71;:::i;:::-;30914:222;;;;:::o;31142:220::-;31234:4;31272:2;31261:9;31257:18;31249:26;;31285:70;31352:1;31341:9;31337:17;31328:6;31285:70;:::i;:::-;31142:220;;;;:::o;31368:129::-;31402:6;31429:20;;:::i;:::-;31419:30;;31458:33;31486:4;31478:6;31458:33;:::i;:::-;31368:129;;;:::o;31503:75::-;31536:6;31569:2;31563:9;31553:19;;31503:75;:::o;31584:307::-;31645:4;31735:18;31727:6;31724:30;31721:56;;;31757:18;;:::i;:::-;31721:56;31795:29;31817:6;31795:29;:::i;:::-;31787:37;;31879:4;31873;31869:15;31861:23;;31584:307;;;:::o;31897:308::-;31959:4;32049:18;32041:6;32038:30;32035:56;;;32071:18;;:::i;:::-;32035:56;32109:29;32131:6;32109:29;:::i;:::-;32101:37;;32193:4;32187;32183:15;32175:23;;31897:308;;;:::o;32211:132::-;32278:4;32301:3;32293:11;;32331:4;32326:3;32322:14;32314:22;;32211:132;;;:::o;32349:114::-;32416:6;32450:5;32444:12;32434:22;;32349:114;;;:::o;32469:98::-;32520:6;32554:5;32548:12;32538:22;;32469:98;;;:::o;32573:99::-;32625:6;32659:5;32653:12;32643:22;;32573:99;;;:::o;32678:113::-;32748:4;32780;32775:3;32771:14;32763:22;;32678:113;;;:::o;32797:184::-;32896:11;32930:6;32925:3;32918:19;32970:4;32965:3;32961:14;32946:29;;32797:184;;;;:::o;32987:168::-;33070:11;33104:6;33099:3;33092:19;33144:4;33139:3;33135:14;33120:29;;32987:168;;;;:::o;33161:169::-;33245:11;33279:6;33274:3;33267:19;33319:4;33314:3;33310:14;33295:29;;33161:169;;;;:::o;33336:148::-;33438:11;33475:3;33460:18;;33336:148;;;;:::o;33490:305::-;33530:3;33549:20;33567:1;33549:20;:::i;:::-;33544:25;;33583:20;33601:1;33583:20;:::i;:::-;33578:25;;33737:1;33669:66;33665:74;33662:1;33659:81;33656:107;;;33743:18;;:::i;:::-;33656:107;33787:1;33784;33780:9;33773:16;;33490:305;;;;:::o;33801:185::-;33841:1;33858:20;33876:1;33858:20;:::i;:::-;33853:25;;33892:20;33910:1;33892:20;:::i;:::-;33887:25;;33931:1;33921:35;;33936:18;;:::i;:::-;33921:35;33978:1;33975;33971:9;33966:14;;33801:185;;;;:::o;33992:191::-;34032:4;34052:20;34070:1;34052:20;:::i;:::-;34047:25;;34086:20;34104:1;34086:20;:::i;:::-;34081:25;;34125:1;34122;34119:8;34116:34;;;34130:18;;:::i;:::-;34116:34;34175:1;34172;34168:9;34160:17;;33992:191;;;;:::o;34189:96::-;34226:7;34255:24;34273:5;34255:24;:::i;:::-;34244:35;;34189:96;;;:::o;34291:90::-;34325:7;34368:5;34361:13;34354:21;34343:32;;34291:90;;;:::o;34387:149::-;34423:7;34463:66;34456:5;34452:78;34441:89;;34387:149;;;:::o;34542:126::-;34579:7;34619:42;34612:5;34608:54;34597:65;;34542:126;;;:::o;34674:77::-;34711:7;34740:5;34729:16;;34674:77;;;:::o;34757:93::-;34793:7;34833:10;34826:5;34822:22;34811:33;;34757:93;;;:::o;34856:111::-;34905:9;34938:23;34955:5;34938:23;:::i;:::-;34925:36;;34856:111;;;:::o;34973:154::-;35057:6;35052:3;35047;35034:30;35119:1;35110:6;35105:3;35101:16;35094:27;34973:154;;;:::o;35133:307::-;35201:1;35211:113;35225:6;35222:1;35219:13;35211:113;;;35310:1;35305:3;35301:11;35295:18;35291:1;35286:3;35282:11;35275:39;35247:2;35244:1;35240:10;35235:15;;35211:113;;;35342:6;35339:1;35336:13;35333:101;;;35422:1;35413:6;35408:3;35404:16;35397:27;35333:101;35182:258;35133:307;;;:::o;35446:320::-;35490:6;35527:1;35521:4;35517:12;35507:22;;35574:1;35568:4;35564:12;35595:18;35585:81;;35651:4;35643:6;35639:17;35629:27;;35585:81;35713:2;35705:6;35702:14;35682:18;35679:38;35676:84;;;35732:18;;:::i;:::-;35676:84;35497:269;35446:320;;;:::o;35772:281::-;35855:27;35877:4;35855:27;:::i;:::-;35847:6;35843:40;35985:6;35973:10;35970:22;35949:18;35937:10;35934:34;35931:62;35928:88;;;35996:18;;:::i;:::-;35928:88;36036:10;36032:2;36025:22;35815:238;35772:281;;:::o;36059:233::-;36098:3;36121:24;36139:5;36121:24;:::i;:::-;36112:33;;36167:66;36160:5;36157:77;36154:103;;;36237:18;;:::i;:::-;36154:103;36284:1;36277:5;36273:13;36266:20;;36059:233;;;:::o;36298:176::-;36330:1;36347:20;36365:1;36347:20;:::i;:::-;36342:25;;36381:20;36399:1;36381:20;:::i;:::-;36376:25;;36420:1;36410:35;;36425:18;;:::i;:::-;36410:35;36466:1;36463;36459:9;36454:14;;36298:176;;;;:::o;36480:180::-;36528:77;36525:1;36518:88;36625:4;36622:1;36615:15;36649:4;36646:1;36639:15;36666:180;36714:77;36711:1;36704:88;36811:4;36808:1;36801:15;36835:4;36832:1;36825:15;36852:180;36900:77;36897:1;36890:88;36997:4;36994:1;36987:15;37021:4;37018:1;37011:15;37038:180;37086:77;37083:1;37076:88;37183:4;37180:1;37173:15;37207:4;37204:1;37197:15;37224:180;37272:77;37269:1;37262:88;37369:4;37366:1;37359:15;37393:4;37390:1;37383:15;37410:180;37458:77;37455:1;37448:88;37555:4;37552:1;37545:15;37579:4;37576:1;37569:15;37596:117;37705:1;37702;37695:12;37719:117;37828:1;37825;37818:12;37842:117;37951:1;37948;37941:12;37965:117;38074:1;38071;38064:12;38088:102;38129:6;38180:2;38176:7;38171:2;38164:5;38160:14;38156:28;38146:38;;38088:102;;;:::o;38196:170::-;38336:22;38332:1;38324:6;38320:14;38313:46;38196:170;:::o;38372:230::-;38512:34;38508:1;38500:6;38496:14;38489:58;38581:13;38576:2;38568:6;38564:15;38557:38;38372:230;:::o;38608:237::-;38748:34;38744:1;38736:6;38732:14;38725:58;38817:20;38812:2;38804:6;38800:15;38793:45;38608:237;:::o;38851:225::-;38991:34;38987:1;38979:6;38975:14;38968:58;39060:8;39055:2;39047:6;39043:15;39036:33;38851:225;:::o;39082:178::-;39222:30;39218:1;39210:6;39206:14;39199:54;39082:178;:::o;39266:170::-;39406:22;39402:1;39394:6;39390:14;39383:46;39266:170;:::o;39442:223::-;39582:34;39578:1;39570:6;39566:14;39559:58;39651:6;39646:2;39638:6;39634:15;39627:31;39442:223;:::o;39671:175::-;39811:27;39807:1;39799:6;39795:14;39788:51;39671:175;:::o;39852:231::-;39992:34;39988:1;39980:6;39976:14;39969:58;40061:14;40056:2;40048:6;40044:15;40037:39;39852:231;:::o;40089:166::-;40229:18;40225:1;40217:6;40213:14;40206:42;40089:166;:::o;40261:243::-;40401:34;40397:1;40389:6;40385:14;40378:58;40470:26;40465:2;40457:6;40453:15;40446:51;40261:243;:::o;40510:229::-;40650:34;40646:1;40638:6;40634:14;40627:58;40719:12;40714:2;40706:6;40702:15;40695:37;40510:229;:::o;40745:228::-;40885:34;40881:1;40873:6;40869:14;40862:58;40954:11;40949:2;40941:6;40937:15;40930:36;40745:228;:::o;40979:182::-;41119:34;41115:1;41107:6;41103:14;41096:58;40979:182;:::o;41167:231::-;41307:34;41303:1;41295:6;41291:14;41284:58;41376:14;41371:2;41363:6;41359:15;41352:39;41167:231;:::o;41404:155::-;41544:7;41540:1;41532:6;41528:14;41521:31;41404:155;:::o;41565:182::-;41705:34;41701:1;41693:6;41689:14;41682:58;41565:182;:::o;41753:228::-;41893:34;41889:1;41881:6;41877:14;41870:58;41962:11;41957:2;41949:6;41945:15;41938:36;41753:228;:::o;41987:220::-;42127:34;42123:1;42115:6;42111:14;42104:58;42196:3;42191:2;42183:6;42179:15;42172:28;41987:220;:::o;42213:236::-;42353:34;42349:1;42341:6;42337:14;42330:58;42422:19;42417:2;42409:6;42405:15;42398:44;42213:236;:::o;42455:231::-;42595:34;42591:1;42583:6;42579:14;42572:58;42664:14;42659:2;42651:6;42647:15;42640:39;42455:231;:::o;42692:165::-;42832:17;42828:1;42820:6;42816:14;42809:41;42692:165;:::o;42863:122::-;42936:24;42954:5;42936:24;:::i;:::-;42929:5;42926:35;42916:63;;42975:1;42972;42965:12;42916:63;42863:122;:::o;42991:116::-;43061:21;43076:5;43061:21;:::i;:::-;43054:5;43051:32;43041:60;;43097:1;43094;43087:12;43041:60;42991:116;:::o;43113:120::-;43185:23;43202:5;43185:23;:::i;:::-;43178:5;43175:34;43165:62;;43223:1;43220;43213:12;43165:62;43113:120;:::o;43239:122::-;43312:24;43330:5;43312:24;:::i;:::-;43305:5;43302:35;43292:63;;43351:1;43348;43341:12;43292:63;43239:122;:::o;43367:120::-;43439:23;43456:5;43439:23;:::i;:::-;43432:5;43429:34;43419:62;;43477:1;43474;43467:12;43419:62;43367:120;:::o
Swarm Source
ipfs://5f425dbd5aed35036b742a6ee720425877f4724b51f5c31db6cfadde4efaa3a0
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.