ERC-721
Overview
Max Total Supply
791 RFH
Holders
233
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 RFHLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RoyalFoolsHalloween
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-01 */ // ██████╗░░█████╗░██╗░░░██╗░█████╗░██╗░░░░░███████╗░█████╗░░█████╗░██╗░░░░░░██████╗ // ██╔══██╗██╔══██╗╚██╗░██╔╝██╔══██╗██║░░░░░██╔════╝██╔══██╗██╔══██╗██║░░░░░██╔════╝ // ██████╔╝██║░░██║░╚████╔╝░███████║██║░░░░░█████╗░░██║░░██║██║░░██║██║░░░░░╚█████╗░ // ██╔══██╗██║░░██║░░╚██╔╝░░██╔══██║██║░░░░░██╔══╝░░██║░░██║██║░░██║██║░░░░░░╚═══██╗ // ██║░░██║╚█████╔╝░░░██║░░░██║░░██║███████╗██║░░░░░╚█████╔╝╚█████╔╝███████╗██████╔╝ // ╚═╝░░╚═╝░╚════╝░░░░╚═╝░░░╚═╝░░╚═╝╚══════╝╚═╝░░░░░░╚════╝░░╚════╝░╚══════╝╚═════╝░ // SPDX-License-Identifier: MIT //OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns(address) { return msg.sender; } function _msgData() internal view virtual returns(bytes calldata) { return msg.data; } } //OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * By default, the owner account will be the one that deploys the contract. * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Not an owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // .-. .-. .--. ,---. ,---..-. .-. // | | | | / /\ \ | .-.\ | .-.\\ \_/ )/ // | `-' |/ /__\ \| |-' )| |-' )\ (_) // | .-. || __ || |--' | |--' ) ( // | | |)|| | |)|| | | | | | // /( (_)|_| (_)/( /( /(_| // (__) (__) (__) (__) // .---. ,---. .---. .---. ,-. .-..-. .-. // ( .-._)| .-.\ / .-. ) / .-. ) | |/ / \ \_/ )/ // (_) \ | |-' )| | |(_)| | |(_)| | / \ (_) // _ \ \ | |--' | | | | | | | | | | \ ) ( // ( `-' ) | | \ `-' / \ `-' / | |) \ | | // `----' /( )---' )---' |((_)-' /(_| // (__) (_) (_) (_) (__) // ,--, ,-. .--. ,-. // .' .') | | / /\ \ |(||\ /| // | |(_) | | / /__\ \(_)|(\ / | // \ \ | | | __ || |(_)\/ | // \ `-. | `--. | | |)|| || \ / | // \____\|( __.'|_| (_)`-'| |\/| | // (_) '-' '-' // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 { /** * @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; } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // .. ... // ..... // ..... // ........ // ...... ///.((###.////// // () . ....***...//(((((##///(((**. // ()..,///***.....(/,,//((((#*(((###((((((*/. // .((////(((.#(/.(#((###((/(#((##((((###((((/// // ((/(SKAKUN/(##(( /(.#,,###(/((#((##(((#####(((((. // .*(/#####((##,((.#/.. AVERA((##,,//(((#####*####* // .((*(ANKH((((#/,(###( *.#####(,,... (*//(#####(((((* // .//((#####(,((## (#.#,/((##(DAHLIN/,. ,*/((((###*((((, // /*/(/#####(/((###.(##*(//(#METAVERSEM4STER(,. *//((_(((* // **.((***.,*&%###/((/((./*.*/&&&%&&&&&*.**/,(#/(####//,/() // *,/(/**,/*(KING'S FOOL(*.*,,** ./YA RISUU**//*#(#(((##() // */(,(/*,*(,%&&&&&&%,/*/**/(.*%&&&&&&/*/ .##(##(((((//**) // .((,#(//**(#*&&&&&%#((( ##(((#####(/(/ *(####(((((///) // /#((((##(.*//.//(((#(((/((,##((#( ## ((###((/((///* // .#(/(((####(/ (((###((##((### , //(((//.///,/ // ////#(((#####,( (##, /#/ /(/////**// // //,((,((#####.(# , ## .((//*/* // .///*/((###*(((,//##/. ,#(((((/ // ((((///((//(((((((((/ // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; mapping(uint256 => address) private _owners; mapping(address => uint256) private _balances; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _ownerOf(tokenId); require(owner != address(0), "ERC721: invalid token ID"); return owner; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } function _baseURI() internal view virtual returns (string memory) { return ""; } 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 token owner or approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved"); _safeTransfer(from, to, tokenId, data); } 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"); } function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _ownerOf(tokenId) != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } 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" ); } 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); require(!_exists(tokenId), "ERC721: token already minted"); unchecked { _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); owner = ERC721.ownerOf(tokenId); delete _tokenApprovals[tokenId]; unchecked { _balances[owner] -= 1; } delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); delete _tokenApprovals[tokenId]; unchecked { _balances[from] -= 1; _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } 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; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} function _beforeConsecutiveTokenTransfer( address from, address to, uint256, uint96 size ) internal virtual { if (from != address(0)) { _balances[from] -= size; } if (to != address(0)) { _balances[to] += size; } } function _afterConsecutiveTokenTransfer( address, address, uint256, uint96 ) internal virtual {} } interface IRoyalFools { function balanceOf(address owner) external view returns (uint256); } // ██░ ██ ▄▄▄ ██▓ ██▓ ▒███████ █ █░▓█████ ▓█████ ███▄ █ // ██░ ██ ▒████▄ ▓██▒ ▓██▒ ▒██▒ ██ ▓█░ █ ░█░▓█ ▀ ▓█ ▀ ██ ▀█ █ // ██▀▀██ ▒██ ▀█▄ ▒██░ ▒██░ ▒██░ ██ ▒█░ █ ░█ ▒███ ▒███ ▓██ ▀█ ██ // ▓█ ░██ ░██▄▄▄▄██ ▒██░ ▒██░ ▒██ ██ ░█░ █ ░█ ▒▓█ ▄ ▒▓█ ▄ ▓██▒ ▐▌██ // ▓█ ░██ ▒▓█ ▓██▒░██████▒░██████▒░ ████▓▒ ░░██▒██▓ ░▒████▒░▒████▒▒██░ ▓██ // ▒ ░▒ ▒ ▒ ▓▒█ ░ ▒░▓ ░░ ▒░▓ ░░ ▒░▒░▒░ ░ ▓░▒ ▒ ░░ ▒░ ░░░ ▒░ ░░ ▒░ ▒ ▒ // ▒ ▒░ ░ ▒ ▒▒ ░░ ░ ▒ ░░ ░ ▒ ░ ░ ▒ ▒░ ▒ ░ ░ ░ ░ ░ ░ ░ ░░ ░░ ░ ▒░ // ░ ░░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ // ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ pragma solidity ^0.8.17; contract RoyalFoolsHalloween is ERC721, Ownable { using Counters for Counters.Counter; using Strings for uint256; Counters.Counter private supply; string public baseTokenURI; string public baseExtension; uint256 public maxElements; IRoyalFools private token; bool public isPaused; mapping(address => uint256) avaliableClaims; mapping(address => bool) isClaimer; error Soldout(); error EmptyBalance(); error AlreadyClaimed(); error ContractIsPaused(); constructor( string memory baseURI, string memory _baseExtension, uint256 _maxElements) ERC721("RoyalFoolsHalloween", "RFH") { supply.increment(); setBaseURI(baseURI); baseExtension = _baseExtension; maxElements = _maxElements; token = IRoyalFools(0xCF3bc939f9B2487092936F21cC0757b2b523B7aA); } modifier claimIsOpen() { if (isPaused == false) { revert ContractIsPaused(); } if (totalSupply() > maxElements) { revert Soldout(); } _; } function totalSupply() public view returns (uint256) { return supply.current(); } function claim() public claimIsOpen { address wallet = _msgSender(); uint256 tokenId = totalSupply(); uint256 balance = token.balanceOf(wallet); require(balance > 0, "Empty balance"); if (!isClaimer[wallet]) { avaliableClaims[wallet] = balance; isClaimer[wallet] = true; } require(avaliableClaims[wallet] > 0, "All claimed"); _safeMint(wallet, tokenId); supply.increment(); avaliableClaims[wallet] -= 1; } function burn(uint256 tokenId) public { require(_isApprovedOrOwner(msg.sender, tokenId), "Not approved or owner"); _burn(tokenId); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "URI for nonexistent tokenId"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), baseExtension)) : ""; } function _baseURI() internal view override returns (string memory) { return baseTokenURI; } function setBaseExtension(string memory _newExtension) public onlyOwner { baseExtension = _newExtension; } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } function setMaxElements(uint256 _newAmount) public onlyOwner { maxElements = _newAmount; } function setPause(bool _newState) public onlyOwner { isPaused = _newState; } function uncheckedIncrement(uint256 i) internal pure returns (uint256) { unchecked { i++; } return i; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"string","name":"_baseExtension","type":"string"},{"internalType":"uint256","name":"_maxElements","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[],"name":"ContractIsPaused","type":"error"},{"inputs":[],"name":"EmptyBalance","type":"error"},{"inputs":[],"name":"Soldout","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","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":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxElements","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setMaxElements","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newState","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620043cc380380620043cc833981810160405281019062000037919062000508565b6040518060400160405280601381526020017f526f79616c466f6f6c7348616c6c6f7765656e000000000000000000000000008152506040518060400160405280600381526020017f52464800000000000000000000000000000000000000000000000000000000008152508160009081620000b49190620007e3565b508060019081620000c69190620007e3565b505050620000e9620000dd6200018860201b60201c565b6200019060201b60201c565b6200010060076200025660201b620014c81760201c565b62000111836200026c60201b60201c565b8160099081620001229190620007e3565b5080600a8190555073cf3bc939f9b2487092936f21cc0757b2b523b7aa600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200094d565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b6200027c6200018860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a26200031060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f2906200092b565b60405180910390fd5b80600890816200030c9190620007e3565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003a38262000358565b810181811067ffffffffffffffff82111715620003c557620003c462000369565b5b80604052505050565b6000620003da6200033a565b9050620003e8828262000398565b919050565b600067ffffffffffffffff8211156200040b576200040a62000369565b5b620004168262000358565b9050602081019050919050565b60005b838110156200044357808201518184015260208101905062000426565b60008484015250505050565b6000620004666200046084620003ed565b620003ce565b90508281526020810184848401111562000485576200048462000353565b5b6200049284828562000423565b509392505050565b600082601f830112620004b257620004b16200034e565b5b8151620004c48482602086016200044f565b91505092915050565b6000819050919050565b620004e281620004cd565b8114620004ee57600080fd5b50565b6000815190506200050281620004d7565b92915050565b60008060006060848603121562000524576200052362000344565b5b600084015167ffffffffffffffff81111562000545576200054462000349565b5b62000553868287016200049a565b935050602084015167ffffffffffffffff81111562000577576200057662000349565b5b62000585868287016200049a565b92505060406200059886828701620004f1565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005f557607f821691505b6020821081036200060b576200060a620005ad565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000636565b62000681868362000636565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620006c4620006be620006b884620004cd565b62000699565b620004cd565b9050919050565b6000819050919050565b620006e083620006a3565b620006f8620006ef82620006cb565b84845462000643565b825550505050565b600090565b6200070f62000700565b6200071c818484620006d5565b505050565b5b8181101562000744576200073860008262000705565b60018101905062000722565b5050565b601f82111562000793576200075d8162000611565b620007688462000626565b8101602085101562000778578190505b62000790620007878562000626565b83018262000721565b50505b505050565b600082821c905092915050565b6000620007b86000198460080262000798565b1980831691505092915050565b6000620007d38383620007a5565b9150826002028217905092915050565b620007ee82620005a2565b67ffffffffffffffff8111156200080a576200080962000369565b5b620008168254620005dc565b6200082382828562000748565b600060209050601f8311600181146200085b576000841562000846578287015190505b620008528582620007c5565b865550620008c2565b601f1984166200086b8662000611565b60005b8281101562000895578489015182556001820191506020850194506020810190506200086e565b86831015620008b55784890151620008b1601f891682620007a5565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b600062000913600c83620008ca565b91506200092082620008db565b602082019050919050565b60006020820190508181036000830152620009468162000904565b9050919050565b613a6f806200095d6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063bedb86fb11610097578063d547cfb711610071578063d547cfb714610480578063da3ef23f1461049e578063e985e9c5146104ba578063f2fde38b146104ea576101a9565b8063bedb86fb14610416578063c668286214610432578063c87b56dd14610450576101a9565b806395d89b41116100d357806395d89b41146103a2578063a22cb465146103c0578063b187bd26146103dc578063b88d4fde146103fa576101a9565b8063715018a61461035e57806371f9f200146103685780638da5cb5b14610384576101a9565b806342842e0e11610166578063558fa0f511610140578063558fa0f5146102c457806355f804b3146102e25780636352211e146102fe57806370a082311461032e576101a9565b806342842e0e1461028257806342966c681461029e5780634e71d92d146102ba576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c391906124e6565b610506565b6040516101d5919061252e565b60405180910390f35b6101e66105e8565b6040516101f391906125d9565b60405180910390f35b61021660048036038101906102119190612631565b61067a565b604051610223919061269f565b60405180910390f35b610246600480360381019061024191906126e6565b6106c0565b005b6102506107d7565b60405161025d9190612735565b60405180910390f35b610280600480360381019061027b9190612750565b6107e8565b005b61029c60048036038101906102979190612750565b610848565b005b6102b860048036038101906102b39190612631565b610868565b005b6102c26108bd565b005b6102cc610c28565b6040516102d99190612735565b60405180910390f35b6102fc60048036038101906102f791906128d8565b610c2e565b005b61031860048036038101906103139190612631565b610cbd565b604051610325919061269f565b60405180910390f35b61034860048036038101906103439190612921565b610d43565b6040516103559190612735565b60405180910390f35b610366610dfa565b005b610382600480360381019061037d9190612631565b610e82565b005b61038c610f08565b604051610399919061269f565b60405180910390f35b6103aa610f32565b6040516103b791906125d9565b60405180910390f35b6103da60048036038101906103d5919061297a565b610fc4565b005b6103e4610fda565b6040516103f1919061252e565b60405180910390f35b610414600480360381019061040f9190612a5b565b610fed565b005b610430600480360381019061042b9190612ade565b61104f565b005b61043a6110e8565b60405161044791906125d9565b60405180910390f35b61046a60048036038101906104659190612631565b611176565b60405161047791906125d9565b60405180910390f35b610488611220565b60405161049591906125d9565b60405180910390f35b6104b860048036038101906104b391906128d8565b6112ae565b005b6104d460048036038101906104cf9190612b0b565b61133d565b6040516104e1919061252e565b60405180910390f35b61050460048036038101906104ff9190612921565b6113d1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105e157506105e0826114de565b5b9050919050565b6060600080546105f790612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461062390612b7a565b80156106705780601f1061064557610100808354040283529160200191610670565b820191906000526020600020905b81548152906001019060200180831161065357829003601f168201915b5050505050905090565b600061068582611548565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106cb82610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073290612c1d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661075a611593565b73ffffffffffffffffffffffffffffffffffffffff161480610789575061078881610783611593565b61133d565b5b6107c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612caf565b60405180910390fd5b6107d2838361159b565b505050565b60006107e36007611654565b905090565b6107f96107f3611593565b82611662565b610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f90612d41565b60405180910390fd5b6108438383836116f7565b505050565b61086383838360405180602001604052806000815250610fed565b505050565b6108723382611662565b6108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a890612dad565b60405180910390fd5b6108ba816119ec565b50565b60001515600b60149054906101000a900460ff1615150361090a576040517f6d39fcd000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a546109156107d7565b111561094d576040517f355a428100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610957611593565b905060006109636107d7565b90506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016109c2919061269f565b602060405180830381865afa1580156109df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a039190612de2565b905060008111610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f90612e5b565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b365780600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf90612ec7565b60405180910390fd5b610bc28383611b36565b610bcc60076114c8565b6001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c1c9190612f16565b92505081905550505050565b600a5481565b610c36611593565b73ffffffffffffffffffffffffffffffffffffffff16610c54610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190612f96565b60405180910390fd5b8060089081610cb99190613162565b5050565b600080610cc983611b54565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190613280565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90613312565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e02611593565b73ffffffffffffffffffffffffffffffffffffffff16610e20610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90612f96565b60405180910390fd5b610e806000611b91565b565b610e8a611593565b73ffffffffffffffffffffffffffffffffffffffff16610ea8610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590612f96565b60405180910390fd5b80600a8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f4190612b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6d90612b7a565b8015610fba5780601f10610f8f57610100808354040283529160200191610fba565b820191906000526020600020905b815481529060010190602001808311610f9d57829003601f168201915b5050505050905090565b610fd6610fcf611593565b8383611c57565b5050565b600b60149054906101000a900460ff1681565b610ffe610ff8611593565b83611662565b61103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490612d41565b60405180910390fd5b61104984848484611dc3565b50505050565b611057611593565b73ffffffffffffffffffffffffffffffffffffffff16611075610f08565b73ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290612f96565b60405180910390fd5b80600b60146101000a81548160ff02191690831515021790555050565b600980546110f590612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461112190612b7a565b801561116e5780601f106111435761010080835404028352916020019161116e565b820191906000526020600020905b81548152906001019060200180831161115157829003601f168201915b505050505081565b606061118182611e1f565b6111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b79061337e565b60405180910390fd5b60006111ca611e60565b905060008151116111ea5760405180602001604052806000815250611218565b806111f484611ef2565b60096040516020016112089392919061345d565b6040516020818303038152906040525b915050919050565b6008805461122d90612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461125990612b7a565b80156112a65780601f1061127b576101008083540402835291602001916112a6565b820191906000526020600020905b81548152906001019060200180831161128957829003601f168201915b505050505081565b6112b6611593565b73ffffffffffffffffffffffffffffffffffffffff166112d4610f08565b73ffffffffffffffffffffffffffffffffffffffff161461132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190612f96565b60405180910390fd5b80600990816113399190613162565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113d9611593565b73ffffffffffffffffffffffffffffffffffffffff166113f7610f08565b73ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144490612f96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b390613500565b60405180910390fd5b6114c581611b91565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61155181611e1f565b611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613280565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661160e83610cbd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60008061166e83610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116b057506116af818561133d565b5b806116ee57508373ffffffffffffffffffffffffffffffffffffffff166116d68461067a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661171782610cbd565b73ffffffffffffffffffffffffffffffffffffffff161461176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490613592565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d390613624565b60405180910390fd5b6117e7838383612052565b8273ffffffffffffffffffffffffffffffffffffffff1661180782610cbd565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613592565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119e7838383612057565b505050565b60006119f782610cbd565b9050611a0581600084612052565b611a0e82610cbd565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b3281600084612057565b5050565b611b5082826040518060200160405280600081525061205c565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90613690565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611db6919061252e565b60405180910390a3505050565b611dce8484846116f7565b611dda848484846120b7565b611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090613722565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611e4183611b54565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054611e6f90612b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9b90612b7a565b8015611ee85780601f10611ebd57610100808354040283529160200191611ee8565b820191906000526020600020905b815481529060010190602001808311611ecb57829003601f168201915b5050505050905090565b606060008203611f39576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061204d565b600082905060005b60008214611f6b578080611f5490613742565b915050600a82611f6491906137b9565b9150611f41565b60008167ffffffffffffffff811115611f8757611f866127ad565b5b6040519080825280601f01601f191660200182016040528015611fb95781602001600182028036833780820191505090505b5090505b6000851461204657600182611fd29190612f16565b9150600a85611fe191906137ea565b6030611fed919061381b565b60f81b8183815181106120035761200261384f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561203f91906137b9565b9450611fbd565b8093505050505b919050565b505050565b505050565b612066838361223e565b61207360008484846120b7565b6120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990613722565b60405180910390fd5b505050565b60006120d88473ffffffffffffffffffffffffffffffffffffffff16612457565b15612231578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612101611593565b8786866040518563ffffffff1660e01b815260040161212394939291906138d3565b6020604051808303816000875af192505050801561215f57506040513d601f19601f8201168201806040525081019061215c9190613934565b60015b6121e1573d806000811461218f576040519150601f19603f3d011682016040523d82523d6000602084013e612194565b606091505b5060008151036121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d090613722565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612236565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a4906139ad565b60405180910390fd5b6122b681611e1f565b156122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed90613a19565b60405180910390fd5b61230260008383612052565b61230b81611e1f565b1561234b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234290613a19565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461245360008383612057565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124c38161248e565b81146124ce57600080fd5b50565b6000813590506124e0816124ba565b92915050565b6000602082840312156124fc576124fb612484565b5b600061250a848285016124d1565b91505092915050565b60008115159050919050565b61252881612513565b82525050565b6000602082019050612543600083018461251f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612583578082015181840152602081019050612568565b60008484015250505050565b6000601f19601f8301169050919050565b60006125ab82612549565b6125b58185612554565b93506125c5818560208601612565565b6125ce8161258f565b840191505092915050565b600060208201905081810360008301526125f381846125a0565b905092915050565b6000819050919050565b61260e816125fb565b811461261957600080fd5b50565b60008135905061262b81612605565b92915050565b60006020828403121561264757612646612484565b5b60006126558482850161261c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006126898261265e565b9050919050565b6126998161267e565b82525050565b60006020820190506126b46000830184612690565b92915050565b6126c38161267e565b81146126ce57600080fd5b50565b6000813590506126e0816126ba565b92915050565b600080604083850312156126fd576126fc612484565b5b600061270b858286016126d1565b925050602061271c8582860161261c565b9150509250929050565b61272f816125fb565b82525050565b600060208201905061274a6000830184612726565b92915050565b60008060006060848603121561276957612768612484565b5b6000612777868287016126d1565b9350506020612788868287016126d1565b92505060406127998682870161261c565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127e58261258f565b810181811067ffffffffffffffff82111715612804576128036127ad565b5b80604052505050565b600061281761247a565b905061282382826127dc565b919050565b600067ffffffffffffffff821115612843576128426127ad565b5b61284c8261258f565b9050602081019050919050565b82818337600083830152505050565b600061287b61287684612828565b61280d565b905082815260208101848484011115612897576128966127a8565b5b6128a2848285612859565b509392505050565b600082601f8301126128bf576128be6127a3565b5b81356128cf848260208601612868565b91505092915050565b6000602082840312156128ee576128ed612484565b5b600082013567ffffffffffffffff81111561290c5761290b612489565b5b612918848285016128aa565b91505092915050565b60006020828403121561293757612936612484565b5b6000612945848285016126d1565b91505092915050565b61295781612513565b811461296257600080fd5b50565b6000813590506129748161294e565b92915050565b6000806040838503121561299157612990612484565b5b600061299f858286016126d1565b92505060206129b085828601612965565b9150509250929050565b600067ffffffffffffffff8211156129d5576129d46127ad565b5b6129de8261258f565b9050602081019050919050565b60006129fe6129f9846129ba565b61280d565b905082815260208101848484011115612a1a57612a196127a8565b5b612a25848285612859565b509392505050565b600082601f830112612a4257612a416127a3565b5b8135612a528482602086016129eb565b91505092915050565b60008060008060808587031215612a7557612a74612484565b5b6000612a83878288016126d1565b9450506020612a94878288016126d1565b9350506040612aa58782880161261c565b925050606085013567ffffffffffffffff811115612ac657612ac5612489565b5b612ad287828801612a2d565b91505092959194509250565b600060208284031215612af457612af3612484565b5b6000612b0284828501612965565b91505092915050565b60008060408385031215612b2257612b21612484565b5b6000612b30858286016126d1565b9250506020612b41858286016126d1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b9257607f821691505b602082108103612ba557612ba4612b4b565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c07602183612554565b9150612c1282612bab565b604082019050919050565b60006020820190508181036000830152612c3681612bfa565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000612c99603d83612554565b9150612ca482612c3d565b604082019050919050565b60006020820190508181036000830152612cc881612c8c565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000612d2b602d83612554565b9150612d3682612ccf565b604082019050919050565b60006020820190508181036000830152612d5a81612d1e565b9050919050565b7f4e6f7420617070726f766564206f72206f776e65720000000000000000000000600082015250565b6000612d97601583612554565b9150612da282612d61565b602082019050919050565b60006020820190508181036000830152612dc681612d8a565b9050919050565b600081519050612ddc81612605565b92915050565b600060208284031215612df857612df7612484565b5b6000612e0684828501612dcd565b91505092915050565b7f456d7074792062616c616e636500000000000000000000000000000000000000600082015250565b6000612e45600d83612554565b9150612e5082612e0f565b602082019050919050565b60006020820190508181036000830152612e7481612e38565b9050919050565b7f416c6c20636c61696d6564000000000000000000000000000000000000000000600082015250565b6000612eb1600b83612554565b9150612ebc82612e7b565b602082019050919050565b60006020820190508181036000830152612ee081612ea4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f21826125fb565b9150612f2c836125fb565b9250828203905081811115612f4457612f43612ee7565b5b92915050565b7f4e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b6000612f80600c83612554565b9150612f8b82612f4a565b602082019050919050565b60006020820190508181036000830152612faf81612f73565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026130187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612fdb565b6130228683612fdb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061305f61305a613055846125fb565b61303a565b6125fb565b9050919050565b6000819050919050565b61307983613044565b61308d61308582613066565b848454612fe8565b825550505050565b600090565b6130a2613095565b6130ad818484613070565b505050565b5b818110156130d1576130c660008261309a565b6001810190506130b3565b5050565b601f821115613116576130e781612fb6565b6130f084612fcb565b810160208510156130ff578190505b61311361310b85612fcb565b8301826130b2565b50505b505050565b600082821c905092915050565b60006131396000198460080261311b565b1980831691505092915050565b60006131528383613128565b9150826002028217905092915050565b61316b82612549565b67ffffffffffffffff811115613184576131836127ad565b5b61318e8254612b7a565b6131998282856130d5565b600060209050601f8311600181146131cc57600084156131ba578287015190505b6131c48582613146565b86555061322c565b601f1984166131da86612fb6565b60005b82811015613202578489015182556001820191506020850194506020810190506131dd565b8683101561321f578489015161321b601f891682613128565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061326a601883612554565b915061327582613234565b602082019050919050565b600060208201905081810360008301526132998161325d565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006132fc602983612554565b9150613307826132a0565b604082019050919050565b6000602082019050818103600083015261332b816132ef565b9050919050565b7f55524920666f72206e6f6e6578697374656e7420746f6b656e49640000000000600082015250565b6000613368601b83612554565b915061337382613332565b602082019050919050565b600060208201905081810360008301526133978161335b565b9050919050565b600081905092915050565b60006133b482612549565b6133be818561339e565b93506133ce818560208601612565565b80840191505092915050565b600081546133e781612b7a565b6133f1818661339e565b9450600182166000811461340c576001811461342157613454565b60ff1983168652811515820286019350613454565b61342a85612fb6565b60005b8381101561344c5781548189015260018201915060208101905061342d565b838801955050505b50505092915050565b600061346982866133a9565b915061347582856133a9565b915061348182846133da565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134ea602683612554565b91506134f58261348e565b604082019050919050565b60006020820190508181036000830152613519816134dd565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061357c602583612554565b915061358782613520565b604082019050919050565b600060208201905081810360008301526135ab8161356f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061360e602483612554565b9150613619826135b2565b604082019050919050565b6000602082019050818103600083015261363d81613601565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061367a601983612554565b915061368582613644565b602082019050919050565b600060208201905081810360008301526136a98161366d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061370c603283612554565b9150613717826136b0565b604082019050919050565b6000602082019050818103600083015261373b816136ff565b9050919050565b600061374d826125fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361377f5761377e612ee7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c4826125fb565b91506137cf836125fb565b9250826137df576137de61378a565b5b828204905092915050565b60006137f5826125fb565b9150613800836125fb565b9250826138105761380f61378a565b5b828206905092915050565b6000613826826125fb565b9150613831836125fb565b925082820190508082111561384957613848612ee7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006138a58261387e565b6138af8185613889565b93506138bf818560208601612565565b6138c88161258f565b840191505092915050565b60006080820190506138e86000830187612690565b6138f56020830186612690565b6139026040830185612726565b8181036060830152613914818461389a565b905095945050505050565b60008151905061392e816124ba565b92915050565b60006020828403121561394a57613949612484565b5b60006139588482850161391f565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613997602083612554565b91506139a282613961565b602082019050919050565b600060208201905081810360008301526139c68161398a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613a03601c83612554565b9150613a0e826139cd565b602082019050919050565b60006020820190508181036000830152613a32816139f6565b905091905056fea26469706673582212200bc8cd5f7f662cbf4991b39cedb9aee27ff8f0e1034c797aa6544ccf68b05a6964736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a66685054517a7064615045506b4871614c7777576b576e7a566b684c59777a554c4d6b6155624734386f632f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052e6a736f6e000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063bedb86fb11610097578063d547cfb711610071578063d547cfb714610480578063da3ef23f1461049e578063e985e9c5146104ba578063f2fde38b146104ea576101a9565b8063bedb86fb14610416578063c668286214610432578063c87b56dd14610450576101a9565b806395d89b41116100d357806395d89b41146103a2578063a22cb465146103c0578063b187bd26146103dc578063b88d4fde146103fa576101a9565b8063715018a61461035e57806371f9f200146103685780638da5cb5b14610384576101a9565b806342842e0e11610166578063558fa0f511610140578063558fa0f5146102c457806355f804b3146102e25780636352211e146102fe57806370a082311461032e576101a9565b806342842e0e1461028257806342966c681461029e5780634e71d92d146102ba576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c391906124e6565b610506565b6040516101d5919061252e565b60405180910390f35b6101e66105e8565b6040516101f391906125d9565b60405180910390f35b61021660048036038101906102119190612631565b61067a565b604051610223919061269f565b60405180910390f35b610246600480360381019061024191906126e6565b6106c0565b005b6102506107d7565b60405161025d9190612735565b60405180910390f35b610280600480360381019061027b9190612750565b6107e8565b005b61029c60048036038101906102979190612750565b610848565b005b6102b860048036038101906102b39190612631565b610868565b005b6102c26108bd565b005b6102cc610c28565b6040516102d99190612735565b60405180910390f35b6102fc60048036038101906102f791906128d8565b610c2e565b005b61031860048036038101906103139190612631565b610cbd565b604051610325919061269f565b60405180910390f35b61034860048036038101906103439190612921565b610d43565b6040516103559190612735565b60405180910390f35b610366610dfa565b005b610382600480360381019061037d9190612631565b610e82565b005b61038c610f08565b604051610399919061269f565b60405180910390f35b6103aa610f32565b6040516103b791906125d9565b60405180910390f35b6103da60048036038101906103d5919061297a565b610fc4565b005b6103e4610fda565b6040516103f1919061252e565b60405180910390f35b610414600480360381019061040f9190612a5b565b610fed565b005b610430600480360381019061042b9190612ade565b61104f565b005b61043a6110e8565b60405161044791906125d9565b60405180910390f35b61046a60048036038101906104659190612631565b611176565b60405161047791906125d9565b60405180910390f35b610488611220565b60405161049591906125d9565b60405180910390f35b6104b860048036038101906104b391906128d8565b6112ae565b005b6104d460048036038101906104cf9190612b0b565b61133d565b6040516104e1919061252e565b60405180910390f35b61050460048036038101906104ff9190612921565b6113d1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105e157506105e0826114de565b5b9050919050565b6060600080546105f790612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461062390612b7a565b80156106705780601f1061064557610100808354040283529160200191610670565b820191906000526020600020905b81548152906001019060200180831161065357829003601f168201915b5050505050905090565b600061068582611548565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106cb82610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073290612c1d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661075a611593565b73ffffffffffffffffffffffffffffffffffffffff161480610789575061078881610783611593565b61133d565b5b6107c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612caf565b60405180910390fd5b6107d2838361159b565b505050565b60006107e36007611654565b905090565b6107f96107f3611593565b82611662565b610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f90612d41565b60405180910390fd5b6108438383836116f7565b505050565b61086383838360405180602001604052806000815250610fed565b505050565b6108723382611662565b6108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a890612dad565b60405180910390fd5b6108ba816119ec565b50565b60001515600b60149054906101000a900460ff1615150361090a576040517f6d39fcd000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a546109156107d7565b111561094d576040517f355a428100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610957611593565b905060006109636107d7565b90506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016109c2919061269f565b602060405180830381865afa1580156109df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a039190612de2565b905060008111610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f90612e5b565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b365780600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf90612ec7565b60405180910390fd5b610bc28383611b36565b610bcc60076114c8565b6001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c1c9190612f16565b92505081905550505050565b600a5481565b610c36611593565b73ffffffffffffffffffffffffffffffffffffffff16610c54610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190612f96565b60405180910390fd5b8060089081610cb99190613162565b5050565b600080610cc983611b54565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190613280565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90613312565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e02611593565b73ffffffffffffffffffffffffffffffffffffffff16610e20610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90612f96565b60405180910390fd5b610e806000611b91565b565b610e8a611593565b73ffffffffffffffffffffffffffffffffffffffff16610ea8610f08565b73ffffffffffffffffffffffffffffffffffffffff1614610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590612f96565b60405180910390fd5b80600a8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f4190612b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6d90612b7a565b8015610fba5780601f10610f8f57610100808354040283529160200191610fba565b820191906000526020600020905b815481529060010190602001808311610f9d57829003601f168201915b5050505050905090565b610fd6610fcf611593565b8383611c57565b5050565b600b60149054906101000a900460ff1681565b610ffe610ff8611593565b83611662565b61103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490612d41565b60405180910390fd5b61104984848484611dc3565b50505050565b611057611593565b73ffffffffffffffffffffffffffffffffffffffff16611075610f08565b73ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290612f96565b60405180910390fd5b80600b60146101000a81548160ff02191690831515021790555050565b600980546110f590612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461112190612b7a565b801561116e5780601f106111435761010080835404028352916020019161116e565b820191906000526020600020905b81548152906001019060200180831161115157829003601f168201915b505050505081565b606061118182611e1f565b6111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b79061337e565b60405180910390fd5b60006111ca611e60565b905060008151116111ea5760405180602001604052806000815250611218565b806111f484611ef2565b60096040516020016112089392919061345d565b6040516020818303038152906040525b915050919050565b6008805461122d90612b7a565b80601f016020809104026020016040519081016040528092919081815260200182805461125990612b7a565b80156112a65780601f1061127b576101008083540402835291602001916112a6565b820191906000526020600020905b81548152906001019060200180831161128957829003601f168201915b505050505081565b6112b6611593565b73ffffffffffffffffffffffffffffffffffffffff166112d4610f08565b73ffffffffffffffffffffffffffffffffffffffff161461132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190612f96565b60405180910390fd5b80600990816113399190613162565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113d9611593565b73ffffffffffffffffffffffffffffffffffffffff166113f7610f08565b73ffffffffffffffffffffffffffffffffffffffff161461144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144490612f96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b390613500565b60405180910390fd5b6114c581611b91565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61155181611e1f565b611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613280565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661160e83610cbd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60008061166e83610cbd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116b057506116af818561133d565b5b806116ee57508373ffffffffffffffffffffffffffffffffffffffff166116d68461067a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661171782610cbd565b73ffffffffffffffffffffffffffffffffffffffff161461176d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176490613592565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d390613624565b60405180910390fd5b6117e7838383612052565b8273ffffffffffffffffffffffffffffffffffffffff1661180782610cbd565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613592565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119e7838383612057565b505050565b60006119f782610cbd565b9050611a0581600084612052565b611a0e82610cbd565b90506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b3281600084612057565b5050565b611b5082826040518060200160405280600081525061205c565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90613690565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611db6919061252e565b60405180910390a3505050565b611dce8484846116f7565b611dda848484846120b7565b611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090613722565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611e4183611b54565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054611e6f90612b7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9b90612b7a565b8015611ee85780601f10611ebd57610100808354040283529160200191611ee8565b820191906000526020600020905b815481529060010190602001808311611ecb57829003601f168201915b5050505050905090565b606060008203611f39576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061204d565b600082905060005b60008214611f6b578080611f5490613742565b915050600a82611f6491906137b9565b9150611f41565b60008167ffffffffffffffff811115611f8757611f866127ad565b5b6040519080825280601f01601f191660200182016040528015611fb95781602001600182028036833780820191505090505b5090505b6000851461204657600182611fd29190612f16565b9150600a85611fe191906137ea565b6030611fed919061381b565b60f81b8183815181106120035761200261384f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561203f91906137b9565b9450611fbd565b8093505050505b919050565b505050565b505050565b612066838361223e565b61207360008484846120b7565b6120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990613722565b60405180910390fd5b505050565b60006120d88473ffffffffffffffffffffffffffffffffffffffff16612457565b15612231578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612101611593565b8786866040518563ffffffff1660e01b815260040161212394939291906138d3565b6020604051808303816000875af192505050801561215f57506040513d601f19601f8201168201806040525081019061215c9190613934565b60015b6121e1573d806000811461218f576040519150601f19603f3d011682016040523d82523d6000602084013e612194565b606091505b5060008151036121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d090613722565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612236565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a4906139ad565b60405180910390fd5b6122b681611e1f565b156122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed90613a19565b60405180910390fd5b61230260008383612052565b61230b81611e1f565b1561234b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234290613a19565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461245360008383612057565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124c38161248e565b81146124ce57600080fd5b50565b6000813590506124e0816124ba565b92915050565b6000602082840312156124fc576124fb612484565b5b600061250a848285016124d1565b91505092915050565b60008115159050919050565b61252881612513565b82525050565b6000602082019050612543600083018461251f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612583578082015181840152602081019050612568565b60008484015250505050565b6000601f19601f8301169050919050565b60006125ab82612549565b6125b58185612554565b93506125c5818560208601612565565b6125ce8161258f565b840191505092915050565b600060208201905081810360008301526125f381846125a0565b905092915050565b6000819050919050565b61260e816125fb565b811461261957600080fd5b50565b60008135905061262b81612605565b92915050565b60006020828403121561264757612646612484565b5b60006126558482850161261c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006126898261265e565b9050919050565b6126998161267e565b82525050565b60006020820190506126b46000830184612690565b92915050565b6126c38161267e565b81146126ce57600080fd5b50565b6000813590506126e0816126ba565b92915050565b600080604083850312156126fd576126fc612484565b5b600061270b858286016126d1565b925050602061271c8582860161261c565b9150509250929050565b61272f816125fb565b82525050565b600060208201905061274a6000830184612726565b92915050565b60008060006060848603121561276957612768612484565b5b6000612777868287016126d1565b9350506020612788868287016126d1565b92505060406127998682870161261c565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127e58261258f565b810181811067ffffffffffffffff82111715612804576128036127ad565b5b80604052505050565b600061281761247a565b905061282382826127dc565b919050565b600067ffffffffffffffff821115612843576128426127ad565b5b61284c8261258f565b9050602081019050919050565b82818337600083830152505050565b600061287b61287684612828565b61280d565b905082815260208101848484011115612897576128966127a8565b5b6128a2848285612859565b509392505050565b600082601f8301126128bf576128be6127a3565b5b81356128cf848260208601612868565b91505092915050565b6000602082840312156128ee576128ed612484565b5b600082013567ffffffffffffffff81111561290c5761290b612489565b5b612918848285016128aa565b91505092915050565b60006020828403121561293757612936612484565b5b6000612945848285016126d1565b91505092915050565b61295781612513565b811461296257600080fd5b50565b6000813590506129748161294e565b92915050565b6000806040838503121561299157612990612484565b5b600061299f858286016126d1565b92505060206129b085828601612965565b9150509250929050565b600067ffffffffffffffff8211156129d5576129d46127ad565b5b6129de8261258f565b9050602081019050919050565b60006129fe6129f9846129ba565b61280d565b905082815260208101848484011115612a1a57612a196127a8565b5b612a25848285612859565b509392505050565b600082601f830112612a4257612a416127a3565b5b8135612a528482602086016129eb565b91505092915050565b60008060008060808587031215612a7557612a74612484565b5b6000612a83878288016126d1565b9450506020612a94878288016126d1565b9350506040612aa58782880161261c565b925050606085013567ffffffffffffffff811115612ac657612ac5612489565b5b612ad287828801612a2d565b91505092959194509250565b600060208284031215612af457612af3612484565b5b6000612b0284828501612965565b91505092915050565b60008060408385031215612b2257612b21612484565b5b6000612b30858286016126d1565b9250506020612b41858286016126d1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b9257607f821691505b602082108103612ba557612ba4612b4b565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c07602183612554565b9150612c1282612bab565b604082019050919050565b60006020820190508181036000830152612c3681612bfa565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000612c99603d83612554565b9150612ca482612c3d565b604082019050919050565b60006020820190508181036000830152612cc881612c8c565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000612d2b602d83612554565b9150612d3682612ccf565b604082019050919050565b60006020820190508181036000830152612d5a81612d1e565b9050919050565b7f4e6f7420617070726f766564206f72206f776e65720000000000000000000000600082015250565b6000612d97601583612554565b9150612da282612d61565b602082019050919050565b60006020820190508181036000830152612dc681612d8a565b9050919050565b600081519050612ddc81612605565b92915050565b600060208284031215612df857612df7612484565b5b6000612e0684828501612dcd565b91505092915050565b7f456d7074792062616c616e636500000000000000000000000000000000000000600082015250565b6000612e45600d83612554565b9150612e5082612e0f565b602082019050919050565b60006020820190508181036000830152612e7481612e38565b9050919050565b7f416c6c20636c61696d6564000000000000000000000000000000000000000000600082015250565b6000612eb1600b83612554565b9150612ebc82612e7b565b602082019050919050565b60006020820190508181036000830152612ee081612ea4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f21826125fb565b9150612f2c836125fb565b9250828203905081811115612f4457612f43612ee7565b5b92915050565b7f4e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b6000612f80600c83612554565b9150612f8b82612f4a565b602082019050919050565b60006020820190508181036000830152612faf81612f73565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026130187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612fdb565b6130228683612fdb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061305f61305a613055846125fb565b61303a565b6125fb565b9050919050565b6000819050919050565b61307983613044565b61308d61308582613066565b848454612fe8565b825550505050565b600090565b6130a2613095565b6130ad818484613070565b505050565b5b818110156130d1576130c660008261309a565b6001810190506130b3565b5050565b601f821115613116576130e781612fb6565b6130f084612fcb565b810160208510156130ff578190505b61311361310b85612fcb565b8301826130b2565b50505b505050565b600082821c905092915050565b60006131396000198460080261311b565b1980831691505092915050565b60006131528383613128565b9150826002028217905092915050565b61316b82612549565b67ffffffffffffffff811115613184576131836127ad565b5b61318e8254612b7a565b6131998282856130d5565b600060209050601f8311600181146131cc57600084156131ba578287015190505b6131c48582613146565b86555061322c565b601f1984166131da86612fb6565b60005b82811015613202578489015182556001820191506020850194506020810190506131dd565b8683101561321f578489015161321b601f891682613128565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061326a601883612554565b915061327582613234565b602082019050919050565b600060208201905081810360008301526132998161325d565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006132fc602983612554565b9150613307826132a0565b604082019050919050565b6000602082019050818103600083015261332b816132ef565b9050919050565b7f55524920666f72206e6f6e6578697374656e7420746f6b656e49640000000000600082015250565b6000613368601b83612554565b915061337382613332565b602082019050919050565b600060208201905081810360008301526133978161335b565b9050919050565b600081905092915050565b60006133b482612549565b6133be818561339e565b93506133ce818560208601612565565b80840191505092915050565b600081546133e781612b7a565b6133f1818661339e565b9450600182166000811461340c576001811461342157613454565b60ff1983168652811515820286019350613454565b61342a85612fb6565b60005b8381101561344c5781548189015260018201915060208101905061342d565b838801955050505b50505092915050565b600061346982866133a9565b915061347582856133a9565b915061348182846133da565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134ea602683612554565b91506134f58261348e565b604082019050919050565b60006020820190508181036000830152613519816134dd565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061357c602583612554565b915061358782613520565b604082019050919050565b600060208201905081810360008301526135ab8161356f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061360e602483612554565b9150613619826135b2565b604082019050919050565b6000602082019050818103600083015261363d81613601565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061367a601983612554565b915061368582613644565b602082019050919050565b600060208201905081810360008301526136a98161366d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061370c603283612554565b9150613717826136b0565b604082019050919050565b6000602082019050818103600083015261373b816136ff565b9050919050565b600061374d826125fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361377f5761377e612ee7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c4826125fb565b91506137cf836125fb565b9250826137df576137de61378a565b5b828204905092915050565b60006137f5826125fb565b9150613800836125fb565b9250826138105761380f61378a565b5b828206905092915050565b6000613826826125fb565b9150613831836125fb565b925082820190508082111561384957613848612ee7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006138a58261387e565b6138af8185613889565b93506138bf818560208601612565565b6138c88161258f565b840191505092915050565b60006080820190506138e86000830187612690565b6138f56020830186612690565b6139026040830185612726565b8181036060830152613914818461389a565b905095945050505050565b60008151905061392e816124ba565b92915050565b60006020828403121561394a57613949612484565b5b60006139588482850161391f565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613997602083612554565b91506139a282613961565b602082019050919050565b600060208201905081810360008301526139c68161398a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613a03601c83612554565b9150613a0e826139cd565b602082019050919050565b60006020820190508181036000830152613a32816139f6565b905091905056fea26469706673582212200bc8cd5f7f662cbf4991b39cedb9aee27ff8f0e1034c797aa6544ccf68b05a6964736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000543000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a66685054517a7064615045506b4871614c7777576b576e7a566b684c59777a554c4d6b6155624734386f632f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052e6a736f6e000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://gateway.pinata.cloud/ipfs/QmZfhPTQzpdaPEPkHqaLwwWkWnzVkhLYwzULMkaUbG48oc/
Arg [1] : _baseExtension (string): .json
Arg [2] : _maxElements (uint256): 1347
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000543
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [4] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [5] : 732f516d5a66685054517a7064615045506b4871614c7777576b576e7a566b68
Arg [6] : 4c59777a554c4d6b6155624734386f632f000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 2e6a736f6e000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
39238:3018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29304:296;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30054:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31089:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30665:416;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40380:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31603:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31893:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41025:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40483:534;;;:::i;:::-;;39470:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41786:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29823:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29608:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3881:100;;;:::i;:::-;;41895:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3279:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30162:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31268:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39537:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32086:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42007:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39437:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41188:349;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39405:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41658:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31431:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4130:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29304:296;29397:4;29449:25;29434:40;;;:11;:40;;;;:105;;;;29506:33;29491:48;;;:11;:48;;;;29434:105;:158;;;;29556:36;29580:11;29556:23;:36::i;:::-;29434:158;29414:178;;29304:296;;;:::o;30054:100::-;30108:13;30141:5;30134:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30054:100;:::o;31089:171::-;31165:7;31185:23;31200:7;31185:14;:23::i;:::-;31228:15;:24;31244:7;31228:24;;;;;;;;;;;;;;;;;;;;;31221:31;;31089:171;;;:::o;30665:416::-;30746:13;30762:23;30777:7;30762:14;:23::i;:::-;30746:39;;30810:5;30804:11;;:2;:11;;;30796:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30904:5;30888:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30913:37;30930:5;30937:12;:10;:12::i;:::-;30913:16;:37::i;:::-;30888:62;30866:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;31052:21;31061:2;31065:7;31052:8;:21::i;:::-;30735:346;30665:416;;:::o;40380:95::-;40424:7;40451:16;:6;:14;:16::i;:::-;40444:23;;40380:95;:::o;31603:282::-;31745:41;31764:12;:10;:12::i;:::-;31778:7;31745:18;:41::i;:::-;31737:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;31849:28;31859:4;31865:2;31869:7;31849:9;:28::i;:::-;31603:282;;;:::o;31893:185::-;32031:39;32048:4;32054:2;32058:7;32031:39;;;;;;;;;;;;:16;:39::i;:::-;31893:185;;;:::o;41025:155::-;41082:39;41101:10;41113:7;41082:18;:39::i;:::-;41074:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41158:14;41164:7;41158:5;:14::i;:::-;41025:155;:::o;40483:534::-;40208:5;40196:17;;:8;;;;;;;;;;;:17;;;40192:75;;40237:18;;;;;;;;;;;;;;40192:75;40297:11;;40281:13;:11;:13::i;:::-;:27;40277:76;;;40332:9;;;;;;;;;;;;;;40277:76;40530:14:::1;40547:12;:10;:12::i;:::-;40530:29;;40570:15;40588:13;:11;:13::i;:::-;40570:31;;40612:15;40630:5;;;;;;;;;;;:15;;;40646:6;40630:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40612:41;;40684:1;40674:7;:11;40666:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;40721:9;:17;40731:6;40721:17;;;;;;;;;;;;;;;;;;;;;;;;;40716:123;;40781:7;40755:15;:23;40771:6;40755:23;;;;;;;;;;;;;;;:33;;;;40823:4;40803:9;:17;40813:6;40803:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;40716:123;40885:1;40859:15;:23;40875:6;40859:23;;;;;;;;;;;;;;;;:27;40851:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;40915:26;40925:6;40933:7;40915:9;:26::i;:::-;40952:18;:6;:16;:18::i;:::-;41008:1;40981:15;:23;40997:6;40981:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;40519:498;;;40483:534::o:0;39470:26::-;;;;:::o;41786:101::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41872:7:::1;41857:12;:22;;;;;;:::i;:::-;;41786:101:::0;:::o;29823:223::-;29895:7;29915:13;29931:17;29940:7;29931:8;:17::i;:::-;29915:33;;29984:1;29967:19;;:5;:19;;;29959:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30033:5;30026:12;;;29823:223;;;:::o;29608:207::-;29680:7;29725:1;29708:19;;:5;:19;;;29700:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29791:9;:16;29801:5;29791:16;;;;;;;;;;;;;;;;29784:23;;29608:207;;;:::o;3881:100::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;3944:30:::1;3971:1;3944:18;:30::i;:::-;3881:100::o:0;41895:104::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41981:10:::1;41967:11;:24;;;;41895:104:::0;:::o;3279:84::-;3325:7;3350:6;;;;;;;;;;;3343:13;;3279:84;:::o;30162:104::-;30218:13;30251:7;30244:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30162:104;:::o;31268:155::-;31363:52;31382:12;:10;:12::i;:::-;31396:8;31406;31363:18;:52::i;:::-;31268:155;;:::o;39537:20::-;;;;;;;;;;;;;:::o;32086:322::-;32260:41;32279:12;:10;:12::i;:::-;32293:7;32260:18;:41::i;:::-;32252:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;32362:38;32376:4;32382:2;32386:7;32395:4;32362:13;:38::i;:::-;32086:322;;;;:::o;42007:90::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;42080:9:::1;42069:8;;:20;;;;;;;;;;;;;;;;;;42007:90:::0;:::o;39437:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41188:349::-;41261:13;41295:16;41303:7;41295;:16::i;:::-;41287:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41356:21;41380:10;:8;:10::i;:::-;41356:34;;41434:1;41416:7;41410:21;:25;:119;;;;;;;;;;;;;;;;;41471:7;41480:18;:7;:16;:18::i;:::-;41500:13;41454:60;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41410:119;41403:126;;;41188:349;;;:::o;39405:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41658:120::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41757:13:::1;41741;:29;;;;;;:::i;:::-;;41658:120:::0;:::o;31431:164::-;31528:4;31552:18;:25;31571:5;31552:25;;;;;;;;;;;;;;;:35;31578:8;31552:35;;;;;;;;;;;;;;;;;;;;;;;;;31545:42;;31431:164;;;;:::o;4130:196::-;3500:12;:10;:12::i;:::-;3489:23;;:7;:5;:7::i;:::-;:23;;;3481:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;4237:1:::1;4217:22;;:8;:22;;::::0;4209:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4291:28;4310:8;4291:18;:28::i;:::-;4130:196:::0;:::o;18448:127::-;18555:1;18537:7;:14;;;:19;;;;;;;;;;;18448:127;:::o;20560:157::-;20645:4;20684:25;20669:40;;;:11;:40;;;;20662:47;;20560:157;;;:::o;35975:135::-;36057:16;36065:7;36057;:16::i;:::-;36049:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35975:135;:::o;2136:94::-;2188:7;2213:10;2206:17;;2136:94;:::o;35470:174::-;35572:2;35545:15;:24;35561:7;35545:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35628:7;35624:2;35590:46;;35599:23;35614:7;35599:14;:23::i;:::-;35590:46;;;;;;;;;;;;35470:174;;:::o;18326:114::-;18391:7;18418;:14;;;18411:21;;18326:114;;;:::o;32998:264::-;33091:4;33108:13;33124:23;33139:7;33124:14;:23::i;:::-;33108:39;;33177:5;33166:16;;:7;:16;;;:52;;;;33186:32;33203:5;33210:7;33186:16;:32::i;:::-;33166:52;:87;;;;33246:7;33222:31;;:20;33234:7;33222:11;:20::i;:::-;:31;;;33166:87;33158:96;;;32998:264;;;;:::o;34753:709::-;34912:4;34885:31;;:23;34900:7;34885:14;:23::i;:::-;:31;;;34877:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34991:1;34977:16;;:2;:16;;;34969:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35047:39;35068:4;35074:2;35078:7;35047:20;:39::i;:::-;35134:4;35107:31;;:23;35122:7;35107:14;:23::i;:::-;:31;;;35099:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35200:15;:24;35216:7;35200:24;;;;;;;;;;;;35193:31;;;;;;;;;;;35281:1;35262:9;:15;35272:4;35262:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;35314:1;35297:9;:13;35307:2;35297:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;35356:2;35337:7;:16;35345:7;35337:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35395:7;35391:2;35376:27;;35385:4;35376:27;;;;;;;;;;;;35416:38;35436:4;35442:2;35446:7;35416:19;:38::i;:::-;34753:709;;;:::o;34271:474::-;34331:13;34347:23;34362:7;34347:14;:23::i;:::-;34331:39;;34383:48;34404:5;34419:1;34423:7;34383:20;:48::i;:::-;34452:23;34467:7;34452:14;:23::i;:::-;34444:31;;34495:15;:24;34511:7;34495:24;;;;;;;;;;;;34488:31;;;;;;;;;;;34577:1;34557:9;:16;34567:5;34557:16;;;;;;;;;;;;;;;;:21;;;;;;;;;;;34607:7;:16;34615:7;34607:16;;;;;;;;;;;;34600:23;;;;;;;;;;;34669:7;34665:1;34641:36;;34650:5;34641:36;;;;;;;;;;;;34690:47;34710:5;34725:1;34729:7;34690:19;:47::i;:::-;34320:425;34271:474;:::o;33270:110::-;33346:26;33356:2;33360:7;33346:26;;;;;;;;;;;;:9;:26::i;:::-;33270:110;;:::o;32737:117::-;32803:7;32830;:16;32838:7;32830:16;;;;;;;;;;;;;;;;;;;;;32823:23;;32737:117;;;:::o;4480:184::-;4552:16;4571:6;;;;;;;;;;;4552:25;;4595:8;4586:6;;:17;;;;;;;;;;;;;;;;;;4648:8;4617:40;;4638:8;4617:40;;;;;;;;;;;;4543:121;4480:184;:::o;35652:315::-;35807:8;35798:17;;:5;:17;;;35790:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35894:8;35856:18;:25;35875:5;35856:25;;;;;;;;;;;;;;;:35;35882:8;35856:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35940:8;35918:41;;35933:5;35918:41;;;35950:8;35918:41;;;;;;:::i;:::-;;;;;;;;35652:315;;;:::o;32416:313::-;32572:28;32582:4;32588:2;32592:7;32572:9;:28::i;:::-;32619:47;32642:4;32648:2;32652:7;32661:4;32619:22;:47::i;:::-;32611:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32416:313;;;;:::o;32862:128::-;32927:4;32980:1;32951:31;;:17;32960:7;32951:8;:17::i;:::-;:31;;;;32944:38;;32862:128;;;:::o;41545:105::-;41597:13;41630:12;41623:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41545:105;:::o;5045:534::-;5101:13;5142:1;5133:5;:10;5129:53;;5160:10;;;;;;;;;;;;;;;;;;;;;5129:53;5192:12;5207:5;5192:20;;5223:14;5248:78;5263:1;5255:4;:9;5248:78;;5281:8;;;;;:::i;:::-;;;;5312:2;5304:10;;;;;:::i;:::-;;;5248:78;;;5336:19;5368:6;5358:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5336:39;;5386:154;5402:1;5393:5;:10;5386:154;;5430:1;5420:11;;;;;:::i;:::-;;;5497:2;5489:5;:10;;;;:::i;:::-;5476:2;:24;;;;:::i;:::-;5463:39;;5446:6;5453;5446:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5526:2;5517:11;;;;;:::i;:::-;;;5386:154;;;5564:6;5550:21;;;;;5045:534;;;;:::o;36923:126::-;;;;:::o;37057:125::-;;;;:::o;33388:319::-;33517:18;33523:2;33527:7;33517:5;:18::i;:::-;33568:53;33599:1;33603:2;33607:7;33616:4;33568:22;:53::i;:::-;33546:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;33388:319;;;:::o;36118:797::-;36272:4;36293:15;:2;:13;;;:15::i;:::-;36289:619;;;36345:2;36329:36;;;36366:12;:10;:12::i;:::-;36380:4;36386:7;36395:4;36329:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36325:528;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36587:1;36570:6;:13;:18;36566:272;;36613:60;;;;;;;;;;:::i;:::-;;;;;;;;36566:272;36788:6;36782:13;36773:6;36769:2;36765:15;36758:38;36325:528;36461:41;;;36451:51;;;:6;:51;;;;36444:58;;;;;36289:619;36892:4;36885:11;;36118:797;;;;;;;:::o;33715:548::-;33809:1;33795:16;;:2;:16;;;33787:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33868:16;33876:7;33868;:16::i;:::-;33867:17;33859:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33930:45;33959:1;33963:2;33967:7;33930:20;:45::i;:::-;33997:16;34005:7;33997;:16::i;:::-;33996:17;33988:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:1;34084:9;:13;34094:2;34084:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;34145:2;34126:7;:16;34134:7;34126:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34190:7;34186:2;34165:33;;34182:1;34165:33;;;;;;;;;;;;34211:44;34239:1;34243:2;34247:7;34211:19;:44::i;:::-;33715:548;;:::o;9316:326::-;9376:4;9633:1;9611:7;:19;;;:23;9604:30;;9316:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:117::-;5976:1;5973;5966:12;5990:117;6099:1;6096;6089:12;6113:180;6161:77;6158:1;6151:88;6258:4;6255:1;6248:15;6282:4;6279:1;6272:15;6299:281;6382:27;6404:4;6382:27;:::i;:::-;6374:6;6370:40;6512:6;6500:10;6497:22;6476:18;6464:10;6461:34;6458:62;6455:88;;;6523:18;;:::i;:::-;6455:88;6563:10;6559:2;6552:22;6342:238;6299:281;;:::o;6586:129::-;6620:6;6647:20;;:::i;:::-;6637:30;;6676:33;6704:4;6696:6;6676:33;:::i;:::-;6586:129;;;:::o;6721:308::-;6783:4;6873:18;6865:6;6862:30;6859:56;;;6895:18;;:::i;:::-;6859:56;6933:29;6955:6;6933:29;:::i;:::-;6925:37;;7017:4;7011;7007:15;6999:23;;6721:308;;;:::o;7035:146::-;7132:6;7127:3;7122;7109:30;7173:1;7164:6;7159:3;7155:16;7148:27;7035:146;;;:::o;7187:425::-;7265:5;7290:66;7306:49;7348:6;7306:49;:::i;:::-;7290:66;:::i;:::-;7281:75;;7379:6;7372:5;7365:21;7417:4;7410:5;7406:16;7455:3;7446:6;7441:3;7437:16;7434:25;7431:112;;;7462:79;;:::i;:::-;7431:112;7552:54;7599:6;7594:3;7589;7552:54;:::i;:::-;7271:341;7187:425;;;;;:::o;7632:340::-;7688:5;7737:3;7730:4;7722:6;7718:17;7714:27;7704:122;;7745:79;;:::i;:::-;7704:122;7862:6;7849:20;7887:79;7962:3;7954:6;7947:4;7939:6;7935:17;7887:79;:::i;:::-;7878:88;;7694:278;7632:340;;;;:::o;7978:509::-;8047:6;8096:2;8084:9;8075:7;8071:23;8067:32;8064:119;;;8102:79;;:::i;:::-;8064:119;8250:1;8239:9;8235:17;8222:31;8280:18;8272:6;8269:30;8266:117;;;8302:79;;:::i;:::-;8266:117;8407:63;8462:7;8453:6;8442:9;8438:22;8407:63;:::i;:::-;8397:73;;8193:287;7978:509;;;;:::o;8493:329::-;8552:6;8601:2;8589:9;8580:7;8576:23;8572:32;8569:119;;;8607:79;;:::i;:::-;8569:119;8727:1;8752:53;8797:7;8788:6;8777:9;8773:22;8752:53;:::i;:::-;8742:63;;8698:117;8493:329;;;;:::o;8828:116::-;8898:21;8913:5;8898:21;:::i;:::-;8891:5;8888:32;8878:60;;8934:1;8931;8924:12;8878:60;8828:116;:::o;8950:133::-;8993:5;9031:6;9018:20;9009:29;;9047:30;9071:5;9047:30;:::i;:::-;8950:133;;;;:::o;9089:468::-;9154:6;9162;9211:2;9199:9;9190:7;9186:23;9182:32;9179:119;;;9217:79;;:::i;:::-;9179:119;9337:1;9362:53;9407:7;9398:6;9387:9;9383:22;9362:53;:::i;:::-;9352:63;;9308:117;9464:2;9490:50;9532:7;9523:6;9512:9;9508:22;9490:50;:::i;:::-;9480:60;;9435:115;9089:468;;;;;:::o;9563:307::-;9624:4;9714:18;9706:6;9703:30;9700:56;;;9736:18;;:::i;:::-;9700:56;9774:29;9796:6;9774:29;:::i;:::-;9766:37;;9858:4;9852;9848:15;9840:23;;9563:307;;;:::o;9876:423::-;9953:5;9978:65;9994:48;10035:6;9994:48;:::i;:::-;9978:65;:::i;:::-;9969:74;;10066:6;10059:5;10052:21;10104:4;10097:5;10093:16;10142:3;10133:6;10128:3;10124:16;10121:25;10118:112;;;10149:79;;:::i;:::-;10118:112;10239:54;10286:6;10281:3;10276;10239:54;:::i;:::-;9959:340;9876:423;;;;;:::o;10318:338::-;10373:5;10422:3;10415:4;10407:6;10403:17;10399:27;10389:122;;10430:79;;:::i;:::-;10389:122;10547:6;10534:20;10572:78;10646:3;10638:6;10631:4;10623:6;10619:17;10572:78;:::i;:::-;10563:87;;10379:277;10318:338;;;;:::o;10662:943::-;10757:6;10765;10773;10781;10830:3;10818:9;10809:7;10805:23;10801:33;10798:120;;;10837:79;;:::i;:::-;10798:120;10957:1;10982:53;11027:7;11018:6;11007:9;11003:22;10982:53;:::i;:::-;10972:63;;10928:117;11084:2;11110:53;11155:7;11146:6;11135:9;11131:22;11110:53;:::i;:::-;11100:63;;11055:118;11212:2;11238:53;11283:7;11274:6;11263:9;11259:22;11238:53;:::i;:::-;11228:63;;11183:118;11368:2;11357:9;11353:18;11340:32;11399:18;11391:6;11388:30;11385:117;;;11421:79;;:::i;:::-;11385:117;11526:62;11580:7;11571:6;11560:9;11556:22;11526:62;:::i;:::-;11516:72;;11311:287;10662:943;;;;;;;:::o;11611:323::-;11667:6;11716:2;11704:9;11695:7;11691:23;11687:32;11684:119;;;11722:79;;:::i;:::-;11684:119;11842:1;11867:50;11909:7;11900:6;11889:9;11885:22;11867:50;:::i;:::-;11857:60;;11813:114;11611:323;;;;:::o;11940:474::-;12008:6;12016;12065:2;12053:9;12044:7;12040:23;12036:32;12033:119;;;12071:79;;:::i;:::-;12033:119;12191:1;12216:53;12261:7;12252:6;12241:9;12237:22;12216:53;:::i;:::-;12206:63;;12162:117;12318:2;12344:53;12389:7;12380:6;12369:9;12365:22;12344:53;:::i;:::-;12334:63;;12289:118;11940:474;;;;;:::o;12420:180::-;12468:77;12465:1;12458:88;12565:4;12562:1;12555:15;12589:4;12586:1;12579:15;12606:320;12650:6;12687:1;12681:4;12677:12;12667:22;;12734:1;12728:4;12724:12;12755:18;12745:81;;12811:4;12803:6;12799:17;12789:27;;12745:81;12873:2;12865:6;12862:14;12842:18;12839:38;12836:84;;12892:18;;:::i;:::-;12836:84;12657:269;12606:320;;;:::o;12932:220::-;13072:34;13068:1;13060:6;13056:14;13049:58;13141:3;13136:2;13128:6;13124:15;13117:28;12932:220;:::o;13158:366::-;13300:3;13321:67;13385:2;13380:3;13321:67;:::i;:::-;13314:74;;13397:93;13486:3;13397:93;:::i;:::-;13515:2;13510:3;13506:12;13499:19;;13158:366;;;:::o;13530:419::-;13696:4;13734:2;13723:9;13719:18;13711:26;;13783:9;13777:4;13773:20;13769:1;13758:9;13754:17;13747:47;13811:131;13937:4;13811:131;:::i;:::-;13803:139;;13530:419;;;:::o;13955:248::-;14095:34;14091:1;14083:6;14079:14;14072:58;14164:31;14159:2;14151:6;14147:15;14140:56;13955:248;:::o;14209:366::-;14351:3;14372:67;14436:2;14431:3;14372:67;:::i;:::-;14365:74;;14448:93;14537:3;14448:93;:::i;:::-;14566:2;14561:3;14557:12;14550:19;;14209:366;;;:::o;14581:419::-;14747:4;14785:2;14774:9;14770:18;14762:26;;14834:9;14828:4;14824:20;14820:1;14809:9;14805:17;14798:47;14862:131;14988:4;14862:131;:::i;:::-;14854:139;;14581:419;;;:::o;15006:232::-;15146:34;15142:1;15134:6;15130:14;15123:58;15215:15;15210:2;15202:6;15198:15;15191:40;15006:232;:::o;15244:366::-;15386:3;15407:67;15471:2;15466:3;15407:67;:::i;:::-;15400:74;;15483:93;15572:3;15483:93;:::i;:::-;15601:2;15596:3;15592:12;15585:19;;15244:366;;;:::o;15616:419::-;15782:4;15820:2;15809:9;15805:18;15797:26;;15869:9;15863:4;15859:20;15855:1;15844:9;15840:17;15833:47;15897:131;16023:4;15897:131;:::i;:::-;15889:139;;15616:419;;;:::o;16041:171::-;16181:23;16177:1;16169:6;16165:14;16158:47;16041:171;:::o;16218:366::-;16360:3;16381:67;16445:2;16440:3;16381:67;:::i;:::-;16374:74;;16457:93;16546:3;16457:93;:::i;:::-;16575:2;16570:3;16566:12;16559:19;;16218:366;;;:::o;16590:419::-;16756:4;16794:2;16783:9;16779:18;16771:26;;16843:9;16837:4;16833:20;16829:1;16818:9;16814:17;16807:47;16871:131;16997:4;16871:131;:::i;:::-;16863:139;;16590:419;;;:::o;17015:143::-;17072:5;17103:6;17097:13;17088:22;;17119:33;17146:5;17119:33;:::i;:::-;17015:143;;;;:::o;17164:351::-;17234:6;17283:2;17271:9;17262:7;17258:23;17254:32;17251:119;;;17289:79;;:::i;:::-;17251:119;17409:1;17434:64;17490:7;17481:6;17470:9;17466:22;17434:64;:::i;:::-;17424:74;;17380:128;17164:351;;;;:::o;17521:163::-;17661:15;17657:1;17649:6;17645:14;17638:39;17521:163;:::o;17690:366::-;17832:3;17853:67;17917:2;17912:3;17853:67;:::i;:::-;17846:74;;17929:93;18018:3;17929:93;:::i;:::-;18047:2;18042:3;18038:12;18031:19;;17690:366;;;:::o;18062:419::-;18228:4;18266:2;18255:9;18251:18;18243:26;;18315:9;18309:4;18305:20;18301:1;18290:9;18286:17;18279:47;18343:131;18469:4;18343:131;:::i;:::-;18335:139;;18062:419;;;:::o;18487:161::-;18627:13;18623:1;18615:6;18611:14;18604:37;18487:161;:::o;18654:366::-;18796:3;18817:67;18881:2;18876:3;18817:67;:::i;:::-;18810:74;;18893:93;18982:3;18893:93;:::i;:::-;19011:2;19006:3;19002:12;18995:19;;18654:366;;;:::o;19026:419::-;19192:4;19230:2;19219:9;19215:18;19207:26;;19279:9;19273:4;19269:20;19265:1;19254:9;19250:17;19243:47;19307:131;19433:4;19307:131;:::i;:::-;19299:139;;19026:419;;;:::o;19451:180::-;19499:77;19496:1;19489:88;19596:4;19593:1;19586:15;19620:4;19617:1;19610:15;19637:194;19677:4;19697:20;19715:1;19697:20;:::i;:::-;19692:25;;19731:20;19749:1;19731:20;:::i;:::-;19726:25;;19775:1;19772;19768:9;19760:17;;19799:1;19793:4;19790:11;19787:37;;;19804:18;;:::i;:::-;19787:37;19637:194;;;;:::o;19837:162::-;19977:14;19973:1;19965:6;19961:14;19954:38;19837:162;:::o;20005:366::-;20147:3;20168:67;20232:2;20227:3;20168:67;:::i;:::-;20161:74;;20244:93;20333:3;20244:93;:::i;:::-;20362:2;20357:3;20353:12;20346:19;;20005:366;;;:::o;20377:419::-;20543:4;20581:2;20570:9;20566:18;20558:26;;20630:9;20624:4;20620:20;20616:1;20605:9;20601:17;20594:47;20658:131;20784:4;20658:131;:::i;:::-;20650:139;;20377:419;;;:::o;20802:141::-;20851:4;20874:3;20866:11;;20897:3;20894:1;20887:14;20931:4;20928:1;20918:18;20910:26;;20802:141;;;:::o;20949:93::-;20986:6;21033:2;21028;21021:5;21017:14;21013:23;21003:33;;20949:93;;;:::o;21048:107::-;21092:8;21142:5;21136:4;21132:16;21111:37;;21048:107;;;;:::o;21161:393::-;21230:6;21280:1;21268:10;21264:18;21303:97;21333:66;21322:9;21303:97;:::i;:::-;21421:39;21451:8;21440:9;21421:39;:::i;:::-;21409:51;;21493:4;21489:9;21482:5;21478:21;21469:30;;21542:4;21532:8;21528:19;21521:5;21518:30;21508:40;;21237:317;;21161:393;;;;;:::o;21560:60::-;21588:3;21609:5;21602:12;;21560:60;;;:::o;21626:142::-;21676:9;21709:53;21727:34;21736:24;21754:5;21736:24;:::i;:::-;21727:34;:::i;:::-;21709:53;:::i;:::-;21696:66;;21626:142;;;:::o;21774:75::-;21817:3;21838:5;21831:12;;21774:75;;;:::o;21855:269::-;21965:39;21996:7;21965:39;:::i;:::-;22026:91;22075:41;22099:16;22075:41;:::i;:::-;22067:6;22060:4;22054:11;22026:91;:::i;:::-;22020:4;22013:105;21931:193;21855:269;;;:::o;22130:73::-;22175:3;22130:73;:::o;22209:189::-;22286:32;;:::i;:::-;22327:65;22385:6;22377;22371:4;22327:65;:::i;:::-;22262:136;22209:189;;:::o;22404:186::-;22464:120;22481:3;22474:5;22471:14;22464:120;;;22535:39;22572:1;22565:5;22535:39;:::i;:::-;22508:1;22501:5;22497:13;22488:22;;22464:120;;;22404:186;;:::o;22596:543::-;22697:2;22692:3;22689:11;22686:446;;;22731:38;22763:5;22731:38;:::i;:::-;22815:29;22833:10;22815:29;:::i;:::-;22805:8;22801:44;22998:2;22986:10;22983:18;22980:49;;;23019:8;23004:23;;22980:49;23042:80;23098:22;23116:3;23098:22;:::i;:::-;23088:8;23084:37;23071:11;23042:80;:::i;:::-;22701:431;;22686:446;22596:543;;;:::o;23145:117::-;23199:8;23249:5;23243:4;23239:16;23218:37;;23145:117;;;;:::o;23268:169::-;23312:6;23345:51;23393:1;23389:6;23381:5;23378:1;23374:13;23345:51;:::i;:::-;23341:56;23426:4;23420;23416:15;23406:25;;23319:118;23268:169;;;;:::o;23442:295::-;23518:4;23664:29;23689:3;23683:4;23664:29;:::i;:::-;23656:37;;23726:3;23723:1;23719:11;23713:4;23710:21;23702:29;;23442:295;;;;:::o;23742:1395::-;23859:37;23892:3;23859:37;:::i;:::-;23961:18;23953:6;23950:30;23947:56;;;23983:18;;:::i;:::-;23947:56;24027:38;24059:4;24053:11;24027:38;:::i;:::-;24112:67;24172:6;24164;24158:4;24112:67;:::i;:::-;24206:1;24230:4;24217:17;;24262:2;24254:6;24251:14;24279:1;24274:618;;;;24936:1;24953:6;24950:77;;;25002:9;24997:3;24993:19;24987:26;24978:35;;24950:77;25053:67;25113:6;25106:5;25053:67;:::i;:::-;25047:4;25040:81;24909:222;24244:887;;24274:618;24326:4;24322:9;24314:6;24310:22;24360:37;24392:4;24360:37;:::i;:::-;24419:1;24433:208;24447:7;24444:1;24441:14;24433:208;;;24526:9;24521:3;24517:19;24511:26;24503:6;24496:42;24577:1;24569:6;24565:14;24555:24;;24624:2;24613:9;24609:18;24596:31;;24470:4;24467:1;24463:12;24458:17;;24433:208;;;24669:6;24660:7;24657:19;24654:179;;;24727:9;24722:3;24718:19;24712:26;24770:48;24812:4;24804:6;24800:17;24789:9;24770:48;:::i;:::-;24762:6;24755:64;24677:156;24654:179;24879:1;24875;24867:6;24863:14;24859:22;24853:4;24846:36;24281:611;;;24244:887;;23834:1303;;;23742:1395;;:::o;25143:174::-;25283:26;25279:1;25271:6;25267:14;25260:50;25143:174;:::o;25323:366::-;25465:3;25486:67;25550:2;25545:3;25486:67;:::i;:::-;25479:74;;25562:93;25651:3;25562:93;:::i;:::-;25680:2;25675:3;25671:12;25664:19;;25323:366;;;:::o;25695:419::-;25861:4;25899:2;25888:9;25884:18;25876:26;;25948:9;25942:4;25938:20;25934:1;25923:9;25919:17;25912:47;25976:131;26102:4;25976:131;:::i;:::-;25968:139;;25695:419;;;:::o;26120:228::-;26260:34;26256:1;26248:6;26244:14;26237:58;26329:11;26324:2;26316:6;26312:15;26305:36;26120:228;:::o;26354:366::-;26496:3;26517:67;26581:2;26576:3;26517:67;:::i;:::-;26510:74;;26593:93;26682:3;26593:93;:::i;:::-;26711:2;26706:3;26702:12;26695:19;;26354:366;;;:::o;26726:419::-;26892:4;26930:2;26919:9;26915:18;26907:26;;26979:9;26973:4;26969:20;26965:1;26954:9;26950:17;26943:47;27007:131;27133:4;27007:131;:::i;:::-;26999:139;;26726:419;;;:::o;27151:177::-;27291:29;27287:1;27279:6;27275:14;27268:53;27151:177;:::o;27334:366::-;27476:3;27497:67;27561:2;27556:3;27497:67;:::i;:::-;27490:74;;27573:93;27662:3;27573:93;:::i;:::-;27691:2;27686:3;27682:12;27675:19;;27334:366;;;:::o;27706:419::-;27872:4;27910:2;27899:9;27895:18;27887:26;;27959:9;27953:4;27949:20;27945:1;27934:9;27930:17;27923:47;27987:131;28113:4;27987:131;:::i;:::-;27979:139;;27706:419;;;:::o;28131:148::-;28233:11;28270:3;28255:18;;28131:148;;;;:::o;28285:390::-;28391:3;28419:39;28452:5;28419:39;:::i;:::-;28474:89;28556:6;28551:3;28474:89;:::i;:::-;28467:96;;28572:65;28630:6;28625:3;28618:4;28611:5;28607:16;28572:65;:::i;:::-;28662:6;28657:3;28653:16;28646:23;;28395:280;28285:390;;;;:::o;28705:874::-;28808:3;28845:5;28839:12;28874:36;28900:9;28874:36;:::i;:::-;28926:89;29008:6;29003:3;28926:89;:::i;:::-;28919:96;;29046:1;29035:9;29031:17;29062:1;29057:166;;;;29237:1;29232:341;;;;29024:549;;29057:166;29141:4;29137:9;29126;29122:25;29117:3;29110:38;29203:6;29196:14;29189:22;29181:6;29177:35;29172:3;29168:45;29161:52;;29057:166;;29232:341;29299:38;29331:5;29299:38;:::i;:::-;29359:1;29373:154;29387:6;29384:1;29381:13;29373:154;;;29461:7;29455:14;29451:1;29446:3;29442:11;29435:35;29511:1;29502:7;29498:15;29487:26;;29409:4;29406:1;29402:12;29397:17;;29373:154;;;29556:6;29551:3;29547:16;29540:23;;29239:334;;29024:549;;28812:767;;28705:874;;;;:::o;29585:589::-;29810:3;29832:95;29923:3;29914:6;29832:95;:::i;:::-;29825:102;;29944:95;30035:3;30026:6;29944:95;:::i;:::-;29937:102;;30056:92;30144:3;30135:6;30056:92;:::i;:::-;30049:99;;30165:3;30158:10;;29585:589;;;;;;:::o;30180:225::-;30320:34;30316:1;30308:6;30304:14;30297:58;30389:8;30384:2;30376:6;30372:15;30365:33;30180:225;:::o;30411:366::-;30553:3;30574:67;30638:2;30633:3;30574:67;:::i;:::-;30567:74;;30650:93;30739:3;30650:93;:::i;:::-;30768:2;30763:3;30759:12;30752:19;;30411:366;;;:::o;30783:419::-;30949:4;30987:2;30976:9;30972:18;30964:26;;31036:9;31030:4;31026:20;31022:1;31011:9;31007:17;31000:47;31064:131;31190:4;31064:131;:::i;:::-;31056:139;;30783:419;;;:::o;31208:224::-;31348:34;31344:1;31336:6;31332:14;31325:58;31417:7;31412:2;31404:6;31400:15;31393:32;31208:224;:::o;31438:366::-;31580:3;31601:67;31665:2;31660:3;31601:67;:::i;:::-;31594:74;;31677:93;31766:3;31677:93;:::i;:::-;31795:2;31790:3;31786:12;31779:19;;31438:366;;;:::o;31810:419::-;31976:4;32014:2;32003:9;31999:18;31991:26;;32063:9;32057:4;32053:20;32049:1;32038:9;32034:17;32027:47;32091:131;32217:4;32091:131;:::i;:::-;32083:139;;31810:419;;;:::o;32235:223::-;32375:34;32371:1;32363:6;32359:14;32352:58;32444:6;32439:2;32431:6;32427:15;32420:31;32235:223;:::o;32464:366::-;32606:3;32627:67;32691:2;32686:3;32627:67;:::i;:::-;32620:74;;32703:93;32792:3;32703:93;:::i;:::-;32821:2;32816:3;32812:12;32805:19;;32464:366;;;:::o;32836:419::-;33002:4;33040:2;33029:9;33025:18;33017:26;;33089:9;33083:4;33079:20;33075:1;33064:9;33060:17;33053:47;33117:131;33243:4;33117:131;:::i;:::-;33109:139;;32836:419;;;:::o;33261:175::-;33401:27;33397:1;33389:6;33385:14;33378:51;33261:175;:::o;33442:366::-;33584:3;33605:67;33669:2;33664:3;33605:67;:::i;:::-;33598:74;;33681:93;33770:3;33681:93;:::i;:::-;33799:2;33794:3;33790:12;33783:19;;33442:366;;;:::o;33814:419::-;33980:4;34018:2;34007:9;34003:18;33995:26;;34067:9;34061:4;34057:20;34053:1;34042:9;34038:17;34031:47;34095:131;34221:4;34095:131;:::i;:::-;34087:139;;33814:419;;;:::o;34239:237::-;34379:34;34375:1;34367:6;34363:14;34356:58;34448:20;34443:2;34435:6;34431:15;34424:45;34239:237;:::o;34482:366::-;34624:3;34645:67;34709:2;34704:3;34645:67;:::i;:::-;34638:74;;34721:93;34810:3;34721:93;:::i;:::-;34839:2;34834:3;34830:12;34823:19;;34482:366;;;:::o;34854:419::-;35020:4;35058:2;35047:9;35043:18;35035:26;;35107:9;35101:4;35097:20;35093:1;35082:9;35078:17;35071:47;35135:131;35261:4;35135:131;:::i;:::-;35127:139;;34854:419;;;:::o;35279:233::-;35318:3;35341:24;35359:5;35341:24;:::i;:::-;35332:33;;35387:66;35380:5;35377:77;35374:103;;35457:18;;:::i;:::-;35374:103;35504:1;35497:5;35493:13;35486:20;;35279:233;;;:::o;35518:180::-;35566:77;35563:1;35556:88;35663:4;35660:1;35653:15;35687:4;35684:1;35677:15;35704:185;35744:1;35761:20;35779:1;35761:20;:::i;:::-;35756:25;;35795:20;35813:1;35795:20;:::i;:::-;35790:25;;35834:1;35824:35;;35839:18;;:::i;:::-;35824:35;35881:1;35878;35874:9;35869:14;;35704:185;;;;:::o;35895:176::-;35927:1;35944:20;35962:1;35944:20;:::i;:::-;35939:25;;35978:20;35996:1;35978:20;:::i;:::-;35973:25;;36017:1;36007:35;;36022:18;;:::i;:::-;36007:35;36063:1;36060;36056:9;36051:14;;35895:176;;;;:::o;36077:191::-;36117:3;36136:20;36154:1;36136:20;:::i;:::-;36131:25;;36170:20;36188:1;36170:20;:::i;:::-;36165:25;;36213:1;36210;36206:9;36199:16;;36234:3;36231:1;36228:10;36225:36;;;36241:18;;:::i;:::-;36225:36;36077:191;;;;:::o;36274:180::-;36322:77;36319:1;36312:88;36419:4;36416:1;36409:15;36443:4;36440:1;36433:15;36460:98;36511:6;36545:5;36539:12;36529:22;;36460:98;;;:::o;36564:168::-;36647:11;36681:6;36676:3;36669:19;36721:4;36716:3;36712:14;36697:29;;36564:168;;;;:::o;36738:373::-;36824:3;36852:38;36884:5;36852:38;:::i;:::-;36906:70;36969:6;36964:3;36906:70;:::i;:::-;36899:77;;36985:65;37043:6;37038:3;37031:4;37024:5;37020:16;36985:65;:::i;:::-;37075:29;37097:6;37075:29;:::i;:::-;37070:3;37066:39;37059:46;;36828:283;36738:373;;;;:::o;37117:640::-;37312:4;37350:3;37339:9;37335:19;37327:27;;37364:71;37432:1;37421:9;37417:17;37408:6;37364:71;:::i;:::-;37445:72;37513:2;37502:9;37498:18;37489:6;37445:72;:::i;:::-;37527;37595:2;37584:9;37580:18;37571:6;37527:72;:::i;:::-;37646:9;37640:4;37636:20;37631:2;37620:9;37616:18;37609:48;37674:76;37745:4;37736:6;37674:76;:::i;:::-;37666:84;;37117:640;;;;;;;:::o;37763:141::-;37819:5;37850:6;37844:13;37835:22;;37866:32;37892:5;37866:32;:::i;:::-;37763:141;;;;:::o;37910:349::-;37979:6;38028:2;38016:9;38007:7;38003:23;37999:32;37996:119;;;38034:79;;:::i;:::-;37996:119;38154:1;38179:63;38234:7;38225:6;38214:9;38210:22;38179:63;:::i;:::-;38169:73;;38125:127;37910:349;;;;:::o;38265:182::-;38405:34;38401:1;38393:6;38389:14;38382:58;38265:182;:::o;38453:366::-;38595:3;38616:67;38680:2;38675:3;38616:67;:::i;:::-;38609:74;;38692:93;38781:3;38692:93;:::i;:::-;38810:2;38805:3;38801:12;38794:19;;38453:366;;;:::o;38825:419::-;38991:4;39029:2;39018:9;39014:18;39006:26;;39078:9;39072:4;39068:20;39064:1;39053:9;39049:17;39042:47;39106:131;39232:4;39106:131;:::i;:::-;39098:139;;38825:419;;;:::o;39250:178::-;39390:30;39386:1;39378:6;39374:14;39367:54;39250:178;:::o;39434:366::-;39576:3;39597:67;39661:2;39656:3;39597:67;:::i;:::-;39590:74;;39673:93;39762:3;39673:93;:::i;:::-;39791:2;39786:3;39782:12;39775:19;;39434:366;;;:::o;39806:419::-;39972:4;40010:2;39999:9;39995:18;39987:26;;40059:9;40053:4;40049:20;40045:1;40034:9;40030:17;40023:47;40087:131;40213:4;40087:131;:::i;:::-;40079:139;;39806:419;;;:::o
Swarm Source
ipfs://0bc8cd5f7f662cbf4991b39cedb9aee27ff8f0e1034c797aa6544ccf68b05a69
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.