Overview
TokenID
3
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
SpoderBytes
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-28 */ // SPDX-License-Identifier: MIT // File: spoderSeasonal_flat.sol // File: @openzeppelin/contracts/utils/Counters.sol pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Strings.sol /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol /** * @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(); } } contract SpoderBytes is ERC721Enumerable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIds; using SafeMath for uint256; uint256 private MAX_ELEMENTS = 31; uint256 public PRICE = 1.5 * 10**14; uint256 private constant MAX_BY_MINT = 1; address private PAYABLEWALLET = 0x254A338013CdC3D691BfbE00c5674581A746fa45; string public baseTokenURI; bool private _paused = true; event CreateSpoder(uint256 id); constructor(string memory baseURI) ERC721("SpoderBytes-Seaonal", "SPOS") { setBaseURI(baseURI); } function totalMint() public view returns (uint256) { return totalSupply(); } function saleActive() public view returns (bool) { if(totalSupply() < MAX_ELEMENTS && _paused == false) { return true; } else { return false; } } function mint() public payable { require(_paused == false, "Sale not active."); require(totalSupply() < MAX_ELEMENTS, "Sale end"); require(msg.value >= PRICE, "Value below price"); require(checkForOwnership(msg.sender) == false, "Can only mint 1 Spoder"); _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _mint(msg.sender, newItemId); emit CreateSpoder(_tokenIds.current()); } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } function setPrice(uint256 _newPrice) public onlyOwner { PRICE = _newPrice; } function setMaxSupply(uint256 _supply) public onlyOwner { MAX_ELEMENTS = _supply; } function setPayableWallet(address _newWallet) public onlyOwner { PAYABLEWALLET = _newWallet; } function setPause(bool _newPause) public onlyOwner { _paused = _newPause; } function walletOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function checkForOwnership(address _owner) private view returns (bool) { uint256 tokenCount = balanceOf(_owner); if(tokenCount > 0) { return true; } else { return false; } } function withdrawAll() public payable onlyOwner { uint256 balance = address(this).balance; require(balance > 0); _widthdraw(PAYABLEWALLET, address(this).balance); } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } }
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":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"CreateSpoder","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":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_supply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newPause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setPayableWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","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":"totalMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052601f600c5565886c98b76000600d5573254a338013cdc3d691bfbe00c5674581a746fa45600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060006101000a81548160ff0219169083151502179055503480156200009057600080fd5b506040516200499b3803806200499b8339818101604052810190620000b691906200045f565b6040518060400160405280601381526020017f53706f64657242797465732d5365616f6e616c000000000000000000000000008152506040518060400160405280600481526020017f53504f530000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013a92919062000331565b5080600190805190602001906200015392919062000331565b505050620001766200016a6200018e60201b60201c565b6200019660201b60201c565b62000187816200025c60201b60201c565b50620006b7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200026c6200018e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002926200030760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e290620004d7565b60405180910390fd5b80600f90805190602001906200030392919062000331565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200033f906200059f565b90600052602060002090601f016020900481019282620003635760008555620003af565b82601f106200037e57805160ff1916838001178555620003af565b82800160010185558215620003af579182015b82811115620003ae57825182559160200191906001019062000391565b5b509050620003be9190620003c2565b5090565b5b80821115620003dd576000816000905550600101620003c3565b5090565b6000620003f8620003f28462000522565b620004f9565b9050828152602081018484840111156200041757620004166200066e565b5b6200042484828562000569565b509392505050565b600082601f83011262000444576200044362000669565b5b815162000456848260208601620003e1565b91505092915050565b60006020828403121562000478576200047762000678565b5b600082015167ffffffffffffffff81111562000499576200049862000673565b5b620004a7848285016200042c565b91505092915050565b6000620004bf60208362000558565b9150620004cc826200068e565b602082019050919050565b60006020820190508181036000830152620004f281620004b0565b9050919050565b60006200050562000518565b9050620005138282620005d5565b919050565b6000604051905090565b600067ffffffffffffffff82111562000540576200053f6200063a565b5b6200054b826200067d565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005895780820151818401526020810190506200056c565b8381111562000599576000848401525b50505050565b60006002820490506001821680620005b857607f821691505b60208210811415620005cf57620005ce6200060b565b5b50919050565b620005e0826200067d565b810181811067ffffffffffffffff821117156200060257620006016200063a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6142d480620006c76000396000f3fe6080604052600436106101d85760003560e01c806368428a1b1161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd1461067a578063d547cfb7146106b7578063e985e9c5146106e2578063f2fde38b1461071f576101d8565b806395d89b41146105d4578063a22cb465146105ff578063b88d4fde14610628578063bedb86fb14610651576101d8565b8063853828b6116100d1578063853828b61461054b5780638d859f3e146105555780638da5cb5b1461058057806391b7f5ed146105ab576101d8565b806368428a1b146104a35780636f8b44b0146104ce57806370a08231146104f7578063715018a614610534576101d8565b80632f745c591161017a57806355f804b31161014957806355f804b3146103e957806359a7715a146104125780635c847e4f1461043d5780636352211e14610466576101d8565b80632f745c591461030957806342842e0e14610346578063438b63001461036f5780634f6ccce7146103ac576101d8565b8063095ea7b3116101b6578063095ea7b3146102825780631249c58b146102ab57806318160ddd146102b557806323b872dd146102e0576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612e7a565b610748565b60405161021191906134a9565b60405180910390f35b34801561022657600080fd5b5061022f6107c2565b60405161023c91906134c4565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612f1d565b610854565b6040516102799190613420565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612e0d565b6108d9565b005b6102b36109f1565b005b3480156102c157600080fd5b506102ca610b8b565b6040516102d791906137c6565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190612cf7565b610b98565b005b34801561031557600080fd5b50610330600480360381019061032b9190612e0d565b610bf8565b60405161033d91906137c6565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612cf7565b610c9d565b005b34801561037b57600080fd5b5061039660048036038101906103919190612c8a565b610cbd565b6040516103a39190613487565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190612f1d565b610d6b565b6040516103e091906137c6565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190612ed4565b610ddc565b005b34801561041e57600080fd5b50610427610e72565b60405161043491906137c6565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190612c8a565b610e81565b005b34801561047257600080fd5b5061048d60048036038101906104889190612f1d565b610f41565b60405161049a9190613420565b60405180910390f35b3480156104af57600080fd5b506104b8610ff3565b6040516104c591906134a9565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612f1d565b611036565b005b34801561050357600080fd5b5061051e60048036038101906105199190612c8a565b6110bc565b60405161052b91906137c6565b60405180910390f35b34801561054057600080fd5b50610549611174565b005b6105536111fc565b005b34801561056157600080fd5b5061056a6112b9565b60405161057791906137c6565b60405180910390f35b34801561058c57600080fd5b506105956112bf565b6040516105a29190613420565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190612f1d565b6112e9565b005b3480156105e057600080fd5b506105e961136f565b6040516105f691906134c4565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190612dcd565b611401565b005b34801561063457600080fd5b5061064f600480360381019061064a9190612d4a565b611582565b005b34801561065d57600080fd5b5061067860048036038101906106739190612e4d565b6115e4565b005b34801561068657600080fd5b506106a1600480360381019061069c9190612f1d565b61167d565b6040516106ae91906134c4565b60405180910390f35b3480156106c357600080fd5b506106cc611724565b6040516106d991906134c4565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190612cb7565b6117b2565b60405161071691906134a9565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190612c8a565b611846565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107bb57506107ba8261193e565b5b9050919050565b6060600080546107d190613a60565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90613a60565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b600061085f82611a20565b61089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590613686565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e482610f41565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90613726565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610974611a8c565b73ffffffffffffffffffffffffffffffffffffffff1614806109a357506109a28161099d611a8c565b6117b2565b5b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d9906135e6565b60405180910390fd5b6109ec8383611a94565b505050565b60001515601060009054906101000a900460ff16151514610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90613566565b60405180910390fd5b600c54610a52610b8b565b10610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8990613666565b60405180910390fd5b600d54341015610ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ace90613706565b60405180910390fd5b60001515610ae433611b4d565b151514610b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1d90613786565b60405180910390fd5b610b30600b611b79565b6000610b3c600b611b8f565b9050610b483382611b9d565b7ff6bd00e9af607de758cd6b07379a1ee3ad0fd7c834f51b57dd95fc4e7f2bd37e610b73600b611b8f565b604051610b8091906137c6565b60405180910390a150565b6000600880549050905090565b610ba9610ba3611a8c565b82611d6b565b610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90613766565b60405180910390fd5b610bf3838383611e49565b505050565b6000610c03836110bc565b8210610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b906134e6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cb883838360405180602001604052806000815250611582565b505050565b60606000610cca836110bc565b905060008167ffffffffffffffff811115610ce857610ce7613c28565b5b604051908082528060200260200182016040528015610d165781602001602082028036833780820191505090505b50905060005b82811015610d6057610d2e8582610bf8565b828281518110610d4157610d40613bf9565b5b6020026020010181815250508080610d5890613ac3565b915050610d1c565b508092505050919050565b6000610d75610b8b565b8210610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad906137a6565b60405180910390fd5b60088281548110610dca57610dc9613bf9565b5b90600052602060002001549050919050565b610de4611a8c565b73ffffffffffffffffffffffffffffffffffffffff16610e026112bf565b73ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f906136a6565b60405180910390fd5b80600f9080519060200190610e6e929190612a9e565b5050565b6000610e7c610b8b565b905090565b610e89611a8c565b73ffffffffffffffffffffffffffffffffffffffff16610ea76112bf565b73ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef4906136a6565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190613626565b60405180910390fd5b80915050919050565b6000600c54611000610b8b565b108015611020575060001515601060009054906101000a900460ff161515145b1561102e5760019050611033565b600090505b90565b61103e611a8c565b73ffffffffffffffffffffffffffffffffffffffff1661105c6112bf565b73ffffffffffffffffffffffffffffffffffffffff16146110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a9906136a6565b60405180910390fd5b80600c8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561112d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112490613606565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117c611a8c565b73ffffffffffffffffffffffffffffffffffffffff1661119a6112bf565b73ffffffffffffffffffffffffffffffffffffffff16146111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e7906136a6565b60405180910390fd5b6111fa60006120a5565b565b611204611a8c565b73ffffffffffffffffffffffffffffffffffffffff166112226112bf565b73ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f906136a6565b60405180910390fd5b60004790506000811161128a57600080fd5b6112b6600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff164761216b565b50565b600d5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112f1611a8c565b73ffffffffffffffffffffffffffffffffffffffff1661130f6112bf565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c906136a6565b60405180910390fd5b80600d8190555050565b60606001805461137e90613a60565b80601f01602080910402602001604051908101604052809291908181526020018280546113aa90613a60565b80156113f75780601f106113cc576101008083540402835291602001916113f7565b820191906000526020600020905b8154815290600101906020018083116113da57829003601f168201915b5050505050905090565b611409611a8c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906135a6565b60405180910390fd5b8060056000611484611a8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611531611a8c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161157691906134a9565b60405180910390a35050565b61159361158d611a8c565b83611d6b565b6115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c990613766565b60405180910390fd5b6115de8484848461221c565b50505050565b6115ec611a8c565b73ffffffffffffffffffffffffffffffffffffffff1661160a6112bf565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611657906136a6565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606061168882611a20565b6116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be906136e6565b60405180910390fd5b60006116d1612278565b905060008151116116f1576040518060200160405280600081525061171c565b806116fb8461230a565b60405160200161170c9291906133e7565b6040516020818303038152906040525b915050919050565b600f805461173190613a60565b80601f016020809104026020016040519081016040528092919081815260200182805461175d90613a60565b80156117aa5780601f1061177f576101008083540402835291602001916117aa565b820191906000526020600020905b81548152906001019060200180831161178d57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61184e611a8c565b73ffffffffffffffffffffffffffffffffffffffff1661186c6112bf565b73ffffffffffffffffffffffffffffffffffffffff16146118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b9906136a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192990613526565b60405180910390fd5b61193b816120a5565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a0957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a195750611a188261246b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b0783610f41565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611b59836110bc565b90506000811115611b6e576001915050611b74565b60009150505b919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0490613646565b60405180910390fd5b611c1681611a20565b15611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90613546565b60405180910390fd5b611c62600083836124d5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb291906138ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611d7682611a20565b611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906135c6565b60405180910390fd5b6000611dc083610f41565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e2f57508373ffffffffffffffffffffffffffffffffffffffff16611e1784610854565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e405750611e3f81856117b2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e6982610f41565b73ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb6906136c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613586565b60405180910390fd5b611f3a8383836124d5565b611f45600082611a94565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f959190613976565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fec91906138ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516121919061340b565b60006040518083038185875af1925050503d80600081146121ce576040519150601f19603f3d011682016040523d82523d6000602084013e6121d3565b606091505b5050905080612217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220e90613746565b60405180910390fd5b505050565b612227848484611e49565b612233848484846125e9565b612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990613506565b60405180910390fd5b50505050565b6060600f805461228790613a60565b80601f01602080910402602001604051908101604052809291908181526020018280546122b390613a60565b80156123005780601f106122d557610100808354040283529160200191612300565b820191906000526020600020905b8154815290600101906020018083116122e357829003601f168201915b5050505050905090565b60606000821415612352576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612466565b600082905060005b6000821461238457808061236d90613ac3565b915050600a8261237d9190613945565b915061235a565b60008167ffffffffffffffff8111156123a05761239f613c28565b5b6040519080825280601f01601f1916602001820160405280156123d25781602001600182028036833780820191505090505b5090505b6000851461245f576001826123eb9190613976565b9150600a856123fa9190613b0c565b603061240691906138ef565b60f81b81838151811061241c5761241b613bf9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124589190613945565b94506123d6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124e0838383612780565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125235761251e81612785565b612562565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125615761256083826127ce565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a5576125a08161293b565b6125e4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125e3576125e28282612a0c565b5b5b505050565b600061260a8473ffffffffffffffffffffffffffffffffffffffff16612a8b565b15612773578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612633611a8c565b8786866040518563ffffffff1660e01b8152600401612655949392919061343b565b602060405180830381600087803b15801561266f57600080fd5b505af19250505080156126a057506040513d601f19601f8201168201806040525081019061269d9190612ea7565b60015b612723573d80600081146126d0576040519150601f19603f3d011682016040523d82523d6000602084013e6126d5565b606091505b5060008151141561271b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271290613506565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612778565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016127db846110bc565b6127e59190613976565b90506000600760008481526020019081526020016000205490508181146128ca576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061294f9190613976565b905060006009600084815260200190815260200160002054905060006008838154811061297f5761297e613bf9565b5b9060005260206000200154905080600883815481106129a1576129a0613bf9565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806129f0576129ef613bca565b5b6001900381819060005260206000200160009055905550505050565b6000612a17836110bc565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612aaa90613a60565b90600052602060002090601f016020900481019282612acc5760008555612b13565b82601f10612ae557805160ff1916838001178555612b13565b82800160010185558215612b13579182015b82811115612b12578251825591602001919060010190612af7565b5b509050612b209190612b24565b5090565b5b80821115612b3d576000816000905550600101612b25565b5090565b6000612b54612b4f84613806565b6137e1565b905082815260208101848484011115612b7057612b6f613c5c565b5b612b7b848285613a1e565b509392505050565b6000612b96612b9184613837565b6137e1565b905082815260208101848484011115612bb257612bb1613c5c565b5b612bbd848285613a1e565b509392505050565b600081359050612bd481614242565b92915050565b600081359050612be981614259565b92915050565b600081359050612bfe81614270565b92915050565b600081519050612c1381614270565b92915050565b600082601f830112612c2e57612c2d613c57565b5b8135612c3e848260208601612b41565b91505092915050565b600082601f830112612c5c57612c5b613c57565b5b8135612c6c848260208601612b83565b91505092915050565b600081359050612c8481614287565b92915050565b600060208284031215612ca057612c9f613c66565b5b6000612cae84828501612bc5565b91505092915050565b60008060408385031215612cce57612ccd613c66565b5b6000612cdc85828601612bc5565b9250506020612ced85828601612bc5565b9150509250929050565b600080600060608486031215612d1057612d0f613c66565b5b6000612d1e86828701612bc5565b9350506020612d2f86828701612bc5565b9250506040612d4086828701612c75565b9150509250925092565b60008060008060808587031215612d6457612d63613c66565b5b6000612d7287828801612bc5565b9450506020612d8387828801612bc5565b9350506040612d9487828801612c75565b925050606085013567ffffffffffffffff811115612db557612db4613c61565b5b612dc187828801612c19565b91505092959194509250565b60008060408385031215612de457612de3613c66565b5b6000612df285828601612bc5565b9250506020612e0385828601612bda565b9150509250929050565b60008060408385031215612e2457612e23613c66565b5b6000612e3285828601612bc5565b9250506020612e4385828601612c75565b9150509250929050565b600060208284031215612e6357612e62613c66565b5b6000612e7184828501612bda565b91505092915050565b600060208284031215612e9057612e8f613c66565b5b6000612e9e84828501612bef565b91505092915050565b600060208284031215612ebd57612ebc613c66565b5b6000612ecb84828501612c04565b91505092915050565b600060208284031215612eea57612ee9613c66565b5b600082013567ffffffffffffffff811115612f0857612f07613c61565b5b612f1484828501612c47565b91505092915050565b600060208284031215612f3357612f32613c66565b5b6000612f4184828501612c75565b91505092915050565b6000612f5683836133c9565b60208301905092915050565b612f6b816139aa565b82525050565b6000612f7c82613878565b612f8681856138a6565b9350612f9183613868565b8060005b83811015612fc2578151612fa98882612f4a565b9750612fb483613899565b925050600181019050612f95565b5085935050505092915050565b612fd8816139bc565b82525050565b6000612fe982613883565b612ff381856138b7565b9350613003818560208601613a2d565b61300c81613c6b565b840191505092915050565b60006130228261388e565b61302c81856138d3565b935061303c818560208601613a2d565b61304581613c6b565b840191505092915050565b600061305b8261388e565b61306581856138e4565b9350613075818560208601613a2d565b80840191505092915050565b600061308e602b836138d3565b915061309982613c7c565b604082019050919050565b60006130b16032836138d3565b91506130bc82613ccb565b604082019050919050565b60006130d46026836138d3565b91506130df82613d1a565b604082019050919050565b60006130f7601c836138d3565b915061310282613d69565b602082019050919050565b600061311a6010836138d3565b915061312582613d92565b602082019050919050565b600061313d6024836138d3565b915061314882613dbb565b604082019050919050565b60006131606019836138d3565b915061316b82613e0a565b602082019050919050565b6000613183602c836138d3565b915061318e82613e33565b604082019050919050565b60006131a66038836138d3565b91506131b182613e82565b604082019050919050565b60006131c9602a836138d3565b91506131d482613ed1565b604082019050919050565b60006131ec6029836138d3565b91506131f782613f20565b604082019050919050565b600061320f6020836138d3565b915061321a82613f6f565b602082019050919050565b60006132326008836138d3565b915061323d82613f98565b602082019050919050565b6000613255602c836138d3565b915061326082613fc1565b604082019050919050565b60006132786020836138d3565b915061328382614010565b602082019050919050565b600061329b6029836138d3565b91506132a682614039565b604082019050919050565b60006132be602f836138d3565b91506132c982614088565b604082019050919050565b60006132e16011836138d3565b91506132ec826140d7565b602082019050919050565b60006133046021836138d3565b915061330f82614100565b604082019050919050565b60006133276000836138c8565b91506133328261414f565b600082019050919050565b600061334a6010836138d3565b915061335582614152565b602082019050919050565b600061336d6031836138d3565b91506133788261417b565b604082019050919050565b60006133906016836138d3565b915061339b826141ca565b602082019050919050565b60006133b3602c836138d3565b91506133be826141f3565b604082019050919050565b6133d281613a14565b82525050565b6133e181613a14565b82525050565b60006133f38285613050565b91506133ff8284613050565b91508190509392505050565b60006134168261331a565b9150819050919050565b60006020820190506134356000830184612f62565b92915050565b60006080820190506134506000830187612f62565b61345d6020830186612f62565b61346a60408301856133d8565b818103606083015261347c8184612fde565b905095945050505050565b600060208201905081810360008301526134a18184612f71565b905092915050565b60006020820190506134be6000830184612fcf565b92915050565b600060208201905081810360008301526134de8184613017565b905092915050565b600060208201905081810360008301526134ff81613081565b9050919050565b6000602082019050818103600083015261351f816130a4565b9050919050565b6000602082019050818103600083015261353f816130c7565b9050919050565b6000602082019050818103600083015261355f816130ea565b9050919050565b6000602082019050818103600083015261357f8161310d565b9050919050565b6000602082019050818103600083015261359f81613130565b9050919050565b600060208201905081810360008301526135bf81613153565b9050919050565b600060208201905081810360008301526135df81613176565b9050919050565b600060208201905081810360008301526135ff81613199565b9050919050565b6000602082019050818103600083015261361f816131bc565b9050919050565b6000602082019050818103600083015261363f816131df565b9050919050565b6000602082019050818103600083015261365f81613202565b9050919050565b6000602082019050818103600083015261367f81613225565b9050919050565b6000602082019050818103600083015261369f81613248565b9050919050565b600060208201905081810360008301526136bf8161326b565b9050919050565b600060208201905081810360008301526136df8161328e565b9050919050565b600060208201905081810360008301526136ff816132b1565b9050919050565b6000602082019050818103600083015261371f816132d4565b9050919050565b6000602082019050818103600083015261373f816132f7565b9050919050565b6000602082019050818103600083015261375f8161333d565b9050919050565b6000602082019050818103600083015261377f81613360565b9050919050565b6000602082019050818103600083015261379f81613383565b9050919050565b600060208201905081810360008301526137bf816133a6565b9050919050565b60006020820190506137db60008301846133d8565b92915050565b60006137eb6137fc565b90506137f78282613a92565b919050565b6000604051905090565b600067ffffffffffffffff82111561382157613820613c28565b5b61382a82613c6b565b9050602081019050919050565b600067ffffffffffffffff82111561385257613851613c28565b5b61385b82613c6b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138fa82613a14565b915061390583613a14565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561393a57613939613b3d565b5b828201905092915050565b600061395082613a14565b915061395b83613a14565b92508261396b5761396a613b6c565b5b828204905092915050565b600061398182613a14565b915061398c83613a14565b92508282101561399f5761399e613b3d565b5b828203905092915050565b60006139b5826139f4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a4b578082015181840152602081019050613a30565b83811115613a5a576000848401525b50505050565b60006002820490506001821680613a7857607f821691505b60208210811415613a8c57613a8b613b9b565b5b50919050565b613a9b82613c6b565b810181811067ffffffffffffffff82111715613aba57613ab9613c28565b5b80604052505050565b6000613ace82613a14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b0157613b00613b3d565b5b600182019050919050565b6000613b1782613a14565b9150613b2283613a14565b925082613b3257613b31613b6c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65206e6f74206163746976652e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e7420312053706f64657200000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61424b816139aa565b811461425657600080fd5b50565b614262816139bc565b811461426d57600080fd5b50565b614279816139c8565b811461428457600080fd5b50565b61429081613a14565b811461429b57600080fd5b5056fea26469706673582212205123b4614ca73719a19dac9cb4c808b0839a6ff630266fd10cf4c73ac7659f9764736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f6170692e73706f64657262797465732e636f6d2f6170692f73706f6f6b792f00000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101d85760003560e01c806368428a1b1161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd1461067a578063d547cfb7146106b7578063e985e9c5146106e2578063f2fde38b1461071f576101d8565b806395d89b41146105d4578063a22cb465146105ff578063b88d4fde14610628578063bedb86fb14610651576101d8565b8063853828b6116100d1578063853828b61461054b5780638d859f3e146105555780638da5cb5b1461058057806391b7f5ed146105ab576101d8565b806368428a1b146104a35780636f8b44b0146104ce57806370a08231146104f7578063715018a614610534576101d8565b80632f745c591161017a57806355f804b31161014957806355f804b3146103e957806359a7715a146104125780635c847e4f1461043d5780636352211e14610466576101d8565b80632f745c591461030957806342842e0e14610346578063438b63001461036f5780634f6ccce7146103ac576101d8565b8063095ea7b3116101b6578063095ea7b3146102825780631249c58b146102ab57806318160ddd146102b557806323b872dd146102e0576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612e7a565b610748565b60405161021191906134a9565b60405180910390f35b34801561022657600080fd5b5061022f6107c2565b60405161023c91906134c4565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612f1d565b610854565b6040516102799190613420565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612e0d565b6108d9565b005b6102b36109f1565b005b3480156102c157600080fd5b506102ca610b8b565b6040516102d791906137c6565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190612cf7565b610b98565b005b34801561031557600080fd5b50610330600480360381019061032b9190612e0d565b610bf8565b60405161033d91906137c6565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612cf7565b610c9d565b005b34801561037b57600080fd5b5061039660048036038101906103919190612c8a565b610cbd565b6040516103a39190613487565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190612f1d565b610d6b565b6040516103e091906137c6565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190612ed4565b610ddc565b005b34801561041e57600080fd5b50610427610e72565b60405161043491906137c6565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190612c8a565b610e81565b005b34801561047257600080fd5b5061048d60048036038101906104889190612f1d565b610f41565b60405161049a9190613420565b60405180910390f35b3480156104af57600080fd5b506104b8610ff3565b6040516104c591906134a9565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190612f1d565b611036565b005b34801561050357600080fd5b5061051e60048036038101906105199190612c8a565b6110bc565b60405161052b91906137c6565b60405180910390f35b34801561054057600080fd5b50610549611174565b005b6105536111fc565b005b34801561056157600080fd5b5061056a6112b9565b60405161057791906137c6565b60405180910390f35b34801561058c57600080fd5b506105956112bf565b6040516105a29190613420565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190612f1d565b6112e9565b005b3480156105e057600080fd5b506105e961136f565b6040516105f691906134c4565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190612dcd565b611401565b005b34801561063457600080fd5b5061064f600480360381019061064a9190612d4a565b611582565b005b34801561065d57600080fd5b5061067860048036038101906106739190612e4d565b6115e4565b005b34801561068657600080fd5b506106a1600480360381019061069c9190612f1d565b61167d565b6040516106ae91906134c4565b60405180910390f35b3480156106c357600080fd5b506106cc611724565b6040516106d991906134c4565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190612cb7565b6117b2565b60405161071691906134a9565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190612c8a565b611846565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107bb57506107ba8261193e565b5b9050919050565b6060600080546107d190613a60565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90613a60565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b600061085f82611a20565b61089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590613686565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e482610f41565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90613726565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610974611a8c565b73ffffffffffffffffffffffffffffffffffffffff1614806109a357506109a28161099d611a8c565b6117b2565b5b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d9906135e6565b60405180910390fd5b6109ec8383611a94565b505050565b60001515601060009054906101000a900460ff16151514610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e90613566565b60405180910390fd5b600c54610a52610b8b565b10610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8990613666565b60405180910390fd5b600d54341015610ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ace90613706565b60405180910390fd5b60001515610ae433611b4d565b151514610b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1d90613786565b60405180910390fd5b610b30600b611b79565b6000610b3c600b611b8f565b9050610b483382611b9d565b7ff6bd00e9af607de758cd6b07379a1ee3ad0fd7c834f51b57dd95fc4e7f2bd37e610b73600b611b8f565b604051610b8091906137c6565b60405180910390a150565b6000600880549050905090565b610ba9610ba3611a8c565b82611d6b565b610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90613766565b60405180910390fd5b610bf3838383611e49565b505050565b6000610c03836110bc565b8210610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b906134e6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cb883838360405180602001604052806000815250611582565b505050565b60606000610cca836110bc565b905060008167ffffffffffffffff811115610ce857610ce7613c28565b5b604051908082528060200260200182016040528015610d165781602001602082028036833780820191505090505b50905060005b82811015610d6057610d2e8582610bf8565b828281518110610d4157610d40613bf9565b5b6020026020010181815250508080610d5890613ac3565b915050610d1c565b508092505050919050565b6000610d75610b8b565b8210610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad906137a6565b60405180910390fd5b60088281548110610dca57610dc9613bf9565b5b90600052602060002001549050919050565b610de4611a8c565b73ffffffffffffffffffffffffffffffffffffffff16610e026112bf565b73ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f906136a6565b60405180910390fd5b80600f9080519060200190610e6e929190612a9e565b5050565b6000610e7c610b8b565b905090565b610e89611a8c565b73ffffffffffffffffffffffffffffffffffffffff16610ea76112bf565b73ffffffffffffffffffffffffffffffffffffffff1614610efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef4906136a6565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190613626565b60405180910390fd5b80915050919050565b6000600c54611000610b8b565b108015611020575060001515601060009054906101000a900460ff161515145b1561102e5760019050611033565b600090505b90565b61103e611a8c565b73ffffffffffffffffffffffffffffffffffffffff1661105c6112bf565b73ffffffffffffffffffffffffffffffffffffffff16146110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a9906136a6565b60405180910390fd5b80600c8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561112d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112490613606565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61117c611a8c565b73ffffffffffffffffffffffffffffffffffffffff1661119a6112bf565b73ffffffffffffffffffffffffffffffffffffffff16146111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e7906136a6565b60405180910390fd5b6111fa60006120a5565b565b611204611a8c565b73ffffffffffffffffffffffffffffffffffffffff166112226112bf565b73ffffffffffffffffffffffffffffffffffffffff1614611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f906136a6565b60405180910390fd5b60004790506000811161128a57600080fd5b6112b6600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff164761216b565b50565b600d5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112f1611a8c565b73ffffffffffffffffffffffffffffffffffffffff1661130f6112bf565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c906136a6565b60405180910390fd5b80600d8190555050565b60606001805461137e90613a60565b80601f01602080910402602001604051908101604052809291908181526020018280546113aa90613a60565b80156113f75780601f106113cc576101008083540402835291602001916113f7565b820191906000526020600020905b8154815290600101906020018083116113da57829003601f168201915b5050505050905090565b611409611a8c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906135a6565b60405180910390fd5b8060056000611484611a8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611531611a8c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161157691906134a9565b60405180910390a35050565b61159361158d611a8c565b83611d6b565b6115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c990613766565b60405180910390fd5b6115de8484848461221c565b50505050565b6115ec611a8c565b73ffffffffffffffffffffffffffffffffffffffff1661160a6112bf565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611657906136a6565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606061168882611a20565b6116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be906136e6565b60405180910390fd5b60006116d1612278565b905060008151116116f1576040518060200160405280600081525061171c565b806116fb8461230a565b60405160200161170c9291906133e7565b6040516020818303038152906040525b915050919050565b600f805461173190613a60565b80601f016020809104026020016040519081016040528092919081815260200182805461175d90613a60565b80156117aa5780601f1061177f576101008083540402835291602001916117aa565b820191906000526020600020905b81548152906001019060200180831161178d57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61184e611a8c565b73ffffffffffffffffffffffffffffffffffffffff1661186c6112bf565b73ffffffffffffffffffffffffffffffffffffffff16146118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b9906136a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192990613526565b60405180910390fd5b61193b816120a5565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a0957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a195750611a188261246b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b0783610f41565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611b59836110bc565b90506000811115611b6e576001915050611b74565b60009150505b919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0490613646565b60405180910390fd5b611c1681611a20565b15611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90613546565b60405180910390fd5b611c62600083836124d5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb291906138ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611d7682611a20565b611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906135c6565b60405180910390fd5b6000611dc083610f41565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e2f57508373ffffffffffffffffffffffffffffffffffffffff16611e1784610854565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e405750611e3f81856117b2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e6982610f41565b73ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb6906136c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613586565b60405180910390fd5b611f3a8383836124d5565b611f45600082611a94565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f959190613976565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fec91906138ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516121919061340b565b60006040518083038185875af1925050503d80600081146121ce576040519150601f19603f3d011682016040523d82523d6000602084013e6121d3565b606091505b5050905080612217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220e90613746565b60405180910390fd5b505050565b612227848484611e49565b612233848484846125e9565b612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990613506565b60405180910390fd5b50505050565b6060600f805461228790613a60565b80601f01602080910402602001604051908101604052809291908181526020018280546122b390613a60565b80156123005780601f106122d557610100808354040283529160200191612300565b820191906000526020600020905b8154815290600101906020018083116122e357829003601f168201915b5050505050905090565b60606000821415612352576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612466565b600082905060005b6000821461238457808061236d90613ac3565b915050600a8261237d9190613945565b915061235a565b60008167ffffffffffffffff8111156123a05761239f613c28565b5b6040519080825280601f01601f1916602001820160405280156123d25781602001600182028036833780820191505090505b5090505b6000851461245f576001826123eb9190613976565b9150600a856123fa9190613b0c565b603061240691906138ef565b60f81b81838151811061241c5761241b613bf9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124589190613945565b94506123d6565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124e0838383612780565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125235761251e81612785565b612562565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125615761256083826127ce565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a5576125a08161293b565b6125e4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125e3576125e28282612a0c565b5b5b505050565b600061260a8473ffffffffffffffffffffffffffffffffffffffff16612a8b565b15612773578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612633611a8c565b8786866040518563ffffffff1660e01b8152600401612655949392919061343b565b602060405180830381600087803b15801561266f57600080fd5b505af19250505080156126a057506040513d601f19601f8201168201806040525081019061269d9190612ea7565b60015b612723573d80600081146126d0576040519150601f19603f3d011682016040523d82523d6000602084013e6126d5565b606091505b5060008151141561271b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271290613506565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612778565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016127db846110bc565b6127e59190613976565b90506000600760008481526020019081526020016000205490508181146128ca576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061294f9190613976565b905060006009600084815260200190815260200160002054905060006008838154811061297f5761297e613bf9565b5b9060005260206000200154905080600883815481106129a1576129a0613bf9565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806129f0576129ef613bca565b5b6001900381819060005260206000200160009055905550505050565b6000612a17836110bc565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612aaa90613a60565b90600052602060002090601f016020900481019282612acc5760008555612b13565b82601f10612ae557805160ff1916838001178555612b13565b82800160010185558215612b13579182015b82811115612b12578251825591602001919060010190612af7565b5b509050612b209190612b24565b5090565b5b80821115612b3d576000816000905550600101612b25565b5090565b6000612b54612b4f84613806565b6137e1565b905082815260208101848484011115612b7057612b6f613c5c565b5b612b7b848285613a1e565b509392505050565b6000612b96612b9184613837565b6137e1565b905082815260208101848484011115612bb257612bb1613c5c565b5b612bbd848285613a1e565b509392505050565b600081359050612bd481614242565b92915050565b600081359050612be981614259565b92915050565b600081359050612bfe81614270565b92915050565b600081519050612c1381614270565b92915050565b600082601f830112612c2e57612c2d613c57565b5b8135612c3e848260208601612b41565b91505092915050565b600082601f830112612c5c57612c5b613c57565b5b8135612c6c848260208601612b83565b91505092915050565b600081359050612c8481614287565b92915050565b600060208284031215612ca057612c9f613c66565b5b6000612cae84828501612bc5565b91505092915050565b60008060408385031215612cce57612ccd613c66565b5b6000612cdc85828601612bc5565b9250506020612ced85828601612bc5565b9150509250929050565b600080600060608486031215612d1057612d0f613c66565b5b6000612d1e86828701612bc5565b9350506020612d2f86828701612bc5565b9250506040612d4086828701612c75565b9150509250925092565b60008060008060808587031215612d6457612d63613c66565b5b6000612d7287828801612bc5565b9450506020612d8387828801612bc5565b9350506040612d9487828801612c75565b925050606085013567ffffffffffffffff811115612db557612db4613c61565b5b612dc187828801612c19565b91505092959194509250565b60008060408385031215612de457612de3613c66565b5b6000612df285828601612bc5565b9250506020612e0385828601612bda565b9150509250929050565b60008060408385031215612e2457612e23613c66565b5b6000612e3285828601612bc5565b9250506020612e4385828601612c75565b9150509250929050565b600060208284031215612e6357612e62613c66565b5b6000612e7184828501612bda565b91505092915050565b600060208284031215612e9057612e8f613c66565b5b6000612e9e84828501612bef565b91505092915050565b600060208284031215612ebd57612ebc613c66565b5b6000612ecb84828501612c04565b91505092915050565b600060208284031215612eea57612ee9613c66565b5b600082013567ffffffffffffffff811115612f0857612f07613c61565b5b612f1484828501612c47565b91505092915050565b600060208284031215612f3357612f32613c66565b5b6000612f4184828501612c75565b91505092915050565b6000612f5683836133c9565b60208301905092915050565b612f6b816139aa565b82525050565b6000612f7c82613878565b612f8681856138a6565b9350612f9183613868565b8060005b83811015612fc2578151612fa98882612f4a565b9750612fb483613899565b925050600181019050612f95565b5085935050505092915050565b612fd8816139bc565b82525050565b6000612fe982613883565b612ff381856138b7565b9350613003818560208601613a2d565b61300c81613c6b565b840191505092915050565b60006130228261388e565b61302c81856138d3565b935061303c818560208601613a2d565b61304581613c6b565b840191505092915050565b600061305b8261388e565b61306581856138e4565b9350613075818560208601613a2d565b80840191505092915050565b600061308e602b836138d3565b915061309982613c7c565b604082019050919050565b60006130b16032836138d3565b91506130bc82613ccb565b604082019050919050565b60006130d46026836138d3565b91506130df82613d1a565b604082019050919050565b60006130f7601c836138d3565b915061310282613d69565b602082019050919050565b600061311a6010836138d3565b915061312582613d92565b602082019050919050565b600061313d6024836138d3565b915061314882613dbb565b604082019050919050565b60006131606019836138d3565b915061316b82613e0a565b602082019050919050565b6000613183602c836138d3565b915061318e82613e33565b604082019050919050565b60006131a66038836138d3565b91506131b182613e82565b604082019050919050565b60006131c9602a836138d3565b91506131d482613ed1565b604082019050919050565b60006131ec6029836138d3565b91506131f782613f20565b604082019050919050565b600061320f6020836138d3565b915061321a82613f6f565b602082019050919050565b60006132326008836138d3565b915061323d82613f98565b602082019050919050565b6000613255602c836138d3565b915061326082613fc1565b604082019050919050565b60006132786020836138d3565b915061328382614010565b602082019050919050565b600061329b6029836138d3565b91506132a682614039565b604082019050919050565b60006132be602f836138d3565b91506132c982614088565b604082019050919050565b60006132e16011836138d3565b91506132ec826140d7565b602082019050919050565b60006133046021836138d3565b915061330f82614100565b604082019050919050565b60006133276000836138c8565b91506133328261414f565b600082019050919050565b600061334a6010836138d3565b915061335582614152565b602082019050919050565b600061336d6031836138d3565b91506133788261417b565b604082019050919050565b60006133906016836138d3565b915061339b826141ca565b602082019050919050565b60006133b3602c836138d3565b91506133be826141f3565b604082019050919050565b6133d281613a14565b82525050565b6133e181613a14565b82525050565b60006133f38285613050565b91506133ff8284613050565b91508190509392505050565b60006134168261331a565b9150819050919050565b60006020820190506134356000830184612f62565b92915050565b60006080820190506134506000830187612f62565b61345d6020830186612f62565b61346a60408301856133d8565b818103606083015261347c8184612fde565b905095945050505050565b600060208201905081810360008301526134a18184612f71565b905092915050565b60006020820190506134be6000830184612fcf565b92915050565b600060208201905081810360008301526134de8184613017565b905092915050565b600060208201905081810360008301526134ff81613081565b9050919050565b6000602082019050818103600083015261351f816130a4565b9050919050565b6000602082019050818103600083015261353f816130c7565b9050919050565b6000602082019050818103600083015261355f816130ea565b9050919050565b6000602082019050818103600083015261357f8161310d565b9050919050565b6000602082019050818103600083015261359f81613130565b9050919050565b600060208201905081810360008301526135bf81613153565b9050919050565b600060208201905081810360008301526135df81613176565b9050919050565b600060208201905081810360008301526135ff81613199565b9050919050565b6000602082019050818103600083015261361f816131bc565b9050919050565b6000602082019050818103600083015261363f816131df565b9050919050565b6000602082019050818103600083015261365f81613202565b9050919050565b6000602082019050818103600083015261367f81613225565b9050919050565b6000602082019050818103600083015261369f81613248565b9050919050565b600060208201905081810360008301526136bf8161326b565b9050919050565b600060208201905081810360008301526136df8161328e565b9050919050565b600060208201905081810360008301526136ff816132b1565b9050919050565b6000602082019050818103600083015261371f816132d4565b9050919050565b6000602082019050818103600083015261373f816132f7565b9050919050565b6000602082019050818103600083015261375f8161333d565b9050919050565b6000602082019050818103600083015261377f81613360565b9050919050565b6000602082019050818103600083015261379f81613383565b9050919050565b600060208201905081810360008301526137bf816133a6565b9050919050565b60006020820190506137db60008301846133d8565b92915050565b60006137eb6137fc565b90506137f78282613a92565b919050565b6000604051905090565b600067ffffffffffffffff82111561382157613820613c28565b5b61382a82613c6b565b9050602081019050919050565b600067ffffffffffffffff82111561385257613851613c28565b5b61385b82613c6b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138fa82613a14565b915061390583613a14565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561393a57613939613b3d565b5b828201905092915050565b600061395082613a14565b915061395b83613a14565b92508261396b5761396a613b6c565b5b828204905092915050565b600061398182613a14565b915061398c83613a14565b92508282101561399f5761399e613b3d565b5b828203905092915050565b60006139b5826139f4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a4b578082015181840152602081019050613a30565b83811115613a5a576000848401525b50505050565b60006002820490506001821680613a7857607f821691505b60208210811415613a8c57613a8b613b9b565b5b50919050565b613a9b82613c6b565b810181811067ffffffffffffffff82111715613aba57613ab9613c28565b5b80604052505050565b6000613ace82613a14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b0157613b00613b3d565b5b600182019050919050565b6000613b1782613a14565b9150613b2283613a14565b925082613b3257613b31613b6c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65206e6f74206163746976652e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e206f6e6c79206d696e7420312053706f64657200000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61424b816139aa565b811461425657600080fd5b50565b614262816139bc565b811461426d57600080fd5b50565b614279816139c8565b811461428457600080fd5b50565b61429081613a14565b811461429b57600080fd5b5056fea26469706673582212205123b4614ca73719a19dac9cb4c808b0839a6ff630266fd10cf4c73ac7659f9764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f6170692e73706f64657262797465732e636f6d2f6170692f73706f6f6b792f00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://api.spoderbytes.com/api/spooky/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [2] : 68747470733a2f2f6170692e73706f64657262797465732e636f6d2f6170692f
Arg [3] : 73706f6f6b792f00000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
51146:3199:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44998:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32923:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34482:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34005:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52107:488;;;:::i;:::-;;45638:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35372:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45306:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35782:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53269:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45828:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52728:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51785:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53052:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32617:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51887:212;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52943:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32347:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12872:94;;;;;;;;;;;;;:::i;:::-;;53957:196;;;:::i;:::-;;51372:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12221:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52841:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33092:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34775:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36038:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53172:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33267:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51542:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35141:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13121:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44998:224;45100:4;45139:35;45124:50;;;:11;:50;;;;:90;;;;45178:36;45202:11;45178:23;:36::i;:::-;45124:90;45117:97;;44998:224;;;:::o;32923:100::-;32977:13;33010:5;33003:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32923:100;:::o;34482:221::-;34558:7;34586:16;34594:7;34586;:16::i;:::-;34578:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34671:15;:24;34687:7;34671:24;;;;;;;;;;;;;;;;;;;;;34664:31;;34482:221;;;:::o;34005:411::-;34086:13;34102:23;34117:7;34102:14;:23::i;:::-;34086:39;;34150:5;34144:11;;:2;:11;;;;34136:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;34244:5;34228:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;34253:37;34270:5;34277:12;:10;:12::i;:::-;34253:16;:37::i;:::-;34228:62;34206:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;34387:21;34396:2;34400:7;34387:8;:21::i;:::-;34075:341;34005:411;;:::o;52107:488::-;52168:5;52157:16;;:7;;;;;;;;;;;:16;;;52149:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;52229:12;;52213:13;:11;:13::i;:::-;:28;52205:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;52286:5;;52273:9;:18;;52265:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;52365:5;52332:38;;:29;52350:10;52332:17;:29::i;:::-;:38;;;52324:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;52418:21;:9;:19;:21::i;:::-;52450:17;52470:19;:9;:17;:19::i;:::-;52450:39;;52500:28;52506:10;52518:9;52500:5;:28::i;:::-;52554:33;52567:19;:9;:17;:19::i;:::-;52554:33;;;;;;:::i;:::-;;;;;;;;52138:457;52107:488::o;45638:113::-;45699:7;45726:10;:17;;;;45719:24;;45638:113;:::o;35372:339::-;35567:41;35586:12;:10;:12::i;:::-;35600:7;35567:18;:41::i;:::-;35559:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35675:28;35685:4;35691:2;35695:7;35675:9;:28::i;:::-;35372:339;;;:::o;45306:256::-;45403:7;45439:23;45456:5;45439:16;:23::i;:::-;45431:5;:31;45423:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45528:12;:19;45541:5;45528:19;;;;;;;;;;;;;;;:26;45548:5;45528:26;;;;;;;;;;;;45521:33;;45306:256;;;;:::o;35782:185::-;35920:39;35937:4;35943:2;35947:7;35920:39;;;;;;;;;;;;:16;:39::i;:::-;35782:185;;;:::o;53269:385::-;53358:16;53392:18;53413:17;53423:6;53413:9;:17::i;:::-;53392:38;;53443:25;53485:10;53471:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53443:53;;53512:9;53507:112;53531:10;53527:1;:14;53507:112;;;53577:30;53597:6;53605:1;53577:19;:30::i;:::-;53563:8;53572:1;53563:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;53543:3;;;;;:::i;:::-;;;;53507:112;;;;53638:8;53631:15;;;;53269:385;;;:::o;45828:233::-;45903:7;45939:30;:28;:30::i;:::-;45931:5;:38;45923:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;46036:10;46047:5;46036:17;;;;;;;;:::i;:::-;;;;;;;;;;46029:24;;45828:233;;;:::o;52728:101::-;12452:12;:10;:12::i;:::-;12441:23;;:7;:5;:7::i;:::-;:23;;;12433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52814:7:::1;52799:12;:22;;;;;;;;;;;;:::i;:::-;;52728:101:::0;:::o;51785:90::-;51827:7;51854:13;:11;:13::i;:::-;51847:20;;51785:90;:::o;53052:108::-;12452:12;:10;:12::i;:::-;12441:23;;:7;:5;:7::i;:::-;:23;;;12433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53142:10:::1;53126:13;;:26;;;;;;;;;;;;;;;;;;53052:108:::0;:::o;32617:239::-;32689:7;32709:13;32725:7;:16;32733:7;32725:16;;;;;;;;;;;;;;;;;;;;;32709:32;;32777:1;32760:19;;:5;:19;;;;32752:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32843:5;32836:12;;;32617:239;;;:::o;51887:212::-;51930:4;51966:12;;51950:13;:11;:13::i;:::-;:28;:48;;;;;51993:5;51982:16;;:7;;;;;;;;;;;:16;;;51950:48;51947:145;;;52031:4;52024:11;;;;51947:145;52075:5;52068:12;;51887:212;;:::o;52943:97::-;12452:12;:10;:12::i;:::-;12441:23;;:7;:5;:7::i;:::-;:23;;;12433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53025:7:::1;53010:12;:22;;;;52943:97:::0;:::o;32347:208::-;32419:7;32464:1;32447:19;;:5;:19;;;;32439:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32531:9;:16;32541:5;32531:16;;;;;;;;;;;;;;;;32524:23;;32347:208;;;:::o;12872:94::-;12452:12;:10;:12::i;:::-;12441:23;;:7;:5;:7::i;:::-;:23;;;12433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12937:21:::1;12955:1;12937:9;:21::i;:::-;12872:94::o:0;53957:196::-;12452:12;:10;:12::i;:::-;12441:23;;:7;:5;:7::i;:::-;:23;;;12433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54016:15:::1;54034:21;54016:39;;54084:1;54074:7;:11;54066:20;;;::::0;::::1;;54097:48;54108:13;;;;;;;;;;;54123:21;54097:10;:48::i;:::-;54005:148;53957:196::o:0;51372:35::-;;;;:::o;12221:87::-;12267:7;12294:6;;;;;;;;;;;12287:13;;12221:87;:::o;52841:90::-;12452:12;:10;:12::i;:::-;12441:23;;:7;:5;:7::i;:::-;:23;;;12433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52914:9:::1;52906:5;:17;;;;52841:90:::0;:::o;33092:104::-;33148:13;33181:7;33174:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33092:104;:::o;34775:295::-;34890:12;:10;:12::i;:::-;34878:24;;:8;:24;;;;34870:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34990:8;34945:18;:32;34964:12;:10;:12::i;:::-;34945:32;;;;;;;;;;;;;;;:42;34978:8;34945:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;35043:8;35014:48;;35029:12;:10;:12::i;:::-;35014:48;;;35053:8;35014:48;;;;;;:::i;:::-;;;;;;;;34775:295;;:::o;36038:328::-;36213:41;36232:12;:10;:12::i;:::-;36246:7;36213:18;:41::i;:::-;36205:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;36319:39;36333:4;36339:2;36343:7;36352:5;36319:13;:39::i;:::-;36038:328;;;;:::o;53172:89::-;12452:12;:10;:12::i;:::-;12441:23;;:7;:5;:7::i;:::-;:23;;;12433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53244:9:::1;53234:7;;:19;;;;;;;;;;;;;;;;;;53172:89:::0;:::o;33267:334::-;33340:13;33374:16;33382:7;33374;:16::i;:::-;33366:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33455:21;33479:10;:8;:10::i;:::-;33455:34;;33531:1;33513:7;33507:21;:25;:86;;;;;;;;;;;;;;;;;33559:7;33568:18;:7;:16;:18::i;:::-;33542:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33507:86;33500:93;;;33267:334;;;:::o;51542:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35141:164::-;35238:4;35262:18;:25;35281:5;35262:25;;;;;;;;;;;;;;;:35;35288:8;35262:35;;;;;;;;;;;;;;;;;;;;;;;;;35255:42;;35141:164;;;;:::o;13121:192::-;12452:12;:10;:12::i;:::-;12441:23;;:7;:5;:7::i;:::-;:23;;;12433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13230:1:::1;13210:22;;:8;:22;;;;13202:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13286:19;13296:8;13286:9;:19::i;:::-;13121:192:::0;:::o;31978:305::-;32080:4;32132:25;32117:40;;;:11;:40;;;;:105;;;;32189:33;32174:48;;;:11;:48;;;;32117:105;:158;;;;32239:36;32263:11;32239:23;:36::i;:::-;32117:158;32097:178;;31978:305;;;:::o;37876:127::-;37941:4;37993:1;37965:30;;:7;:16;37973:7;37965:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37958:37;;37876:127;;;:::o;11040:98::-;11093:7;11120:10;11113:17;;11040:98;:::o;41858:174::-;41960:2;41933:15;:24;41949:7;41933:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42016:7;42012:2;41978:46;;41987:23;42002:7;41987:14;:23::i;:::-;41978:46;;;;;;;;;;;;41858:174;;:::o;53666:283::-;53758:4;53780:18;53801:17;53811:6;53801:9;:17::i;:::-;53780:38;;53847:1;53834:10;:14;53831:111;;;53881:4;53874:11;;;;;53831:111;53925:5;53918:12;;;53666:283;;;;:::o;1010:127::-;1117:1;1099:7;:14;;;:19;;;;;;;;;;;1010:127;:::o;888:114::-;953:7;980;:14;;;973:21;;888:114;;;:::o;39854:382::-;39948:1;39934:16;;:2;:16;;;;39926:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40007:16;40015:7;40007;:16::i;:::-;40006:17;39998:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40069:45;40098:1;40102:2;40106:7;40069:20;:45::i;:::-;40144:1;40127:9;:13;40137:2;40127:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40175:2;40156:7;:16;40164:7;40156:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40220:7;40216:2;40195:33;;40212:1;40195:33;;;;;;;;;;;;39854:382;;:::o;38170:348::-;38263:4;38288:16;38296:7;38288;:16::i;:::-;38280:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38364:13;38380:23;38395:7;38380:14;:23::i;:::-;38364:39;;38433:5;38422:16;;:7;:16;;;:51;;;;38466:7;38442:31;;:20;38454:7;38442:11;:20::i;:::-;:31;;;38422:51;:87;;;;38477:32;38494:5;38501:7;38477:16;:32::i;:::-;38422:87;38414:96;;;38170:348;;;;:::o;41162:578::-;41321:4;41294:31;;:23;41309:7;41294:14;:23::i;:::-;:31;;;41286:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41404:1;41390:16;;:2;:16;;;;41382:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41460:39;41481:4;41487:2;41491:7;41460:20;:39::i;:::-;41564:29;41581:1;41585:7;41564:8;:29::i;:::-;41625:1;41606:9;:15;41616:4;41606:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41654:1;41637:9;:13;41647:2;41637:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41685:2;41666:7;:16;41674:7;41666:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41724:7;41720:2;41705:27;;41714:4;41705:27;;;;;;;;;;;;41162:578;;;:::o;13321:173::-;13377:16;13396:6;;;;;;;;;;;13377:25;;13422:8;13413:6;;:17;;;;;;;;;;;;;;;;;;13477:8;13446:40;;13467:8;13446:40;;;;;;;;;;;;13366:128;13321:173;:::o;54161:181::-;54236:12;54254:8;:13;;54275:7;54254:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54235:52;;;54306:7;54298:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;54224:118;54161:181;;:::o;37248:315::-;37405:28;37415:4;37421:2;37425:7;37405:9;:28::i;:::-;37452:48;37475:4;37481:2;37485:7;37494:5;37452:22;:48::i;:::-;37444:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;37248:315;;;;:::o;52607:113::-;52667:13;52700:12;52693:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52607:113;:::o;8685:723::-;8741:13;8971:1;8962:5;:10;8958:53;;;8989:10;;;;;;;;;;;;;;;;;;;;;8958:53;9021:12;9036:5;9021:20;;9052:14;9077:78;9092:1;9084:4;:9;9077:78;;9110:8;;;;;:::i;:::-;;;;9141:2;9133:10;;;;;:::i;:::-;;;9077:78;;;9165:19;9197:6;9187:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9165:39;;9215:154;9231:1;9222:5;:10;9215:154;;9259:1;9249:11;;;;;:::i;:::-;;;9326:2;9318:5;:10;;;;:::i;:::-;9305:2;:24;;;;:::i;:::-;9292:39;;9275:6;9282;9275:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9355:2;9346:11;;;;;:::i;:::-;;;9215:154;;;9393:6;9379:21;;;;;8685:723;;;;:::o;24087:157::-;24172:4;24211:25;24196:40;;;:11;:40;;;;24189:47;;24087:157;;;:::o;46674:589::-;46818:45;46845:4;46851:2;46855:7;46818:26;:45::i;:::-;46896:1;46880:18;;:4;:18;;;46876:187;;;46915:40;46947:7;46915:31;:40::i;:::-;46876:187;;;46985:2;46977:10;;:4;:10;;;46973:90;;47004:47;47037:4;47043:7;47004:32;:47::i;:::-;46973:90;46876:187;47091:1;47077:16;;:2;:16;;;47073:183;;;47110:45;47147:7;47110:36;:45::i;:::-;47073:183;;;47183:4;47177:10;;:2;:10;;;47173:83;;47204:40;47232:2;47236:7;47204:27;:40::i;:::-;47173:83;47073:183;46674:589;;;:::o;42597:799::-;42752:4;42773:15;:2;:13;;;:15::i;:::-;42769:620;;;42825:2;42809:36;;;42846:12;:10;:12::i;:::-;42860:4;42866:7;42875:5;42809:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42805:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43068:1;43051:6;:13;:18;43047:272;;;43094:60;;;;;;;;;;:::i;:::-;;;;;;;;43047:272;43269:6;43263:13;43254:6;43250:2;43246:15;43239:38;42805:529;42942:41;;;42932:51;;;:6;:51;;;;42925:58;;;;;42769:620;43373:4;43366:11;;42597:799;;;;;;;:::o;43968:126::-;;;;:::o;47986:164::-;48090:10;:17;;;;48063:15;:24;48079:7;48063:24;;;;;;;;;;;:44;;;;48118:10;48134:7;48118:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47986:164;:::o;48777:988::-;49043:22;49093:1;49068:22;49085:4;49068:16;:22::i;:::-;:26;;;;:::i;:::-;49043:51;;49105:18;49126:17;:26;49144:7;49126:26;;;;;;;;;;;;49105:47;;49273:14;49259:10;:28;49255:328;;49304:19;49326:12;:18;49339:4;49326:18;;;;;;;;;;;;;;;:34;49345:14;49326:34;;;;;;;;;;;;49304:56;;49410:11;49377:12;:18;49390:4;49377:18;;;;;;;;;;;;;;;:30;49396:10;49377:30;;;;;;;;;;;:44;;;;49527:10;49494:17;:30;49512:11;49494:30;;;;;;;;;;;:43;;;;49289:294;49255:328;49679:17;:26;49697:7;49679:26;;;;;;;;;;;49672:33;;;49723:12;:18;49736:4;49723:18;;;;;;;;;;;;;;;:34;49742:14;49723:34;;;;;;;;;;;49716:41;;;48858:907;;48777:988;;:::o;50060:1079::-;50313:22;50358:1;50338:10;:17;;;;:21;;;;:::i;:::-;50313:46;;50370:18;50391:15;:24;50407:7;50391:24;;;;;;;;;;;;50370:45;;50742:19;50764:10;50775:14;50764:26;;;;;;;;:::i;:::-;;;;;;;;;;50742:48;;50828:11;50803:10;50814;50803:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;50939:10;50908:15;:28;50924:11;50908:28;;;;;;;;;;;:41;;;;51080:15;:24;51096:7;51080:24;;;;;;;;;;;51073:31;;;51115:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;50131:1008;;;50060:1079;:::o;47564:221::-;47649:14;47666:20;47683:2;47666:16;:20::i;:::-;47649:37;;47724:7;47697:12;:16;47710:2;47697:16;;;;;;;;;;;;;;;:24;47714:6;47697:24;;;;;;;;;;;:34;;;;47771:6;47742:17;:26;47760:7;47742:26;;;;;;;;;;;:35;;;;47638:147;47564:221;;:::o;14236:387::-;14296:4;14504:12;14571:7;14559:20;14551:28;;14614:1;14607:4;:8;14600:15;;;14236:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9798:366::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9798:366;;;:::o;10170:::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10170:366;;;:::o;10542:::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10542:366;;;:::o;10914:::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;10914:366;;;:::o;11286:::-;11428:3;11449:67;11513:2;11508:3;11449:67;:::i;:::-;11442:74;;11525:93;11614:3;11525:93;:::i;:::-;11643:2;11638:3;11634:12;11627:19;;11286:366;;;:::o;11658:::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11658:366;;;:::o;12030:::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12030:366;;;:::o;12402:::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12402:366;;;:::o;12774:::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12774:366;;;:::o;13146:::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13146:366;;;:::o;13518:::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13518:366;;;:::o;13890:::-;14032:3;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14129:93;14218:3;14129:93;:::i;:::-;14247:2;14242:3;14238:12;14231:19;;13890:366;;;:::o;14262:365::-;14404:3;14425:66;14489:1;14484:3;14425:66;:::i;:::-;14418:73;;14500:93;14589:3;14500:93;:::i;:::-;14618:2;14613:3;14609:12;14602:19;;14262:365;;;:::o;14633:366::-;14775:3;14796:67;14860:2;14855:3;14796:67;:::i;:::-;14789:74;;14872:93;14961:3;14872:93;:::i;:::-;14990:2;14985:3;14981:12;14974:19;;14633:366;;;:::o;15005:::-;15147:3;15168:67;15232:2;15227:3;15168:67;:::i;:::-;15161:74;;15244:93;15333:3;15244:93;:::i;:::-;15362:2;15357:3;15353:12;15346:19;;15005:366;;;:::o;15377:::-;15519:3;15540:67;15604:2;15599:3;15540:67;:::i;:::-;15533:74;;15616:93;15705:3;15616:93;:::i;:::-;15734:2;15729:3;15725:12;15718:19;;15377:366;;;:::o;15749:::-;15891:3;15912:67;15976:2;15971:3;15912:67;:::i;:::-;15905:74;;15988:93;16077:3;15988:93;:::i;:::-;16106:2;16101:3;16097:12;16090:19;;15749:366;;;:::o;16121:::-;16263:3;16284:67;16348:2;16343:3;16284:67;:::i;:::-;16277:74;;16360:93;16449:3;16360:93;:::i;:::-;16478:2;16473:3;16469:12;16462:19;;16121:366;;;:::o;16493:::-;16635:3;16656:67;16720:2;16715:3;16656:67;:::i;:::-;16649:74;;16732:93;16821:3;16732:93;:::i;:::-;16850:2;16845:3;16841:12;16834:19;;16493:366;;;:::o;16865:398::-;17024:3;17045:83;17126:1;17121:3;17045:83;:::i;:::-;17038:90;;17137:93;17226:3;17137:93;:::i;:::-;17255:1;17250:3;17246:11;17239:18;;16865:398;;;:::o;17269:366::-;17411:3;17432:67;17496:2;17491:3;17432:67;:::i;:::-;17425:74;;17508:93;17597:3;17508:93;:::i;:::-;17626:2;17621:3;17617:12;17610:19;;17269:366;;;:::o;17641:::-;17783:3;17804:67;17868:2;17863:3;17804:67;:::i;:::-;17797:74;;17880:93;17969:3;17880:93;:::i;:::-;17998:2;17993:3;17989:12;17982:19;;17641:366;;;:::o;18013:::-;18155:3;18176:67;18240:2;18235:3;18176:67;:::i;:::-;18169:74;;18252:93;18341:3;18252:93;:::i;:::-;18370:2;18365:3;18361:12;18354:19;;18013:366;;;:::o;18385:::-;18527:3;18548:67;18612:2;18607:3;18548:67;:::i;:::-;18541:74;;18624:93;18713:3;18624:93;:::i;:::-;18742:2;18737:3;18733:12;18726:19;;18385:366;;;:::o;18757:108::-;18834:24;18852:5;18834:24;:::i;:::-;18829:3;18822:37;18757:108;;:::o;18871:118::-;18958:24;18976:5;18958:24;:::i;:::-;18953:3;18946:37;18871:118;;:::o;18995:435::-;19175:3;19197:95;19288:3;19279:6;19197:95;:::i;:::-;19190:102;;19309:95;19400:3;19391:6;19309:95;:::i;:::-;19302:102;;19421:3;19414:10;;18995:435;;;;;:::o;19436:379::-;19620:3;19642:147;19785:3;19642:147;:::i;:::-;19635:154;;19806:3;19799:10;;19436:379;;;:::o;19821:222::-;19914:4;19952:2;19941:9;19937:18;19929:26;;19965:71;20033:1;20022:9;20018:17;20009:6;19965:71;:::i;:::-;19821:222;;;;:::o;20049:640::-;20244:4;20282:3;20271:9;20267:19;20259:27;;20296:71;20364:1;20353:9;20349:17;20340:6;20296:71;:::i;:::-;20377:72;20445:2;20434:9;20430:18;20421:6;20377:72;:::i;:::-;20459;20527:2;20516:9;20512:18;20503:6;20459:72;:::i;:::-;20578:9;20572:4;20568:20;20563:2;20552:9;20548:18;20541:48;20606:76;20677:4;20668:6;20606:76;:::i;:::-;20598:84;;20049:640;;;;;;;:::o;20695:373::-;20838:4;20876:2;20865:9;20861:18;20853:26;;20925:9;20919:4;20915:20;20911:1;20900:9;20896:17;20889:47;20953:108;21056:4;21047:6;20953:108;:::i;:::-;20945:116;;20695:373;;;;:::o;21074:210::-;21161:4;21199:2;21188:9;21184:18;21176:26;;21212:65;21274:1;21263:9;21259:17;21250:6;21212:65;:::i;:::-;21074:210;;;;:::o;21290:313::-;21403:4;21441:2;21430:9;21426:18;21418:26;;21490:9;21484:4;21480:20;21476:1;21465:9;21461:17;21454:47;21518:78;21591:4;21582:6;21518:78;:::i;:::-;21510:86;;21290:313;;;;:::o;21609:419::-;21775:4;21813:2;21802:9;21798:18;21790:26;;21862:9;21856:4;21852:20;21848:1;21837:9;21833:17;21826:47;21890:131;22016:4;21890:131;:::i;:::-;21882:139;;21609:419;;;:::o;22034:::-;22200:4;22238:2;22227:9;22223:18;22215:26;;22287:9;22281:4;22277:20;22273:1;22262:9;22258:17;22251:47;22315:131;22441:4;22315:131;:::i;:::-;22307:139;;22034:419;;;:::o;22459:::-;22625:4;22663:2;22652:9;22648:18;22640:26;;22712:9;22706:4;22702:20;22698:1;22687:9;22683:17;22676:47;22740:131;22866:4;22740:131;:::i;:::-;22732:139;;22459:419;;;:::o;22884:::-;23050:4;23088:2;23077:9;23073:18;23065:26;;23137:9;23131:4;23127:20;23123:1;23112:9;23108:17;23101:47;23165:131;23291:4;23165:131;:::i;:::-;23157:139;;22884:419;;;:::o;23309:::-;23475:4;23513:2;23502:9;23498:18;23490:26;;23562:9;23556:4;23552:20;23548:1;23537:9;23533:17;23526:47;23590:131;23716:4;23590:131;:::i;:::-;23582:139;;23309:419;;;:::o;23734:::-;23900:4;23938:2;23927:9;23923:18;23915:26;;23987:9;23981:4;23977:20;23973:1;23962:9;23958:17;23951:47;24015:131;24141:4;24015:131;:::i;:::-;24007:139;;23734:419;;;:::o;24159:::-;24325:4;24363:2;24352:9;24348:18;24340:26;;24412:9;24406:4;24402:20;24398:1;24387:9;24383:17;24376:47;24440:131;24566:4;24440:131;:::i;:::-;24432:139;;24159:419;;;:::o;24584:::-;24750:4;24788:2;24777:9;24773:18;24765:26;;24837:9;24831:4;24827:20;24823:1;24812:9;24808:17;24801:47;24865:131;24991:4;24865:131;:::i;:::-;24857:139;;24584:419;;;:::o;25009:::-;25175:4;25213:2;25202:9;25198:18;25190:26;;25262:9;25256:4;25252:20;25248:1;25237:9;25233:17;25226:47;25290:131;25416:4;25290:131;:::i;:::-;25282:139;;25009:419;;;:::o;25434:::-;25600:4;25638:2;25627:9;25623:18;25615:26;;25687:9;25681:4;25677:20;25673:1;25662:9;25658:17;25651:47;25715:131;25841:4;25715:131;:::i;:::-;25707:139;;25434:419;;;:::o;25859:::-;26025:4;26063:2;26052:9;26048:18;26040:26;;26112:9;26106:4;26102:20;26098:1;26087:9;26083:17;26076:47;26140:131;26266:4;26140:131;:::i;:::-;26132:139;;25859:419;;;:::o;26284:::-;26450:4;26488:2;26477:9;26473:18;26465:26;;26537:9;26531:4;26527:20;26523:1;26512:9;26508:17;26501:47;26565:131;26691:4;26565:131;:::i;:::-;26557:139;;26284:419;;;:::o;26709:::-;26875:4;26913:2;26902:9;26898:18;26890:26;;26962:9;26956:4;26952:20;26948:1;26937:9;26933:17;26926:47;26990:131;27116:4;26990:131;:::i;:::-;26982:139;;26709:419;;;:::o;27134:::-;27300:4;27338:2;27327:9;27323:18;27315:26;;27387:9;27381:4;27377:20;27373:1;27362:9;27358:17;27351:47;27415:131;27541:4;27415:131;:::i;:::-;27407:139;;27134:419;;;:::o;27559:::-;27725:4;27763:2;27752:9;27748:18;27740:26;;27812:9;27806:4;27802:20;27798:1;27787:9;27783:17;27776:47;27840:131;27966:4;27840:131;:::i;:::-;27832:139;;27559:419;;;:::o;27984:::-;28150:4;28188:2;28177:9;28173:18;28165:26;;28237:9;28231:4;28227:20;28223:1;28212:9;28208:17;28201:47;28265:131;28391:4;28265:131;:::i;:::-;28257:139;;27984:419;;;:::o;28409:::-;28575:4;28613:2;28602:9;28598:18;28590:26;;28662:9;28656:4;28652:20;28648:1;28637:9;28633:17;28626:47;28690:131;28816:4;28690:131;:::i;:::-;28682:139;;28409:419;;;:::o;28834:::-;29000:4;29038:2;29027:9;29023:18;29015:26;;29087:9;29081:4;29077:20;29073:1;29062:9;29058:17;29051:47;29115:131;29241:4;29115:131;:::i;:::-;29107:139;;28834:419;;;:::o;29259:::-;29425:4;29463:2;29452:9;29448:18;29440:26;;29512:9;29506:4;29502:20;29498:1;29487:9;29483:17;29476:47;29540:131;29666:4;29540:131;:::i;:::-;29532:139;;29259:419;;;:::o;29684:::-;29850:4;29888:2;29877:9;29873:18;29865:26;;29937:9;29931:4;29927:20;29923:1;29912:9;29908:17;29901:47;29965:131;30091:4;29965:131;:::i;:::-;29957:139;;29684:419;;;:::o;30109:::-;30275:4;30313:2;30302:9;30298:18;30290:26;;30362:9;30356:4;30352:20;30348:1;30337:9;30333:17;30326:47;30390:131;30516:4;30390:131;:::i;:::-;30382:139;;30109:419;;;:::o;30534:::-;30700:4;30738:2;30727:9;30723:18;30715:26;;30787:9;30781:4;30777:20;30773:1;30762:9;30758:17;30751:47;30815:131;30941:4;30815:131;:::i;:::-;30807:139;;30534:419;;;:::o;30959:::-;31125:4;31163:2;31152:9;31148:18;31140:26;;31212:9;31206:4;31202:20;31198:1;31187:9;31183:17;31176:47;31240:131;31366:4;31240:131;:::i;:::-;31232:139;;30959:419;;;:::o;31384:222::-;31477:4;31515:2;31504:9;31500:18;31492:26;;31528:71;31596:1;31585:9;31581:17;31572:6;31528:71;:::i;:::-;31384:222;;;;:::o;31612:129::-;31646:6;31673:20;;:::i;:::-;31663:30;;31702:33;31730:4;31722:6;31702:33;:::i;:::-;31612:129;;;:::o;31747:75::-;31780:6;31813:2;31807:9;31797:19;;31747:75;:::o;31828:307::-;31889:4;31979:18;31971:6;31968:30;31965:56;;;32001:18;;:::i;:::-;31965:56;32039:29;32061:6;32039:29;:::i;:::-;32031:37;;32123:4;32117;32113:15;32105:23;;31828:307;;;:::o;32141:308::-;32203:4;32293:18;32285:6;32282:30;32279:56;;;32315:18;;:::i;:::-;32279:56;32353:29;32375:6;32353:29;:::i;:::-;32345:37;;32437:4;32431;32427:15;32419:23;;32141:308;;;:::o;32455:132::-;32522:4;32545:3;32537:11;;32575:4;32570:3;32566:14;32558:22;;32455:132;;;:::o;32593:114::-;32660:6;32694:5;32688:12;32678:22;;32593:114;;;:::o;32713:98::-;32764:6;32798:5;32792:12;32782:22;;32713:98;;;:::o;32817:99::-;32869:6;32903:5;32897:12;32887:22;;32817:99;;;:::o;32922:113::-;32992:4;33024;33019:3;33015:14;33007:22;;32922:113;;;:::o;33041:184::-;33140:11;33174:6;33169:3;33162:19;33214:4;33209:3;33205:14;33190:29;;33041:184;;;;:::o;33231:168::-;33314:11;33348:6;33343:3;33336:19;33388:4;33383:3;33379:14;33364:29;;33231:168;;;;:::o;33405:147::-;33506:11;33543:3;33528:18;;33405:147;;;;:::o;33558:169::-;33642:11;33676:6;33671:3;33664:19;33716:4;33711:3;33707:14;33692:29;;33558:169;;;;:::o;33733:148::-;33835:11;33872:3;33857:18;;33733:148;;;;:::o;33887:305::-;33927:3;33946:20;33964:1;33946:20;:::i;:::-;33941:25;;33980:20;33998:1;33980:20;:::i;:::-;33975:25;;34134:1;34066:66;34062:74;34059:1;34056:81;34053:107;;;34140:18;;:::i;:::-;34053:107;34184:1;34181;34177:9;34170:16;;33887:305;;;;:::o;34198:185::-;34238:1;34255:20;34273:1;34255:20;:::i;:::-;34250:25;;34289:20;34307:1;34289:20;:::i;:::-;34284:25;;34328:1;34318:35;;34333:18;;:::i;:::-;34318:35;34375:1;34372;34368:9;34363:14;;34198:185;;;;:::o;34389:191::-;34429:4;34449:20;34467:1;34449:20;:::i;:::-;34444:25;;34483:20;34501:1;34483:20;:::i;:::-;34478:25;;34522:1;34519;34516:8;34513:34;;;34527:18;;:::i;:::-;34513:34;34572:1;34569;34565:9;34557:17;;34389:191;;;;:::o;34586:96::-;34623:7;34652:24;34670:5;34652:24;:::i;:::-;34641:35;;34586:96;;;:::o;34688:90::-;34722:7;34765:5;34758:13;34751:21;34740:32;;34688:90;;;:::o;34784:149::-;34820:7;34860:66;34853:5;34849:78;34838:89;;34784:149;;;:::o;34939:126::-;34976:7;35016:42;35009:5;35005:54;34994:65;;34939:126;;;:::o;35071:77::-;35108:7;35137:5;35126:16;;35071:77;;;:::o;35154:154::-;35238:6;35233:3;35228;35215:30;35300:1;35291:6;35286:3;35282:16;35275:27;35154:154;;;:::o;35314:307::-;35382:1;35392:113;35406:6;35403:1;35400:13;35392:113;;;35491:1;35486:3;35482:11;35476:18;35472:1;35467:3;35463:11;35456:39;35428:2;35425:1;35421:10;35416:15;;35392:113;;;35523:6;35520:1;35517:13;35514:101;;;35603:1;35594:6;35589:3;35585:16;35578:27;35514:101;35363:258;35314:307;;;:::o;35627:320::-;35671:6;35708:1;35702:4;35698:12;35688:22;;35755:1;35749:4;35745:12;35776:18;35766:81;;35832:4;35824:6;35820:17;35810:27;;35766:81;35894:2;35886:6;35883:14;35863:18;35860:38;35857:84;;;35913:18;;:::i;:::-;35857:84;35678:269;35627:320;;;:::o;35953:281::-;36036:27;36058:4;36036:27;:::i;:::-;36028:6;36024:40;36166:6;36154:10;36151:22;36130:18;36118:10;36115:34;36112:62;36109:88;;;36177:18;;:::i;:::-;36109:88;36217:10;36213:2;36206:22;35996:238;35953:281;;:::o;36240:233::-;36279:3;36302:24;36320:5;36302:24;:::i;:::-;36293:33;;36348:66;36341:5;36338:77;36335:103;;;36418:18;;:::i;:::-;36335:103;36465:1;36458:5;36454:13;36447:20;;36240:233;;;:::o;36479:176::-;36511:1;36528:20;36546:1;36528:20;:::i;:::-;36523:25;;36562:20;36580:1;36562:20;:::i;:::-;36557:25;;36601:1;36591:35;;36606:18;;:::i;:::-;36591:35;36647:1;36644;36640:9;36635:14;;36479:176;;;;:::o;36661:180::-;36709:77;36706:1;36699:88;36806:4;36803:1;36796:15;36830:4;36827:1;36820:15;36847:180;36895:77;36892:1;36885:88;36992:4;36989:1;36982:15;37016:4;37013:1;37006:15;37033:180;37081:77;37078:1;37071:88;37178:4;37175:1;37168:15;37202:4;37199:1;37192:15;37219:180;37267:77;37264:1;37257:88;37364:4;37361:1;37354:15;37388:4;37385:1;37378:15;37405:180;37453:77;37450:1;37443:88;37550:4;37547:1;37540:15;37574:4;37571:1;37564:15;37591:180;37639:77;37636:1;37629:88;37736:4;37733:1;37726:15;37760:4;37757:1;37750:15;37777:117;37886:1;37883;37876:12;37900:117;38009:1;38006;37999:12;38023:117;38132:1;38129;38122:12;38146:117;38255:1;38252;38245:12;38269:102;38310:6;38361:2;38357:7;38352:2;38345:5;38341:14;38337:28;38327:38;;38269:102;;;:::o;38377:230::-;38517:34;38513:1;38505:6;38501:14;38494:58;38586:13;38581:2;38573:6;38569:15;38562:38;38377:230;:::o;38613:237::-;38753:34;38749:1;38741:6;38737:14;38730:58;38822:20;38817:2;38809:6;38805:15;38798:45;38613:237;:::o;38856:225::-;38996:34;38992:1;38984:6;38980:14;38973:58;39065:8;39060:2;39052:6;39048:15;39041:33;38856:225;:::o;39087:178::-;39227:30;39223:1;39215:6;39211:14;39204:54;39087:178;:::o;39271:166::-;39411:18;39407:1;39399:6;39395:14;39388:42;39271:166;:::o;39443:223::-;39583:34;39579:1;39571:6;39567:14;39560:58;39652:6;39647:2;39639:6;39635:15;39628:31;39443:223;:::o;39672:175::-;39812:27;39808:1;39800:6;39796:14;39789:51;39672:175;:::o;39853:231::-;39993:34;39989:1;39981:6;39977:14;39970:58;40062:14;40057:2;40049:6;40045:15;40038:39;39853:231;:::o;40090:243::-;40230:34;40226:1;40218:6;40214:14;40207:58;40299:26;40294:2;40286:6;40282:15;40275:51;40090:243;:::o;40339:229::-;40479:34;40475:1;40467:6;40463:14;40456:58;40548:12;40543:2;40535:6;40531:15;40524:37;40339:229;:::o;40574:228::-;40714:34;40710:1;40702:6;40698:14;40691:58;40783:11;40778:2;40770:6;40766:15;40759:36;40574:228;:::o;40808:182::-;40948:34;40944:1;40936:6;40932:14;40925:58;40808:182;:::o;40996:158::-;41136:10;41132:1;41124:6;41120:14;41113:34;40996:158;:::o;41160:231::-;41300:34;41296:1;41288:6;41284:14;41277:58;41369:14;41364:2;41356:6;41352:15;41345:39;41160:231;:::o;41397:182::-;41537:34;41533:1;41525:6;41521:14;41514:58;41397:182;:::o;41585:228::-;41725:34;41721:1;41713:6;41709:14;41702:58;41794:11;41789:2;41781:6;41777:15;41770:36;41585:228;:::o;41819:234::-;41959:34;41955:1;41947:6;41943:14;41936:58;42028:17;42023:2;42015:6;42011:15;42004:42;41819:234;:::o;42059:167::-;42199:19;42195:1;42187:6;42183:14;42176:43;42059:167;:::o;42232:220::-;42372:34;42368:1;42360:6;42356:14;42349:58;42441:3;42436:2;42428:6;42424:15;42417:28;42232:220;:::o;42458:114::-;;:::o;42578:166::-;42718:18;42714:1;42706:6;42702:14;42695:42;42578:166;:::o;42750:236::-;42890:34;42886:1;42878:6;42874:14;42867:58;42959:19;42954:2;42946:6;42942:15;42935:44;42750:236;:::o;42992:172::-;43132:24;43128:1;43120:6;43116:14;43109:48;42992:172;:::o;43170:231::-;43310:34;43306:1;43298:6;43294:14;43287:58;43379:14;43374:2;43366:6;43362:15;43355:39;43170:231;:::o;43407:122::-;43480:24;43498:5;43480:24;:::i;:::-;43473:5;43470:35;43460:63;;43519:1;43516;43509:12;43460:63;43407:122;:::o;43535:116::-;43605:21;43620:5;43605:21;:::i;:::-;43598:5;43595:32;43585:60;;43641:1;43638;43631:12;43585:60;43535:116;:::o;43657:120::-;43729:23;43746:5;43729:23;:::i;:::-;43722:5;43719:34;43709:62;;43767:1;43764;43757:12;43709:62;43657:120;:::o;43783:122::-;43856:24;43874:5;43856:24;:::i;:::-;43849:5;43846:35;43836:63;;43895:1;43892;43885:12;43836:63;43783:122;:::o
Swarm Source
ipfs://5123b4614ca73719a19dac9cb4c808b0839a6ff630266fd10cf4c73ac7659f97
Loading...
Loading
Loading...
Loading
[ 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.