Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
6,969 WHALES
Holders
3,441
Market
Volume (24H)
0.0062 ETH
Min Price (24H)
$10.38 @ 0.003100 ETH
Max Price (24H)
$10.38 @ 0.003100 ETH
Other Info
Token Contract
Balance
1 WHALESLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
UnusualWhales
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-16 */ // File: @openzeppelin/contracts/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 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol 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 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/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/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/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/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/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/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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //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 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/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/UnusualWhales.sol /** *Unusual Whales (WHALE) * * 6,969 Unusual Whales in the Sea */ pragma solidity ^0.8.0; contract UnusualWhales is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; uint256 public cost = 0.069 ether; uint256 public maxSupply = 6969; uint256 public maxMintAmount = 20; bool public paused = false; mapping(address => bool) public whitelisted; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); mint(msg.sender, 20); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { if(whitelisted[msg.sender] != true) { require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } 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++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, (tokenId-1).toString())) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner() { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405266f5232269808000600c55611b39600d556014600e556000600f60006101000a81548160ff0219169083151502179055503480156200004257600080fd5b506040516200591238038062005912833981810160405281019062000068919062000f69565b828281600090805190602001906200008292919062000df2565b5080600190805190602001906200009b92919062000df2565b505050620000be620000b2620000eb60201b60201c565b620000f360201b60201c565b620000cf81620001b960201b60201c565b620000e23360146200026460201b60201c565b50505062001768565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001c9620000eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620001ef620003d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000248576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200023f9062001224565b60405180910390fd5b80600b90805190602001906200026092919062000df2565b5050565b600062000276620003fd60201b60201c565b9050600f60009054906101000a900460ff16156200029357600080fd5b60008211620002a157600080fd5b600e54821115620002b157600080fd5b600d548282620002c29190620012d2565b1115620002ce57600080fd5b620002de620003d360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620003895760011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514620003885781600c546200037a91906200132f565b3410156200038757600080fd5b5b5b6000600190505b828111620003cd57620003b7848284620003ab9190620012d2565b6200040a60201b60201c565b8080620003c490620014d7565b91505062000390565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b6200042c8282604051806020016040528060008152506200043060201b60201c565b5050565b6200044283836200049e60201b60201c565b6200045760008484846200068460201b60201c565b62000499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000490906200119c565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000511576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005089062001202565b60405180910390fd5b62000522816200083e60201b60201c565b1562000565576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200055c90620011be565b60405180910390fd5b6200057960008383620008aa60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005cb9190620012d2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006b28473ffffffffffffffffffffffffffffffffffffffff16620009f160201b62001a941760201c565b1562000831578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006e4620000eb60201b60201c565b8786866040518563ffffffff1660e01b815260040162000708949392919062001148565b602060405180830381600087803b1580156200072357600080fd5b505af19250505080156200075757506040513d601f19601f8201168201806040525081019062000754919062000f37565b60015b620007e0573d80600081146200078a576040519150601f19603f3d011682016040523d82523d6000602084013e6200078f565b606091505b50600081511415620007d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cf906200119c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000836565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008c283838362000a0460201b62001aa71760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200090f57620009098162000a0960201b60201c565b62000957565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009565762000955838262000a5260201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009a4576200099e8162000bcf60201b60201c565b620009ec565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009eb57620009ea828262000cab60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000a6c8462000d3760201b620013ca1760201c565b62000a78919062001390565b905060006007600084815260200190815260200160002054905081811462000b5e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000be5919062001390565b905060006009600084815260200190815260200160002054905060006008838154811062000c185762000c17620015b2565b5b90600052602060002001549050806008838154811062000c3d5762000c3c620015b2565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000c8f5762000c8e62001583565b5b6001900381819060005260206000200160009055905550505050565b600062000cc38362000d3760201b620013ca1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000da290620011e0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000e00906200146b565b90600052602060002090601f01602090048101928262000e24576000855562000e70565b82601f1062000e3f57805160ff191683800117855562000e70565b8280016001018555821562000e70579182015b8281111562000e6f57825182559160200191906001019062000e52565b5b50905062000e7f919062000e83565b5090565b5b8082111562000e9e57600081600090555060010162000e84565b5090565b600062000eb962000eb3846200126f565b62001246565b90508281526020810184848401111562000ed85762000ed762001615565b5b62000ee584828562001435565b509392505050565b60008151905062000efe816200174e565b92915050565b600082601f83011262000f1c5762000f1b62001610565b5b815162000f2e84826020860162000ea2565b91505092915050565b60006020828403121562000f505762000f4f6200161f565b5b600062000f608482850162000eed565b91505092915050565b60008060006060848603121562000f855762000f846200161f565b5b600084015167ffffffffffffffff81111562000fa65762000fa56200161a565b5b62000fb48682870162000f04565b935050602084015167ffffffffffffffff81111562000fd85762000fd76200161a565b5b62000fe68682870162000f04565b925050604084015167ffffffffffffffff8111156200100a57620010096200161a565b5b620010188682870162000f04565b9150509250925092565b6200102d81620013cb565b82525050565b60006200104082620012a5565b6200104c8185620012b0565b93506200105e81856020860162001435565b620010698162001624565b840191505092915050565b600062001083603283620012c1565b9150620010908262001635565b604082019050919050565b6000620010aa601c83620012c1565b9150620010b78262001684565b602082019050919050565b6000620010d1602a83620012c1565b9150620010de82620016ad565b604082019050919050565b6000620010f8602083620012c1565b91506200110582620016fc565b602082019050919050565b60006200111f602083620012c1565b91506200112c8262001725565b602082019050919050565b62001142816200142b565b82525050565b60006080820190506200115f600083018762001022565b6200116e602083018662001022565b6200117d604083018562001137565b818103606083015262001191818462001033565b905095945050505050565b60006020820190508181036000830152620011b78162001074565b9050919050565b60006020820190508181036000830152620011d9816200109b565b9050919050565b60006020820190508181036000830152620011fb81620010c2565b9050919050565b600060208201905081810360008301526200121d81620010e9565b9050919050565b600060208201905081810360008301526200123f8162001110565b9050919050565b60006200125262001265565b9050620012608282620014a1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200128d576200128c620015e1565b5b620012988262001624565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620012df826200142b565b9150620012ec836200142b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001324576200132362001525565b5b828201905092915050565b60006200133c826200142b565b915062001349836200142b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001385576200138462001525565b5b828202905092915050565b60006200139d826200142b565b9150620013aa836200142b565b925082821015620013c057620013bf62001525565b5b828203905092915050565b6000620013d8826200140b565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200145557808201518184015260208101905062001438565b8381111562001465576000848401525b50505050565b600060028204905060018216806200148457607f821691505b602082108114156200149b576200149a62001554565b5b50919050565b620014ac8262001624565b810181811067ffffffffffffffff82111715620014ce57620014cd620015e1565b5b80604052505050565b6000620014e4826200142b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200151a576200151962001525565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200175981620013df565b81146200176557600080fd5b50565b61419a80620017786000396000f3fe6080604052600436106101f95760003560e01c80634f6ccce71161010d5780638da5cb5b116100a0578063c87b56dd1161006f578063c87b56dd14610701578063d5abeb011461073e578063d936547e14610769578063e985e9c5146107a6578063f2fde38b146107e3576101f9565b80638da5cb5b1461065957806395d89b4114610684578063a22cb465146106af578063b88d4fde146106d8576101f9565b80636c0360eb116100dc5780636c0360eb146105b157806370a08231146105dc578063715018a6146106195780637f00c7a614610630576101f9565b80634f6ccce7146104e357806355f804b3146105205780635c975abb146105495780636352211e14610574576101f9565b806323b872dd1161019057806340c10f191161015f57806340c10f191461040f57806342842e0e1461042b578063438b63001461045457806344a0d68a146104915780634a4c560d146104ba576101f9565b806323b872dd146103765780632f745c591461039f57806330cc7ae0146103dc5780633ccfd60b14610405576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806313faede6146102f557806318160ddd14610320578063239c70ae1461034b576101f9565b806301ffc9a7146101fe57806302329a291461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612f48565b61080c565b6040516102329190613490565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612f1b565b610886565b005b34801561027057600080fd5b5061027961091f565b60405161028691906134ab565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190612feb565b6109b1565b6040516102c39190613407565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee9190612edb565b610a36565b005b34801561030157600080fd5b5061030a610b4e565b604051610317919061370d565b60405180910390f35b34801561032c57600080fd5b50610335610b54565b604051610342919061370d565b60405180910390f35b34801561035757600080fd5b50610360610b61565b60405161036d919061370d565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612dc5565b610b67565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190612edb565b610bc7565b6040516103d3919061370d565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190612d58565b610c6c565b005b61040d610d43565b005b61042960048036038101906104249190612edb565b610dff565b005b34801561043757600080fd5b50610452600480360381019061044d9190612dc5565b610f45565b005b34801561046057600080fd5b5061047b60048036038101906104769190612d58565b610f65565b604051610488919061346e565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190612feb565b611013565b005b3480156104c657600080fd5b506104e160048036038101906104dc9190612d58565b611099565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190612feb565b611170565b604051610517919061370d565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612fa2565b6111e1565b005b34801561055557600080fd5b5061055e611277565b60405161056b9190613490565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190612feb565b61128a565b6040516105a89190613407565b60405180910390f35b3480156105bd57600080fd5b506105c661133c565b6040516105d391906134ab565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190612d58565b6113ca565b604051610610919061370d565b60405180910390f35b34801561062557600080fd5b5061062e611482565b005b34801561063c57600080fd5b5061065760048036038101906106529190612feb565b61150a565b005b34801561066557600080fd5b5061066e611590565b60405161067b9190613407565b60405180910390f35b34801561069057600080fd5b506106996115ba565b6040516106a691906134ab565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190612e9b565b61164c565b005b3480156106e457600080fd5b506106ff60048036038101906106fa9190612e18565b6117cd565b005b34801561070d57600080fd5b5061072860048036038101906107239190612feb565b61182f565b60405161073591906134ab565b60405180910390f35b34801561074a57600080fd5b506107536118e2565b604051610760919061370d565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190612d58565b6118e8565b60405161079d9190613490565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c89190612d85565b611908565b6040516107da9190613490565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190612d58565b61199c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087f575061087e82611aac565b5b9050919050565b61088e611b8e565b73ffffffffffffffffffffffffffffffffffffffff166108ac611590565b73ffffffffffffffffffffffffffffffffffffffff1614610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f99061364d565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b60606000805461092e906139f6565b80601f016020809104026020016040519081016040528092919081815260200182805461095a906139f6565b80156109a75780601f1061097c576101008083540402835291602001916109a7565b820191906000526020600020905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b60006109bc82611b96565b6109fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f29061362d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a418261128a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa9906136ad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ad1611b8e565b73ffffffffffffffffffffffffffffffffffffffff161480610b005750610aff81610afa611b8e565b611908565b5b610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b36906135ad565b60405180910390fd5b610b498383611c02565b505050565b600c5481565b6000600880549050905090565b600e5481565b610b78610b72611b8e565b82611cbb565b610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae906136cd565b60405180910390fd5b610bc2838383611d99565b505050565b6000610bd2836113ca565b8210610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a906134cd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c74611b8e565b73ffffffffffffffffffffffffffffffffffffffff16610c92611590565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf9061364d565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d4b611b8e565b73ffffffffffffffffffffffffffffffffffffffff16610d69611590565b73ffffffffffffffffffffffffffffffffffffffff1614610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db69061364d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610dfd57600080fd5b565b6000610e09610b54565b9050600f60009054906101000a900460ff1615610e2557600080fd5b60008211610e3257600080fd5b600e54821115610e4157600080fd5b600d548282610e50919061382b565b1115610e5b57600080fd5b610e63611590565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f095760011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610f085781600c54610efb91906138b2565b341015610f0757600080fd5b5b5b6000600190505b828111610f3f57610f2c848284610f27919061382b565b611ff5565b8080610f3790613a59565b915050610f10565b50505050565b610f60838383604051806020016040528060008152506117cd565b505050565b60606000610f72836113ca565b905060008167ffffffffffffffff811115610f9057610f8f613bbe565b5b604051908082528060200260200182016040528015610fbe5781602001602082028036833780820191505090505b50905060005b8281101561100857610fd68582610bc7565b828281518110610fe957610fe8613b8f565b5b602002602001018181525050808061100090613a59565b915050610fc4565b508092505050919050565b61101b611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611039611590565b73ffffffffffffffffffffffffffffffffffffffff161461108f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110869061364d565b60405180910390fd5b80600c8190555050565b6110a1611b8e565b73ffffffffffffffffffffffffffffffffffffffff166110bf611590565b73ffffffffffffffffffffffffffffffffffffffff1614611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c9061364d565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061117a610b54565b82106111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b2906136ed565b60405180910390fd5b600882815481106111cf576111ce613b8f565b5b90600052602060002001549050919050565b6111e9611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611207611590565b73ffffffffffffffffffffffffffffffffffffffff161461125d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112549061364d565b60405180910390fd5b80600b9080519060200190611273929190612b6c565b5050565b600f60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a906135ed565b60405180910390fd5b80915050919050565b600b8054611349906139f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611375906139f6565b80156113c25780601f10611397576101008083540402835291602001916113c2565b820191906000526020600020905b8154815290600101906020018083116113a557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561143b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611432906135cd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148a611b8e565b73ffffffffffffffffffffffffffffffffffffffff166114a8611590565b73ffffffffffffffffffffffffffffffffffffffff16146114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f59061364d565b60405180910390fd5b6115086000612013565b565b611512611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611530611590565b73ffffffffffffffffffffffffffffffffffffffff1614611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d9061364d565b60405180910390fd5b80600e8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115c9906139f6565b80601f01602080910402602001604051908101604052809291908181526020018280546115f5906139f6565b80156116425780601f1061161757610100808354040283529160200191611642565b820191906000526020600020905b81548152906001019060200180831161162557829003601f168201915b5050505050905090565b611654611b8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b99061356d565b60405180910390fd5b80600560006116cf611b8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661177c611b8e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117c19190613490565b60405180910390a35050565b6117de6117d8611b8e565b83611cbb565b61181d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611814906136cd565b60405180910390fd5b611829848484846120d9565b50505050565b606061183a82611b96565b611879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118709061368d565b60405180910390fd5b6000611883612135565b905060008151116118a357604051806020016040528060008152506118da565b806118b96001856118b4919061390c565b6121c7565b6040516020016118ca9291906133e3565b6040516020818303038152906040525b915050919050565b600d5481565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119a4611b8e565b73ffffffffffffffffffffffffffffffffffffffff166119c2611590565b73ffffffffffffffffffffffffffffffffffffffff1614611a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0f9061364d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f9061350d565b60405180910390fd5b611a9181612013565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b7757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b875750611b8682612328565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c758361128a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611cc682611b96565b611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc9061358d565b60405180910390fd5b6000611d108361128a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d7f57508373ffffffffffffffffffffffffffffffffffffffff16611d67846109b1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d905750611d8f8185611908565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611db98261128a565b73ffffffffffffffffffffffffffffffffffffffff1614611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e069061366d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e769061354d565b60405180910390fd5b611e8a838383612392565b611e95600082611c02565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ee5919061390c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f3c919061382b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61200f8282604051806020016040528060008152506124a6565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120e4848484611d99565b6120f084848484612501565b61212f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612126906134ed565b60405180910390fd5b50505050565b6060600b8054612144906139f6565b80601f0160208091040260200160405190810160405280929190818152602001828054612170906139f6565b80156121bd5780601f10612192576101008083540402835291602001916121bd565b820191906000526020600020905b8154815290600101906020018083116121a057829003601f168201915b5050505050905090565b6060600082141561220f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612323565b600082905060005b6000821461224157808061222a90613a59565b915050600a8261223a9190613881565b9150612217565b60008167ffffffffffffffff81111561225d5761225c613bbe565b5b6040519080825280601f01601f19166020018201604052801561228f5781602001600182028036833780820191505090505b5090505b6000851461231c576001826122a8919061390c565b9150600a856122b79190613aa2565b60306122c3919061382b565b60f81b8183815181106122d9576122d8613b8f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123159190613881565b9450612293565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61239d838383611aa7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e0576123db81612698565b61241f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461241e5761241d83826126e1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124625761245d8161284e565b6124a1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124a05761249f828261291f565b5b5b505050565b6124b0838361299e565b6124bd6000848484612501565b6124fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f3906134ed565b60405180910390fd5b505050565b60006125228473ffffffffffffffffffffffffffffffffffffffff16611a94565b1561268b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261254b611b8e565b8786866040518563ffffffff1660e01b815260040161256d9493929190613422565b602060405180830381600087803b15801561258757600080fd5b505af19250505080156125b857506040513d601f19601f820116820180604052508101906125b59190612f75565b60015b61263b573d80600081146125e8576040519150601f19603f3d011682016040523d82523d6000602084013e6125ed565b606091505b50600081511415612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a906134ed565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612690565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126ee846113ca565b6126f8919061390c565b90506000600760008481526020019081526020016000205490508181146127dd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612862919061390c565b905060006009600084815260200190815260200160002054905060006008838154811061289257612891613b8f565b5b9060005260206000200154905080600883815481106128b4576128b3613b8f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061290357612902613b60565b5b6001900381819060005260206000200160009055905550505050565b600061292a836113ca565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a059061360d565b60405180910390fd5b612a1781611b96565b15612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e9061352d565b60405180910390fd5b612a6360008383612392565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ab3919061382b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612b78906139f6565b90600052602060002090601f016020900481019282612b9a5760008555612be1565b82601f10612bb357805160ff1916838001178555612be1565b82800160010185558215612be1579182015b82811115612be0578251825591602001919060010190612bc5565b5b509050612bee9190612bf2565b5090565b5b80821115612c0b576000816000905550600101612bf3565b5090565b6000612c22612c1d8461374d565b613728565b905082815260208101848484011115612c3e57612c3d613bf2565b5b612c498482856139b4565b509392505050565b6000612c64612c5f8461377e565b613728565b905082815260208101848484011115612c8057612c7f613bf2565b5b612c8b8482856139b4565b509392505050565b600081359050612ca281614108565b92915050565b600081359050612cb78161411f565b92915050565b600081359050612ccc81614136565b92915050565b600081519050612ce181614136565b92915050565b600082601f830112612cfc57612cfb613bed565b5b8135612d0c848260208601612c0f565b91505092915050565b600082601f830112612d2a57612d29613bed565b5b8135612d3a848260208601612c51565b91505092915050565b600081359050612d528161414d565b92915050565b600060208284031215612d6e57612d6d613bfc565b5b6000612d7c84828501612c93565b91505092915050565b60008060408385031215612d9c57612d9b613bfc565b5b6000612daa85828601612c93565b9250506020612dbb85828601612c93565b9150509250929050565b600080600060608486031215612dde57612ddd613bfc565b5b6000612dec86828701612c93565b9350506020612dfd86828701612c93565b9250506040612e0e86828701612d43565b9150509250925092565b60008060008060808587031215612e3257612e31613bfc565b5b6000612e4087828801612c93565b9450506020612e5187828801612c93565b9350506040612e6287828801612d43565b925050606085013567ffffffffffffffff811115612e8357612e82613bf7565b5b612e8f87828801612ce7565b91505092959194509250565b60008060408385031215612eb257612eb1613bfc565b5b6000612ec085828601612c93565b9250506020612ed185828601612ca8565b9150509250929050565b60008060408385031215612ef257612ef1613bfc565b5b6000612f0085828601612c93565b9250506020612f1185828601612d43565b9150509250929050565b600060208284031215612f3157612f30613bfc565b5b6000612f3f84828501612ca8565b91505092915050565b600060208284031215612f5e57612f5d613bfc565b5b6000612f6c84828501612cbd565b91505092915050565b600060208284031215612f8b57612f8a613bfc565b5b6000612f9984828501612cd2565b91505092915050565b600060208284031215612fb857612fb7613bfc565b5b600082013567ffffffffffffffff811115612fd657612fd5613bf7565b5b612fe284828501612d15565b91505092915050565b60006020828403121561300157613000613bfc565b5b600061300f84828501612d43565b91505092915050565b600061302483836133c5565b60208301905092915050565b61303981613940565b82525050565b600061304a826137bf565b61305481856137ed565b935061305f836137af565b8060005b838110156130905781516130778882613018565b9750613082836137e0565b925050600181019050613063565b5085935050505092915050565b6130a681613952565b82525050565b60006130b7826137ca565b6130c181856137fe565b93506130d18185602086016139c3565b6130da81613c01565b840191505092915050565b60006130f0826137d5565b6130fa818561380f565b935061310a8185602086016139c3565b61311381613c01565b840191505092915050565b6000613129826137d5565b6131338185613820565b93506131438185602086016139c3565b80840191505092915050565b600061315c602b8361380f565b915061316782613c12565b604082019050919050565b600061317f60328361380f565b915061318a82613c61565b604082019050919050565b60006131a260268361380f565b91506131ad82613cb0565b604082019050919050565b60006131c5601c8361380f565b91506131d082613cff565b602082019050919050565b60006131e860248361380f565b91506131f382613d28565b604082019050919050565b600061320b60198361380f565b915061321682613d77565b602082019050919050565b600061322e602c8361380f565b915061323982613da0565b604082019050919050565b600061325160388361380f565b915061325c82613def565b604082019050919050565b6000613274602a8361380f565b915061327f82613e3e565b604082019050919050565b600061329760298361380f565b91506132a282613e8d565b604082019050919050565b60006132ba60208361380f565b91506132c582613edc565b602082019050919050565b60006132dd602c8361380f565b91506132e882613f05565b604082019050919050565b600061330060208361380f565b915061330b82613f54565b602082019050919050565b600061332360298361380f565b915061332e82613f7d565b604082019050919050565b6000613346602f8361380f565b915061335182613fcc565b604082019050919050565b600061336960218361380f565b91506133748261401b565b604082019050919050565b600061338c60318361380f565b91506133978261406a565b604082019050919050565b60006133af602c8361380f565b91506133ba826140b9565b604082019050919050565b6133ce816139aa565b82525050565b6133dd816139aa565b82525050565b60006133ef828561311e565b91506133fb828461311e565b91508190509392505050565b600060208201905061341c6000830184613030565b92915050565b60006080820190506134376000830187613030565b6134446020830186613030565b61345160408301856133d4565b818103606083015261346381846130ac565b905095945050505050565b60006020820190508181036000830152613488818461303f565b905092915050565b60006020820190506134a5600083018461309d565b92915050565b600060208201905081810360008301526134c581846130e5565b905092915050565b600060208201905081810360008301526134e68161314f565b9050919050565b6000602082019050818103600083015261350681613172565b9050919050565b6000602082019050818103600083015261352681613195565b9050919050565b60006020820190508181036000830152613546816131b8565b9050919050565b60006020820190508181036000830152613566816131db565b9050919050565b60006020820190508181036000830152613586816131fe565b9050919050565b600060208201905081810360008301526135a681613221565b9050919050565b600060208201905081810360008301526135c681613244565b9050919050565b600060208201905081810360008301526135e681613267565b9050919050565b600060208201905081810360008301526136068161328a565b9050919050565b60006020820190508181036000830152613626816132ad565b9050919050565b60006020820190508181036000830152613646816132d0565b9050919050565b60006020820190508181036000830152613666816132f3565b9050919050565b6000602082019050818103600083015261368681613316565b9050919050565b600060208201905081810360008301526136a681613339565b9050919050565b600060208201905081810360008301526136c68161335c565b9050919050565b600060208201905081810360008301526136e68161337f565b9050919050565b60006020820190508181036000830152613706816133a2565b9050919050565b600060208201905061372260008301846133d4565b92915050565b6000613732613743565b905061373e8282613a28565b919050565b6000604051905090565b600067ffffffffffffffff82111561376857613767613bbe565b5b61377182613c01565b9050602081019050919050565b600067ffffffffffffffff82111561379957613798613bbe565b5b6137a282613c01565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613836826139aa565b9150613841836139aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561387657613875613ad3565b5b828201905092915050565b600061388c826139aa565b9150613897836139aa565b9250826138a7576138a6613b02565b5b828204905092915050565b60006138bd826139aa565b91506138c8836139aa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561390157613900613ad3565b5b828202905092915050565b6000613917826139aa565b9150613922836139aa565b92508282101561393557613934613ad3565b5b828203905092915050565b600061394b8261398a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139e15780820151818401526020810190506139c6565b838111156139f0576000848401525b50505050565b60006002820490506001821680613a0e57607f821691505b60208210811415613a2257613a21613b31565b5b50919050565b613a3182613c01565b810181811067ffffffffffffffff82111715613a5057613a4f613bbe565b5b80604052505050565b6000613a64826139aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a9757613a96613ad3565b5b600182019050919050565b6000613aad826139aa565b9150613ab8836139aa565b925082613ac857613ac7613b02565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61411181613940565b811461411c57600080fd5b50565b61412881613952565b811461413357600080fd5b50565b61413f8161395e565b811461414a57600080fd5b50565b614156816139aa565b811461416157600080fd5b5056fea26469706673582212203a688f4287f2ab3c98c4c8fa2d52bdf5e0ca7069829baab590c2a98fa461814864736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d556e757375616c5768616c65730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065748414c45530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5971565870357031737976625061485a65474b4b653376587a3177706e74456f746b31535163794a4d6d53352f000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101f95760003560e01c80634f6ccce71161010d5780638da5cb5b116100a0578063c87b56dd1161006f578063c87b56dd14610701578063d5abeb011461073e578063d936547e14610769578063e985e9c5146107a6578063f2fde38b146107e3576101f9565b80638da5cb5b1461065957806395d89b4114610684578063a22cb465146106af578063b88d4fde146106d8576101f9565b80636c0360eb116100dc5780636c0360eb146105b157806370a08231146105dc578063715018a6146106195780637f00c7a614610630576101f9565b80634f6ccce7146104e357806355f804b3146105205780635c975abb146105495780636352211e14610574576101f9565b806323b872dd1161019057806340c10f191161015f57806340c10f191461040f57806342842e0e1461042b578063438b63001461045457806344a0d68a146104915780634a4c560d146104ba576101f9565b806323b872dd146103765780632f745c591461039f57806330cc7ae0146103dc5780633ccfd60b14610405576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806313faede6146102f557806318160ddd14610320578063239c70ae1461034b576101f9565b806301ffc9a7146101fe57806302329a291461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612f48565b61080c565b6040516102329190613490565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612f1b565b610886565b005b34801561027057600080fd5b5061027961091f565b60405161028691906134ab565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190612feb565b6109b1565b6040516102c39190613407565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee9190612edb565b610a36565b005b34801561030157600080fd5b5061030a610b4e565b604051610317919061370d565b60405180910390f35b34801561032c57600080fd5b50610335610b54565b604051610342919061370d565b60405180910390f35b34801561035757600080fd5b50610360610b61565b60405161036d919061370d565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612dc5565b610b67565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190612edb565b610bc7565b6040516103d3919061370d565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190612d58565b610c6c565b005b61040d610d43565b005b61042960048036038101906104249190612edb565b610dff565b005b34801561043757600080fd5b50610452600480360381019061044d9190612dc5565b610f45565b005b34801561046057600080fd5b5061047b60048036038101906104769190612d58565b610f65565b604051610488919061346e565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190612feb565b611013565b005b3480156104c657600080fd5b506104e160048036038101906104dc9190612d58565b611099565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190612feb565b611170565b604051610517919061370d565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190612fa2565b6111e1565b005b34801561055557600080fd5b5061055e611277565b60405161056b9190613490565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190612feb565b61128a565b6040516105a89190613407565b60405180910390f35b3480156105bd57600080fd5b506105c661133c565b6040516105d391906134ab565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190612d58565b6113ca565b604051610610919061370d565b60405180910390f35b34801561062557600080fd5b5061062e611482565b005b34801561063c57600080fd5b5061065760048036038101906106529190612feb565b61150a565b005b34801561066557600080fd5b5061066e611590565b60405161067b9190613407565b60405180910390f35b34801561069057600080fd5b506106996115ba565b6040516106a691906134ab565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190612e9b565b61164c565b005b3480156106e457600080fd5b506106ff60048036038101906106fa9190612e18565b6117cd565b005b34801561070d57600080fd5b5061072860048036038101906107239190612feb565b61182f565b60405161073591906134ab565b60405180910390f35b34801561074a57600080fd5b506107536118e2565b604051610760919061370d565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190612d58565b6118e8565b60405161079d9190613490565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c89190612d85565b611908565b6040516107da9190613490565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190612d58565b61199c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087f575061087e82611aac565b5b9050919050565b61088e611b8e565b73ffffffffffffffffffffffffffffffffffffffff166108ac611590565b73ffffffffffffffffffffffffffffffffffffffff1614610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f99061364d565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b60606000805461092e906139f6565b80601f016020809104026020016040519081016040528092919081815260200182805461095a906139f6565b80156109a75780601f1061097c576101008083540402835291602001916109a7565b820191906000526020600020905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b60006109bc82611b96565b6109fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f29061362d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a418261128a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa9906136ad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ad1611b8e565b73ffffffffffffffffffffffffffffffffffffffff161480610b005750610aff81610afa611b8e565b611908565b5b610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b36906135ad565b60405180910390fd5b610b498383611c02565b505050565b600c5481565b6000600880549050905090565b600e5481565b610b78610b72611b8e565b82611cbb565b610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae906136cd565b60405180910390fd5b610bc2838383611d99565b505050565b6000610bd2836113ca565b8210610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a906134cd565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c74611b8e565b73ffffffffffffffffffffffffffffffffffffffff16610c92611590565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf9061364d565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d4b611b8e565b73ffffffffffffffffffffffffffffffffffffffff16610d69611590565b73ffffffffffffffffffffffffffffffffffffffff1614610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db69061364d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610dfd57600080fd5b565b6000610e09610b54565b9050600f60009054906101000a900460ff1615610e2557600080fd5b60008211610e3257600080fd5b600e54821115610e4157600080fd5b600d548282610e50919061382b565b1115610e5b57600080fd5b610e63611590565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f095760011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610f085781600c54610efb91906138b2565b341015610f0757600080fd5b5b5b6000600190505b828111610f3f57610f2c848284610f27919061382b565b611ff5565b8080610f3790613a59565b915050610f10565b50505050565b610f60838383604051806020016040528060008152506117cd565b505050565b60606000610f72836113ca565b905060008167ffffffffffffffff811115610f9057610f8f613bbe565b5b604051908082528060200260200182016040528015610fbe5781602001602082028036833780820191505090505b50905060005b8281101561100857610fd68582610bc7565b828281518110610fe957610fe8613b8f565b5b602002602001018181525050808061100090613a59565b915050610fc4565b508092505050919050565b61101b611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611039611590565b73ffffffffffffffffffffffffffffffffffffffff161461108f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110869061364d565b60405180910390fd5b80600c8190555050565b6110a1611b8e565b73ffffffffffffffffffffffffffffffffffffffff166110bf611590565b73ffffffffffffffffffffffffffffffffffffffff1614611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c9061364d565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061117a610b54565b82106111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b2906136ed565b60405180910390fd5b600882815481106111cf576111ce613b8f565b5b90600052602060002001549050919050565b6111e9611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611207611590565b73ffffffffffffffffffffffffffffffffffffffff161461125d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112549061364d565b60405180910390fd5b80600b9080519060200190611273929190612b6c565b5050565b600f60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a906135ed565b60405180910390fd5b80915050919050565b600b8054611349906139f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611375906139f6565b80156113c25780601f10611397576101008083540402835291602001916113c2565b820191906000526020600020905b8154815290600101906020018083116113a557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561143b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611432906135cd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148a611b8e565b73ffffffffffffffffffffffffffffffffffffffff166114a8611590565b73ffffffffffffffffffffffffffffffffffffffff16146114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f59061364d565b60405180910390fd5b6115086000612013565b565b611512611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611530611590565b73ffffffffffffffffffffffffffffffffffffffff1614611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d9061364d565b60405180910390fd5b80600e8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115c9906139f6565b80601f01602080910402602001604051908101604052809291908181526020018280546115f5906139f6565b80156116425780601f1061161757610100808354040283529160200191611642565b820191906000526020600020905b81548152906001019060200180831161162557829003601f168201915b5050505050905090565b611654611b8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b99061356d565b60405180910390fd5b80600560006116cf611b8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661177c611b8e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117c19190613490565b60405180910390a35050565b6117de6117d8611b8e565b83611cbb565b61181d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611814906136cd565b60405180910390fd5b611829848484846120d9565b50505050565b606061183a82611b96565b611879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118709061368d565b60405180910390fd5b6000611883612135565b905060008151116118a357604051806020016040528060008152506118da565b806118b96001856118b4919061390c565b6121c7565b6040516020016118ca9291906133e3565b6040516020818303038152906040525b915050919050565b600d5481565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119a4611b8e565b73ffffffffffffffffffffffffffffffffffffffff166119c2611590565b73ffffffffffffffffffffffffffffffffffffffff1614611a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0f9061364d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f9061350d565b60405180910390fd5b611a9181612013565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b7757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b875750611b8682612328565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c758361128a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611cc682611b96565b611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc9061358d565b60405180910390fd5b6000611d108361128a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d7f57508373ffffffffffffffffffffffffffffffffffffffff16611d67846109b1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d905750611d8f8185611908565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611db98261128a565b73ffffffffffffffffffffffffffffffffffffffff1614611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e069061366d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e769061354d565b60405180910390fd5b611e8a838383612392565b611e95600082611c02565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ee5919061390c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f3c919061382b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61200f8282604051806020016040528060008152506124a6565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120e4848484611d99565b6120f084848484612501565b61212f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612126906134ed565b60405180910390fd5b50505050565b6060600b8054612144906139f6565b80601f0160208091040260200160405190810160405280929190818152602001828054612170906139f6565b80156121bd5780601f10612192576101008083540402835291602001916121bd565b820191906000526020600020905b8154815290600101906020018083116121a057829003601f168201915b5050505050905090565b6060600082141561220f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612323565b600082905060005b6000821461224157808061222a90613a59565b915050600a8261223a9190613881565b9150612217565b60008167ffffffffffffffff81111561225d5761225c613bbe565b5b6040519080825280601f01601f19166020018201604052801561228f5781602001600182028036833780820191505090505b5090505b6000851461231c576001826122a8919061390c565b9150600a856122b79190613aa2565b60306122c3919061382b565b60f81b8183815181106122d9576122d8613b8f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123159190613881565b9450612293565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61239d838383611aa7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e0576123db81612698565b61241f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461241e5761241d83826126e1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124625761245d8161284e565b6124a1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124a05761249f828261291f565b5b5b505050565b6124b0838361299e565b6124bd6000848484612501565b6124fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f3906134ed565b60405180910390fd5b505050565b60006125228473ffffffffffffffffffffffffffffffffffffffff16611a94565b1561268b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261254b611b8e565b8786866040518563ffffffff1660e01b815260040161256d9493929190613422565b602060405180830381600087803b15801561258757600080fd5b505af19250505080156125b857506040513d601f19601f820116820180604052508101906125b59190612f75565b60015b61263b573d80600081146125e8576040519150601f19603f3d011682016040523d82523d6000602084013e6125ed565b606091505b50600081511415612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a906134ed565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612690565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126ee846113ca565b6126f8919061390c565b90506000600760008481526020019081526020016000205490508181146127dd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612862919061390c565b905060006009600084815260200190815260200160002054905060006008838154811061289257612891613b8f565b5b9060005260206000200154905080600883815481106128b4576128b3613b8f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061290357612902613b60565b5b6001900381819060005260206000200160009055905550505050565b600061292a836113ca565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a059061360d565b60405180910390fd5b612a1781611b96565b15612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e9061352d565b60405180910390fd5b612a6360008383612392565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ab3919061382b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612b78906139f6565b90600052602060002090601f016020900481019282612b9a5760008555612be1565b82601f10612bb357805160ff1916838001178555612be1565b82800160010185558215612be1579182015b82811115612be0578251825591602001919060010190612bc5565b5b509050612bee9190612bf2565b5090565b5b80821115612c0b576000816000905550600101612bf3565b5090565b6000612c22612c1d8461374d565b613728565b905082815260208101848484011115612c3e57612c3d613bf2565b5b612c498482856139b4565b509392505050565b6000612c64612c5f8461377e565b613728565b905082815260208101848484011115612c8057612c7f613bf2565b5b612c8b8482856139b4565b509392505050565b600081359050612ca281614108565b92915050565b600081359050612cb78161411f565b92915050565b600081359050612ccc81614136565b92915050565b600081519050612ce181614136565b92915050565b600082601f830112612cfc57612cfb613bed565b5b8135612d0c848260208601612c0f565b91505092915050565b600082601f830112612d2a57612d29613bed565b5b8135612d3a848260208601612c51565b91505092915050565b600081359050612d528161414d565b92915050565b600060208284031215612d6e57612d6d613bfc565b5b6000612d7c84828501612c93565b91505092915050565b60008060408385031215612d9c57612d9b613bfc565b5b6000612daa85828601612c93565b9250506020612dbb85828601612c93565b9150509250929050565b600080600060608486031215612dde57612ddd613bfc565b5b6000612dec86828701612c93565b9350506020612dfd86828701612c93565b9250506040612e0e86828701612d43565b9150509250925092565b60008060008060808587031215612e3257612e31613bfc565b5b6000612e4087828801612c93565b9450506020612e5187828801612c93565b9350506040612e6287828801612d43565b925050606085013567ffffffffffffffff811115612e8357612e82613bf7565b5b612e8f87828801612ce7565b91505092959194509250565b60008060408385031215612eb257612eb1613bfc565b5b6000612ec085828601612c93565b9250506020612ed185828601612ca8565b9150509250929050565b60008060408385031215612ef257612ef1613bfc565b5b6000612f0085828601612c93565b9250506020612f1185828601612d43565b9150509250929050565b600060208284031215612f3157612f30613bfc565b5b6000612f3f84828501612ca8565b91505092915050565b600060208284031215612f5e57612f5d613bfc565b5b6000612f6c84828501612cbd565b91505092915050565b600060208284031215612f8b57612f8a613bfc565b5b6000612f9984828501612cd2565b91505092915050565b600060208284031215612fb857612fb7613bfc565b5b600082013567ffffffffffffffff811115612fd657612fd5613bf7565b5b612fe284828501612d15565b91505092915050565b60006020828403121561300157613000613bfc565b5b600061300f84828501612d43565b91505092915050565b600061302483836133c5565b60208301905092915050565b61303981613940565b82525050565b600061304a826137bf565b61305481856137ed565b935061305f836137af565b8060005b838110156130905781516130778882613018565b9750613082836137e0565b925050600181019050613063565b5085935050505092915050565b6130a681613952565b82525050565b60006130b7826137ca565b6130c181856137fe565b93506130d18185602086016139c3565b6130da81613c01565b840191505092915050565b60006130f0826137d5565b6130fa818561380f565b935061310a8185602086016139c3565b61311381613c01565b840191505092915050565b6000613129826137d5565b6131338185613820565b93506131438185602086016139c3565b80840191505092915050565b600061315c602b8361380f565b915061316782613c12565b604082019050919050565b600061317f60328361380f565b915061318a82613c61565b604082019050919050565b60006131a260268361380f565b91506131ad82613cb0565b604082019050919050565b60006131c5601c8361380f565b91506131d082613cff565b602082019050919050565b60006131e860248361380f565b91506131f382613d28565b604082019050919050565b600061320b60198361380f565b915061321682613d77565b602082019050919050565b600061322e602c8361380f565b915061323982613da0565b604082019050919050565b600061325160388361380f565b915061325c82613def565b604082019050919050565b6000613274602a8361380f565b915061327f82613e3e565b604082019050919050565b600061329760298361380f565b91506132a282613e8d565b604082019050919050565b60006132ba60208361380f565b91506132c582613edc565b602082019050919050565b60006132dd602c8361380f565b91506132e882613f05565b604082019050919050565b600061330060208361380f565b915061330b82613f54565b602082019050919050565b600061332360298361380f565b915061332e82613f7d565b604082019050919050565b6000613346602f8361380f565b915061335182613fcc565b604082019050919050565b600061336960218361380f565b91506133748261401b565b604082019050919050565b600061338c60318361380f565b91506133978261406a565b604082019050919050565b60006133af602c8361380f565b91506133ba826140b9565b604082019050919050565b6133ce816139aa565b82525050565b6133dd816139aa565b82525050565b60006133ef828561311e565b91506133fb828461311e565b91508190509392505050565b600060208201905061341c6000830184613030565b92915050565b60006080820190506134376000830187613030565b6134446020830186613030565b61345160408301856133d4565b818103606083015261346381846130ac565b905095945050505050565b60006020820190508181036000830152613488818461303f565b905092915050565b60006020820190506134a5600083018461309d565b92915050565b600060208201905081810360008301526134c581846130e5565b905092915050565b600060208201905081810360008301526134e68161314f565b9050919050565b6000602082019050818103600083015261350681613172565b9050919050565b6000602082019050818103600083015261352681613195565b9050919050565b60006020820190508181036000830152613546816131b8565b9050919050565b60006020820190508181036000830152613566816131db565b9050919050565b60006020820190508181036000830152613586816131fe565b9050919050565b600060208201905081810360008301526135a681613221565b9050919050565b600060208201905081810360008301526135c681613244565b9050919050565b600060208201905081810360008301526135e681613267565b9050919050565b600060208201905081810360008301526136068161328a565b9050919050565b60006020820190508181036000830152613626816132ad565b9050919050565b60006020820190508181036000830152613646816132d0565b9050919050565b60006020820190508181036000830152613666816132f3565b9050919050565b6000602082019050818103600083015261368681613316565b9050919050565b600060208201905081810360008301526136a681613339565b9050919050565b600060208201905081810360008301526136c68161335c565b9050919050565b600060208201905081810360008301526136e68161337f565b9050919050565b60006020820190508181036000830152613706816133a2565b9050919050565b600060208201905061372260008301846133d4565b92915050565b6000613732613743565b905061373e8282613a28565b919050565b6000604051905090565b600067ffffffffffffffff82111561376857613767613bbe565b5b61377182613c01565b9050602081019050919050565b600067ffffffffffffffff82111561379957613798613bbe565b5b6137a282613c01565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613836826139aa565b9150613841836139aa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561387657613875613ad3565b5b828201905092915050565b600061388c826139aa565b9150613897836139aa565b9250826138a7576138a6613b02565b5b828204905092915050565b60006138bd826139aa565b91506138c8836139aa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561390157613900613ad3565b5b828202905092915050565b6000613917826139aa565b9150613922836139aa565b92508282101561393557613934613ad3565b5b828203905092915050565b600061394b8261398a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139e15780820151818401526020810190506139c6565b838111156139f0576000848401525b50505050565b60006002820490506001821680613a0e57607f821691505b60208210811415613a2257613a21613b31565b5b50919050565b613a3182613c01565b810181811067ffffffffffffffff82111715613a5057613a4f613bbe565b5b80604052505050565b6000613a64826139aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a9757613a96613ad3565b5b600182019050919050565b6000613aad826139aa565b9150613ab8836139aa565b925082613ac857613ac7613b02565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61411181613940565b811461411c57600080fd5b50565b61412881613952565b811461413357600080fd5b50565b61413f8161395e565b811461414a57600080fd5b50565b614156816139aa565b811461416157600080fd5b5056fea26469706673582212203a688f4287f2ab3c98c4c8fa2d52bdf5e0ca7069829baab590c2a98fa461814864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d556e757375616c5768616c65730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065748414c45530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5971565870357031737976625061485a65474b4b653376587a3177706e74456f746b31535163794a4d6d53352f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): UnusualWhales
Arg [1] : _symbol (string): WHALES
Arg [2] : _initBaseURI (string): https://gateway.pinata.cloud/ipfs/QmYqVXp5p1syvbPaHZeGKKe3vXz1wpntEotk1SQcyJMmS5/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 556e757375616c5768616c657300000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 5748414c45530000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f516d5971565870357031737976625061485a65474b4b653376587a317770
Arg [10] : 6e74456f746b31535163794a4d6d53352f000000000000000000000000000000
Deployed Bytecode Sourcemap
43280:2668:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36975:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45546:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24867:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26426:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25949:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43395:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37615:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43469:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27316:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37283:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45725:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45831:114;;;:::i;:::-;;43933:501;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27726:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44440:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45228:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45625:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37805:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45440:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43507:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24561:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43369:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24291:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2490:94;;;;;;;;;;;;;:::i;:::-;;45316:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1839:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25036:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26719:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27982:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44794:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43433:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43538:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27085:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2739:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36975:224;37077:4;37116:35;37101:50;;;:11;:50;;;;:90;;;;37155:36;37179:11;37155:23;:36::i;:::-;37101:90;37094:97;;36975:224;;;:::o;45546:73::-;2070:12;:10;:12::i;:::-;2059:23;;:7;:5;:7::i;:::-;:23;;;2051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45607:6:::1;45598;;:15;;;;;;;;;;;;;;;;;;45546:73:::0;:::o;24867:100::-;24921:13;24954:5;24947:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24867:100;:::o;26426:221::-;26502:7;26530:16;26538:7;26530;:16::i;:::-;26522:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26615:15;:24;26631:7;26615:24;;;;;;;;;;;;;;;;;;;;;26608:31;;26426:221;;;:::o;25949:411::-;26030:13;26046:23;26061:7;26046:14;:23::i;:::-;26030:39;;26094:5;26088:11;;:2;:11;;;;26080:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26188:5;26172:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26197:37;26214:5;26221:12;:10;:12::i;:::-;26197:16;:37::i;:::-;26172:62;26150:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26331:21;26340:2;26344:7;26331:8;:21::i;:::-;26019:341;25949:411;;:::o;43395:33::-;;;;:::o;37615:113::-;37676:7;37703:10;:17;;;;37696:24;;37615:113;:::o;43469:33::-;;;;:::o;27316:339::-;27511:41;27530:12;:10;:12::i;:::-;27544:7;27511:18;:41::i;:::-;27503:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27619:28;27629:4;27635:2;27639:7;27619:9;:28::i;:::-;27316:339;;;:::o;37283:256::-;37380:7;37416:23;37433:5;37416:16;:23::i;:::-;37408:5;:31;37400:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37505:12;:19;37518:5;37505:19;;;;;;;;;;;;;;;:26;37525:5;37505:26;;;;;;;;;;;;37498:33;;37283:256;;;;:::o;45725:100::-;2070:12;:10;:12::i;:::-;2059:23;;:7;:5;:7::i;:::-;:23;;;2051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45814:5:::1;45793:11;:18;45805:5;45793:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;45725:100:::0;:::o;45831:114::-;2070:12;:10;:12::i;:::-;2059:23;;:7;:5;:7::i;:::-;:23;;;2051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45899:10:::1;45891:24;;:47;45916:21;45891:47;;;;;;;;;;;;;;;;;;;;;;;45883:56;;;::::0;::::1;;45831:114::o:0;43933:501::-;44003:14;44020:13;:11;:13::i;:::-;44003:30;;44049:6;;;;;;;;;;;44048:7;44040:16;;;;;;44085:1;44071:11;:15;44063:24;;;;;;44117:13;;44102:11;:28;;44094:37;;;;;;44170:9;;44155:11;44146:6;:20;;;;:::i;:::-;:33;;44138:42;;;;;;44207:7;:5;:7::i;:::-;44193:21;;:10;:21;;;44189:146;;44257:4;44230:31;;:11;:23;44242:10;44230:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;44227:101;;44304:11;44297:4;;:18;;;;:::i;:::-;44284:9;:31;;44276:40;;;;;;44227:101;44189:146;44348:9;44360:1;44348:13;;44343:86;44368:11;44363:1;:16;44343:86;;44395:26;44405:3;44419:1;44410:6;:10;;;;:::i;:::-;44395:9;:26::i;:::-;44381:3;;;;;:::i;:::-;;;;44343:86;;;;43996:438;43933:501;;:::o;27726:185::-;27864:39;27881:4;27887:2;27891:7;27864:39;;;;;;;;;;;;:16;:39::i;:::-;27726:185;;;:::o;44440:348::-;44515:16;44543:23;44569:17;44579:6;44569:9;:17::i;:::-;44543:43;;44593:25;44635:15;44621:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44593:58;;44663:9;44658:103;44678:15;44674:1;:19;44658:103;;;44723:30;44743:6;44751:1;44723:19;:30::i;:::-;44709:8;44718:1;44709:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;44695:3;;;;;:::i;:::-;;;;44658:103;;;;44774:8;44767:15;;;;44440:348;;;:::o;45228:82::-;2070:12;:10;:12::i;:::-;2059:23;;:7;:5;:7::i;:::-;:23;;;2051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45296:8:::1;45289:4;:15;;;;45228:82:::0;:::o;45625:93::-;2070:12;:10;:12::i;:::-;2059:23;;:7;:5;:7::i;:::-;:23;;;2051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45708:4:::1;45687:11;:18;45699:5;45687:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;45625:93:::0;:::o;37805:233::-;37880:7;37916:30;:28;:30::i;:::-;37908:5;:38;37900:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38013:10;38024:5;38013:17;;;;;;;;:::i;:::-;;;;;;;;;;38006:24;;37805:233;;;:::o;45440:98::-;2070:12;:10;:12::i;:::-;2059:23;;:7;:5;:7::i;:::-;:23;;;2051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45521:11:::1;45511:7;:21;;;;;;;;;;;;:::i;:::-;;45440:98:::0;:::o;43507:26::-;;;;;;;;;;;;;:::o;24561:239::-;24633:7;24653:13;24669:7;:16;24677:7;24669:16;;;;;;;;;;;;;;;;;;;;;24653:32;;24721:1;24704:19;;:5;:19;;;;24696:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24787:5;24780:12;;;24561:239;;;:::o;43369:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24291:208::-;24363:7;24408:1;24391:19;;:5;:19;;;;24383:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24475:9;:16;24485:5;24475:16;;;;;;;;;;;;;;;;24468:23;;24291:208;;;:::o;2490:94::-;2070:12;:10;:12::i;:::-;2059:23;;:7;:5;:7::i;:::-;:23;;;2051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2555:21:::1;2573:1;2555:9;:21::i;:::-;2490:94::o:0;45316:118::-;2070:12;:10;:12::i;:::-;2059:23;;:7;:5;:7::i;:::-;:23;;;2051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45411:17:::1;45395:13;:33;;;;45316:118:::0;:::o;1839:87::-;1885:7;1912:6;;;;;;;;;;;1905:13;;1839:87;:::o;25036:104::-;25092:13;25125:7;25118:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25036:104;:::o;26719:295::-;26834:12;:10;:12::i;:::-;26822:24;;:8;:24;;;;26814:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26934:8;26889:18;:32;26908:12;:10;:12::i;:::-;26889:32;;;;;;;;;;;;;;;:42;26922:8;26889:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26987:8;26958:48;;26973:12;:10;:12::i;:::-;26958:48;;;26997:8;26958:48;;;;;;:::i;:::-;;;;;;;;26719:295;;:::o;27982:328::-;28157:41;28176:12;:10;:12::i;:::-;28190:7;28157:18;:41::i;:::-;28149:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28263:39;28277:4;28283:2;28287:7;28296:5;28263:13;:39::i;:::-;27982:328;;;;:::o;44794:412::-;44892:13;44933:16;44941:7;44933;:16::i;:::-;44917:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45023:28;45054:10;:8;:10::i;:::-;45023:41;;45109:1;45084:14;45078:28;:32;:122;;;;;;;;;;;;;;;;;45146:14;45162:22;45171:1;45163:7;:9;;;;:::i;:::-;45162:20;:22::i;:::-;45129:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45078:122;45071:129;;;44794:412;;;:::o;43433:31::-;;;;:::o;43538:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;27085:164::-;27182:4;27206:18;:25;27225:5;27206:25;;;;;;;;;;;;;;;:35;27232:8;27206:35;;;;;;;;;;;;;;;;;;;;;;;;;27199:42;;27085:164;;;;:::o;2739:192::-;2070:12;:10;:12::i;:::-;2059:23;;:7;:5;:7::i;:::-;:23;;;2051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2848:1:::1;2828:22;;:8;:22;;;;2820:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2904:19;2914:8;2904:9;:19::i;:::-;2739:192:::0;:::o;13560:387::-;13620:4;13828:12;13895:7;13883:20;13875:28;;13938:1;13931:4;:8;13924:15;;;13560:387;;;:::o;35912:126::-;;;;:::o;23922:305::-;24024:4;24076:25;24061:40;;;:11;:40;;;;:105;;;;24133:33;24118:48;;;:11;:48;;;;24061:105;:158;;;;24183:36;24207:11;24183:23;:36::i;:::-;24061:158;24041:178;;23922:305;;;:::o;625:98::-;678:7;705:10;698:17;;625:98;:::o;29820:127::-;29885:4;29937:1;29909:30;;:7;:16;29917:7;29909:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29902:37;;29820:127;;;:::o;33802:174::-;33904:2;33877:15;:24;33893:7;33877:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33960:7;33956:2;33922:46;;33931:23;33946:7;33931:14;:23::i;:::-;33922:46;;;;;;;;;;;;33802:174;;:::o;30114:348::-;30207:4;30232:16;30240:7;30232;:16::i;:::-;30224:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30308:13;30324:23;30339:7;30324:14;:23::i;:::-;30308:39;;30377:5;30366:16;;:7;:16;;;:51;;;;30410:7;30386:31;;:20;30398:7;30386:11;:20::i;:::-;:31;;;30366:51;:87;;;;30421:32;30438:5;30445:7;30421:16;:32::i;:::-;30366:87;30358:96;;;30114:348;;;;:::o;33106:578::-;33265:4;33238:31;;:23;33253:7;33238:14;:23::i;:::-;:31;;;33230:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33348:1;33334:16;;:2;:16;;;;33326:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33404:39;33425:4;33431:2;33435:7;33404:20;:39::i;:::-;33508:29;33525:1;33529:7;33508:8;:29::i;:::-;33569:1;33550:9;:15;33560:4;33550:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33598:1;33581:9;:13;33591:2;33581:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33629:2;33610:7;:16;33618:7;33610:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33668:7;33664:2;33649:27;;33658:4;33649:27;;;;;;;;;;;;33106:578;;;:::o;30804:110::-;30880:26;30890:2;30894:7;30880:26;;;;;;;;;;;;:9;:26::i;:::-;30804:110;;:::o;2939:173::-;2995:16;3014:6;;;;;;;;;;;2995:25;;3040:8;3031:6;;:17;;;;;;;;;;;;;;;;;;3095:8;3064:40;;3085:8;3064:40;;;;;;;;;;;;2984:128;2939:173;:::o;29192:315::-;29349:28;29359:4;29365:2;29369:7;29349:9;:28::i;:::-;29396:48;29419:4;29425:2;29429:7;29438:5;29396:22;:48::i;:::-;29388:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29192:315;;;;:::o;43812:102::-;43872:13;43901:7;43894:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43812:102;:::o;11033:723::-;11089:13;11319:1;11310:5;:10;11306:53;;;11337:10;;;;;;;;;;;;;;;;;;;;;11306:53;11369:12;11384:5;11369:20;;11400:14;11425:78;11440:1;11432:4;:9;11425:78;;11458:8;;;;;:::i;:::-;;;;11489:2;11481:10;;;;;:::i;:::-;;;11425:78;;;11513:19;11545:6;11535:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11513:39;;11563:154;11579:1;11570:5;:10;11563:154;;11607:1;11597:11;;;;;:::i;:::-;;;11674:2;11666:5;:10;;;;:::i;:::-;11653:2;:24;;;;:::i;:::-;11640:39;;11623:6;11630;11623:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11703:2;11694:11;;;;;:::i;:::-;;;11563:154;;;11741:6;11727:21;;;;;11033:723;;;;:::o;10558:157::-;10643:4;10682:25;10667:40;;;:11;:40;;;;10660:47;;10558:157;;;:::o;38651:589::-;38795:45;38822:4;38828:2;38832:7;38795:26;:45::i;:::-;38873:1;38857:18;;:4;:18;;;38853:187;;;38892:40;38924:7;38892:31;:40::i;:::-;38853:187;;;38962:2;38954:10;;:4;:10;;;38950:90;;38981:47;39014:4;39020:7;38981:32;:47::i;:::-;38950:90;38853:187;39068:1;39054:16;;:2;:16;;;39050:183;;;39087:45;39124:7;39087:36;:45::i;:::-;39050:183;;;39160:4;39154:10;;:2;:10;;;39150:83;;39181:40;39209:2;39213:7;39181:27;:40::i;:::-;39150:83;39050:183;38651:589;;;:::o;31141:321::-;31271:18;31277:2;31281:7;31271:5;:18::i;:::-;31322:54;31353:1;31357:2;31361:7;31370:5;31322:22;:54::i;:::-;31300:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31141:321;;;:::o;34541:799::-;34696:4;34717:15;:2;:13;;;:15::i;:::-;34713:620;;;34769:2;34753:36;;;34790:12;:10;:12::i;:::-;34804:4;34810:7;34819:5;34753:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34749:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35012:1;34995:6;:13;:18;34991:272;;;35038:60;;;;;;;;;;:::i;:::-;;;;;;;;34991:272;35213:6;35207:13;35198:6;35194:2;35190:15;35183:38;34749:529;34886:41;;;34876:51;;;:6;:51;;;;34869:58;;;;;34713:620;35317:4;35310:11;;34541:799;;;;;;;:::o;39963:164::-;40067:10;:17;;;;40040:15;:24;40056:7;40040:24;;;;;;;;;;;:44;;;;40095:10;40111:7;40095:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39963:164;:::o;40754:988::-;41020:22;41070:1;41045:22;41062:4;41045:16;:22::i;:::-;:26;;;;:::i;:::-;41020:51;;41082:18;41103:17;:26;41121:7;41103:26;;;;;;;;;;;;41082:47;;41250:14;41236:10;:28;41232:328;;41281:19;41303:12;:18;41316:4;41303:18;;;;;;;;;;;;;;;:34;41322:14;41303:34;;;;;;;;;;;;41281:56;;41387:11;41354:12;:18;41367:4;41354:18;;;;;;;;;;;;;;;:30;41373:10;41354:30;;;;;;;;;;;:44;;;;41504:10;41471:17;:30;41489:11;41471:30;;;;;;;;;;;:43;;;;41266:294;41232:328;41656:17;:26;41674:7;41656:26;;;;;;;;;;;41649:33;;;41700:12;:18;41713:4;41700:18;;;;;;;;;;;;;;;:34;41719:14;41700:34;;;;;;;;;;;41693:41;;;40835:907;;40754:988;;:::o;42037:1079::-;42290:22;42335:1;42315:10;:17;;;;:21;;;;:::i;:::-;42290:46;;42347:18;42368:15;:24;42384:7;42368:24;;;;;;;;;;;;42347:45;;42719:19;42741:10;42752:14;42741:26;;;;;;;;:::i;:::-;;;;;;;;;;42719:48;;42805:11;42780:10;42791;42780:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42916:10;42885:15;:28;42901:11;42885:28;;;;;;;;;;;:41;;;;43057:15;:24;43073:7;43057:24;;;;;;;;;;;43050:31;;;43092:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42108:1008;;;42037:1079;:::o;39541:221::-;39626:14;39643:20;39660:2;39643:16;:20::i;:::-;39626:37;;39701:7;39674:12;:16;39687:2;39674:16;;;;;;;;;;;;;;;:24;39691:6;39674:24;;;;;;;;;;;:34;;;;39748:6;39719:17;:26;39737:7;39719:26;;;;;;;;;;;:35;;;;39615:147;39541:221;;:::o;31798:382::-;31892:1;31878:16;;:2;:16;;;;31870:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31951:16;31959:7;31951;:16::i;:::-;31950:17;31942:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32013:45;32042:1;32046:2;32050:7;32013:20;:45::i;:::-;32088:1;32071:9;:13;32081:2;32071:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32119:2;32100:7;:16;32108:7;32100:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32164:7;32160:2;32139:33;;32156:1;32139:33;;;;;;;;;;;;31798: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:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9798:366::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9798:366;;;:::o;10170:::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10170:366;;;:::o;10542:::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10542:366;;;:::o;10914:::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;10914:366;;;:::o;11286:::-;11428:3;11449:67;11513:2;11508:3;11449:67;:::i;:::-;11442:74;;11525:93;11614:3;11525:93;:::i;:::-;11643:2;11638:3;11634:12;11627:19;;11286:366;;;:::o;11658:::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11658:366;;;:::o;12030:::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12030:366;;;:::o;12402:::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12402:366;;;:::o;12774:::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12774:366;;;:::o;13146:::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13146:366;;;:::o;13518:::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13518:366;;;:::o;13890:::-;14032:3;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14129:93;14218:3;14129:93;:::i;:::-;14247:2;14242:3;14238:12;14231:19;;13890:366;;;:::o;14262:::-;14404:3;14425:67;14489:2;14484:3;14425:67;:::i;:::-;14418:74;;14501:93;14590:3;14501:93;:::i;:::-;14619:2;14614:3;14610:12;14603:19;;14262:366;;;:::o;14634:::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14634:366;;;:::o;15006:::-;15148:3;15169:67;15233:2;15228:3;15169:67;:::i;:::-;15162:74;;15245:93;15334:3;15245:93;:::i;:::-;15363:2;15358:3;15354:12;15347:19;;15006:366;;;:::o;15378:::-;15520:3;15541:67;15605:2;15600:3;15541:67;:::i;:::-;15534:74;;15617:93;15706:3;15617:93;:::i;:::-;15735:2;15730:3;15726:12;15719:19;;15378:366;;;:::o;15750:::-;15892:3;15913:67;15977:2;15972:3;15913:67;:::i;:::-;15906:74;;15989:93;16078:3;15989:93;:::i;:::-;16107:2;16102:3;16098:12;16091:19;;15750:366;;;:::o;16122:::-;16264:3;16285:67;16349:2;16344:3;16285:67;:::i;:::-;16278:74;;16361:93;16450:3;16361:93;:::i;:::-;16479:2;16474:3;16470:12;16463:19;;16122:366;;;:::o;16494:108::-;16571:24;16589:5;16571:24;:::i;:::-;16566:3;16559:37;16494:108;;:::o;16608:118::-;16695:24;16713:5;16695:24;:::i;:::-;16690:3;16683:37;16608:118;;:::o;16732:435::-;16912:3;16934:95;17025:3;17016:6;16934:95;:::i;:::-;16927:102;;17046:95;17137:3;17128:6;17046:95;:::i;:::-;17039:102;;17158:3;17151:10;;16732:435;;;;;:::o;17173:222::-;17266:4;17304:2;17293:9;17289:18;17281:26;;17317:71;17385:1;17374:9;17370:17;17361:6;17317:71;:::i;:::-;17173:222;;;;:::o;17401:640::-;17596:4;17634:3;17623:9;17619:19;17611:27;;17648:71;17716:1;17705:9;17701:17;17692:6;17648:71;:::i;:::-;17729:72;17797:2;17786:9;17782:18;17773:6;17729:72;:::i;:::-;17811;17879:2;17868:9;17864:18;17855:6;17811:72;:::i;:::-;17930:9;17924:4;17920:20;17915:2;17904:9;17900:18;17893:48;17958:76;18029:4;18020:6;17958:76;:::i;:::-;17950:84;;17401:640;;;;;;;:::o;18047:373::-;18190:4;18228:2;18217:9;18213:18;18205:26;;18277:9;18271:4;18267:20;18263:1;18252:9;18248:17;18241:47;18305:108;18408:4;18399:6;18305:108;:::i;:::-;18297:116;;18047:373;;;;:::o;18426:210::-;18513:4;18551:2;18540:9;18536:18;18528:26;;18564:65;18626:1;18615:9;18611:17;18602:6;18564:65;:::i;:::-;18426:210;;;;:::o;18642:313::-;18755:4;18793:2;18782:9;18778:18;18770:26;;18842:9;18836:4;18832:20;18828:1;18817:9;18813:17;18806:47;18870:78;18943:4;18934:6;18870:78;:::i;:::-;18862:86;;18642:313;;;;:::o;18961:419::-;19127:4;19165:2;19154:9;19150:18;19142:26;;19214:9;19208:4;19204:20;19200:1;19189:9;19185:17;19178:47;19242:131;19368:4;19242:131;:::i;:::-;19234:139;;18961:419;;;:::o;19386:::-;19552:4;19590:2;19579:9;19575:18;19567:26;;19639:9;19633:4;19629:20;19625:1;19614:9;19610:17;19603:47;19667:131;19793:4;19667:131;:::i;:::-;19659:139;;19386:419;;;:::o;19811:::-;19977:4;20015:2;20004:9;20000:18;19992:26;;20064:9;20058:4;20054:20;20050:1;20039:9;20035:17;20028:47;20092:131;20218:4;20092:131;:::i;:::-;20084:139;;19811:419;;;:::o;20236:::-;20402:4;20440:2;20429:9;20425:18;20417:26;;20489:9;20483:4;20479:20;20475:1;20464:9;20460:17;20453:47;20517:131;20643:4;20517:131;:::i;:::-;20509:139;;20236:419;;;:::o;20661:::-;20827:4;20865:2;20854:9;20850:18;20842:26;;20914:9;20908:4;20904:20;20900:1;20889:9;20885:17;20878:47;20942:131;21068:4;20942:131;:::i;:::-;20934:139;;20661:419;;;:::o;21086:::-;21252:4;21290:2;21279:9;21275:18;21267:26;;21339:9;21333:4;21329:20;21325:1;21314:9;21310:17;21303:47;21367:131;21493:4;21367:131;:::i;:::-;21359:139;;21086:419;;;:::o;21511:::-;21677:4;21715:2;21704:9;21700:18;21692:26;;21764:9;21758:4;21754:20;21750:1;21739:9;21735:17;21728:47;21792:131;21918:4;21792:131;:::i;:::-;21784:139;;21511:419;;;:::o;21936:::-;22102:4;22140:2;22129:9;22125:18;22117:26;;22189:9;22183:4;22179:20;22175:1;22164:9;22160:17;22153:47;22217:131;22343:4;22217:131;:::i;:::-;22209:139;;21936:419;;;:::o;22361:::-;22527:4;22565:2;22554:9;22550:18;22542:26;;22614:9;22608:4;22604:20;22600:1;22589:9;22585:17;22578:47;22642:131;22768:4;22642:131;:::i;:::-;22634:139;;22361:419;;;:::o;22786:::-;22952:4;22990:2;22979:9;22975:18;22967:26;;23039:9;23033:4;23029:20;23025:1;23014:9;23010:17;23003:47;23067:131;23193:4;23067:131;:::i;:::-;23059:139;;22786:419;;;:::o;23211:::-;23377:4;23415:2;23404:9;23400:18;23392:26;;23464:9;23458:4;23454:20;23450:1;23439:9;23435:17;23428:47;23492:131;23618:4;23492:131;:::i;:::-;23484:139;;23211:419;;;:::o;23636:::-;23802:4;23840:2;23829:9;23825:18;23817:26;;23889:9;23883:4;23879:20;23875:1;23864:9;23860:17;23853:47;23917:131;24043:4;23917:131;:::i;:::-;23909:139;;23636:419;;;:::o;24061:::-;24227:4;24265:2;24254:9;24250:18;24242:26;;24314:9;24308:4;24304:20;24300:1;24289:9;24285:17;24278:47;24342:131;24468:4;24342:131;:::i;:::-;24334:139;;24061:419;;;:::o;24486:::-;24652:4;24690:2;24679:9;24675:18;24667:26;;24739:9;24733:4;24729:20;24725:1;24714:9;24710:17;24703:47;24767:131;24893:4;24767:131;:::i;:::-;24759:139;;24486:419;;;:::o;24911:::-;25077:4;25115:2;25104:9;25100:18;25092:26;;25164:9;25158:4;25154:20;25150:1;25139:9;25135:17;25128:47;25192:131;25318:4;25192:131;:::i;:::-;25184:139;;24911:419;;;:::o;25336:::-;25502:4;25540:2;25529:9;25525:18;25517:26;;25589:9;25583:4;25579:20;25575:1;25564:9;25560:17;25553:47;25617:131;25743:4;25617:131;:::i;:::-;25609:139;;25336:419;;;:::o;25761:::-;25927:4;25965:2;25954:9;25950:18;25942:26;;26014:9;26008:4;26004:20;26000:1;25989:9;25985:17;25978:47;26042:131;26168:4;26042:131;:::i;:::-;26034:139;;25761:419;;;:::o;26186:::-;26352:4;26390:2;26379:9;26375:18;26367:26;;26439:9;26433:4;26429:20;26425:1;26414:9;26410:17;26403:47;26467:131;26593:4;26467:131;:::i;:::-;26459:139;;26186:419;;;:::o;26611:222::-;26704:4;26742:2;26731:9;26727:18;26719:26;;26755:71;26823:1;26812:9;26808:17;26799:6;26755:71;:::i;:::-;26611:222;;;;:::o;26839:129::-;26873:6;26900:20;;:::i;:::-;26890:30;;26929:33;26957:4;26949:6;26929:33;:::i;:::-;26839:129;;;:::o;26974:75::-;27007:6;27040:2;27034:9;27024:19;;26974:75;:::o;27055:307::-;27116:4;27206:18;27198:6;27195:30;27192:56;;;27228:18;;:::i;:::-;27192:56;27266:29;27288:6;27266:29;:::i;:::-;27258:37;;27350:4;27344;27340:15;27332:23;;27055:307;;;:::o;27368:308::-;27430:4;27520:18;27512:6;27509:30;27506:56;;;27542:18;;:::i;:::-;27506:56;27580:29;27602:6;27580:29;:::i;:::-;27572:37;;27664:4;27658;27654:15;27646:23;;27368:308;;;:::o;27682:132::-;27749:4;27772:3;27764:11;;27802:4;27797:3;27793:14;27785:22;;27682:132;;;:::o;27820:114::-;27887:6;27921:5;27915:12;27905:22;;27820:114;;;:::o;27940:98::-;27991:6;28025:5;28019:12;28009:22;;27940:98;;;:::o;28044:99::-;28096:6;28130:5;28124:12;28114:22;;28044:99;;;:::o;28149:113::-;28219:4;28251;28246:3;28242:14;28234:22;;28149:113;;;:::o;28268:184::-;28367:11;28401:6;28396:3;28389:19;28441:4;28436:3;28432:14;28417:29;;28268:184;;;;:::o;28458:168::-;28541:11;28575:6;28570:3;28563:19;28615:4;28610:3;28606:14;28591:29;;28458:168;;;;:::o;28632:169::-;28716:11;28750:6;28745:3;28738:19;28790:4;28785:3;28781:14;28766:29;;28632:169;;;;:::o;28807:148::-;28909:11;28946:3;28931:18;;28807:148;;;;:::o;28961:305::-;29001:3;29020:20;29038:1;29020:20;:::i;:::-;29015:25;;29054:20;29072:1;29054:20;:::i;:::-;29049:25;;29208:1;29140:66;29136:74;29133:1;29130:81;29127:107;;;29214:18;;:::i;:::-;29127:107;29258:1;29255;29251:9;29244:16;;28961:305;;;;:::o;29272:185::-;29312:1;29329:20;29347:1;29329:20;:::i;:::-;29324:25;;29363:20;29381:1;29363:20;:::i;:::-;29358:25;;29402:1;29392:35;;29407:18;;:::i;:::-;29392:35;29449:1;29446;29442:9;29437:14;;29272:185;;;;:::o;29463:348::-;29503:7;29526:20;29544:1;29526:20;:::i;:::-;29521:25;;29560:20;29578:1;29560:20;:::i;:::-;29555:25;;29748:1;29680:66;29676:74;29673:1;29670:81;29665:1;29658:9;29651:17;29647:105;29644:131;;;29755:18;;:::i;:::-;29644:131;29803:1;29800;29796:9;29785:20;;29463:348;;;;:::o;29817:191::-;29857:4;29877:20;29895:1;29877:20;:::i;:::-;29872:25;;29911:20;29929:1;29911:20;:::i;:::-;29906:25;;29950:1;29947;29944:8;29941:34;;;29955:18;;:::i;:::-;29941:34;30000:1;29997;29993:9;29985:17;;29817:191;;;;:::o;30014:96::-;30051:7;30080:24;30098:5;30080:24;:::i;:::-;30069:35;;30014:96;;;:::o;30116:90::-;30150:7;30193:5;30186:13;30179:21;30168:32;;30116:90;;;:::o;30212:149::-;30248:7;30288:66;30281:5;30277:78;30266:89;;30212:149;;;:::o;30367:126::-;30404:7;30444:42;30437:5;30433:54;30422:65;;30367:126;;;:::o;30499:77::-;30536:7;30565:5;30554:16;;30499:77;;;:::o;30582:154::-;30666:6;30661:3;30656;30643:30;30728:1;30719:6;30714:3;30710:16;30703:27;30582:154;;;:::o;30742:307::-;30810:1;30820:113;30834:6;30831:1;30828:13;30820:113;;;30919:1;30914:3;30910:11;30904:18;30900:1;30895:3;30891:11;30884:39;30856:2;30853:1;30849:10;30844:15;;30820:113;;;30951:6;30948:1;30945:13;30942:101;;;31031:1;31022:6;31017:3;31013:16;31006:27;30942:101;30791:258;30742:307;;;:::o;31055:320::-;31099:6;31136:1;31130:4;31126:12;31116:22;;31183:1;31177:4;31173:12;31204:18;31194:81;;31260:4;31252:6;31248:17;31238:27;;31194:81;31322:2;31314:6;31311:14;31291:18;31288:38;31285:84;;;31341:18;;:::i;:::-;31285:84;31106:269;31055:320;;;:::o;31381:281::-;31464:27;31486:4;31464:27;:::i;:::-;31456:6;31452:40;31594:6;31582:10;31579:22;31558:18;31546:10;31543:34;31540:62;31537:88;;;31605:18;;:::i;:::-;31537:88;31645:10;31641:2;31634:22;31424:238;31381:281;;:::o;31668:233::-;31707:3;31730:24;31748:5;31730:24;:::i;:::-;31721:33;;31776:66;31769:5;31766:77;31763:103;;;31846:18;;:::i;:::-;31763:103;31893:1;31886:5;31882:13;31875:20;;31668:233;;;:::o;31907:176::-;31939:1;31956:20;31974:1;31956:20;:::i;:::-;31951:25;;31990:20;32008:1;31990:20;:::i;:::-;31985:25;;32029:1;32019:35;;32034:18;;:::i;:::-;32019:35;32075:1;32072;32068:9;32063:14;;31907:176;;;;:::o;32089:180::-;32137:77;32134:1;32127:88;32234:4;32231:1;32224:15;32258:4;32255:1;32248:15;32275:180;32323:77;32320:1;32313:88;32420:4;32417:1;32410:15;32444:4;32441:1;32434:15;32461:180;32509:77;32506:1;32499:88;32606:4;32603:1;32596:15;32630:4;32627:1;32620:15;32647:180;32695:77;32692:1;32685:88;32792:4;32789:1;32782:15;32816:4;32813:1;32806:15;32833:180;32881:77;32878:1;32871:88;32978:4;32975:1;32968:15;33002:4;32999:1;32992:15;33019:180;33067:77;33064:1;33057:88;33164:4;33161:1;33154:15;33188:4;33185:1;33178:15;33205:117;33314:1;33311;33304:12;33328:117;33437:1;33434;33427:12;33451:117;33560:1;33557;33550:12;33574:117;33683:1;33680;33673:12;33697:102;33738:6;33789:2;33785:7;33780:2;33773:5;33769:14;33765:28;33755:38;;33697:102;;;:::o;33805:230::-;33945:34;33941:1;33933:6;33929:14;33922:58;34014:13;34009:2;34001:6;33997:15;33990:38;33805:230;:::o;34041:237::-;34181:34;34177:1;34169:6;34165:14;34158:58;34250:20;34245:2;34237:6;34233:15;34226:45;34041:237;:::o;34284:225::-;34424:34;34420:1;34412:6;34408:14;34401:58;34493:8;34488:2;34480:6;34476:15;34469:33;34284:225;:::o;34515:178::-;34655:30;34651:1;34643:6;34639:14;34632:54;34515:178;:::o;34699:223::-;34839:34;34835:1;34827:6;34823:14;34816:58;34908:6;34903:2;34895:6;34891:15;34884:31;34699:223;:::o;34928:175::-;35068:27;35064:1;35056:6;35052:14;35045:51;34928:175;:::o;35109:231::-;35249:34;35245:1;35237:6;35233:14;35226:58;35318:14;35313:2;35305:6;35301:15;35294:39;35109:231;:::o;35346:243::-;35486:34;35482:1;35474:6;35470:14;35463:58;35555:26;35550:2;35542:6;35538:15;35531:51;35346:243;:::o;35595:229::-;35735:34;35731:1;35723:6;35719:14;35712:58;35804:12;35799:2;35791:6;35787:15;35780:37;35595:229;:::o;35830:228::-;35970:34;35966:1;35958:6;35954:14;35947:58;36039:11;36034:2;36026:6;36022:15;36015:36;35830:228;:::o;36064:182::-;36204:34;36200:1;36192:6;36188:14;36181:58;36064:182;:::o;36252:231::-;36392:34;36388:1;36380:6;36376:14;36369:58;36461:14;36456:2;36448:6;36444:15;36437:39;36252:231;:::o;36489:182::-;36629:34;36625:1;36617:6;36613:14;36606:58;36489:182;:::o;36677:228::-;36817:34;36813:1;36805:6;36801:14;36794:58;36886:11;36881:2;36873:6;36869:15;36862:36;36677:228;:::o;36911:234::-;37051:34;37047:1;37039:6;37035:14;37028:58;37120:17;37115:2;37107:6;37103:15;37096:42;36911:234;:::o;37151:220::-;37291:34;37287:1;37279:6;37275:14;37268:58;37360:3;37355:2;37347:6;37343:15;37336:28;37151:220;:::o;37377:236::-;37517:34;37513:1;37505:6;37501:14;37494:58;37586:19;37581:2;37573:6;37569:15;37562:44;37377:236;:::o;37619:231::-;37759:34;37755:1;37747:6;37743:14;37736:58;37828:14;37823:2;37815:6;37811:15;37804:39;37619:231;:::o;37856:122::-;37929:24;37947:5;37929:24;:::i;:::-;37922:5;37919:35;37909:63;;37968:1;37965;37958:12;37909:63;37856:122;:::o;37984:116::-;38054:21;38069:5;38054:21;:::i;:::-;38047:5;38044:32;38034:60;;38090:1;38087;38080:12;38034:60;37984:116;:::o;38106:120::-;38178:23;38195:5;38178:23;:::i;:::-;38171:5;38168:34;38158:62;;38216:1;38213;38206:12;38158:62;38106:120;:::o;38232:122::-;38305:24;38323:5;38305:24;:::i;:::-;38298:5;38295:35;38285:63;;38344:1;38341;38334:12;38285:63;38232:122;:::o
Swarm Source
ipfs://3a688f4287f2ab3c98c4c8fa2d52bdf5e0ca7069829baab590c2a98fa4618148
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.