ERC-721
Overview
Max Total Supply
34 TRB
Holders
18
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 TRBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheRollingBones
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-07 */ // Sources flattened with hardhat v2.6.0 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] 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/[email protected] 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/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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/utils/[email protected] pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] 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/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] 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(to).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/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/access/[email protected] 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 contracts/TheRollingBones.sol pragma solidity ^0.8.0; contract TheRollingBones is ERC721Enumerable, Ownable { using Strings for uint256; bool public _forSale = false; string public _baseTokenURI; uint256 private _price = 0.154 ether; uint256 private _reserve = 10; address t1 = 0x5F55Cd7A509fdA9F0beB9309A49a689EB8C122EE; address t2 = 0xd230f390AbB50470fa265a022d673c6147BDc396; constructor(string memory baseURI) ERC721("The Rolling Bones", "TRB") { setBaseURI(baseURI); _safeMint( t1, 0); _safeMint( t2, 1); } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function setForSale(bool forSale) public onlyOwner { _forSale = forSale; } function getPrice() public view returns (uint256){ return _price; } function setPrice(uint256 price) public onlyOwner { _price = price; } function mint(uint256 _amount) public payable { uint256 supply = totalSupply(); require( _forSale, "Sale is not active" ); require( _amount < 31, "You can mint a maximum of 30" ); require( msg.value >= _price * _amount, "Insufficient ether provided" ); require( supply + _amount < 1000 - _reserve, "Amount exceeds allowed supply" ); for(uint256 i; i < _amount; i++){ _safeMint( msg.sender, supply + i ); } } function getTokensByOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function gift(address _to, uint256 _amount) external onlyOwner { require(_amount <= _reserve, "Amount exceeds reserved supply"); uint256 supply = totalSupply(); for(uint256 i; i < _amount; i++){ _safeMint( _to, supply + i ); } _reserve -= _amount; } function withdraw() public payable onlyOwner { uint256 _first = address(this).balance / 10; uint256 _second = address(this).balance - _first; require(payable(t1).send(_second)); require(payable(t2).send(_first)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_forSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"forSale","type":"bool"}],"name":"setForSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff0219169083151502179055506702231e2f1f690000600c55600a600d55735f55cd7a509fda9f0beb9309a49a689eb8c122ee600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d230f390abb50470fa265a022d673c6147bdc396600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000e757600080fd5b50604051620058d1380380620058d183398181016040528101906200010d919062000fab565b6040518060400160405280601181526020017f54686520526f6c6c696e6720426f6e65730000000000000000000000000000008152506040518060400160405280600381526020017f545242000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200019192919062000e46565b508060019080519060200190620001aa92919062000e46565b505050620001cd620001c16200024f60201b60201c565b6200025760201b60201c565b620001de816200031d60201b60201c565b62000213600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000620003c860201b60201c565b62000248600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620003c860201b60201c565b5062001615565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200032d6200024f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000353620003ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a390620011f2565b60405180910390fd5b80600b9080519060200190620003c492919062000e46565b5050565b620003ea8282604051806020016040528060008152506200041860201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200042a83836200048660201b60201c565b6200043f60008484846200066c60201b60201c565b62000481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000478906200116a565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f090620011d0565b60405180910390fd5b6200050a816200082660201b60201c565b156200054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000544906200118c565b60405180910390fd5b62000561600083836200089260201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005b39190620012a0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200069a8473ffffffffffffffffffffffffffffffffffffffff16620009d960201b620019821760201c565b1562000819578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006cc6200024f60201b60201c565b8786866040518563ffffffff1660e01b8152600401620006f0949392919062001116565b602060405180830381600087803b1580156200070b57600080fd5b505af19250505080156200073f57506040513d601f19601f820116820180604052508101906200073c919062000f7f565b60015b620007c8573d806000811462000772576040519150601f19603f3d011682016040523d82523d6000602084013e62000777565b606091505b50600081511415620007c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b7906200116a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506200081e565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008aa838383620009ec60201b620019951760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620008f757620008f181620009f160201b60201c565b6200093f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200093e576200093d838262000a3a60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200098c57620009868162000bb760201b60201c565b620009d4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009d357620009d2828262000cff60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000a548462000d8b60201b62000f181760201c565b62000a609190620012fd565b905060006007600084815260200190815260200160002054905081811462000b46576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000bcd9190620012fd565b905060006009600084815260200190815260200160002054905060006008838154811062000c24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000c6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000ce3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000d178362000d8b60201b62000f181760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000dff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000df690620011ae565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000e5490620013d8565b90600052602060002090601f01602090048101928262000e78576000855562000ec4565b82601f1062000e9357805160ff191683800117855562000ec4565b8280016001018555821562000ec4579182015b8281111562000ec357825182559160200191906001019062000ea6565b5b50905062000ed3919062000ed7565b5090565b5b8082111562000ef257600081600090555060010162000ed8565b5090565b600062000f0d62000f07846200123d565b62001214565b90508281526020810184848401111562000f2657600080fd5b62000f33848285620013a2565b509392505050565b60008151905062000f4c81620015fb565b92915050565b600082601f83011262000f6457600080fd5b815162000f7684826020860162000ef6565b91505092915050565b60006020828403121562000f9257600080fd5b600062000fa28482850162000f3b565b91505092915050565b60006020828403121562000fbe57600080fd5b600082015167ffffffffffffffff81111562000fd957600080fd5b62000fe78482850162000f52565b91505092915050565b62000ffb8162001338565b82525050565b60006200100e8262001273565b6200101a81856200127e565b93506200102c818560208601620013a2565b6200103781620014d1565b840191505092915050565b6000620010516032836200128f565b91506200105e82620014e2565b604082019050919050565b600062001078601c836200128f565b9150620010858262001531565b602082019050919050565b60006200109f602a836200128f565b9150620010ac826200155a565b604082019050919050565b6000620010c66020836200128f565b9150620010d382620015a9565b602082019050919050565b6000620010ed6020836200128f565b9150620010fa82620015d2565b602082019050919050565b620011108162001398565b82525050565b60006080820190506200112d600083018762000ff0565b6200113c602083018662000ff0565b6200114b604083018562001105565b81810360608301526200115f818462001001565b905095945050505050565b60006020820190508181036000830152620011858162001042565b9050919050565b60006020820190508181036000830152620011a78162001069565b9050919050565b60006020820190508181036000830152620011c98162001090565b9050919050565b60006020820190508181036000830152620011eb81620010b7565b9050919050565b600060208201905081810360008301526200120d81620010de565b9050919050565b60006200122062001233565b90506200122e82826200140e565b919050565b6000604051905090565b600067ffffffffffffffff8211156200125b576200125a620014a2565b5b6200126682620014d1565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620012ad8262001398565b9150620012ba8362001398565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012f257620012f162001444565b5b828201905092915050565b60006200130a8262001398565b9150620013178362001398565b9250828210156200132d576200132c62001444565b5b828203905092915050565b6000620013458262001378565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620013c2578082015181840152602081019050620013a5565b83811115620013d2576000848401525b50505050565b60006002820490506001821680620013f157607f821691505b6020821081141562001408576200140762001473565b5b50919050565b6200141982620014d1565b810181811067ffffffffffffffff821117156200143b576200143a620014a2565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62001606816200134c565b81146200161257600080fd5b50565b6142ac80620016256000396000f3fe6080604052600436106101c25760003560e01c806370a08231116100f7578063a0712d6811610095578063cbce4c9711610064578063cbce4c9714610636578063cfc86f7b1461065f578063e985e9c51461068a578063f2fde38b146106c7576101c2565b8063a0712d681461058b578063a22cb465146105a7578063b88d4fde146105d0578063c87b56dd146105f9576101c2565b80638da5cb5b116100d15780638da5cb5b146104e157806391b7f5ed1461050c57806395d89b411461053557806398d5fdca14610560576101c2565b806370a0823114610464578063715018a6146104a157806382907865146104b8576101c2565b80632f745c591161016457806342842e0e1161013e57806342842e0e146103985780634f6ccce7146103c157806355f804b3146103fe5780636352211e14610427576101c2565b80632f745c59146103145780633ccfd60b1461035157806340398d671461035b576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806314e4926f1461029557806318160ddd146102c057806323b872dd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612ec4565b6106f0565b6040516101fb91906134a7565b60405180910390f35b34801561021057600080fd5b5061021961076a565b60405161022691906134c2565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612f57565b6107fc565b604051610263919061341e565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612e5f565b610881565b005b3480156102a157600080fd5b506102aa610999565b6040516102b791906134a7565b60405180910390f35b3480156102cc57600080fd5b506102d56109ac565b6040516102e291906137c4565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612d59565b6109b9565b005b34801561032057600080fd5b5061033b60048036038101906103369190612e5f565b610a19565b60405161034891906137c4565b60405180910390f35b610359610abe565b005b34801561036757600080fd5b50610382600480360381019061037d9190612cf4565b610c1f565b60405161038f9190613485565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d59565b610d19565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612f57565b610d39565b6040516103f591906137c4565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190612f16565b610dd0565b005b34801561043357600080fd5b5061044e60048036038101906104499190612f57565b610e66565b60405161045b919061341e565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190612cf4565b610f18565b60405161049891906137c4565b60405180910390f35b3480156104ad57600080fd5b506104b6610fd0565b005b3480156104c457600080fd5b506104df60048036038101906104da9190612e9b565b611058565b005b3480156104ed57600080fd5b506104f66110f1565b604051610503919061341e565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190612f57565b61111b565b005b34801561054157600080fd5b5061054a6111a1565b60405161055791906134c2565b60405180910390f35b34801561056c57600080fd5b50610575611233565b60405161058291906137c4565b60405180910390f35b6105a560048036038101906105a09190612f57565b61123d565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190612e23565b6113bf565b005b3480156105dc57600080fd5b506105f760048036038101906105f29190612da8565b611540565b005b34801561060557600080fd5b50610620600480360381019061061b9190612f57565b6115a2565b60405161062d91906134c2565b60405180910390f35b34801561064257600080fd5b5061065d60048036038101906106589190612e5f565b611649565b005b34801561066b57600080fd5b50610674611768565b60405161068191906134c2565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac9190612d1d565b6117f6565b6040516106be91906134a7565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190612cf4565b61188a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076357506107628261199a565b5b9050919050565b60606000805461077990613aad565b80601f01602080910402602001604051908101604052809291908181526020018280546107a590613aad565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b600061080782611a7c565b610846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083d906136a4565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088c82610e66565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f490613724565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661091c611ae8565b73ffffffffffffffffffffffffffffffffffffffff16148061094b575061094a81610945611ae8565b6117f6565b5b61098a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610981906135e4565b60405180910390fd5b6109948383611af0565b505050565b600a60149054906101000a900460ff1681565b6000600880549050905090565b6109ca6109c4611ae8565b82611ba9565b610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0090613764565b60405180910390fd5b610a14838383611c87565b505050565b6000610a2483610f18565b8210610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c906134e4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ac6611ae8565b73ffffffffffffffffffffffffffffffffffffffff16610ae46110f1565b73ffffffffffffffffffffffffffffffffffffffff1614610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b31906136c4565b60405180910390fd5b6000600a47610b499190613938565b905060008147610b5991906139c3565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610bbb57600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050610c1b57600080fd5b5050565b60606000610c2c83610f18565b905060008167ffffffffffffffff811115610c70577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c9e5781602001602082028036833780820191505090505b50905060005b82811015610d0e57610cb68582610a19565b828281518110610cef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610d0690613b10565b915050610ca4565b508092505050919050565b610d3483838360405180602001604052806000815250611540565b505050565b6000610d436109ac565b8210610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90613784565b60405180910390fd5b60088281548110610dbe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610dd8611ae8565b73ffffffffffffffffffffffffffffffffffffffff16610df66110f1565b73ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e43906136c4565b60405180910390fd5b80600b9080519060200190610e62929190612b18565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690613624565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090613604565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fd8611ae8565b73ffffffffffffffffffffffffffffffffffffffff16610ff66110f1565b73ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611043906136c4565b60405180910390fd5b6110566000611ee3565b565b611060611ae8565b73ffffffffffffffffffffffffffffffffffffffff1661107e6110f1565b73ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb906136c4565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611123611ae8565b73ffffffffffffffffffffffffffffffffffffffff166111416110f1565b73ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e906136c4565b60405180910390fd5b80600c8190555050565b6060600180546111b090613aad565b80601f01602080910402602001604051908101604052809291908181526020018280546111dc90613aad565b80156112295780601f106111fe57610100808354040283529160200191611229565b820191906000526020600020905b81548152906001019060200180831161120c57829003601f168201915b5050505050905090565b6000600c54905090565b60006112476109ac565b9050600a60149054906101000a900460ff16611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f906135a4565b60405180910390fd5b601f82106112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290613684565b60405180910390fd5b81600c546112e99190613969565b34101561132b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611322906137a4565b60405180910390fd5b600d546103e861133b91906139c3565b828261134791906138e2565b10611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90613744565b60405180910390fd5b60005b828110156113ba576113a73382846113a291906138e2565b611fa9565b80806113b290613b10565b91505061138a565b505050565b6113c7611ae8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c90613584565b60405180910390fd5b8060056000611442611ae8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114ef611ae8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161153491906134a7565b60405180910390a35050565b61155161154b611ae8565b83611ba9565b611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613764565b60405180910390fd5b61159c84848484611fc7565b50505050565b60606115ad82611a7c565b6115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390613704565b60405180910390fd5b60006115f6612023565b905060008151116116165760405180602001604052806000815250611641565b80611620846120b5565b6040516020016116319291906133fa565b6040516020818303038152906040525b915050919050565b611651611ae8565b73ffffffffffffffffffffffffffffffffffffffff1661166f6110f1565b73ffffffffffffffffffffffffffffffffffffffff16146116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906136c4565b60405180910390fd5b600d5481111561170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190613644565b60405180910390fd5b60006117146109ac565b905060005b828110156117495761173684828461173191906138e2565b611fa9565b808061174190613b10565b915050611719565b5081600d600082825461175c91906139c3565b92505081905550505050565b600b805461177590613aad565b80601f01602080910402602001604051908101604052809291908181526020018280546117a190613aad565b80156117ee5780601f106117c3576101008083540402835291602001916117ee565b820191906000526020600020905b8154815290600101906020018083116117d157829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611892611ae8565b73ffffffffffffffffffffffffffffffffffffffff166118b06110f1565b73ffffffffffffffffffffffffffffffffffffffff1614611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd906136c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90613524565b60405180910390fd5b61197f81611ee3565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a6557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a755750611a7482612262565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b6383610e66565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bb482611a7c565b611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea906135c4565b60405180910390fd5b6000611bfe83610e66565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c6d57508373ffffffffffffffffffffffffffffffffffffffff16611c55846107fc565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c7e5750611c7d81856117f6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ca782610e66565b73ffffffffffffffffffffffffffffffffffffffff1614611cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf4906136e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6490613564565b60405180910390fd5b611d788383836122cc565b611d83600082611af0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd391906139c3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2a91906138e2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fc38282604051806020016040528060008152506123e0565b5050565b611fd2848484611c87565b611fde8484848461243b565b61201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490613504565b60405180910390fd5b50505050565b6060600b805461203290613aad565b80601f016020809104026020016040519081016040528092919081815260200182805461205e90613aad565b80156120ab5780601f10612080576101008083540402835291602001916120ab565b820191906000526020600020905b81548152906001019060200180831161208e57829003601f168201915b5050505050905090565b606060008214156120fd576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061225d565b600082905060005b6000821461212f57808061211890613b10565b915050600a826121289190613938565b9150612105565b60008167ffffffffffffffff811115612171577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121a35781602001600182028036833780820191505090505b5090505b60008514612256576001826121bc91906139c3565b9150600a856121cb9190613b59565b60306121d791906138e2565b60f81b818381518110612213577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561224f9190613938565b94506121a7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122d7838383611995565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561231a57612315816125d2565b612359565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461235857612357838261261b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561239c5761239781612788565b6123db565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123da576123d982826128cb565b5b5b505050565b6123ea838361294a565b6123f7600084848461243b565b612436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242d90613504565b60405180910390fd5b505050565b600061245c8473ffffffffffffffffffffffffffffffffffffffff16611982565b156125c5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612485611ae8565b8786866040518563ffffffff1660e01b81526004016124a79493929190613439565b602060405180830381600087803b1580156124c157600080fd5b505af19250505080156124f257506040513d601f19601f820116820180604052508101906124ef9190612eed565b60015b612575573d8060008114612522576040519150601f19603f3d011682016040523d82523d6000602084013e612527565b606091505b5060008151141561256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256490613504565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125ca565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161262884610f18565b61263291906139c3565b9050600060076000848152602001908152602001600020549050818114612717576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061279c91906139c3565b90506000600960008481526020019081526020016000205490506000600883815481106127f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061283a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006128d683610f18565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b190613664565b60405180910390fd5b6129c381611a7c565b15612a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fa90613544565b60405180910390fd5b612a0f600083836122cc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a5f91906138e2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612b2490613aad565b90600052602060002090601f016020900481019282612b465760008555612b8d565b82601f10612b5f57805160ff1916838001178555612b8d565b82800160010185558215612b8d579182015b82811115612b8c578251825591602001919060010190612b71565b5b509050612b9a9190612b9e565b5090565b5b80821115612bb7576000816000905550600101612b9f565b5090565b6000612bce612bc984613804565b6137df565b905082815260208101848484011115612be657600080fd5b612bf1848285613a6b565b509392505050565b6000612c0c612c0784613835565b6137df565b905082815260208101848484011115612c2457600080fd5b612c2f848285613a6b565b509392505050565b600081359050612c468161421a565b92915050565b600081359050612c5b81614231565b92915050565b600081359050612c7081614248565b92915050565b600081519050612c8581614248565b92915050565b600082601f830112612c9c57600080fd5b8135612cac848260208601612bbb565b91505092915050565b600082601f830112612cc657600080fd5b8135612cd6848260208601612bf9565b91505092915050565b600081359050612cee8161425f565b92915050565b600060208284031215612d0657600080fd5b6000612d1484828501612c37565b91505092915050565b60008060408385031215612d3057600080fd5b6000612d3e85828601612c37565b9250506020612d4f85828601612c37565b9150509250929050565b600080600060608486031215612d6e57600080fd5b6000612d7c86828701612c37565b9350506020612d8d86828701612c37565b9250506040612d9e86828701612cdf565b9150509250925092565b60008060008060808587031215612dbe57600080fd5b6000612dcc87828801612c37565b9450506020612ddd87828801612c37565b9350506040612dee87828801612cdf565b925050606085013567ffffffffffffffff811115612e0b57600080fd5b612e1787828801612c8b565b91505092959194509250565b60008060408385031215612e3657600080fd5b6000612e4485828601612c37565b9250506020612e5585828601612c4c565b9150509250929050565b60008060408385031215612e7257600080fd5b6000612e8085828601612c37565b9250506020612e9185828601612cdf565b9150509250929050565b600060208284031215612ead57600080fd5b6000612ebb84828501612c4c565b91505092915050565b600060208284031215612ed657600080fd5b6000612ee484828501612c61565b91505092915050565b600060208284031215612eff57600080fd5b6000612f0d84828501612c76565b91505092915050565b600060208284031215612f2857600080fd5b600082013567ffffffffffffffff811115612f4257600080fd5b612f4e84828501612cb5565b91505092915050565b600060208284031215612f6957600080fd5b6000612f7784828501612cdf565b91505092915050565b6000612f8c83836133dc565b60208301905092915050565b612fa1816139f7565b82525050565b6000612fb282613876565b612fbc81856138a4565b9350612fc783613866565b8060005b83811015612ff8578151612fdf8882612f80565b9750612fea83613897565b925050600181019050612fcb565b5085935050505092915050565b61300e81613a09565b82525050565b600061301f82613881565b61302981856138b5565b9350613039818560208601613a7a565b61304281613c46565b840191505092915050565b60006130588261388c565b61306281856138c6565b9350613072818560208601613a7a565b61307b81613c46565b840191505092915050565b60006130918261388c565b61309b81856138d7565b93506130ab818560208601613a7a565b80840191505092915050565b60006130c4602b836138c6565b91506130cf82613c57565b604082019050919050565b60006130e76032836138c6565b91506130f282613ca6565b604082019050919050565b600061310a6026836138c6565b915061311582613cf5565b604082019050919050565b600061312d601c836138c6565b915061313882613d44565b602082019050919050565b60006131506024836138c6565b915061315b82613d6d565b604082019050919050565b60006131736019836138c6565b915061317e82613dbc565b602082019050919050565b60006131966012836138c6565b91506131a182613de5565b602082019050919050565b60006131b9602c836138c6565b91506131c482613e0e565b604082019050919050565b60006131dc6038836138c6565b91506131e782613e5d565b604082019050919050565b60006131ff602a836138c6565b915061320a82613eac565b604082019050919050565b60006132226029836138c6565b915061322d82613efb565b604082019050919050565b6000613245601e836138c6565b915061325082613f4a565b602082019050919050565b60006132686020836138c6565b915061327382613f73565b602082019050919050565b600061328b601c836138c6565b915061329682613f9c565b602082019050919050565b60006132ae602c836138c6565b91506132b982613fc5565b604082019050919050565b60006132d16020836138c6565b91506132dc82614014565b602082019050919050565b60006132f46029836138c6565b91506132ff8261403d565b604082019050919050565b6000613317602f836138c6565b91506133228261408c565b604082019050919050565b600061333a6021836138c6565b9150613345826140db565b604082019050919050565b600061335d601d836138c6565b91506133688261412a565b602082019050919050565b60006133806031836138c6565b915061338b82614153565b604082019050919050565b60006133a3602c836138c6565b91506133ae826141a2565b604082019050919050565b60006133c6601b836138c6565b91506133d1826141f1565b602082019050919050565b6133e581613a61565b82525050565b6133f481613a61565b82525050565b60006134068285613086565b91506134128284613086565b91508190509392505050565b60006020820190506134336000830184612f98565b92915050565b600060808201905061344e6000830187612f98565b61345b6020830186612f98565b61346860408301856133eb565b818103606083015261347a8184613014565b905095945050505050565b6000602082019050818103600083015261349f8184612fa7565b905092915050565b60006020820190506134bc6000830184613005565b92915050565b600060208201905081810360008301526134dc818461304d565b905092915050565b600060208201905081810360008301526134fd816130b7565b9050919050565b6000602082019050818103600083015261351d816130da565b9050919050565b6000602082019050818103600083015261353d816130fd565b9050919050565b6000602082019050818103600083015261355d81613120565b9050919050565b6000602082019050818103600083015261357d81613143565b9050919050565b6000602082019050818103600083015261359d81613166565b9050919050565b600060208201905081810360008301526135bd81613189565b9050919050565b600060208201905081810360008301526135dd816131ac565b9050919050565b600060208201905081810360008301526135fd816131cf565b9050919050565b6000602082019050818103600083015261361d816131f2565b9050919050565b6000602082019050818103600083015261363d81613215565b9050919050565b6000602082019050818103600083015261365d81613238565b9050919050565b6000602082019050818103600083015261367d8161325b565b9050919050565b6000602082019050818103600083015261369d8161327e565b9050919050565b600060208201905081810360008301526136bd816132a1565b9050919050565b600060208201905081810360008301526136dd816132c4565b9050919050565b600060208201905081810360008301526136fd816132e7565b9050919050565b6000602082019050818103600083015261371d8161330a565b9050919050565b6000602082019050818103600083015261373d8161332d565b9050919050565b6000602082019050818103600083015261375d81613350565b9050919050565b6000602082019050818103600083015261377d81613373565b9050919050565b6000602082019050818103600083015261379d81613396565b9050919050565b600060208201905081810360008301526137bd816133b9565b9050919050565b60006020820190506137d960008301846133eb565b92915050565b60006137e96137fa565b90506137f58282613adf565b919050565b6000604051905090565b600067ffffffffffffffff82111561381f5761381e613c17565b5b61382882613c46565b9050602081019050919050565b600067ffffffffffffffff8211156138505761384f613c17565b5b61385982613c46565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006138ed82613a61565b91506138f883613a61565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561392d5761392c613b8a565b5b828201905092915050565b600061394382613a61565b915061394e83613a61565b92508261395e5761395d613bb9565b5b828204905092915050565b600061397482613a61565b915061397f83613a61565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139b8576139b7613b8a565b5b828202905092915050565b60006139ce82613a61565b91506139d983613a61565b9250828210156139ec576139eb613b8a565b5b828203905092915050565b6000613a0282613a41565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a98578082015181840152602081019050613a7d565b83811115613aa7576000848401525b50505050565b60006002820490506001821680613ac557607f821691505b60208210811415613ad957613ad8613be8565b5b50919050565b613ae882613c46565b810181811067ffffffffffffffff82111715613b0757613b06613c17565b5b80604052505050565b6000613b1b82613a61565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b4e57613b4d613b8a565b5b600182019050919050565b6000613b6482613a61565b9150613b6f83613a61565b925082613b7f57613b7e613bb9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206578636565647320726573657276656420737570706c790000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620333000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206578636565647320616c6c6f77656420737570706c79000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742065746865722070726f76696465640000000000600082015250565b614223816139f7565b811461422e57600080fd5b50565b61423a81613a09565b811461424557600080fd5b50565b61425181613a15565b811461425c57600080fd5b50565b61426881613a61565b811461427357600080fd5b5056fea26469706673582212201bca943c2c4b23acb3d706c340772fdf3407acb0026a5a77e784247d7bcf74bb64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a4e757668717944396d4e6a59716b6559473141544b355631715a78386b476a6a537a643576486a723241482f00000000000000000000
Deployed Bytecode
0x6080604052600436106101c25760003560e01c806370a08231116100f7578063a0712d6811610095578063cbce4c9711610064578063cbce4c9714610636578063cfc86f7b1461065f578063e985e9c51461068a578063f2fde38b146106c7576101c2565b8063a0712d681461058b578063a22cb465146105a7578063b88d4fde146105d0578063c87b56dd146105f9576101c2565b80638da5cb5b116100d15780638da5cb5b146104e157806391b7f5ed1461050c57806395d89b411461053557806398d5fdca14610560576101c2565b806370a0823114610464578063715018a6146104a157806382907865146104b8576101c2565b80632f745c591161016457806342842e0e1161013e57806342842e0e146103985780634f6ccce7146103c157806355f804b3146103fe5780636352211e14610427576101c2565b80632f745c59146103145780633ccfd60b1461035157806340398d671461035b576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806314e4926f1461029557806318160ddd146102c057806323b872dd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612ec4565b6106f0565b6040516101fb91906134a7565b60405180910390f35b34801561021057600080fd5b5061021961076a565b60405161022691906134c2565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612f57565b6107fc565b604051610263919061341e565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612e5f565b610881565b005b3480156102a157600080fd5b506102aa610999565b6040516102b791906134a7565b60405180910390f35b3480156102cc57600080fd5b506102d56109ac565b6040516102e291906137c4565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612d59565b6109b9565b005b34801561032057600080fd5b5061033b60048036038101906103369190612e5f565b610a19565b60405161034891906137c4565b60405180910390f35b610359610abe565b005b34801561036757600080fd5b50610382600480360381019061037d9190612cf4565b610c1f565b60405161038f9190613485565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d59565b610d19565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612f57565b610d39565b6040516103f591906137c4565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190612f16565b610dd0565b005b34801561043357600080fd5b5061044e60048036038101906104499190612f57565b610e66565b60405161045b919061341e565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190612cf4565b610f18565b60405161049891906137c4565b60405180910390f35b3480156104ad57600080fd5b506104b6610fd0565b005b3480156104c457600080fd5b506104df60048036038101906104da9190612e9b565b611058565b005b3480156104ed57600080fd5b506104f66110f1565b604051610503919061341e565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190612f57565b61111b565b005b34801561054157600080fd5b5061054a6111a1565b60405161055791906134c2565b60405180910390f35b34801561056c57600080fd5b50610575611233565b60405161058291906137c4565b60405180910390f35b6105a560048036038101906105a09190612f57565b61123d565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190612e23565b6113bf565b005b3480156105dc57600080fd5b506105f760048036038101906105f29190612da8565b611540565b005b34801561060557600080fd5b50610620600480360381019061061b9190612f57565b6115a2565b60405161062d91906134c2565b60405180910390f35b34801561064257600080fd5b5061065d60048036038101906106589190612e5f565b611649565b005b34801561066b57600080fd5b50610674611768565b60405161068191906134c2565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac9190612d1d565b6117f6565b6040516106be91906134a7565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190612cf4565b61188a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076357506107628261199a565b5b9050919050565b60606000805461077990613aad565b80601f01602080910402602001604051908101604052809291908181526020018280546107a590613aad565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b600061080782611a7c565b610846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083d906136a4565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088c82610e66565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f490613724565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661091c611ae8565b73ffffffffffffffffffffffffffffffffffffffff16148061094b575061094a81610945611ae8565b6117f6565b5b61098a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610981906135e4565b60405180910390fd5b6109948383611af0565b505050565b600a60149054906101000a900460ff1681565b6000600880549050905090565b6109ca6109c4611ae8565b82611ba9565b610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0090613764565b60405180910390fd5b610a14838383611c87565b505050565b6000610a2483610f18565b8210610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c906134e4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ac6611ae8565b73ffffffffffffffffffffffffffffffffffffffff16610ae46110f1565b73ffffffffffffffffffffffffffffffffffffffff1614610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b31906136c4565b60405180910390fd5b6000600a47610b499190613938565b905060008147610b5991906139c3565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610bbb57600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050610c1b57600080fd5b5050565b60606000610c2c83610f18565b905060008167ffffffffffffffff811115610c70577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c9e5781602001602082028036833780820191505090505b50905060005b82811015610d0e57610cb68582610a19565b828281518110610cef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610d0690613b10565b915050610ca4565b508092505050919050565b610d3483838360405180602001604052806000815250611540565b505050565b6000610d436109ac565b8210610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90613784565b60405180910390fd5b60088281548110610dbe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610dd8611ae8565b73ffffffffffffffffffffffffffffffffffffffff16610df66110f1565b73ffffffffffffffffffffffffffffffffffffffff1614610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e43906136c4565b60405180910390fd5b80600b9080519060200190610e62929190612b18565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690613624565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090613604565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fd8611ae8565b73ffffffffffffffffffffffffffffffffffffffff16610ff66110f1565b73ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611043906136c4565b60405180910390fd5b6110566000611ee3565b565b611060611ae8565b73ffffffffffffffffffffffffffffffffffffffff1661107e6110f1565b73ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb906136c4565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611123611ae8565b73ffffffffffffffffffffffffffffffffffffffff166111416110f1565b73ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e906136c4565b60405180910390fd5b80600c8190555050565b6060600180546111b090613aad565b80601f01602080910402602001604051908101604052809291908181526020018280546111dc90613aad565b80156112295780601f106111fe57610100808354040283529160200191611229565b820191906000526020600020905b81548152906001019060200180831161120c57829003601f168201915b5050505050905090565b6000600c54905090565b60006112476109ac565b9050600a60149054906101000a900460ff16611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f906135a4565b60405180910390fd5b601f82106112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290613684565b60405180910390fd5b81600c546112e99190613969565b34101561132b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611322906137a4565b60405180910390fd5b600d546103e861133b91906139c3565b828261134791906138e2565b10611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90613744565b60405180910390fd5b60005b828110156113ba576113a73382846113a291906138e2565b611fa9565b80806113b290613b10565b91505061138a565b505050565b6113c7611ae8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c90613584565b60405180910390fd5b8060056000611442611ae8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114ef611ae8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161153491906134a7565b60405180910390a35050565b61155161154b611ae8565b83611ba9565b611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613764565b60405180910390fd5b61159c84848484611fc7565b50505050565b60606115ad82611a7c565b6115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390613704565b60405180910390fd5b60006115f6612023565b905060008151116116165760405180602001604052806000815250611641565b80611620846120b5565b6040516020016116319291906133fa565b6040516020818303038152906040525b915050919050565b611651611ae8565b73ffffffffffffffffffffffffffffffffffffffff1661166f6110f1565b73ffffffffffffffffffffffffffffffffffffffff16146116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906136c4565b60405180910390fd5b600d5481111561170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190613644565b60405180910390fd5b60006117146109ac565b905060005b828110156117495761173684828461173191906138e2565b611fa9565b808061174190613b10565b915050611719565b5081600d600082825461175c91906139c3565b92505081905550505050565b600b805461177590613aad565b80601f01602080910402602001604051908101604052809291908181526020018280546117a190613aad565b80156117ee5780601f106117c3576101008083540402835291602001916117ee565b820191906000526020600020905b8154815290600101906020018083116117d157829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611892611ae8565b73ffffffffffffffffffffffffffffffffffffffff166118b06110f1565b73ffffffffffffffffffffffffffffffffffffffff1614611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd906136c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90613524565b60405180910390fd5b61197f81611ee3565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a6557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a755750611a7482612262565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b6383610e66565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bb482611a7c565b611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea906135c4565b60405180910390fd5b6000611bfe83610e66565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c6d57508373ffffffffffffffffffffffffffffffffffffffff16611c55846107fc565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c7e5750611c7d81856117f6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ca782610e66565b73ffffffffffffffffffffffffffffffffffffffff1614611cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf4906136e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6490613564565b60405180910390fd5b611d788383836122cc565b611d83600082611af0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd391906139c3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2a91906138e2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fc38282604051806020016040528060008152506123e0565b5050565b611fd2848484611c87565b611fde8484848461243b565b61201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490613504565b60405180910390fd5b50505050565b6060600b805461203290613aad565b80601f016020809104026020016040519081016040528092919081815260200182805461205e90613aad565b80156120ab5780601f10612080576101008083540402835291602001916120ab565b820191906000526020600020905b81548152906001019060200180831161208e57829003601f168201915b5050505050905090565b606060008214156120fd576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061225d565b600082905060005b6000821461212f57808061211890613b10565b915050600a826121289190613938565b9150612105565b60008167ffffffffffffffff811115612171577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121a35781602001600182028036833780820191505090505b5090505b60008514612256576001826121bc91906139c3565b9150600a856121cb9190613b59565b60306121d791906138e2565b60f81b818381518110612213577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561224f9190613938565b94506121a7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122d7838383611995565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561231a57612315816125d2565b612359565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461235857612357838261261b565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561239c5761239781612788565b6123db565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123da576123d982826128cb565b5b5b505050565b6123ea838361294a565b6123f7600084848461243b565b612436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242d90613504565b60405180910390fd5b505050565b600061245c8473ffffffffffffffffffffffffffffffffffffffff16611982565b156125c5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612485611ae8565b8786866040518563ffffffff1660e01b81526004016124a79493929190613439565b602060405180830381600087803b1580156124c157600080fd5b505af19250505080156124f257506040513d601f19601f820116820180604052508101906124ef9190612eed565b60015b612575573d8060008114612522576040519150601f19603f3d011682016040523d82523d6000602084013e612527565b606091505b5060008151141561256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256490613504565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125ca565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161262884610f18565b61263291906139c3565b9050600060076000848152602001908152602001600020549050818114612717576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061279c91906139c3565b90506000600960008481526020019081526020016000205490506000600883815481106127f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061283a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006128d683610f18565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b190613664565b60405180910390fd5b6129c381611a7c565b15612a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fa90613544565b60405180910390fd5b612a0f600083836122cc565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a5f91906138e2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612b2490613aad565b90600052602060002090601f016020900481019282612b465760008555612b8d565b82601f10612b5f57805160ff1916838001178555612b8d565b82800160010185558215612b8d579182015b82811115612b8c578251825591602001919060010190612b71565b5b509050612b9a9190612b9e565b5090565b5b80821115612bb7576000816000905550600101612b9f565b5090565b6000612bce612bc984613804565b6137df565b905082815260208101848484011115612be657600080fd5b612bf1848285613a6b565b509392505050565b6000612c0c612c0784613835565b6137df565b905082815260208101848484011115612c2457600080fd5b612c2f848285613a6b565b509392505050565b600081359050612c468161421a565b92915050565b600081359050612c5b81614231565b92915050565b600081359050612c7081614248565b92915050565b600081519050612c8581614248565b92915050565b600082601f830112612c9c57600080fd5b8135612cac848260208601612bbb565b91505092915050565b600082601f830112612cc657600080fd5b8135612cd6848260208601612bf9565b91505092915050565b600081359050612cee8161425f565b92915050565b600060208284031215612d0657600080fd5b6000612d1484828501612c37565b91505092915050565b60008060408385031215612d3057600080fd5b6000612d3e85828601612c37565b9250506020612d4f85828601612c37565b9150509250929050565b600080600060608486031215612d6e57600080fd5b6000612d7c86828701612c37565b9350506020612d8d86828701612c37565b9250506040612d9e86828701612cdf565b9150509250925092565b60008060008060808587031215612dbe57600080fd5b6000612dcc87828801612c37565b9450506020612ddd87828801612c37565b9350506040612dee87828801612cdf565b925050606085013567ffffffffffffffff811115612e0b57600080fd5b612e1787828801612c8b565b91505092959194509250565b60008060408385031215612e3657600080fd5b6000612e4485828601612c37565b9250506020612e5585828601612c4c565b9150509250929050565b60008060408385031215612e7257600080fd5b6000612e8085828601612c37565b9250506020612e9185828601612cdf565b9150509250929050565b600060208284031215612ead57600080fd5b6000612ebb84828501612c4c565b91505092915050565b600060208284031215612ed657600080fd5b6000612ee484828501612c61565b91505092915050565b600060208284031215612eff57600080fd5b6000612f0d84828501612c76565b91505092915050565b600060208284031215612f2857600080fd5b600082013567ffffffffffffffff811115612f4257600080fd5b612f4e84828501612cb5565b91505092915050565b600060208284031215612f6957600080fd5b6000612f7784828501612cdf565b91505092915050565b6000612f8c83836133dc565b60208301905092915050565b612fa1816139f7565b82525050565b6000612fb282613876565b612fbc81856138a4565b9350612fc783613866565b8060005b83811015612ff8578151612fdf8882612f80565b9750612fea83613897565b925050600181019050612fcb565b5085935050505092915050565b61300e81613a09565b82525050565b600061301f82613881565b61302981856138b5565b9350613039818560208601613a7a565b61304281613c46565b840191505092915050565b60006130588261388c565b61306281856138c6565b9350613072818560208601613a7a565b61307b81613c46565b840191505092915050565b60006130918261388c565b61309b81856138d7565b93506130ab818560208601613a7a565b80840191505092915050565b60006130c4602b836138c6565b91506130cf82613c57565b604082019050919050565b60006130e76032836138c6565b91506130f282613ca6565b604082019050919050565b600061310a6026836138c6565b915061311582613cf5565b604082019050919050565b600061312d601c836138c6565b915061313882613d44565b602082019050919050565b60006131506024836138c6565b915061315b82613d6d565b604082019050919050565b60006131736019836138c6565b915061317e82613dbc565b602082019050919050565b60006131966012836138c6565b91506131a182613de5565b602082019050919050565b60006131b9602c836138c6565b91506131c482613e0e565b604082019050919050565b60006131dc6038836138c6565b91506131e782613e5d565b604082019050919050565b60006131ff602a836138c6565b915061320a82613eac565b604082019050919050565b60006132226029836138c6565b915061322d82613efb565b604082019050919050565b6000613245601e836138c6565b915061325082613f4a565b602082019050919050565b60006132686020836138c6565b915061327382613f73565b602082019050919050565b600061328b601c836138c6565b915061329682613f9c565b602082019050919050565b60006132ae602c836138c6565b91506132b982613fc5565b604082019050919050565b60006132d16020836138c6565b91506132dc82614014565b602082019050919050565b60006132f46029836138c6565b91506132ff8261403d565b604082019050919050565b6000613317602f836138c6565b91506133228261408c565b604082019050919050565b600061333a6021836138c6565b9150613345826140db565b604082019050919050565b600061335d601d836138c6565b91506133688261412a565b602082019050919050565b60006133806031836138c6565b915061338b82614153565b604082019050919050565b60006133a3602c836138c6565b91506133ae826141a2565b604082019050919050565b60006133c6601b836138c6565b91506133d1826141f1565b602082019050919050565b6133e581613a61565b82525050565b6133f481613a61565b82525050565b60006134068285613086565b91506134128284613086565b91508190509392505050565b60006020820190506134336000830184612f98565b92915050565b600060808201905061344e6000830187612f98565b61345b6020830186612f98565b61346860408301856133eb565b818103606083015261347a8184613014565b905095945050505050565b6000602082019050818103600083015261349f8184612fa7565b905092915050565b60006020820190506134bc6000830184613005565b92915050565b600060208201905081810360008301526134dc818461304d565b905092915050565b600060208201905081810360008301526134fd816130b7565b9050919050565b6000602082019050818103600083015261351d816130da565b9050919050565b6000602082019050818103600083015261353d816130fd565b9050919050565b6000602082019050818103600083015261355d81613120565b9050919050565b6000602082019050818103600083015261357d81613143565b9050919050565b6000602082019050818103600083015261359d81613166565b9050919050565b600060208201905081810360008301526135bd81613189565b9050919050565b600060208201905081810360008301526135dd816131ac565b9050919050565b600060208201905081810360008301526135fd816131cf565b9050919050565b6000602082019050818103600083015261361d816131f2565b9050919050565b6000602082019050818103600083015261363d81613215565b9050919050565b6000602082019050818103600083015261365d81613238565b9050919050565b6000602082019050818103600083015261367d8161325b565b9050919050565b6000602082019050818103600083015261369d8161327e565b9050919050565b600060208201905081810360008301526136bd816132a1565b9050919050565b600060208201905081810360008301526136dd816132c4565b9050919050565b600060208201905081810360008301526136fd816132e7565b9050919050565b6000602082019050818103600083015261371d8161330a565b9050919050565b6000602082019050818103600083015261373d8161332d565b9050919050565b6000602082019050818103600083015261375d81613350565b9050919050565b6000602082019050818103600083015261377d81613373565b9050919050565b6000602082019050818103600083015261379d81613396565b9050919050565b600060208201905081810360008301526137bd816133b9565b9050919050565b60006020820190506137d960008301846133eb565b92915050565b60006137e96137fa565b90506137f58282613adf565b919050565b6000604051905090565b600067ffffffffffffffff82111561381f5761381e613c17565b5b61382882613c46565b9050602081019050919050565b600067ffffffffffffffff8211156138505761384f613c17565b5b61385982613c46565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006138ed82613a61565b91506138f883613a61565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561392d5761392c613b8a565b5b828201905092915050565b600061394382613a61565b915061394e83613a61565b92508261395e5761395d613bb9565b5b828204905092915050565b600061397482613a61565b915061397f83613a61565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139b8576139b7613b8a565b5b828202905092915050565b60006139ce82613a61565b91506139d983613a61565b9250828210156139ec576139eb613b8a565b5b828203905092915050565b6000613a0282613a41565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a98578082015181840152602081019050613a7d565b83811115613aa7576000848401525b50505050565b60006002820490506001821680613ac557607f821691505b60208210811415613ad957613ad8613be8565b5b50919050565b613ae882613c46565b810181811067ffffffffffffffff82111715613b0757613b06613c17565b5b80604052505050565b6000613b1b82613a61565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b4e57613b4d613b8a565b5b600182019050919050565b6000613b6482613a61565b9150613b6f83613a61565b925082613b7f57613b7e613bb9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206578636565647320726573657276656420737570706c790000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620333000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206578636565647320616c6c6f77656420737570706c79000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742065746865722070726f76696465640000000000600082015250565b614223816139f7565b811461422e57600080fd5b50565b61423a81613a09565b811461424557600080fd5b50565b61425181613a15565b811461425c57600080fd5b50565b61426881613a61565b811461427357600080fd5b5056fea26469706673582212201bca943c2c4b23acb3d706c340772fdf3407acb0026a5a77e784247d7bcf74bb64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a4e757668717944396d4e6a59716b6559473141544b355631715a78386b476a6a537a643576486a723241482f00000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmZNuvhqyD9mNjYqkeYG1ATK5V1qZx8kGjjSzd5vHjr2AH/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d5a4e757668717944396d4e6a59716b6559473141544b35
Arg [3] : 5631715a78386b476a6a537a643576486a723241482f00000000000000000000
Deployed Bytecode Sourcemap
43150:2306:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34644:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21529:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23088:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22611:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43243:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35284:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23978:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34952:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45214:239;;;:::i;:::-;;44595:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24388:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35474:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43777:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21223:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20953:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42447:94;;;;;;;;;;;;;:::i;:::-;;43879:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41796:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44049:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21698:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43968:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44133:456;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23381:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24644:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21873:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44920:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43276:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23747:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42696:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34644:224;34746:4;34785:35;34770:50;;;:11;:50;;;;:90;;;;34824:36;34848:11;34824:23;:36::i;:::-;34770:90;34763:97;;34644:224;;;:::o;21529:100::-;21583:13;21616:5;21609:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21529:100;:::o;23088:221::-;23164:7;23192:16;23200:7;23192;:16::i;:::-;23184:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23277:15;:24;23293:7;23277:24;;;;;;;;;;;;;;;;;;;;;23270:31;;23088:221;;;:::o;22611:411::-;22692:13;22708:23;22723:7;22708:14;:23::i;:::-;22692:39;;22756:5;22750:11;;:2;:11;;;;22742:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22850:5;22834:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22859:37;22876:5;22883:12;:10;:12::i;:::-;22859:16;:37::i;:::-;22834:62;22812:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22993:21;23002:2;23006:7;22993:8;:21::i;:::-;22611:411;;;:::o;43243:28::-;;;;;;;;;;;;;:::o;35284:113::-;35345:7;35372:10;:17;;;;35365:24;;35284:113;:::o;23978:339::-;24173:41;24192:12;:10;:12::i;:::-;24206:7;24173:18;:41::i;:::-;24165:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24281:28;24291:4;24297:2;24301:7;24281:9;:28::i;:::-;23978:339;;;:::o;34952:256::-;35049:7;35085:23;35102:5;35085:16;:23::i;:::-;35077:5;:31;35069:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35174:12;:19;35187:5;35174:19;;;;;;;;;;;;;;;:26;35194:5;35174:26;;;;;;;;;;;;35167:33;;34952:256;;;;:::o;45214:239::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45266:14:::1;45307:2;45283:21;:26;;;;:::i;:::-;45266:43;;45316:15;45358:6;45334:21;:30;;;;:::i;:::-;45316:48;;45389:2;;;;;;;;;;;45381:16;;:25;45398:7;45381:25;;;;;;;;;;;;;;;;;;;;;;;45373:34;;;::::0;::::1;;45430:2;;;;;;;;;;;45422:16;;:24;45439:6;45422:24;;;;;;;;;;;;;;;;;;;;;;;45414:33;;;::::0;::::1;;42087:1;;45214:239::o:0;44595:319::-;44657:16;44682:18;44703:17;44713:6;44703:9;:17::i;:::-;44682:38;;44729:25;44771:10;44757:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44729:53;;44793:9;44789:98;44808:10;44804:1;:14;44789:98;;;44849:30;44869:6;44877:1;44849:19;:30::i;:::-;44835:8;44844:1;44835:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;44820:3;;;;;:::i;:::-;;;;44789:98;;;;44900:8;44893:15;;;;44595:319;;;:::o;24388:185::-;24526:39;24543:4;24549:2;24553:7;24526:39;;;;;;;;;;;;:16;:39::i;:::-;24388:185;;;:::o;35474:233::-;35549:7;35585:30;:28;:30::i;:::-;35577:5;:38;35569:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35682:10;35693:5;35682:17;;;;;;;;;;;;;;;;;;;;;;;;35675:24;;35474:233;;;:::o;43777:96::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43860:7:::1;43844:13;:23;;;;;;;;;;;;:::i;:::-;;43777:96:::0;:::o;21223:239::-;21295:7;21315:13;21331:7;:16;21339:7;21331:16;;;;;;;;;;;;;;;;;;;;;21315:32;;21383:1;21366:19;;:5;:19;;;;21358:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21449:5;21442:12;;;21223:239;;;:::o;20953:208::-;21025:7;21070:1;21053:19;;:5;:19;;;;21045:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21137:9;:16;21147:5;21137:16;;;;;;;;;;;;;;;;21130:23;;20953:208;;;:::o;42447:94::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42512:21:::1;42530:1;42512:9;:21::i;:::-;42447:94::o:0;43879:83::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43949:7:::1;43938:8;;:18;;;;;;;;;;;;;;;;;;43879:83:::0;:::o;41796:87::-;41842:7;41869:6;;;;;;;;;;;41862:13;;41796:87;:::o;44049:78::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44116:5:::1;44107:6;:14;;;;44049:78:::0;:::o;21698:104::-;21754:13;21787:7;21780:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21698:104;:::o;43968:75::-;44009:7;44031:6;;44024:13;;43968:75;:::o;44133:456::-;44186:14;44203:13;:11;:13::i;:::-;44186:30;;44234:8;;;;;;;;;;;44225:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;44292:2;44282:7;:12;44273:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44366:7;44357:6;;:16;;;;:::i;:::-;44344:9;:29;;44335:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44448:8;;44441:4;:15;;;;:::i;:::-;44431:7;44422:6;:16;;;;:::i;:::-;:34;44413:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44504:9;44500:84;44519:7;44515:1;:11;44500:84;;;44541:35;44552:10;44573:1;44564:6;:10;;;;:::i;:::-;44541:9;:35::i;:::-;44528:3;;;;;:::i;:::-;;;;44500:84;;;;44133:456;;:::o;23381:295::-;23496:12;:10;:12::i;:::-;23484:24;;:8;:24;;;;23476:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23596:8;23551:18;:32;23570:12;:10;:12::i;:::-;23551:32;;;;;;;;;;;;;;;:42;23584:8;23551:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23649:8;23620:48;;23635:12;:10;:12::i;:::-;23620:48;;;23659:8;23620:48;;;;;;:::i;:::-;;;;;;;;23381:295;;:::o;24644:328::-;24819:41;24838:12;:10;:12::i;:::-;24852:7;24819:18;:41::i;:::-;24811:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24925:39;24939:4;24945:2;24949:7;24958:5;24925:13;:39::i;:::-;24644:328;;;;:::o;21873:334::-;21946:13;21980:16;21988:7;21980;:16::i;:::-;21972:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22061:21;22085:10;:8;:10::i;:::-;22061:34;;22137:1;22119:7;22113:21;:25;:86;;;;;;;;;;;;;;;;;22165:7;22174:18;:7;:16;:18::i;:::-;22148:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22113:86;22106:93;;;21873:334;;;:::o;44920:288::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45009:8:::1;;44998:7;:19;;44990:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;45059:14;45076:13;:11;:13::i;:::-;45059:30;;45102:9;45098:77;45117:7;45113:1;:11;45098:77;;;45139:28;45150:3;45164:1;45155:6;:10;;;;:::i;:::-;45139:9;:28::i;:::-;45126:3;;;;;:::i;:::-;;;;45098:77;;;;45195:7;45183:8;;:19;;;;;;;:::i;:::-;;;;;;;;42087:1;44920:288:::0;;:::o;43276:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23747:164::-;23844:4;23868:18;:25;23887:5;23868:25;;;;;;;;;;;;;;;:35;23894:8;23868:35;;;;;;;;;;;;;;;;;;;;;;;;;23861:42;;23747:164;;;;:::o;42696:192::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42805:1:::1;42785:22;;:8;:22;;;;42777:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42861:19;42871:8;42861:9;:19::i;:::-;42696:192:::0;:::o;8240:387::-;8300:4;8508:12;8575:7;8563:20;8555:28;;8618:1;8611:4;:8;8604:15;;;8240:387;;;:::o;32578:126::-;;;;:::o;20584:305::-;20686:4;20738:25;20723:40;;;:11;:40;;;;:105;;;;20795:33;20780:48;;;:11;:48;;;;20723:105;:158;;;;20845:36;20869:11;20845:23;:36::i;:::-;20723:158;20703:178;;20584:305;;;:::o;26482:127::-;26547:4;26599:1;26571:30;;:7;:16;26579:7;26571:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26564:37;;26482:127;;;:::o;15986:98::-;16039:7;16066:10;16059:17;;15986:98;:::o;30464:174::-;30566:2;30539:15;:24;30555:7;30539:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30622:7;30618:2;30584:46;;30593:23;30608:7;30593:14;:23::i;:::-;30584:46;;;;;;;;;;;;30464:174;;:::o;26776:348::-;26869:4;26894:16;26902:7;26894;:16::i;:::-;26886:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26970:13;26986:23;27001:7;26986:14;:23::i;:::-;26970:39;;27039:5;27028:16;;:7;:16;;;:51;;;;27072:7;27048:31;;:20;27060:7;27048:11;:20::i;:::-;:31;;;27028:51;:87;;;;27083:32;27100:5;27107:7;27083:16;:32::i;:::-;27028:87;27020:96;;;26776:348;;;;:::o;29768:578::-;29927:4;29900:31;;:23;29915:7;29900:14;:23::i;:::-;:31;;;29892:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30010:1;29996:16;;:2;:16;;;;29988:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30066:39;30087:4;30093:2;30097:7;30066:20;:39::i;:::-;30170:29;30187:1;30191:7;30170:8;:29::i;:::-;30231:1;30212:9;:15;30222:4;30212:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30260:1;30243:9;:13;30253:2;30243:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30291:2;30272:7;:16;30280:7;30272:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30330:7;30326:2;30311:27;;30320:4;30311:27;;;;;;;;;;;;29768:578;;;:::o;42896:173::-;42952:16;42971:6;;;;;;;;;;;42952:25;;42997:8;42988:6;;:17;;;;;;;;;;;;;;;;;;43052:8;43021:40;;43042:8;43021:40;;;;;;;;;;;;42896:173;;:::o;27466:110::-;27542:26;27552:2;27556:7;27542:26;;;;;;;;;;;;:9;:26::i;:::-;27466:110;;:::o;25854:315::-;26011:28;26021:4;26027:2;26031:7;26011:9;:28::i;:::-;26058:48;26081:4;26087:2;26091:7;26100:5;26058:22;:48::i;:::-;26050:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25854:315;;;;:::o;43663:108::-;43723:13;43752;43745:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43663:108;:::o;16519:723::-;16575:13;16805:1;16796:5;:10;16792:53;;;16823:10;;;;;;;;;;;;;;;;;;;;;16792:53;16855:12;16870:5;16855:20;;16886:14;16911:78;16926:1;16918:4;:9;16911:78;;16944:8;;;;;:::i;:::-;;;;16975:2;16967:10;;;;;:::i;:::-;;;16911:78;;;16999:19;17031:6;17021:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16999:39;;17049:154;17065:1;17056:5;:10;17049:154;;17093:1;17083:11;;;;;:::i;:::-;;;17160:2;17152:5;:10;;;;:::i;:::-;17139:2;:24;;;;:::i;:::-;17126:39;;17109:6;17116;17109:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17189:2;17180:11;;;;;:::i;:::-;;;17049:154;;;17227:6;17213:21;;;;;16519:723;;;;:::o;19082:157::-;19167:4;19206:25;19191:40;;;:11;:40;;;;19184:47;;19082:157;;;:::o;36320:589::-;36464:45;36491:4;36497:2;36501:7;36464:26;:45::i;:::-;36542:1;36526:18;;:4;:18;;;36522:187;;;36561:40;36593:7;36561:31;:40::i;:::-;36522:187;;;36631:2;36623:10;;:4;:10;;;36619:90;;36650:47;36683:4;36689:7;36650:32;:47::i;:::-;36619:90;36522:187;36737:1;36723:16;;:2;:16;;;36719:183;;;36756:45;36793:7;36756:36;:45::i;:::-;36719:183;;;36829:4;36823:10;;:2;:10;;;36819:83;;36850:40;36878:2;36882:7;36850:27;:40::i;:::-;36819:83;36719:183;36320:589;;;:::o;27803:321::-;27933:18;27939:2;27943:7;27933:5;:18::i;:::-;27984:54;28015:1;28019:2;28023:7;28032:5;27984:22;:54::i;:::-;27962:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27803:321;;;:::o;31203:803::-;31358:4;31379:15;:2;:13;;;:15::i;:::-;31375:624;;;31431:2;31415:36;;;31452:12;:10;:12::i;:::-;31466:4;31472:7;31481:5;31415:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31411:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31678:1;31661:6;:13;:18;31657:272;;;31704:60;;;;;;;;;;:::i;:::-;;;;;;;;31657:272;31879:6;31873:13;31864:6;31860:2;31856:15;31849:38;31411:533;31548:45;;;31538:55;;;:6;:55;;;;31531:62;;;;;31375:624;31983:4;31976:11;;31203:803;;;;;;;:::o;37632:164::-;37736:10;:17;;;;37709:15;:24;37725:7;37709:24;;;;;;;;;;;:44;;;;37764:10;37780:7;37764:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37632:164;:::o;38423:988::-;38689:22;38739:1;38714:22;38731:4;38714:16;:22::i;:::-;:26;;;;:::i;:::-;38689:51;;38751:18;38772:17;:26;38790:7;38772:26;;;;;;;;;;;;38751:47;;38919:14;38905:10;:28;38901:328;;38950:19;38972:12;:18;38985:4;38972:18;;;;;;;;;;;;;;;:34;38991:14;38972:34;;;;;;;;;;;;38950:56;;39056:11;39023:12;:18;39036:4;39023:18;;;;;;;;;;;;;;;:30;39042:10;39023:30;;;;;;;;;;;:44;;;;39173:10;39140:17;:30;39158:11;39140:30;;;;;;;;;;;:43;;;;38901:328;;39325:17;:26;39343:7;39325:26;;;;;;;;;;;39318:33;;;39369:12;:18;39382:4;39369:18;;;;;;;;;;;;;;;:34;39388:14;39369:34;;;;;;;;;;;39362:41;;;38423:988;;;;:::o;39706:1079::-;39959:22;40004:1;39984:10;:17;;;;:21;;;;:::i;:::-;39959:46;;40016:18;40037:15;:24;40053:7;40037:24;;;;;;;;;;;;40016:45;;40388:19;40410:10;40421:14;40410:26;;;;;;;;;;;;;;;;;;;;;;;;40388:48;;40474:11;40449:10;40460;40449:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40585:10;40554:15;:28;40570:11;40554:28;;;;;;;;;;;:41;;;;40726:15;:24;40742:7;40726:24;;;;;;;;;;;40719:31;;;40761:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39706:1079;;;;:::o;37210:221::-;37295:14;37312:20;37329:2;37312:16;:20::i;:::-;37295:37;;37370:7;37343:12;:16;37356:2;37343:16;;;;;;;;;;;;;;;:24;37360:6;37343:24;;;;;;;;;;;:34;;;;37417:6;37388:17;:26;37406:7;37388:26;;;;;;;;;;;:35;;;;37210:221;;;:::o;28460:382::-;28554:1;28540:16;;:2;:16;;;;28532:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28613:16;28621:7;28613;:16::i;:::-;28612:17;28604:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28675:45;28704:1;28708:2;28712:7;28675:20;:45::i;:::-;28750:1;28733:9;:13;28743:2;28733:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28781:2;28762:7;:16;28770:7;28762:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28826:7;28822:2;28801:33;;28818:1;28801:33;;;;;;;;;;;;28460:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343: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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:256::-;4939:6;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:50;5114:7;5105:6;5094:9;5090:22;5072:50;:::i;:::-;5062:60;;5018:114;4946:193;;;;:::o;5145:260::-;5203:6;5252:2;5240:9;5231:7;5227:23;5223:32;5220:2;;;5268:1;5265;5258:12;5220:2;5311:1;5336:52;5380:7;5371:6;5360:9;5356:22;5336:52;:::i;:::-;5326:62;;5282:116;5210:195;;;;:::o;5411:282::-;5480:6;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5545:1;5542;5535:12;5497:2;5588:1;5613:63;5668:7;5659:6;5648:9;5644:22;5613:63;:::i;:::-;5603:73;;5559:127;5487:206;;;;:::o;5699:375::-;5768:6;5817:2;5805:9;5796:7;5792:23;5788:32;5785:2;;;5833:1;5830;5823:12;5785:2;5904:1;5893:9;5889:17;5876:31;5934:18;5926:6;5923:30;5920:2;;;5966:1;5963;5956:12;5920:2;5994:63;6049:7;6040:6;6029:9;6025:22;5994:63;:::i;:::-;5984:73;;5847:220;5775:299;;;;:::o;6080:262::-;6139:6;6188:2;6176:9;6167:7;6163:23;6159:32;6156:2;;;6204:1;6201;6194:12;6156:2;6247:1;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6218:117;6146:196;;;;:::o;6348:179::-;6417:10;6438:46;6480:3;6472:6;6438:46;:::i;:::-;6516:4;6511:3;6507:14;6493:28;;6428:99;;;;:::o;6533:118::-;6620:24;6638:5;6620:24;:::i;:::-;6615:3;6608:37;6598:53;;:::o;6687:732::-;6806:3;6835:54;6883:5;6835:54;:::i;:::-;6905:86;6984:6;6979:3;6905:86;:::i;:::-;6898:93;;7015:56;7065:5;7015:56;:::i;:::-;7094:7;7125:1;7110:284;7135:6;7132:1;7129:13;7110:284;;;7211:6;7205:13;7238:63;7297:3;7282:13;7238:63;:::i;:::-;7231:70;;7324:60;7377:6;7324:60;:::i;:::-;7314:70;;7170:224;7157:1;7154;7150:9;7145:14;;7110:284;;;7114:14;7410:3;7403:10;;6811:608;;;;;;;:::o;7425:109::-;7506:21;7521:5;7506:21;:::i;:::-;7501:3;7494:34;7484:50;;:::o;7540:360::-;7626:3;7654:38;7686:5;7654:38;:::i;:::-;7708:70;7771:6;7766:3;7708:70;:::i;:::-;7701:77;;7787:52;7832:6;7827:3;7820:4;7813:5;7809:16;7787:52;:::i;:::-;7864:29;7886:6;7864:29;:::i;:::-;7859:3;7855:39;7848:46;;7630:270;;;;;:::o;7906:364::-;7994:3;8022:39;8055:5;8022:39;:::i;:::-;8077:71;8141:6;8136:3;8077:71;:::i;:::-;8070:78;;8157:52;8202:6;8197:3;8190:4;8183:5;8179:16;8157:52;:::i;:::-;8234:29;8256:6;8234:29;:::i;:::-;8229:3;8225:39;8218:46;;7998:272;;;;;:::o;8276:377::-;8382:3;8410:39;8443:5;8410:39;:::i;:::-;8465:89;8547:6;8542:3;8465:89;:::i;:::-;8458:96;;8563:52;8608:6;8603:3;8596:4;8589:5;8585:16;8563:52;:::i;:::-;8640:6;8635:3;8631:16;8624:23;;8386:267;;;;;:::o;8659:366::-;8801:3;8822:67;8886:2;8881:3;8822:67;:::i;:::-;8815:74;;8898:93;8987:3;8898:93;:::i;:::-;9016:2;9011:3;9007:12;9000:19;;8805:220;;;:::o;9031:366::-;9173:3;9194:67;9258:2;9253:3;9194:67;:::i;:::-;9187:74;;9270:93;9359:3;9270:93;:::i;:::-;9388:2;9383:3;9379:12;9372:19;;9177:220;;;:::o;9403:366::-;9545:3;9566:67;9630:2;9625:3;9566:67;:::i;:::-;9559:74;;9642:93;9731:3;9642:93;:::i;:::-;9760:2;9755:3;9751:12;9744:19;;9549:220;;;:::o;9775:366::-;9917:3;9938:67;10002:2;9997:3;9938:67;:::i;:::-;9931:74;;10014:93;10103:3;10014:93;:::i;:::-;10132:2;10127:3;10123:12;10116:19;;9921:220;;;:::o;10147:366::-;10289:3;10310:67;10374:2;10369:3;10310:67;:::i;:::-;10303:74;;10386:93;10475:3;10386:93;:::i;:::-;10504:2;10499:3;10495:12;10488:19;;10293:220;;;:::o;10519:366::-;10661:3;10682:67;10746:2;10741:3;10682:67;:::i;:::-;10675:74;;10758:93;10847:3;10758:93;:::i;:::-;10876:2;10871:3;10867:12;10860:19;;10665:220;;;:::o;10891:366::-;11033:3;11054:67;11118:2;11113:3;11054:67;:::i;:::-;11047:74;;11130:93;11219:3;11130:93;:::i;:::-;11248:2;11243:3;11239:12;11232:19;;11037:220;;;:::o;11263:366::-;11405:3;11426:67;11490:2;11485:3;11426:67;:::i;:::-;11419:74;;11502:93;11591:3;11502:93;:::i;:::-;11620:2;11615:3;11611:12;11604:19;;11409:220;;;:::o;11635:366::-;11777:3;11798:67;11862:2;11857:3;11798:67;:::i;:::-;11791:74;;11874:93;11963:3;11874:93;:::i;:::-;11992:2;11987:3;11983:12;11976:19;;11781:220;;;:::o;12007:366::-;12149:3;12170:67;12234:2;12229:3;12170:67;:::i;:::-;12163:74;;12246:93;12335:3;12246:93;:::i;:::-;12364:2;12359:3;12355:12;12348:19;;12153:220;;;:::o;12379:366::-;12521:3;12542:67;12606:2;12601:3;12542:67;:::i;:::-;12535:74;;12618:93;12707:3;12618:93;:::i;:::-;12736:2;12731:3;12727:12;12720:19;;12525:220;;;:::o;12751:366::-;12893:3;12914:67;12978:2;12973:3;12914:67;:::i;:::-;12907:74;;12990:93;13079:3;12990:93;:::i;:::-;13108:2;13103:3;13099:12;13092:19;;12897:220;;;:::o;13123:366::-;13265:3;13286:67;13350:2;13345:3;13286:67;:::i;:::-;13279:74;;13362:93;13451:3;13362:93;:::i;:::-;13480:2;13475:3;13471:12;13464:19;;13269:220;;;:::o;13495:366::-;13637:3;13658:67;13722:2;13717:3;13658:67;:::i;:::-;13651:74;;13734:93;13823:3;13734:93;:::i;:::-;13852:2;13847:3;13843:12;13836:19;;13641:220;;;:::o;13867:366::-;14009:3;14030:67;14094:2;14089:3;14030:67;:::i;:::-;14023:74;;14106:93;14195:3;14106:93;:::i;:::-;14224:2;14219:3;14215:12;14208:19;;14013:220;;;:::o;14239:366::-;14381:3;14402:67;14466:2;14461:3;14402:67;:::i;:::-;14395:74;;14478:93;14567:3;14478:93;:::i;:::-;14596:2;14591:3;14587:12;14580:19;;14385:220;;;:::o;14611:366::-;14753:3;14774:67;14838:2;14833:3;14774:67;:::i;:::-;14767:74;;14850:93;14939:3;14850:93;:::i;:::-;14968:2;14963:3;14959:12;14952:19;;14757:220;;;:::o;14983:366::-;15125:3;15146:67;15210:2;15205:3;15146:67;:::i;:::-;15139:74;;15222:93;15311:3;15222:93;:::i;:::-;15340:2;15335:3;15331:12;15324:19;;15129:220;;;:::o;15355:366::-;15497:3;15518:67;15582:2;15577:3;15518:67;:::i;:::-;15511:74;;15594:93;15683:3;15594:93;:::i;:::-;15712:2;15707:3;15703:12;15696:19;;15501:220;;;:::o;15727:366::-;15869:3;15890:67;15954:2;15949:3;15890:67;:::i;:::-;15883:74;;15966:93;16055:3;15966:93;:::i;:::-;16084:2;16079:3;16075:12;16068:19;;15873:220;;;:::o;16099:366::-;16241:3;16262:67;16326:2;16321:3;16262:67;:::i;:::-;16255:74;;16338:93;16427:3;16338:93;:::i;:::-;16456:2;16451:3;16447:12;16440:19;;16245:220;;;:::o;16471:366::-;16613:3;16634:67;16698:2;16693:3;16634:67;:::i;:::-;16627:74;;16710:93;16799:3;16710:93;:::i;:::-;16828:2;16823:3;16819:12;16812:19;;16617:220;;;:::o;16843:366::-;16985:3;17006:67;17070:2;17065:3;17006:67;:::i;:::-;16999:74;;17082:93;17171:3;17082:93;:::i;:::-;17200:2;17195:3;17191:12;17184:19;;16989:220;;;:::o;17215:108::-;17292:24;17310:5;17292:24;:::i;:::-;17287:3;17280:37;17270:53;;:::o;17329:118::-;17416:24;17434:5;17416:24;:::i;:::-;17411:3;17404:37;17394:53;;:::o;17453:435::-;17633:3;17655:95;17746:3;17737:6;17655:95;:::i;:::-;17648:102;;17767:95;17858:3;17849:6;17767:95;:::i;:::-;17760:102;;17879:3;17872:10;;17637:251;;;;;:::o;17894:222::-;17987:4;18025:2;18014:9;18010:18;18002:26;;18038:71;18106:1;18095:9;18091:17;18082:6;18038:71;:::i;:::-;17992:124;;;;:::o;18122:640::-;18317:4;18355:3;18344:9;18340:19;18332:27;;18369:71;18437:1;18426:9;18422:17;18413:6;18369:71;:::i;:::-;18450:72;18518:2;18507:9;18503:18;18494:6;18450:72;:::i;:::-;18532;18600:2;18589:9;18585:18;18576:6;18532:72;:::i;:::-;18651:9;18645:4;18641:20;18636:2;18625:9;18621:18;18614:48;18679:76;18750:4;18741:6;18679:76;:::i;:::-;18671:84;;18322:440;;;;;;;:::o;18768:373::-;18911:4;18949:2;18938:9;18934:18;18926:26;;18998:9;18992:4;18988:20;18984:1;18973:9;18969:17;18962:47;19026:108;19129:4;19120:6;19026:108;:::i;:::-;19018:116;;18916:225;;;;:::o;19147:210::-;19234:4;19272:2;19261:9;19257:18;19249:26;;19285:65;19347:1;19336:9;19332:17;19323:6;19285:65;:::i;:::-;19239:118;;;;:::o;19363:313::-;19476:4;19514:2;19503:9;19499:18;19491:26;;19563:9;19557:4;19553:20;19549:1;19538:9;19534:17;19527:47;19591:78;19664:4;19655:6;19591:78;:::i;:::-;19583:86;;19481:195;;;;:::o;19682:419::-;19848:4;19886:2;19875:9;19871:18;19863:26;;19935:9;19929:4;19925:20;19921:1;19910:9;19906:17;19899:47;19963:131;20089:4;19963:131;:::i;:::-;19955:139;;19853:248;;;:::o;20107:419::-;20273:4;20311:2;20300:9;20296:18;20288:26;;20360:9;20354:4;20350:20;20346:1;20335:9;20331:17;20324:47;20388:131;20514:4;20388:131;:::i;:::-;20380:139;;20278:248;;;:::o;20532:419::-;20698:4;20736:2;20725:9;20721:18;20713:26;;20785:9;20779:4;20775:20;20771:1;20760:9;20756:17;20749:47;20813:131;20939:4;20813:131;:::i;:::-;20805:139;;20703:248;;;:::o;20957:419::-;21123:4;21161:2;21150:9;21146:18;21138:26;;21210:9;21204:4;21200:20;21196:1;21185:9;21181:17;21174:47;21238:131;21364:4;21238:131;:::i;:::-;21230:139;;21128:248;;;:::o;21382:419::-;21548:4;21586:2;21575:9;21571:18;21563:26;;21635:9;21629:4;21625:20;21621:1;21610:9;21606:17;21599:47;21663:131;21789:4;21663:131;:::i;:::-;21655:139;;21553:248;;;:::o;21807:419::-;21973:4;22011:2;22000:9;21996:18;21988:26;;22060:9;22054:4;22050:20;22046:1;22035:9;22031:17;22024:47;22088:131;22214:4;22088:131;:::i;:::-;22080:139;;21978:248;;;:::o;22232:419::-;22398:4;22436:2;22425:9;22421:18;22413:26;;22485:9;22479:4;22475:20;22471:1;22460:9;22456:17;22449:47;22513:131;22639:4;22513:131;:::i;:::-;22505:139;;22403:248;;;:::o;22657:419::-;22823:4;22861:2;22850:9;22846:18;22838:26;;22910:9;22904:4;22900:20;22896:1;22885:9;22881:17;22874:47;22938:131;23064:4;22938:131;:::i;:::-;22930:139;;22828:248;;;:::o;23082:419::-;23248:4;23286:2;23275:9;23271:18;23263:26;;23335:9;23329:4;23325:20;23321:1;23310:9;23306:17;23299:47;23363:131;23489:4;23363:131;:::i;:::-;23355:139;;23253:248;;;:::o;23507:419::-;23673:4;23711:2;23700:9;23696:18;23688:26;;23760:9;23754:4;23750:20;23746:1;23735:9;23731:17;23724:47;23788:131;23914:4;23788:131;:::i;:::-;23780:139;;23678:248;;;:::o;23932:419::-;24098:4;24136:2;24125:9;24121:18;24113:26;;24185:9;24179:4;24175:20;24171:1;24160:9;24156:17;24149:47;24213:131;24339:4;24213:131;:::i;:::-;24205:139;;24103:248;;;:::o;24357:419::-;24523:4;24561:2;24550:9;24546:18;24538:26;;24610:9;24604:4;24600:20;24596:1;24585:9;24581:17;24574:47;24638:131;24764:4;24638:131;:::i;:::-;24630:139;;24528:248;;;:::o;24782:419::-;24948:4;24986:2;24975:9;24971:18;24963:26;;25035:9;25029:4;25025:20;25021:1;25010:9;25006:17;24999:47;25063:131;25189:4;25063:131;:::i;:::-;25055:139;;24953:248;;;:::o;25207:419::-;25373:4;25411:2;25400:9;25396:18;25388:26;;25460:9;25454:4;25450:20;25446:1;25435:9;25431:17;25424:47;25488:131;25614:4;25488:131;:::i;:::-;25480:139;;25378:248;;;:::o;25632:419::-;25798:4;25836:2;25825:9;25821:18;25813:26;;25885:9;25879:4;25875:20;25871:1;25860:9;25856:17;25849:47;25913:131;26039:4;25913:131;:::i;:::-;25905:139;;25803:248;;;:::o;26057:419::-;26223:4;26261:2;26250:9;26246:18;26238:26;;26310:9;26304:4;26300:20;26296:1;26285:9;26281:17;26274:47;26338:131;26464:4;26338:131;:::i;:::-;26330:139;;26228:248;;;:::o;26482:419::-;26648:4;26686:2;26675:9;26671:18;26663:26;;26735:9;26729:4;26725:20;26721:1;26710:9;26706:17;26699:47;26763:131;26889:4;26763:131;:::i;:::-;26755:139;;26653:248;;;:::o;26907:419::-;27073:4;27111:2;27100:9;27096:18;27088:26;;27160:9;27154:4;27150:20;27146:1;27135:9;27131:17;27124:47;27188:131;27314:4;27188:131;:::i;:::-;27180:139;;27078:248;;;:::o;27332:419::-;27498:4;27536:2;27525:9;27521:18;27513:26;;27585:9;27579:4;27575:20;27571:1;27560:9;27556:17;27549:47;27613:131;27739:4;27613:131;:::i;:::-;27605:139;;27503:248;;;:::o;27757:419::-;27923:4;27961:2;27950:9;27946:18;27938:26;;28010:9;28004:4;28000:20;27996:1;27985:9;27981:17;27974:47;28038:131;28164:4;28038:131;:::i;:::-;28030:139;;27928:248;;;:::o;28182:419::-;28348:4;28386:2;28375:9;28371:18;28363:26;;28435:9;28429:4;28425:20;28421:1;28410:9;28406:17;28399:47;28463:131;28589:4;28463:131;:::i;:::-;28455:139;;28353:248;;;:::o;28607:419::-;28773:4;28811:2;28800:9;28796:18;28788:26;;28860:9;28854:4;28850:20;28846:1;28835:9;28831:17;28824:47;28888:131;29014:4;28888:131;:::i;:::-;28880:139;;28778:248;;;:::o;29032:419::-;29198:4;29236:2;29225:9;29221:18;29213:26;;29285:9;29279:4;29275:20;29271:1;29260:9;29256:17;29249:47;29313:131;29439:4;29313:131;:::i;:::-;29305:139;;29203:248;;;:::o;29457:222::-;29550:4;29588:2;29577:9;29573:18;29565:26;;29601:71;29669:1;29658:9;29654:17;29645:6;29601:71;:::i;:::-;29555:124;;;;:::o;29685:129::-;29719:6;29746:20;;:::i;:::-;29736:30;;29775:33;29803:4;29795:6;29775:33;:::i;:::-;29726:88;;;:::o;29820:75::-;29853:6;29886:2;29880:9;29870:19;;29860:35;:::o;29901:307::-;29962:4;30052:18;30044:6;30041:30;30038:2;;;30074:18;;:::i;:::-;30038:2;30112:29;30134:6;30112:29;:::i;:::-;30104:37;;30196:4;30190;30186:15;30178:23;;29967:241;;;:::o;30214:308::-;30276:4;30366:18;30358:6;30355:30;30352:2;;;30388:18;;:::i;:::-;30352:2;30426:29;30448:6;30426:29;:::i;:::-;30418:37;;30510:4;30504;30500:15;30492:23;;30281:241;;;:::o;30528:132::-;30595:4;30618:3;30610:11;;30648:4;30643:3;30639:14;30631:22;;30600:60;;;:::o;30666:114::-;30733:6;30767:5;30761:12;30751:22;;30740:40;;;:::o;30786:98::-;30837:6;30871:5;30865:12;30855:22;;30844:40;;;:::o;30890:99::-;30942:6;30976:5;30970:12;30960:22;;30949:40;;;:::o;30995:113::-;31065:4;31097;31092:3;31088:14;31080:22;;31070:38;;;:::o;31114:184::-;31213:11;31247:6;31242:3;31235:19;31287:4;31282:3;31278:14;31263:29;;31225:73;;;;:::o;31304:168::-;31387:11;31421:6;31416:3;31409:19;31461:4;31456:3;31452:14;31437:29;;31399:73;;;;:::o;31478:169::-;31562:11;31596:6;31591:3;31584:19;31636:4;31631:3;31627:14;31612:29;;31574:73;;;;:::o;31653:148::-;31755:11;31792:3;31777:18;;31767:34;;;;:::o;31807:305::-;31847:3;31866:20;31884:1;31866:20;:::i;:::-;31861:25;;31900:20;31918:1;31900:20;:::i;:::-;31895:25;;32054:1;31986:66;31982:74;31979:1;31976:81;31973:2;;;32060:18;;:::i;:::-;31973:2;32104:1;32101;32097:9;32090:16;;31851:261;;;;:::o;32118:185::-;32158:1;32175:20;32193:1;32175:20;:::i;:::-;32170:25;;32209:20;32227:1;32209:20;:::i;:::-;32204:25;;32248:1;32238:2;;32253:18;;:::i;:::-;32238:2;32295:1;32292;32288:9;32283:14;;32160:143;;;;:::o;32309:348::-;32349:7;32372:20;32390:1;32372:20;:::i;:::-;32367:25;;32406:20;32424:1;32406:20;:::i;:::-;32401:25;;32594:1;32526:66;32522:74;32519:1;32516:81;32511:1;32504:9;32497:17;32493:105;32490:2;;;32601:18;;:::i;:::-;32490:2;32649:1;32646;32642:9;32631:20;;32357:300;;;;:::o;32663:191::-;32703:4;32723:20;32741:1;32723:20;:::i;:::-;32718:25;;32757:20;32775:1;32757:20;:::i;:::-;32752:25;;32796:1;32793;32790:8;32787:2;;;32801:18;;:::i;:::-;32787:2;32846:1;32843;32839:9;32831:17;;32708:146;;;;:::o;32860:96::-;32897:7;32926:24;32944:5;32926:24;:::i;:::-;32915:35;;32905:51;;;:::o;32962:90::-;32996:7;33039:5;33032:13;33025:21;33014:32;;33004:48;;;:::o;33058:149::-;33094:7;33134:66;33127:5;33123:78;33112:89;;33102:105;;;:::o;33213:126::-;33250:7;33290:42;33283:5;33279:54;33268:65;;33258:81;;;:::o;33345:77::-;33382:7;33411:5;33400:16;;33390:32;;;:::o;33428:154::-;33512:6;33507:3;33502;33489:30;33574:1;33565:6;33560:3;33556:16;33549:27;33479:103;;;:::o;33588:307::-;33656:1;33666:113;33680:6;33677:1;33674:13;33666:113;;;33765:1;33760:3;33756:11;33750:18;33746:1;33741:3;33737:11;33730:39;33702:2;33699:1;33695:10;33690:15;;33666:113;;;33797:6;33794:1;33791:13;33788:2;;;33877:1;33868:6;33863:3;33859:16;33852:27;33788:2;33637:258;;;;:::o;33901:320::-;33945:6;33982:1;33976:4;33972:12;33962:22;;34029:1;34023:4;34019:12;34050:18;34040:2;;34106:4;34098:6;34094:17;34084:27;;34040:2;34168;34160:6;34157:14;34137:18;34134:38;34131:2;;;34187:18;;:::i;:::-;34131:2;33952:269;;;;:::o;34227:281::-;34310:27;34332:4;34310:27;:::i;:::-;34302:6;34298:40;34440:6;34428:10;34425:22;34404:18;34392:10;34389:34;34386:62;34383:2;;;34451:18;;:::i;:::-;34383:2;34491:10;34487:2;34480:22;34270:238;;;:::o;34514:233::-;34553:3;34576:24;34594:5;34576:24;:::i;:::-;34567:33;;34622:66;34615:5;34612:77;34609:2;;;34692:18;;:::i;:::-;34609:2;34739:1;34732:5;34728:13;34721:20;;34557:190;;;:::o;34753:176::-;34785:1;34802:20;34820:1;34802:20;:::i;:::-;34797:25;;34836:20;34854:1;34836:20;:::i;:::-;34831:25;;34875:1;34865:2;;34880:18;;:::i;:::-;34865:2;34921:1;34918;34914:9;34909:14;;34787:142;;;;:::o;34935:180::-;34983:77;34980:1;34973:88;35080:4;35077:1;35070:15;35104:4;35101:1;35094:15;35121:180;35169:77;35166:1;35159:88;35266:4;35263:1;35256:15;35290:4;35287:1;35280:15;35307:180;35355:77;35352:1;35345:88;35452:4;35449:1;35442:15;35476:4;35473:1;35466:15;35493:180;35541:77;35538:1;35531:88;35638:4;35635:1;35628:15;35662:4;35659:1;35652:15;35679:102;35720:6;35771:2;35767:7;35762:2;35755:5;35751:14;35747:28;35737:38;;35727:54;;;:::o;35787:230::-;35927:34;35923:1;35915:6;35911:14;35904:58;35996:13;35991:2;35983:6;35979:15;35972:38;35893:124;:::o;36023:237::-;36163:34;36159:1;36151:6;36147:14;36140:58;36232:20;36227:2;36219:6;36215:15;36208:45;36129:131;:::o;36266:225::-;36406:34;36402:1;36394:6;36390:14;36383:58;36475:8;36470:2;36462:6;36458:15;36451:33;36372:119;:::o;36497:178::-;36637:30;36633:1;36625:6;36621:14;36614:54;36603:72;:::o;36681:223::-;36821:34;36817:1;36809:6;36805:14;36798:58;36890:6;36885:2;36877:6;36873:15;36866:31;36787:117;:::o;36910:175::-;37050:27;37046:1;37038:6;37034:14;37027:51;37016:69;:::o;37091:168::-;37231:20;37227:1;37219:6;37215:14;37208:44;37197:62;:::o;37265:231::-;37405:34;37401:1;37393:6;37389:14;37382:58;37474:14;37469:2;37461:6;37457:15;37450:39;37371:125;:::o;37502:243::-;37642:34;37638:1;37630:6;37626:14;37619:58;37711:26;37706:2;37698:6;37694:15;37687:51;37608:137;:::o;37751:229::-;37891:34;37887:1;37879:6;37875:14;37868:58;37960:12;37955:2;37947:6;37943:15;37936:37;37857:123;:::o;37986:228::-;38126:34;38122:1;38114:6;38110:14;38103:58;38195:11;38190:2;38182:6;38178:15;38171:36;38092:122;:::o;38220:180::-;38360:32;38356:1;38348:6;38344:14;38337:56;38326:74;:::o;38406:182::-;38546:34;38542:1;38534:6;38530:14;38523:58;38512:76;:::o;38594:178::-;38734:30;38730:1;38722:6;38718:14;38711:54;38700:72;:::o;38778:231::-;38918:34;38914:1;38906:6;38902:14;38895:58;38987:14;38982:2;38974:6;38970:15;38963:39;38884:125;:::o;39015:182::-;39155:34;39151:1;39143:6;39139:14;39132:58;39121:76;:::o;39203:228::-;39343:34;39339:1;39331:6;39327:14;39320:58;39412:11;39407:2;39399:6;39395:15;39388:36;39309:122;:::o;39437:234::-;39577:34;39573:1;39565:6;39561:14;39554:58;39646:17;39641:2;39633:6;39629:15;39622:42;39543:128;:::o;39677:220::-;39817:34;39813:1;39805:6;39801:14;39794:58;39886:3;39881:2;39873:6;39869:15;39862:28;39783:114;:::o;39903:179::-;40043:31;40039:1;40031:6;40027:14;40020:55;40009:73;:::o;40088:236::-;40228:34;40224:1;40216:6;40212:14;40205:58;40297:19;40292:2;40284:6;40280:15;40273:44;40194:130;:::o;40330:231::-;40470:34;40466:1;40458:6;40454:14;40447:58;40539:14;40534:2;40526:6;40522:15;40515:39;40436:125;:::o;40567:177::-;40707:29;40703:1;40695:6;40691:14;40684:53;40673:71;:::o;40750:122::-;40823:24;40841:5;40823:24;:::i;:::-;40816:5;40813:35;40803:2;;40862:1;40859;40852:12;40803:2;40793:79;:::o;40878:116::-;40948:21;40963:5;40948:21;:::i;:::-;40941:5;40938:32;40928:2;;40984:1;40981;40974:12;40928:2;40918:76;:::o;41000:120::-;41072:23;41089:5;41072:23;:::i;:::-;41065:5;41062:34;41052:2;;41110:1;41107;41100:12;41052:2;41042:78;:::o;41126:122::-;41199:24;41217:5;41199:24;:::i;:::-;41192:5;41189:35;41179:2;;41238:1;41235;41228:12;41179:2;41169:79;:::o
Swarm Source
ipfs://1bca943c2c4b23acb3d706c340772fdf3407acb0026a5a77e784247d7bcf74bb
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.