ERC-721
NFT
Overview
Max Total Supply
777 F3W
Holders
457
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 F3WLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Forgotten
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-27 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol // 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; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; 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) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @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); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.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 functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721Receiver.sol // 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); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/Nft.sol // Amended by HashLips pragma solidity >=0.7.0 <0.9.0; contract Forgotten is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost = 0 ether; uint256 public maxSupply = 777; uint256 public maxMintAmountPerTx = 2; uint256 public maxByWallet = 3; bool public paused = true; bool public revealed = true; bool public isAllowListActive = false; mapping(address => uint8) private _allowList; mapping(address => uint256) public mintedByWallet; constructor() ERC721("Forgott3n Worlds", "F3W") { setHiddenMetadataUri("ipfs://__CID__/hidden.json"); } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "The contract is paused!"); require(_mintAmount + mintedByWallet[msg.sender] <= maxByWallet, "Exceed maxByWallet"); mintedByWallet[msg.sender] += _mintAmount; _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setMaxByWallet(uint256 _maxByWallet) public onlyOwner { maxByWallet = _maxByWallet; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setAllowListActive(bool _state) public onlyOwner { isAllowListActive = _state; } function setAllowList(address[] calldata addresses, uint8 numAllowedToMint) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { _allowList[addresses[i]] = numAllowedToMint; } } function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } function mintAllowList(uint8 numberOfTokens) public payable{ require(isAllowListActive, "Allow list is not active"); require(numberOfTokens <= _allowList[msg.sender], "Exceeded max available to purchase"); require(supply.current() + numberOfTokens <= maxSupply, "Purchase would exceed max tokens"); require(numberOfTokens + mintedByWallet[msg.sender] <= maxByWallet, "Exceed maxByWallet"); mintedByWallet[msg.sender] += numberOfTokens; _allowList[msg.sender] -= numberOfTokens; for (uint256 i = 0; i < numberOfTokens; i++) { supply.increment(); _safeMint(msg.sender, supply.current()); } } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAllowListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numberOfTokens","type":"uint8"}],"name":"mintAllowList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedByWallet","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"addresses","type":"address[]"},{"internalType":"uint8","name":"numAllowedToMint","type":"uint8"}],"name":"setAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setAllowListActive","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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxByWallet","type":"uint256"}],"name":"setMaxByWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200005192919062000375565b506000600b55610309600c556002600d556003600e556001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff021916908315150217905550348015620000c557600080fd5b506040518060400160405280601081526020017f466f72676f7474336e20576f726c6473000000000000000000000000000000008152506040518060400160405280600381526020017f463357000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014a92919062000375565b5080600190805190602001906200016392919062000375565b505050620001866200017a620001d260201b60201c565b620001da60201b60201c565b620001cc6040518060400160405280601a81526020017f697066733a2f2f5f5f4349445f5f2f68696464656e2e6a736f6e000000000000815250620002a060201b60201c565b6200050d565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002b0620001d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d66200034b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200032f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000326906200044c565b60405180910390fd5b80600a90805190602001906200034792919062000375565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000383906200047f565b90600052602060002090601f016020900481019282620003a75760008555620003f3565b82601f10620003c257805160ff1916838001178555620003f3565b82800160010185558215620003f3579182015b82811115620003f2578251825591602001919060010190620003d5565b5b50905062000402919062000406565b5090565b5b808211156200042157600081600090555060010162000407565b5090565b6000620004346020836200046e565b91506200044182620004e4565b602082019050919050565b60006020820190508181036000830152620004678162000425565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200049857607f821691505b60208210811415620004af57620004ae620004b5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614a3c806200051d6000396000f3fe60806040526004361061025c5760003560e01c80635c975abb11610144578063a22cb465116100b6578063d5abeb011161007a578063d5abeb01146108c3578063ddff5b1c146108ee578063e0a808531461090a578063e985e9c514610933578063efbd73f414610970578063f2fde38b146109995761025c565b8063a22cb465146107e0578063a45ba8e714610809578063b071401b14610834578063b88d4fde1461085d578063c87b56dd146108865761025c565b80637ec4a659116101085780637ec4a659146106f15780638295784d1461071a5780638da5cb5b1461074357806394354fd01461076e57806395d89b4114610799578063a0712d68146107c45761025c565b80635c975abb1461060a57806362b99ad4146106355780636352211e1461066057806370a082311461069d578063715018a6146106da5761025c565b806329fc6bae116101dd57806342842e0e116101a157806342842e0e146104fc578063438b63001461052557806344a0d68a146105625780634fdd43cb1461058b57806351830227146105b45780635503a0e8146105df5761025c565b806329fc6bae1461043d5780632e0674211461046857806334ecc70a146104915780633a73c58d146104bc5780633ccfd60b146104e55761025c565b806313faede61161022457806313faede61461036c57806316ba10e01461039757806316c38b3c146103c057806318160ddd146103e957806323b872dd146104145761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780630d7581111461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613611565b6109c2565b6040516102959190613cf3565b60405180910390f35b3480156102aa57600080fd5b506102b3610aa4565b6040516102c09190613d0e565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906136b4565b610b36565b6040516102fd9190613c6a565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613544565b610b7c565b005b34801561033b57600080fd5b50610356600480360381019061035191906133c1565b610c94565b6040516103639190613fd0565b60405180910390f35b34801561037857600080fd5b50610381610cac565b60405161038e9190613fd0565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b9919061366b565b610cb2565b005b3480156103cc57600080fd5b506103e760048036038101906103e291906135e4565b610d48565b005b3480156103f557600080fd5b506103fe610de1565b60405161040b9190613fd0565b60405180910390f35b34801561042057600080fd5b5061043b6004803603810190610436919061342e565b610df2565b005b34801561044957600080fd5b50610452610e52565b60405161045f9190613cf3565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906136b4565b610e65565b005b34801561049d57600080fd5b506104a6610eeb565b6040516104b39190613fd0565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de91906135e4565b610ef1565b005b3480156104f157600080fd5b506104fa610f8a565b005b34801561050857600080fd5b50610523600480360381019061051e919061342e565b611086565b005b34801561053157600080fd5b5061054c600480360381019061054791906133c1565b6110a6565b6040516105599190613cd1565b60405180910390f35b34801561056e57600080fd5b50610589600480360381019061058491906136b4565b6111b1565b005b34801561059757600080fd5b506105b260048036038101906105ad919061366b565b611237565b005b3480156105c057600080fd5b506105c96112cd565b6040516105d69190613cf3565b60405180910390f35b3480156105eb57600080fd5b506105f46112e0565b6040516106019190613d0e565b60405180910390f35b34801561061657600080fd5b5061061f61136e565b60405161062c9190613cf3565b60405180910390f35b34801561064157600080fd5b5061064a611381565b6040516106579190613d0e565b60405180910390f35b34801561066c57600080fd5b50610687600480360381019061068291906136b4565b61140f565b6040516106949190613c6a565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf91906133c1565b6114c1565b6040516106d19190613fd0565b60405180910390f35b3480156106e657600080fd5b506106ef611579565b005b3480156106fd57600080fd5b506107186004803603810190610713919061366b565b611601565b005b34801561072657600080fd5b50610741600480360381019061073c9190613584565b611697565b005b34801561074f57600080fd5b506107586117b9565b6040516107659190613c6a565b60405180910390f35b34801561077a57600080fd5b506107836117e3565b6040516107909190613fd0565b60405180910390f35b3480156107a557600080fd5b506107ae6117e9565b6040516107bb9190613d0e565b60405180910390f35b6107de60048036038101906107d991906136b4565b61187b565b005b3480156107ec57600080fd5b5061080760048036038101906108029190613504565b611a69565b005b34801561081557600080fd5b5061081e611a7f565b60405161082b9190613d0e565b60405180910390f35b34801561084057600080fd5b5061085b600480360381019061085691906136b4565b611b0d565b005b34801561086957600080fd5b50610884600480360381019061087f9190613481565b611b93565b005b34801561089257600080fd5b506108ad60048036038101906108a891906136b4565b611bf5565b6040516108ba9190613d0e565b60405180910390f35b3480156108cf57600080fd5b506108d8611d4e565b6040516108e59190613fd0565b60405180910390f35b61090860048036038101906109039190613721565b611d54565b005b34801561091657600080fd5b50610931600480360381019061092c91906135e4565b612034565b005b34801561093f57600080fd5b5061095a600480360381019061095591906133ee565b6120cd565b6040516109679190613cf3565b60405180910390f35b34801561097c57600080fd5b50610997600480360381019061099291906136e1565b612161565b005b3480156109a557600080fd5b506109c060048036038101906109bb91906133c1565b612297565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a9d5750610a9c8261238f565b5b9050919050565b606060008054610ab3906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610adf906142c0565b8015610b2c5780601f10610b0157610100808354040283529160200191610b2c565b820191906000526020600020905b815481529060010190602001808311610b0f57829003601f168201915b5050505050905090565b6000610b41826123f9565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b878261140f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90613f30565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c17612444565b73ffffffffffffffffffffffffffffffffffffffff161480610c465750610c4581610c40612444565b6120cd565b5b610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90613e70565b60405180910390fd5b610c8f838361244c565b505050565b60116020528060005260406000206000915090505481565b600b5481565b610cba612444565b73ffffffffffffffffffffffffffffffffffffffff16610cd86117b9565b73ffffffffffffffffffffffffffffffffffffffff1614610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613eb0565b60405180910390fd5b8060099080519060200190610d4492919061316a565b5050565b610d50612444565b73ffffffffffffffffffffffffffffffffffffffff16610d6e6117b9565b73ffffffffffffffffffffffffffffffffffffffff1614610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613eb0565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000610ded6007612505565b905090565b610e03610dfd612444565b82612513565b610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613fb0565b60405180910390fd5b610e4d8383836125a8565b505050565b600f60029054906101000a900460ff1681565b610e6d612444565b73ffffffffffffffffffffffffffffffffffffffff16610e8b6117b9565b73ffffffffffffffffffffffffffffffffffffffff1614610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890613eb0565b60405180910390fd5b80600e8190555050565b600e5481565b610ef9612444565b73ffffffffffffffffffffffffffffffffffffffff16610f176117b9565b73ffffffffffffffffffffffffffffffffffffffff1614610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6490613eb0565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b610f92612444565b73ffffffffffffffffffffffffffffffffffffffff16610fb06117b9565b73ffffffffffffffffffffffffffffffffffffffff1614611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613eb0565b60405180910390fd5b60006110106117b9565b73ffffffffffffffffffffffffffffffffffffffff164760405161103390613c55565b60006040518083038185875af1925050503d8060008114611070576040519150601f19603f3d011682016040523d82523d6000602084013e611075565b606091505b505090508061108357600080fd5b50565b6110a183838360405180602001604052806000815250611b93565b505050565b606060006110b3836114c1565b905060008167ffffffffffffffff8111156110d1576110d0614459565b5b6040519080825280602002602001820160405280156110ff5781602001602082028036833780820191505090505b50905060006001905060005b838110801561111c5750600c548211155b156111a557600061112c8361140f565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561119157828483815181106111765761117561442a565b5b602002602001018181525050818061118d90614323565b9250505b828061119c90614323565b9350505061110b565b82945050505050919050565b6111b9612444565b73ffffffffffffffffffffffffffffffffffffffff166111d76117b9565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490613eb0565b60405180910390fd5b80600b8190555050565b61123f612444565b73ffffffffffffffffffffffffffffffffffffffff1661125d6117b9565b73ffffffffffffffffffffffffffffffffffffffff16146112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90613eb0565b60405180910390fd5b80600a90805190602001906112c992919061316a565b5050565b600f60019054906101000a900460ff1681565b600980546112ed906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611319906142c0565b80156113665780601f1061133b57610100808354040283529160200191611366565b820191906000526020600020905b81548152906001019060200180831161134957829003601f168201915b505050505081565b600f60009054906101000a900460ff1681565b6008805461138e906142c0565b80601f01602080910402602001604051908101604052809291908181526020018280546113ba906142c0565b80156114075780601f106113dc57610100808354040283529160200191611407565b820191906000526020600020905b8154815290600101906020018083116113ea57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114af90613f10565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152990613e50565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611581612444565b73ffffffffffffffffffffffffffffffffffffffff1661159f6117b9565b73ffffffffffffffffffffffffffffffffffffffff16146115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90613eb0565b60405180910390fd5b6115ff600061280f565b565b611609612444565b73ffffffffffffffffffffffffffffffffffffffff166116276117b9565b73ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613eb0565b60405180910390fd5b806008908051906020019061169392919061316a565b5050565b61169f612444565b73ffffffffffffffffffffffffffffffffffffffff166116bd6117b9565b73ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90613eb0565b60405180910390fd5b60005b838390508110156117b35781601060008686858181106117395761173861442a565b5b905060200201602081019061174e91906133c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806117ab90614323565b915050611716565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b6060600180546117f8906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611824906142c0565b80156118715780601f1061184657610100808354040283529160200191611871565b820191906000526020600020905b81548152906001019060200180831161185457829003601f168201915b5050505050905090565b8060008111801561188e5750600d548111155b6118cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c490613df0565b60405180910390fd5b600c54816118db6007612505565b6118e5919061410e565b1115611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d90613f70565b60405180910390fd5b600f60009054906101000a900460ff1615611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90613ed0565b60405180910390fd5b600e54601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836119c4919061410e565b1115611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90613d30565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a54919061410e565b92505081905550611a6533836128d5565b5050565b611a7b611a74612444565b8383612915565b5050565b600a8054611a8c906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab8906142c0565b8015611b055780601f10611ada57610100808354040283529160200191611b05565b820191906000526020600020905b815481529060010190602001808311611ae857829003601f168201915b505050505081565b611b15612444565b73ffffffffffffffffffffffffffffffffffffffff16611b336117b9565b73ffffffffffffffffffffffffffffffffffffffff1614611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8090613eb0565b60405180910390fd5b80600d8190555050565b611ba4611b9e612444565b83612513565b611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90613fb0565b60405180910390fd5b611bef84848484612a82565b50505050565b6060611c0082612ade565b611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3690613ef0565b60405180910390fd5b60001515600f60019054906101000a900460ff1615151415611ced57600a8054611c68906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611c94906142c0565b8015611ce15780601f10611cb657610100808354040283529160200191611ce1565b820191906000526020600020905b815481529060010190602001808311611cc457829003601f168201915b50505050509050611d49565b6000611cf7612b4a565b90506000815111611d175760405180602001604052806000815250611d45565b80611d2184612bdc565b6009604051602001611d3593929190613c24565b6040516020818303038152906040525b9150505b919050565b600c5481565b600f60029054906101000a900460ff16611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613f90565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff168160ff161115611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613f50565b60405180910390fd5b600c548160ff16611e496007612505565b611e53919061410e565b1115611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b90613d90565b60405180910390fd5b600e54601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548260ff16611ee5919061410e565b1115611f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1d90613d30565b60405180910390fd5b8060ff16601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f78919061410e565b9250508190555080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611fda91906141c9565b92506101000a81548160ff021916908360ff16021790555060005b8160ff168110156120305761200a6007612d3d565b61201d336120186007612505565b612d53565b808061202890614323565b915050611ff5565b5050565b61203c612444565b73ffffffffffffffffffffffffffffffffffffffff1661205a6117b9565b73ffffffffffffffffffffffffffffffffffffffff16146120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a790613eb0565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000811180156121745750600d548111155b6121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90613df0565b60405180910390fd5b600c54816121c16007612505565b6121cb919061410e565b111561220c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220390613f70565b60405180910390fd5b612214612444565b73ffffffffffffffffffffffffffffffffffffffff166122326117b9565b73ffffffffffffffffffffffffffffffffffffffff1614612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f90613eb0565b60405180910390fd5b61229282846128d5565b505050565b61229f612444565b73ffffffffffffffffffffffffffffffffffffffff166122bd6117b9565b73ffffffffffffffffffffffffffffffffffffffff1614612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a90613eb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90613d70565b60405180910390fd5b61238c8161280f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61240281612ade565b612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890613f10565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124bf8361140f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60008061251f8361140f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612561575061256081856120cd565b5b8061259f57508373ffffffffffffffffffffffffffffffffffffffff1661258784610b36565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125c88261140f565b73ffffffffffffffffffffffffffffffffffffffff161461261e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261590613db0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561268e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268590613e10565b60405180910390fd5b612699838383612d71565b6126a460008261244c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126f49190614195565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461274b919061410e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461280a838383612d76565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612910576128ea6007612d3d565b6128fd836128f86007612505565b612d53565b808061290890614323565b9150506128d8565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b90613e30565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a759190613cf3565b60405180910390a3505050565b612a8d8484846125a8565b612a9984848484612d7b565b612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf90613d50565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054612b59906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054612b85906142c0565b8015612bd25780601f10612ba757610100808354040283529160200191612bd2565b820191906000526020600020905b815481529060010190602001808311612bb557829003601f168201915b5050505050905090565b60606000821415612c24576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d38565b600082905060005b60008214612c56578080612c3f90614323565b915050600a82612c4f9190614164565b9150612c2c565b60008167ffffffffffffffff811115612c7257612c71614459565b5b6040519080825280601f01601f191660200182016040528015612ca45781602001600182028036833780820191505090505b5090505b60008514612d3157600182612cbd9190614195565b9150600a85612ccc919061436c565b6030612cd8919061410e565b60f81b818381518110612cee57612ced61442a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d2a9190614164565b9450612ca8565b8093505050505b919050565b6001816000016000828254019250508190555050565b612d6d828260405180602001604052806000815250612f12565b5050565b505050565b505050565b6000612d9c8473ffffffffffffffffffffffffffffffffffffffff16612f6d565b15612f05578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dc5612444565b8786866040518563ffffffff1660e01b8152600401612de79493929190613c85565b602060405180830381600087803b158015612e0157600080fd5b505af1925050508015612e3257506040513d601f19601f82011682018060405250810190612e2f919061363e565b60015b612eb5573d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b50600081511415612ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea490613d50565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f0a565b600190505b949350505050565b612f1c8383612f90565b612f296000848484612d7b565b612f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5f90613d50565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff790613e90565b60405180910390fd5b61300981612ade565b15613049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304090613dd0565b60405180910390fd5b61305560008383612d71565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130a5919061410e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461316660008383612d76565b5050565b828054613176906142c0565b90600052602060002090601f01602090048101928261319857600085556131df565b82601f106131b157805160ff19168380011785556131df565b828001600101855582156131df579182015b828111156131de5782518255916020019190600101906131c3565b5b5090506131ec91906131f0565b5090565b5b808211156132095760008160009055506001016131f1565b5090565b600061322061321b84614010565b613feb565b90508281526020810184848401111561323c5761323b614497565b5b61324784828561427e565b509392505050565b600061326261325d84614041565b613feb565b90508281526020810184848401111561327e5761327d614497565b5b61328984828561427e565b509392505050565b6000813590506132a081614993565b92915050565b60008083601f8401126132bc576132bb61448d565b5b8235905067ffffffffffffffff8111156132d9576132d8614488565b5b6020830191508360208202830111156132f5576132f4614492565b5b9250929050565b60008135905061330b816149aa565b92915050565b600081359050613320816149c1565b92915050565b600081519050613335816149c1565b92915050565b600082601f8301126133505761334f61448d565b5b813561336084826020860161320d565b91505092915050565b600082601f83011261337e5761337d61448d565b5b813561338e84826020860161324f565b91505092915050565b6000813590506133a6816149d8565b92915050565b6000813590506133bb816149ef565b92915050565b6000602082840312156133d7576133d66144a1565b5b60006133e584828501613291565b91505092915050565b60008060408385031215613405576134046144a1565b5b600061341385828601613291565b925050602061342485828601613291565b9150509250929050565b600080600060608486031215613447576134466144a1565b5b600061345586828701613291565b935050602061346686828701613291565b925050604061347786828701613397565b9150509250925092565b6000806000806080858703121561349b5761349a6144a1565b5b60006134a987828801613291565b94505060206134ba87828801613291565b93505060406134cb87828801613397565b925050606085013567ffffffffffffffff8111156134ec576134eb61449c565b5b6134f88782880161333b565b91505092959194509250565b6000806040838503121561351b5761351a6144a1565b5b600061352985828601613291565b925050602061353a858286016132fc565b9150509250929050565b6000806040838503121561355b5761355a6144a1565b5b600061356985828601613291565b925050602061357a85828601613397565b9150509250929050565b60008060006040848603121561359d5761359c6144a1565b5b600084013567ffffffffffffffff8111156135bb576135ba61449c565b5b6135c7868287016132a6565b935093505060206135da868287016133ac565b9150509250925092565b6000602082840312156135fa576135f96144a1565b5b6000613608848285016132fc565b91505092915050565b600060208284031215613627576136266144a1565b5b600061363584828501613311565b91505092915050565b600060208284031215613654576136536144a1565b5b600061366284828501613326565b91505092915050565b600060208284031215613681576136806144a1565b5b600082013567ffffffffffffffff81111561369f5761369e61449c565b5b6136ab84828501613369565b91505092915050565b6000602082840312156136ca576136c96144a1565b5b60006136d884828501613397565b91505092915050565b600080604083850312156136f8576136f76144a1565b5b600061370685828601613397565b925050602061371785828601613291565b9150509250929050565b600060208284031215613737576137366144a1565b5b6000613745848285016133ac565b91505092915050565b600061375a8383613c06565b60208301905092915050565b61376f816141fd565b82525050565b600061378082614097565b61378a81856140c5565b935061379583614072565b8060005b838110156137c65781516137ad888261374e565b97506137b8836140b8565b925050600181019050613799565b5085935050505092915050565b6137dc8161420f565b82525050565b60006137ed826140a2565b6137f781856140d6565b935061380781856020860161428d565b613810816144a6565b840191505092915050565b6000613826826140ad565b61383081856140f2565b935061384081856020860161428d565b613849816144a6565b840191505092915050565b600061385f826140ad565b6138698185614103565b935061387981856020860161428d565b80840191505092915050565b60008154613892816142c0565b61389c8186614103565b945060018216600081146138b757600181146138c8576138fb565b60ff198316865281860193506138fb565b6138d185614082565b60005b838110156138f3578154818901526001820191506020810190506138d4565b838801955050505b50505092915050565b60006139116012836140f2565b915061391c826144b7565b602082019050919050565b60006139346032836140f2565b915061393f826144e0565b604082019050919050565b60006139576026836140f2565b91506139628261452f565b604082019050919050565b600061397a6020836140f2565b91506139858261457e565b602082019050919050565b600061399d6025836140f2565b91506139a8826145a7565b604082019050919050565b60006139c0601c836140f2565b91506139cb826145f6565b602082019050919050565b60006139e36014836140f2565b91506139ee8261461f565b602082019050919050565b6000613a066024836140f2565b9150613a1182614648565b604082019050919050565b6000613a296019836140f2565b9150613a3482614697565b602082019050919050565b6000613a4c6029836140f2565b9150613a57826146c0565b604082019050919050565b6000613a6f603e836140f2565b9150613a7a8261470f565b604082019050919050565b6000613a926020836140f2565b9150613a9d8261475e565b602082019050919050565b6000613ab56020836140f2565b9150613ac082614787565b602082019050919050565b6000613ad86017836140f2565b9150613ae3826147b0565b602082019050919050565b6000613afb602f836140f2565b9150613b06826147d9565b604082019050919050565b6000613b1e6018836140f2565b9150613b2982614828565b602082019050919050565b6000613b416021836140f2565b9150613b4c82614851565b604082019050919050565b6000613b646022836140f2565b9150613b6f826148a0565b604082019050919050565b6000613b876000836140e7565b9150613b92826148ef565b600082019050919050565b6000613baa6014836140f2565b9150613bb5826148f2565b602082019050919050565b6000613bcd6018836140f2565b9150613bd88261491b565b602082019050919050565b6000613bf0602e836140f2565b9150613bfb82614944565b604082019050919050565b613c0f81614267565b82525050565b613c1e81614267565b82525050565b6000613c308286613854565b9150613c3c8285613854565b9150613c488284613885565b9150819050949350505050565b6000613c6082613b7a565b9150819050919050565b6000602082019050613c7f6000830184613766565b92915050565b6000608082019050613c9a6000830187613766565b613ca76020830186613766565b613cb46040830185613c15565b8181036060830152613cc681846137e2565b905095945050505050565b60006020820190508181036000830152613ceb8184613775565b905092915050565b6000602082019050613d0860008301846137d3565b92915050565b60006020820190508181036000830152613d28818461381b565b905092915050565b60006020820190508181036000830152613d4981613904565b9050919050565b60006020820190508181036000830152613d6981613927565b9050919050565b60006020820190508181036000830152613d898161394a565b9050919050565b60006020820190508181036000830152613da98161396d565b9050919050565b60006020820190508181036000830152613dc981613990565b9050919050565b60006020820190508181036000830152613de9816139b3565b9050919050565b60006020820190508181036000830152613e09816139d6565b9050919050565b60006020820190508181036000830152613e29816139f9565b9050919050565b60006020820190508181036000830152613e4981613a1c565b9050919050565b60006020820190508181036000830152613e6981613a3f565b9050919050565b60006020820190508181036000830152613e8981613a62565b9050919050565b60006020820190508181036000830152613ea981613a85565b9050919050565b60006020820190508181036000830152613ec981613aa8565b9050919050565b60006020820190508181036000830152613ee981613acb565b9050919050565b60006020820190508181036000830152613f0981613aee565b9050919050565b60006020820190508181036000830152613f2981613b11565b9050919050565b60006020820190508181036000830152613f4981613b34565b9050919050565b60006020820190508181036000830152613f6981613b57565b9050919050565b60006020820190508181036000830152613f8981613b9d565b9050919050565b60006020820190508181036000830152613fa981613bc0565b9050919050565b60006020820190508181036000830152613fc981613be3565b9050919050565b6000602082019050613fe56000830184613c15565b92915050565b6000613ff5614006565b905061400182826142f2565b919050565b6000604051905090565b600067ffffffffffffffff82111561402b5761402a614459565b5b614034826144a6565b9050602081019050919050565b600067ffffffffffffffff82111561405c5761405b614459565b5b614065826144a6565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061411982614267565b915061412483614267565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141595761415861439d565b5b828201905092915050565b600061416f82614267565b915061417a83614267565b92508261418a576141896143cc565b5b828204905092915050565b60006141a082614267565b91506141ab83614267565b9250828210156141be576141bd61439d565b5b828203905092915050565b60006141d482614271565b91506141df83614271565b9250828210156141f2576141f161439d565b5b828203905092915050565b600061420882614247565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156142ab578082015181840152602081019050614290565b838111156142ba576000848401525b50505050565b600060028204905060018216806142d857607f821691505b602082108114156142ec576142eb6143fb565b5b50919050565b6142fb826144a6565b810181811067ffffffffffffffff8211171561431a57614319614459565b5b80604052505050565b600061432e82614267565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143615761436061439d565b5b600182019050919050565b600061437782614267565b915061438283614267565b925082614392576143916143cc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f457863656564206d6178427957616c6c65740000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e73600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f2070757263686160008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f416c6c6f77206c697374206973206e6f74206163746976650000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61499c816141fd565b81146149a757600080fd5b50565b6149b38161420f565b81146149be57600080fd5b50565b6149ca8161421b565b81146149d557600080fd5b50565b6149e181614267565b81146149ec57600080fd5b50565b6149f881614271565b8114614a0357600080fd5b5056fea26469706673582212209c71ef1d30d97486bd0bb397ba6e308ef5b1735df0f31223d480bb7f6ac82c6364736f6c63430008070033
Deployed Bytecode
0x60806040526004361061025c5760003560e01c80635c975abb11610144578063a22cb465116100b6578063d5abeb011161007a578063d5abeb01146108c3578063ddff5b1c146108ee578063e0a808531461090a578063e985e9c514610933578063efbd73f414610970578063f2fde38b146109995761025c565b8063a22cb465146107e0578063a45ba8e714610809578063b071401b14610834578063b88d4fde1461085d578063c87b56dd146108865761025c565b80637ec4a659116101085780637ec4a659146106f15780638295784d1461071a5780638da5cb5b1461074357806394354fd01461076e57806395d89b4114610799578063a0712d68146107c45761025c565b80635c975abb1461060a57806362b99ad4146106355780636352211e1461066057806370a082311461069d578063715018a6146106da5761025c565b806329fc6bae116101dd57806342842e0e116101a157806342842e0e146104fc578063438b63001461052557806344a0d68a146105625780634fdd43cb1461058b57806351830227146105b45780635503a0e8146105df5761025c565b806329fc6bae1461043d5780632e0674211461046857806334ecc70a146104915780633a73c58d146104bc5780633ccfd60b146104e55761025c565b806313faede61161022457806313faede61461036c57806316ba10e01461039757806316c38b3c146103c057806318160ddd146103e957806323b872dd146104145761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780630d7581111461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613611565b6109c2565b6040516102959190613cf3565b60405180910390f35b3480156102aa57600080fd5b506102b3610aa4565b6040516102c09190613d0e565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906136b4565b610b36565b6040516102fd9190613c6a565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613544565b610b7c565b005b34801561033b57600080fd5b50610356600480360381019061035191906133c1565b610c94565b6040516103639190613fd0565b60405180910390f35b34801561037857600080fd5b50610381610cac565b60405161038e9190613fd0565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b9919061366b565b610cb2565b005b3480156103cc57600080fd5b506103e760048036038101906103e291906135e4565b610d48565b005b3480156103f557600080fd5b506103fe610de1565b60405161040b9190613fd0565b60405180910390f35b34801561042057600080fd5b5061043b6004803603810190610436919061342e565b610df2565b005b34801561044957600080fd5b50610452610e52565b60405161045f9190613cf3565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906136b4565b610e65565b005b34801561049d57600080fd5b506104a6610eeb565b6040516104b39190613fd0565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de91906135e4565b610ef1565b005b3480156104f157600080fd5b506104fa610f8a565b005b34801561050857600080fd5b50610523600480360381019061051e919061342e565b611086565b005b34801561053157600080fd5b5061054c600480360381019061054791906133c1565b6110a6565b6040516105599190613cd1565b60405180910390f35b34801561056e57600080fd5b50610589600480360381019061058491906136b4565b6111b1565b005b34801561059757600080fd5b506105b260048036038101906105ad919061366b565b611237565b005b3480156105c057600080fd5b506105c96112cd565b6040516105d69190613cf3565b60405180910390f35b3480156105eb57600080fd5b506105f46112e0565b6040516106019190613d0e565b60405180910390f35b34801561061657600080fd5b5061061f61136e565b60405161062c9190613cf3565b60405180910390f35b34801561064157600080fd5b5061064a611381565b6040516106579190613d0e565b60405180910390f35b34801561066c57600080fd5b50610687600480360381019061068291906136b4565b61140f565b6040516106949190613c6a565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf91906133c1565b6114c1565b6040516106d19190613fd0565b60405180910390f35b3480156106e657600080fd5b506106ef611579565b005b3480156106fd57600080fd5b506107186004803603810190610713919061366b565b611601565b005b34801561072657600080fd5b50610741600480360381019061073c9190613584565b611697565b005b34801561074f57600080fd5b506107586117b9565b6040516107659190613c6a565b60405180910390f35b34801561077a57600080fd5b506107836117e3565b6040516107909190613fd0565b60405180910390f35b3480156107a557600080fd5b506107ae6117e9565b6040516107bb9190613d0e565b60405180910390f35b6107de60048036038101906107d991906136b4565b61187b565b005b3480156107ec57600080fd5b5061080760048036038101906108029190613504565b611a69565b005b34801561081557600080fd5b5061081e611a7f565b60405161082b9190613d0e565b60405180910390f35b34801561084057600080fd5b5061085b600480360381019061085691906136b4565b611b0d565b005b34801561086957600080fd5b50610884600480360381019061087f9190613481565b611b93565b005b34801561089257600080fd5b506108ad60048036038101906108a891906136b4565b611bf5565b6040516108ba9190613d0e565b60405180910390f35b3480156108cf57600080fd5b506108d8611d4e565b6040516108e59190613fd0565b60405180910390f35b61090860048036038101906109039190613721565b611d54565b005b34801561091657600080fd5b50610931600480360381019061092c91906135e4565b612034565b005b34801561093f57600080fd5b5061095a600480360381019061095591906133ee565b6120cd565b6040516109679190613cf3565b60405180910390f35b34801561097c57600080fd5b50610997600480360381019061099291906136e1565b612161565b005b3480156109a557600080fd5b506109c060048036038101906109bb91906133c1565b612297565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a9d5750610a9c8261238f565b5b9050919050565b606060008054610ab3906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610adf906142c0565b8015610b2c5780601f10610b0157610100808354040283529160200191610b2c565b820191906000526020600020905b815481529060010190602001808311610b0f57829003601f168201915b5050505050905090565b6000610b41826123f9565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b878261140f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90613f30565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c17612444565b73ffffffffffffffffffffffffffffffffffffffff161480610c465750610c4581610c40612444565b6120cd565b5b610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90613e70565b60405180910390fd5b610c8f838361244c565b505050565b60116020528060005260406000206000915090505481565b600b5481565b610cba612444565b73ffffffffffffffffffffffffffffffffffffffff16610cd86117b9565b73ffffffffffffffffffffffffffffffffffffffff1614610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613eb0565b60405180910390fd5b8060099080519060200190610d4492919061316a565b5050565b610d50612444565b73ffffffffffffffffffffffffffffffffffffffff16610d6e6117b9565b73ffffffffffffffffffffffffffffffffffffffff1614610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613eb0565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000610ded6007612505565b905090565b610e03610dfd612444565b82612513565b610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613fb0565b60405180910390fd5b610e4d8383836125a8565b505050565b600f60029054906101000a900460ff1681565b610e6d612444565b73ffffffffffffffffffffffffffffffffffffffff16610e8b6117b9565b73ffffffffffffffffffffffffffffffffffffffff1614610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890613eb0565b60405180910390fd5b80600e8190555050565b600e5481565b610ef9612444565b73ffffffffffffffffffffffffffffffffffffffff16610f176117b9565b73ffffffffffffffffffffffffffffffffffffffff1614610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6490613eb0565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b610f92612444565b73ffffffffffffffffffffffffffffffffffffffff16610fb06117b9565b73ffffffffffffffffffffffffffffffffffffffff1614611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613eb0565b60405180910390fd5b60006110106117b9565b73ffffffffffffffffffffffffffffffffffffffff164760405161103390613c55565b60006040518083038185875af1925050503d8060008114611070576040519150601f19603f3d011682016040523d82523d6000602084013e611075565b606091505b505090508061108357600080fd5b50565b6110a183838360405180602001604052806000815250611b93565b505050565b606060006110b3836114c1565b905060008167ffffffffffffffff8111156110d1576110d0614459565b5b6040519080825280602002602001820160405280156110ff5781602001602082028036833780820191505090505b50905060006001905060005b838110801561111c5750600c548211155b156111a557600061112c8361140f565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561119157828483815181106111765761117561442a565b5b602002602001018181525050818061118d90614323565b9250505b828061119c90614323565b9350505061110b565b82945050505050919050565b6111b9612444565b73ffffffffffffffffffffffffffffffffffffffff166111d76117b9565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490613eb0565b60405180910390fd5b80600b8190555050565b61123f612444565b73ffffffffffffffffffffffffffffffffffffffff1661125d6117b9565b73ffffffffffffffffffffffffffffffffffffffff16146112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90613eb0565b60405180910390fd5b80600a90805190602001906112c992919061316a565b5050565b600f60019054906101000a900460ff1681565b600980546112ed906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611319906142c0565b80156113665780601f1061133b57610100808354040283529160200191611366565b820191906000526020600020905b81548152906001019060200180831161134957829003601f168201915b505050505081565b600f60009054906101000a900460ff1681565b6008805461138e906142c0565b80601f01602080910402602001604051908101604052809291908181526020018280546113ba906142c0565b80156114075780601f106113dc57610100808354040283529160200191611407565b820191906000526020600020905b8154815290600101906020018083116113ea57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114af90613f10565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152990613e50565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611581612444565b73ffffffffffffffffffffffffffffffffffffffff1661159f6117b9565b73ffffffffffffffffffffffffffffffffffffffff16146115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90613eb0565b60405180910390fd5b6115ff600061280f565b565b611609612444565b73ffffffffffffffffffffffffffffffffffffffff166116276117b9565b73ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613eb0565b60405180910390fd5b806008908051906020019061169392919061316a565b5050565b61169f612444565b73ffffffffffffffffffffffffffffffffffffffff166116bd6117b9565b73ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90613eb0565b60405180910390fd5b60005b838390508110156117b35781601060008686858181106117395761173861442a565b5b905060200201602081019061174e91906133c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806117ab90614323565b915050611716565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b6060600180546117f8906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611824906142c0565b80156118715780601f1061184657610100808354040283529160200191611871565b820191906000526020600020905b81548152906001019060200180831161185457829003601f168201915b5050505050905090565b8060008111801561188e5750600d548111155b6118cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c490613df0565b60405180910390fd5b600c54816118db6007612505565b6118e5919061410e565b1115611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d90613f70565b60405180910390fd5b600f60009054906101000a900460ff1615611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90613ed0565b60405180910390fd5b600e54601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836119c4919061410e565b1115611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90613d30565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a54919061410e565b92505081905550611a6533836128d5565b5050565b611a7b611a74612444565b8383612915565b5050565b600a8054611a8c906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab8906142c0565b8015611b055780601f10611ada57610100808354040283529160200191611b05565b820191906000526020600020905b815481529060010190602001808311611ae857829003601f168201915b505050505081565b611b15612444565b73ffffffffffffffffffffffffffffffffffffffff16611b336117b9565b73ffffffffffffffffffffffffffffffffffffffff1614611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8090613eb0565b60405180910390fd5b80600d8190555050565b611ba4611b9e612444565b83612513565b611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90613fb0565b60405180910390fd5b611bef84848484612a82565b50505050565b6060611c0082612ade565b611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3690613ef0565b60405180910390fd5b60001515600f60019054906101000a900460ff1615151415611ced57600a8054611c68906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611c94906142c0565b8015611ce15780601f10611cb657610100808354040283529160200191611ce1565b820191906000526020600020905b815481529060010190602001808311611cc457829003601f168201915b50505050509050611d49565b6000611cf7612b4a565b90506000815111611d175760405180602001604052806000815250611d45565b80611d2184612bdc565b6009604051602001611d3593929190613c24565b6040516020818303038152906040525b9150505b919050565b600c5481565b600f60029054906101000a900460ff16611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90613f90565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff168160ff161115611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f90613f50565b60405180910390fd5b600c548160ff16611e496007612505565b611e53919061410e565b1115611e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8b90613d90565b60405180910390fd5b600e54601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548260ff16611ee5919061410e565b1115611f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1d90613d30565b60405180910390fd5b8060ff16601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f78919061410e565b9250508190555080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611fda91906141c9565b92506101000a81548160ff021916908360ff16021790555060005b8160ff168110156120305761200a6007612d3d565b61201d336120186007612505565b612d53565b808061202890614323565b915050611ff5565b5050565b61203c612444565b73ffffffffffffffffffffffffffffffffffffffff1661205a6117b9565b73ffffffffffffffffffffffffffffffffffffffff16146120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a790613eb0565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816000811180156121745750600d548111155b6121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90613df0565b60405180910390fd5b600c54816121c16007612505565b6121cb919061410e565b111561220c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220390613f70565b60405180910390fd5b612214612444565b73ffffffffffffffffffffffffffffffffffffffff166122326117b9565b73ffffffffffffffffffffffffffffffffffffffff1614612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f90613eb0565b60405180910390fd5b61229282846128d5565b505050565b61229f612444565b73ffffffffffffffffffffffffffffffffffffffff166122bd6117b9565b73ffffffffffffffffffffffffffffffffffffffff1614612313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230a90613eb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237a90613d70565b60405180910390fd5b61238c8161280f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61240281612ade565b612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890613f10565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124bf8361140f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60008061251f8361140f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612561575061256081856120cd565b5b8061259f57508373ffffffffffffffffffffffffffffffffffffffff1661258784610b36565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125c88261140f565b73ffffffffffffffffffffffffffffffffffffffff161461261e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261590613db0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561268e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268590613e10565b60405180910390fd5b612699838383612d71565b6126a460008261244c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126f49190614195565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461274b919061410e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461280a838383612d76565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612910576128ea6007612d3d565b6128fd836128f86007612505565b612d53565b808061290890614323565b9150506128d8565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297b90613e30565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a759190613cf3565b60405180910390a3505050565b612a8d8484846125a8565b612a9984848484612d7b565b612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf90613d50565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054612b59906142c0565b80601f0160208091040260200160405190810160405280929190818152602001828054612b85906142c0565b8015612bd25780601f10612ba757610100808354040283529160200191612bd2565b820191906000526020600020905b815481529060010190602001808311612bb557829003601f168201915b5050505050905090565b60606000821415612c24576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d38565b600082905060005b60008214612c56578080612c3f90614323565b915050600a82612c4f9190614164565b9150612c2c565b60008167ffffffffffffffff811115612c7257612c71614459565b5b6040519080825280601f01601f191660200182016040528015612ca45781602001600182028036833780820191505090505b5090505b60008514612d3157600182612cbd9190614195565b9150600a85612ccc919061436c565b6030612cd8919061410e565b60f81b818381518110612cee57612ced61442a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d2a9190614164565b9450612ca8565b8093505050505b919050565b6001816000016000828254019250508190555050565b612d6d828260405180602001604052806000815250612f12565b5050565b505050565b505050565b6000612d9c8473ffffffffffffffffffffffffffffffffffffffff16612f6d565b15612f05578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dc5612444565b8786866040518563ffffffff1660e01b8152600401612de79493929190613c85565b602060405180830381600087803b158015612e0157600080fd5b505af1925050508015612e3257506040513d601f19601f82011682018060405250810190612e2f919061363e565b60015b612eb5573d8060008114612e62576040519150601f19603f3d011682016040523d82523d6000602084013e612e67565b606091505b50600081511415612ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea490613d50565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f0a565b600190505b949350505050565b612f1c8383612f90565b612f296000848484612d7b565b612f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5f90613d50565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff790613e90565b60405180910390fd5b61300981612ade565b15613049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304090613dd0565b60405180910390fd5b61305560008383612d71565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130a5919061410e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461316660008383612d76565b5050565b828054613176906142c0565b90600052602060002090601f01602090048101928261319857600085556131df565b82601f106131b157805160ff19168380011785556131df565b828001600101855582156131df579182015b828111156131de5782518255916020019190600101906131c3565b5b5090506131ec91906131f0565b5090565b5b808211156132095760008160009055506001016131f1565b5090565b600061322061321b84614010565b613feb565b90508281526020810184848401111561323c5761323b614497565b5b61324784828561427e565b509392505050565b600061326261325d84614041565b613feb565b90508281526020810184848401111561327e5761327d614497565b5b61328984828561427e565b509392505050565b6000813590506132a081614993565b92915050565b60008083601f8401126132bc576132bb61448d565b5b8235905067ffffffffffffffff8111156132d9576132d8614488565b5b6020830191508360208202830111156132f5576132f4614492565b5b9250929050565b60008135905061330b816149aa565b92915050565b600081359050613320816149c1565b92915050565b600081519050613335816149c1565b92915050565b600082601f8301126133505761334f61448d565b5b813561336084826020860161320d565b91505092915050565b600082601f83011261337e5761337d61448d565b5b813561338e84826020860161324f565b91505092915050565b6000813590506133a6816149d8565b92915050565b6000813590506133bb816149ef565b92915050565b6000602082840312156133d7576133d66144a1565b5b60006133e584828501613291565b91505092915050565b60008060408385031215613405576134046144a1565b5b600061341385828601613291565b925050602061342485828601613291565b9150509250929050565b600080600060608486031215613447576134466144a1565b5b600061345586828701613291565b935050602061346686828701613291565b925050604061347786828701613397565b9150509250925092565b6000806000806080858703121561349b5761349a6144a1565b5b60006134a987828801613291565b94505060206134ba87828801613291565b93505060406134cb87828801613397565b925050606085013567ffffffffffffffff8111156134ec576134eb61449c565b5b6134f88782880161333b565b91505092959194509250565b6000806040838503121561351b5761351a6144a1565b5b600061352985828601613291565b925050602061353a858286016132fc565b9150509250929050565b6000806040838503121561355b5761355a6144a1565b5b600061356985828601613291565b925050602061357a85828601613397565b9150509250929050565b60008060006040848603121561359d5761359c6144a1565b5b600084013567ffffffffffffffff8111156135bb576135ba61449c565b5b6135c7868287016132a6565b935093505060206135da868287016133ac565b9150509250925092565b6000602082840312156135fa576135f96144a1565b5b6000613608848285016132fc565b91505092915050565b600060208284031215613627576136266144a1565b5b600061363584828501613311565b91505092915050565b600060208284031215613654576136536144a1565b5b600061366284828501613326565b91505092915050565b600060208284031215613681576136806144a1565b5b600082013567ffffffffffffffff81111561369f5761369e61449c565b5b6136ab84828501613369565b91505092915050565b6000602082840312156136ca576136c96144a1565b5b60006136d884828501613397565b91505092915050565b600080604083850312156136f8576136f76144a1565b5b600061370685828601613397565b925050602061371785828601613291565b9150509250929050565b600060208284031215613737576137366144a1565b5b6000613745848285016133ac565b91505092915050565b600061375a8383613c06565b60208301905092915050565b61376f816141fd565b82525050565b600061378082614097565b61378a81856140c5565b935061379583614072565b8060005b838110156137c65781516137ad888261374e565b97506137b8836140b8565b925050600181019050613799565b5085935050505092915050565b6137dc8161420f565b82525050565b60006137ed826140a2565b6137f781856140d6565b935061380781856020860161428d565b613810816144a6565b840191505092915050565b6000613826826140ad565b61383081856140f2565b935061384081856020860161428d565b613849816144a6565b840191505092915050565b600061385f826140ad565b6138698185614103565b935061387981856020860161428d565b80840191505092915050565b60008154613892816142c0565b61389c8186614103565b945060018216600081146138b757600181146138c8576138fb565b60ff198316865281860193506138fb565b6138d185614082565b60005b838110156138f3578154818901526001820191506020810190506138d4565b838801955050505b50505092915050565b60006139116012836140f2565b915061391c826144b7565b602082019050919050565b60006139346032836140f2565b915061393f826144e0565b604082019050919050565b60006139576026836140f2565b91506139628261452f565b604082019050919050565b600061397a6020836140f2565b91506139858261457e565b602082019050919050565b600061399d6025836140f2565b91506139a8826145a7565b604082019050919050565b60006139c0601c836140f2565b91506139cb826145f6565b602082019050919050565b60006139e36014836140f2565b91506139ee8261461f565b602082019050919050565b6000613a066024836140f2565b9150613a1182614648565b604082019050919050565b6000613a296019836140f2565b9150613a3482614697565b602082019050919050565b6000613a4c6029836140f2565b9150613a57826146c0565b604082019050919050565b6000613a6f603e836140f2565b9150613a7a8261470f565b604082019050919050565b6000613a926020836140f2565b9150613a9d8261475e565b602082019050919050565b6000613ab56020836140f2565b9150613ac082614787565b602082019050919050565b6000613ad86017836140f2565b9150613ae3826147b0565b602082019050919050565b6000613afb602f836140f2565b9150613b06826147d9565b604082019050919050565b6000613b1e6018836140f2565b9150613b2982614828565b602082019050919050565b6000613b416021836140f2565b9150613b4c82614851565b604082019050919050565b6000613b646022836140f2565b9150613b6f826148a0565b604082019050919050565b6000613b876000836140e7565b9150613b92826148ef565b600082019050919050565b6000613baa6014836140f2565b9150613bb5826148f2565b602082019050919050565b6000613bcd6018836140f2565b9150613bd88261491b565b602082019050919050565b6000613bf0602e836140f2565b9150613bfb82614944565b604082019050919050565b613c0f81614267565b82525050565b613c1e81614267565b82525050565b6000613c308286613854565b9150613c3c8285613854565b9150613c488284613885565b9150819050949350505050565b6000613c6082613b7a565b9150819050919050565b6000602082019050613c7f6000830184613766565b92915050565b6000608082019050613c9a6000830187613766565b613ca76020830186613766565b613cb46040830185613c15565b8181036060830152613cc681846137e2565b905095945050505050565b60006020820190508181036000830152613ceb8184613775565b905092915050565b6000602082019050613d0860008301846137d3565b92915050565b60006020820190508181036000830152613d28818461381b565b905092915050565b60006020820190508181036000830152613d4981613904565b9050919050565b60006020820190508181036000830152613d6981613927565b9050919050565b60006020820190508181036000830152613d898161394a565b9050919050565b60006020820190508181036000830152613da98161396d565b9050919050565b60006020820190508181036000830152613dc981613990565b9050919050565b60006020820190508181036000830152613de9816139b3565b9050919050565b60006020820190508181036000830152613e09816139d6565b9050919050565b60006020820190508181036000830152613e29816139f9565b9050919050565b60006020820190508181036000830152613e4981613a1c565b9050919050565b60006020820190508181036000830152613e6981613a3f565b9050919050565b60006020820190508181036000830152613e8981613a62565b9050919050565b60006020820190508181036000830152613ea981613a85565b9050919050565b60006020820190508181036000830152613ec981613aa8565b9050919050565b60006020820190508181036000830152613ee981613acb565b9050919050565b60006020820190508181036000830152613f0981613aee565b9050919050565b60006020820190508181036000830152613f2981613b11565b9050919050565b60006020820190508181036000830152613f4981613b34565b9050919050565b60006020820190508181036000830152613f6981613b57565b9050919050565b60006020820190508181036000830152613f8981613b9d565b9050919050565b60006020820190508181036000830152613fa981613bc0565b9050919050565b60006020820190508181036000830152613fc981613be3565b9050919050565b6000602082019050613fe56000830184613c15565b92915050565b6000613ff5614006565b905061400182826142f2565b919050565b6000604051905090565b600067ffffffffffffffff82111561402b5761402a614459565b5b614034826144a6565b9050602081019050919050565b600067ffffffffffffffff82111561405c5761405b614459565b5b614065826144a6565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061411982614267565b915061412483614267565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141595761415861439d565b5b828201905092915050565b600061416f82614267565b915061417a83614267565b92508261418a576141896143cc565b5b828204905092915050565b60006141a082614267565b91506141ab83614267565b9250828210156141be576141bd61439d565b5b828203905092915050565b60006141d482614271565b91506141df83614271565b9250828210156141f2576141f161439d565b5b828203905092915050565b600061420882614247565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156142ab578082015181840152602081019050614290565b838111156142ba576000848401525b50505050565b600060028204905060018216806142d857607f821691505b602082108114156142ec576142eb6143fb565b5b50919050565b6142fb826144a6565b810181811067ffffffffffffffff8211171561431a57614319614459565b5b80604052505050565b600061432e82614267565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143615761436061439d565b5b600182019050919050565b600061437782614267565b915061438283614267565b925082614392576143916143cc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f457863656564206d6178427957616c6c65740000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e73600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f2070757263686160008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f416c6c6f77206c697374206973206e6f74206163746976650000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61499c816141fd565b81146149a757600080fd5b50565b6149b38161420f565b81146149be57600080fd5b50565b6149ca8161421b565b81146149d557600080fd5b50565b6149e181614267565b81146149ec57600080fd5b50565b6149f881614271565b8114614a0357600080fd5b5056fea26469706673582212209c71ef1d30d97486bd0bb397ba6e308ef5b1735df0f31223d480bb7f6ac82c6364736f6c63430008070033
Deployed Bytecode Sourcemap
39881:4993:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26600:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27527:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29040:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28557:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40443:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40140:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43238:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43344:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40856:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29740:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40350:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42886:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40251:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43427:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43752:137;;;;;;;;;;;;;:::i;:::-;;30147:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41440:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42670:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42994:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40318:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40062:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40288:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40034:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27238:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26969:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6765:103;;;;;;;;;;;;;:::i;:::-;;43132:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43530:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6114:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40209:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27696:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40951:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29283:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40100:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42750:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30403:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42081:496;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40174:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43895:656;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42583:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29509:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41279:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7023:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26600:305;26702:4;26754:25;26739:40;;;:11;:40;;;;:105;;;;26811:33;26796:48;;;:11;:48;;;;26739:105;:158;;;;26861:36;26885:11;26861:23;:36::i;:::-;26739:158;26719:178;;26600:305;;;:::o;27527:100::-;27581:13;27614:5;27607:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27527:100;:::o;29040:171::-;29116:7;29136:23;29151:7;29136:14;:23::i;:::-;29179:15;:24;29195:7;29179:24;;;;;;;;;;;;;;;;;;;;;29172:31;;29040:171;;;:::o;28557:417::-;28638:13;28654:23;28669:7;28654:14;:23::i;:::-;28638:39;;28702:5;28696:11;;:2;:11;;;;28688:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28796:5;28780:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28805:37;28822:5;28829:12;:10;:12::i;:::-;28805:16;:37::i;:::-;28780:62;28758:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28945:21;28954:2;28958:7;28945:8;:21::i;:::-;28627:347;28557:417;;:::o;40443:49::-;;;;;;;;;;;;;;;;;:::o;40140:29::-;;;;:::o;43238:100::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43322:10:::1;43310:9;:22;;;;;;;;;;;;:::i;:::-;;43238:100:::0;:::o;43344:77::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43409:6:::1;43400;;:15;;;;;;;;;;;;;;;;;;43344:77:::0;:::o;40856:89::-;40900:7;40923:16;:6;:14;:16::i;:::-;40916:23;;40856:89;:::o;29740:336::-;29935:41;29954:12;:10;:12::i;:::-;29968:7;29935:18;:41::i;:::-;29927:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30040:28;30050:4;30056:2;30060:7;30040:9;:28::i;:::-;29740:336;;;:::o;40350:37::-;;;;;;;;;;;;;:::o;42886:102::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42970:12:::1;42956:11;:26;;;;42886:102:::0;:::o;40251:30::-;;;;:::o;43427:97::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43512:6:::1;43492:17;;:26;;;;;;;;;;;;;;;;;;43427:97:::0;:::o;43752:137::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43797:7:::1;43818;:5;:7::i;:::-;43810:21;;43839;43810:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43796:69;;;43880:2;43872:11;;;::::0;::::1;;43789:100;43752:137::o:0;30147:185::-;30285:39;30302:4;30308:2;30312:7;30285:39;;;;;;;;;;;;:16;:39::i;:::-;30147:185;;;:::o;41440:635::-;41515:16;41543:23;41569:17;41579:6;41569:9;:17::i;:::-;41543:43;;41593:30;41640:15;41626:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41593:63;;41663:22;41688:1;41663:26;;41696:23;41732:309;41757:15;41739;:33;:64;;;;;41794:9;;41776:14;:27;;41739:64;41732:309;;;41814:25;41842:23;41850:14;41842:7;:23::i;:::-;41814:51;;41901:6;41880:27;;:17;:27;;;41876:131;;;41953:14;41920:13;41934:15;41920:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;41980:17;;;;;:::i;:::-;;;;41876:131;42017:16;;;;;:::i;:::-;;;;41805:236;41732:309;;;42056:13;42049:20;;;;;;41440:635;;;:::o;42670:74::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42733:5:::1;42726:4;:12;;;;42670:74:::0;:::o;42994:132::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43102:18:::1;43082:17;:38;;;;;;;;;;;;:::i;:::-;;42994:132:::0;:::o;40318:27::-;;;;;;;;;;;;;:::o;40062:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40288:25::-;;;;;;;;;;;;;:::o;40034:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27238:222::-;27310:7;27330:13;27346:7;:16;27354:7;27346:16;;;;;;;;;;;;;;;;;;;;;27330:32;;27398:1;27381:19;;:5;:19;;;;27373:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27447:5;27440:12;;;27238:222;;;:::o;26969:207::-;27041:7;27086:1;27069:19;;:5;:19;;;;27061:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27152:9;:16;27162:5;27152:16;;;;;;;;;;;;;;;;27145:23;;26969:207;;;:::o;6765:103::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6830:30:::1;6857:1;6830:18;:30::i;:::-;6765:103::o:0;43132:100::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43216:10:::1;43204:9;:22;;;;;;;;;;;;:::i;:::-;;43132:100:::0;:::o;43530:216::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43637:9:::1;43632:109;43656:9;;:16;;43652:1;:20;43632:109;;;43717:16;43690:10;:24;43701:9;;43711:1;43701:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43690:24;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;43674:3;;;;;:::i;:::-;;;;43632:109;;;;43530:216:::0;;;:::o;6114:87::-;6160:7;6187:6;;;;;;;;;;;6180:13;;6114:87;:::o;40209:37::-;;;;:::o;27696:104::-;27752:13;27785:7;27778:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27696:104;:::o;40951:320::-;41016:11;40690:1;40676:11;:15;:52;;;;;40710:18;;40695:11;:33;;40676:52;40668:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40802:9;;40787:11;40768:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;40760:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41045:6:::1;;;;;;;;;;;41044:7;41036:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41138:11;;41108:14;:26;41123:10;41108:26;;;;;;;;;;;;;;;;41094:11;:40;;;;:::i;:::-;:55;;41086:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;41211:11;41181:14;:26;41196:10;41181:26;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;41231:34;41241:10;41253:11;41231:9;:34::i;:::-;40951:320:::0;;:::o;29283:155::-;29378:52;29397:12;:10;:12::i;:::-;29411:8;29421;29378:18;:52::i;:::-;29283:155;;:::o;40100:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42750:130::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42855:19:::1;42834:18;:40;;;;42750:130:::0;:::o;30403:323::-;30577:41;30596:12;:10;:12::i;:::-;30610:7;30577:18;:41::i;:::-;30569:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30680:38;30694:4;30700:2;30704:7;30713:4;30680:13;:38::i;:::-;30403:323;;;;:::o;42081:496::-;42180:13;42221:17;42229:8;42221:7;:17::i;:::-;42205:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;42328:5;42316:17;;:8;;;;;;;;;;;:17;;;42312:64;;;42351:17;42344:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42312:64;42386:28;42417:10;:8;:10::i;:::-;42386:41;;42472:1;42447:14;42441:28;:32;:130;;;;;;;;;;;;;;;;;42509:14;42525:19;:8;:17;:19::i;:::-;42546:9;42492:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42441:130;42434:137;;;42081:496;;;;:::o;40174:30::-;;;;:::o;43895:656::-;43971:17;;;;;;;;;;;43963:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44050:10;:22;44061:10;44050:22;;;;;;;;;;;;;;;;;;;;;;;;;44032:40;;:14;:40;;;;44024:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44163:9;;44145:14;44126:33;;:16;:6;:14;:16::i;:::-;:33;;;;:::i;:::-;:46;;44118:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;44271:11;;44241:14;:26;44256:10;44241:26;;;;;;;;;;;;;;;;44224:14;:43;;;;;;:::i;:::-;:58;;44216:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;44344:14;44314:44;;:14;:26;44329:10;44314:26;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;44393:14;44367:10;:22;44378:10;44367:22;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44419:9;44414:132;44438:14;44434:18;;:1;:18;44414:132;;;44470:18;:6;:16;:18::i;:::-;44499:39;44509:10;44521:16;:6;:14;:16::i;:::-;44499:9;:39::i;:::-;44454:3;;;;;:::i;:::-;;;;44414:132;;;;43895:656;:::o;42583:81::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42652:6:::1;42641:8;;:17;;;;;;;;;;;;;;;;;;42583:81:::0;:::o;29509:164::-;29606:4;29630:18;:25;29649:5;29630:25;;;;;;;;;;;;;;;:35;29656:8;29630:35;;;;;;;;;;;;;;;;;;;;;;;;;29623:42;;29509:164;;;;:::o;41279:155::-;41365:11;40690:1;40676:11;:15;:52;;;;;40710:18;;40695:11;:33;;40676:52;40668:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40802:9;;40787:11;40768:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;40760:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6345:12:::1;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41395:33:::2;41405:9;41416:11;41395:9;:33::i;:::-;41279:155:::0;;;:::o;7023:201::-;6345:12;:10;:12::i;:::-;6334:23;;:7;:5;:7::i;:::-;:23;;;6326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7132:1:::1;7112:22;;:8;:22;;;;7104:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7188:28;7207:8;7188:18;:28::i;:::-;7023:201:::0;:::o;19183:157::-;19268:4;19307:25;19292:40;;;:11;:40;;;;19285:47;;19183:157;;;:::o;37015:135::-;37097:16;37105:7;37097;:16::i;:::-;37089:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37015:135;:::o;4785:98::-;4838:7;4865:10;4858:17;;4785:98;:::o;36294:174::-;36396:2;36369:15;:24;36385:7;36369:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36452:7;36448:2;36414:46;;36423:23;36438:7;36423:14;:23::i;:::-;36414:46;;;;;;;;;;;;36294:174;;:::o;925:114::-;990:7;1017;:14;;;1010:21;;925:114;;;:::o;32527:264::-;32620:4;32637:13;32653:23;32668:7;32653:14;:23::i;:::-;32637:39;;32706:5;32695:16;;:7;:16;;;:52;;;;32715:32;32732:5;32739:7;32715:16;:32::i;:::-;32695:52;:87;;;;32775:7;32751:31;;:20;32763:7;32751:11;:20::i;:::-;:31;;;32695:87;32687:96;;;32527:264;;;;:::o;35550:625::-;35709:4;35682:31;;:23;35697:7;35682:14;:23::i;:::-;:31;;;35674:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35788:1;35774:16;;:2;:16;;;;35766:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35844:39;35865:4;35871:2;35875:7;35844:20;:39::i;:::-;35948:29;35965:1;35969:7;35948:8;:29::i;:::-;36009:1;35990:9;:15;36000:4;35990:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36038:1;36021:9;:13;36031:2;36021:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36069:2;36050:7;:16;36058:7;36050:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36108:7;36104:2;36089:27;;36098:4;36089:27;;;;;;;;;;;;36129:38;36149:4;36155:2;36159:7;36129:19;:38::i;:::-;35550:625;;;:::o;7384:191::-;7458:16;7477:6;;;;;;;;;;;7458:25;;7503:8;7494:6;;:17;;;;;;;;;;;;;;;;;;7558:8;7527:40;;7548:8;7527:40;;;;;;;;;;;;7447:128;7384:191;:::o;44557:204::-;44637:9;44632:124;44656:11;44652:1;:15;44632:124;;;44683:18;:6;:16;:18::i;:::-;44710:38;44720:9;44731:16;:6;:14;:16::i;:::-;44710:9;:38::i;:::-;44669:3;;;;;:::i;:::-;;;;44632:124;;;;44557:204;;:::o;36611:315::-;36766:8;36757:17;;:5;:17;;;;36749:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36853:8;36815:18;:25;36834:5;36815:25;;;;;;;;;;;;;;;:35;36841:8;36815:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36899:8;36877:41;;36892:5;36877:41;;;36909:8;36877:41;;;;;;:::i;:::-;;;;;;;;36611:315;;;:::o;31607:313::-;31763:28;31773:4;31779:2;31783:7;31763:9;:28::i;:::-;31810:47;31833:4;31839:2;31843:7;31852:4;31810:22;:47::i;:::-;31802:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31607:313;;;;:::o;32233:127::-;32298:4;32350:1;32322:30;;:7;:16;32330:7;32322:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32315:37;;32233:127;;;:::o;44767:104::-;44827:13;44856:9;44849:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44767:104;:::o;1986:723::-;2042:13;2272:1;2263:5;:10;2259:53;;;2290:10;;;;;;;;;;;;;;;;;;;;;2259:53;2322:12;2337:5;2322:20;;2353:14;2378:78;2393:1;2385:4;:9;2378:78;;2411:8;;;;;:::i;:::-;;;;2442:2;2434:10;;;;;:::i;:::-;;;2378:78;;;2466:19;2498:6;2488:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2466:39;;2516:154;2532:1;2523:5;:10;2516:154;;2560:1;2550:11;;;;;:::i;:::-;;;2627:2;2619:5;:10;;;;:::i;:::-;2606:2;:24;;;;:::i;:::-;2593:39;;2576:6;2583;2576:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2656:2;2647:11;;;;;:::i;:::-;;;2516:154;;;2694:6;2680:21;;;;;1986:723;;;;:::o;1047:127::-;1154:1;1136:7;:14;;;:19;;;;;;;;;;;1047:127;:::o;33133:110::-;33209:26;33219:2;33223:7;33209:26;;;;;;;;;;;;:9;:26::i;:::-;33133:110;;:::o;39139:126::-;;;;:::o;39650:125::-;;;;:::o;37714:853::-;37868:4;37889:15;:2;:13;;;:15::i;:::-;37885:675;;;37941:2;37925:36;;;37962:12;:10;:12::i;:::-;37976:4;37982:7;37991:4;37925:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37921:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38183:1;38166:6;:13;:18;38162:328;;;38209:60;;;;;;;;;;:::i;:::-;;;;;;;;38162:328;38440:6;38434:13;38425:6;38421:2;38417:15;38410:38;37921:584;38057:41;;;38047:51;;;:6;:51;;;;38040:58;;;;;37885:675;38544:4;38537:11;;37714:853;;;;;;;:::o;33470:319::-;33599:18;33605:2;33609:7;33599:5;:18::i;:::-;33650:53;33681:1;33685:2;33689:7;33698:4;33650:22;:53::i;:::-;33628:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;33470:319;;;:::o;8868:326::-;8928:4;9185:1;9163:7;:19;;;:23;9156:30;;8868:326;;;:::o;34125:439::-;34219:1;34205:16;;:2;:16;;;;34197:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34278:16;34286:7;34278;:16::i;:::-;34277:17;34269:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34340:45;34369:1;34373:2;34377:7;34340:20;:45::i;:::-;34415:1;34398:9;:13;34408:2;34398:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34446:2;34427:7;:16;34435:7;34427:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34491:7;34487:2;34466:33;;34483:1;34466:33;;;;;;;;;;;;34512:44;34540:1;34544:2;34548:7;34512:19;:44::i;:::-;34125:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:135::-;2912:5;2950:6;2937:20;2928:29;;2966:31;2991:5;2966:31;:::i;:::-;2868:135;;;;:::o;3009:329::-;3068:6;3117:2;3105:9;3096:7;3092:23;3088:32;3085:119;;;3123:79;;:::i;:::-;3085:119;3243:1;3268:53;3313:7;3304:6;3293:9;3289:22;3268:53;:::i;:::-;3258:63;;3214:117;3009:329;;;;:::o;3344:474::-;3412:6;3420;3469:2;3457:9;3448:7;3444:23;3440:32;3437:119;;;3475:79;;:::i;:::-;3437:119;3595:1;3620:53;3665:7;3656:6;3645:9;3641:22;3620:53;:::i;:::-;3610:63;;3566:117;3722:2;3748:53;3793:7;3784:6;3773:9;3769:22;3748:53;:::i;:::-;3738:63;;3693:118;3344:474;;;;;:::o;3824:619::-;3901:6;3909;3917;3966:2;3954:9;3945:7;3941:23;3937:32;3934:119;;;3972:79;;:::i;:::-;3934:119;4092:1;4117:53;4162:7;4153:6;4142:9;4138:22;4117:53;:::i;:::-;4107:63;;4063:117;4219:2;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4190:118;4347:2;4373:53;4418:7;4409:6;4398:9;4394:22;4373:53;:::i;:::-;4363:63;;4318:118;3824:619;;;;;:::o;4449:943::-;4544:6;4552;4560;4568;4617:3;4605:9;4596:7;4592:23;4588:33;4585:120;;;4624:79;;:::i;:::-;4585:120;4744:1;4769:53;4814:7;4805:6;4794:9;4790:22;4769:53;:::i;:::-;4759:63;;4715:117;4871:2;4897:53;4942:7;4933:6;4922:9;4918:22;4897:53;:::i;:::-;4887:63;;4842:118;4999:2;5025:53;5070:7;5061:6;5050:9;5046:22;5025:53;:::i;:::-;5015:63;;4970:118;5155:2;5144:9;5140:18;5127:32;5186:18;5178:6;5175:30;5172:117;;;5208:79;;:::i;:::-;5172:117;5313:62;5367:7;5358:6;5347:9;5343:22;5313:62;:::i;:::-;5303:72;;5098:287;4449:943;;;;;;;:::o;5398:468::-;5463:6;5471;5520:2;5508:9;5499:7;5495:23;5491:32;5488:119;;;5526:79;;:::i;:::-;5488:119;5646:1;5671:53;5716:7;5707:6;5696:9;5692:22;5671:53;:::i;:::-;5661:63;;5617:117;5773:2;5799:50;5841:7;5832:6;5821:9;5817:22;5799:50;:::i;:::-;5789:60;;5744:115;5398:468;;;;;:::o;5872:474::-;5940:6;5948;5997:2;5985:9;5976:7;5972:23;5968:32;5965:119;;;6003:79;;:::i;:::-;5965:119;6123:1;6148:53;6193:7;6184:6;6173:9;6169:22;6148:53;:::i;:::-;6138:63;;6094:117;6250:2;6276:53;6321:7;6312:6;6301:9;6297:22;6276:53;:::i;:::-;6266:63;;6221:118;5872:474;;;;;:::o;6352:700::-;6445:6;6453;6461;6510:2;6498:9;6489:7;6485:23;6481:32;6478:119;;;6516:79;;:::i;:::-;6478:119;6664:1;6653:9;6649:17;6636:31;6694:18;6686:6;6683:30;6680:117;;;6716:79;;:::i;:::-;6680:117;6829:80;6901:7;6892:6;6881:9;6877:22;6829:80;:::i;:::-;6811:98;;;;6607:312;6958:2;6984:51;7027:7;7018:6;7007:9;7003:22;6984:51;:::i;:::-;6974:61;;6929:116;6352:700;;;;;:::o;7058:323::-;7114:6;7163:2;7151:9;7142:7;7138:23;7134:32;7131:119;;;7169:79;;:::i;:::-;7131:119;7289:1;7314:50;7356:7;7347:6;7336:9;7332:22;7314:50;:::i;:::-;7304:60;;7260:114;7058:323;;;;:::o;7387:327::-;7445:6;7494:2;7482:9;7473:7;7469:23;7465:32;7462:119;;;7500:79;;:::i;:::-;7462:119;7620:1;7645:52;7689:7;7680:6;7669:9;7665:22;7645:52;:::i;:::-;7635:62;;7591:116;7387:327;;;;:::o;7720:349::-;7789:6;7838:2;7826:9;7817:7;7813:23;7809:32;7806:119;;;7844:79;;:::i;:::-;7806:119;7964:1;7989:63;8044:7;8035:6;8024:9;8020:22;7989:63;:::i;:::-;7979:73;;7935:127;7720:349;;;;:::o;8075:509::-;8144:6;8193:2;8181:9;8172:7;8168:23;8164:32;8161:119;;;8199:79;;:::i;:::-;8161:119;8347:1;8336:9;8332:17;8319:31;8377:18;8369:6;8366:30;8363:117;;;8399:79;;:::i;:::-;8363:117;8504:63;8559:7;8550:6;8539:9;8535:22;8504:63;:::i;:::-;8494:73;;8290:287;8075:509;;;;:::o;8590:329::-;8649:6;8698:2;8686:9;8677:7;8673:23;8669:32;8666:119;;;8704:79;;:::i;:::-;8666:119;8824:1;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8795:117;8590:329;;;;:::o;8925:474::-;8993:6;9001;9050:2;9038:9;9029:7;9025:23;9021:32;9018:119;;;9056:79;;:::i;:::-;9018:119;9176:1;9201:53;9246:7;9237:6;9226:9;9222:22;9201:53;:::i;:::-;9191:63;;9147:117;9303:2;9329:53;9374:7;9365:6;9354:9;9350:22;9329:53;:::i;:::-;9319:63;;9274:118;8925:474;;;;;:::o;9405:325::-;9462:6;9511:2;9499:9;9490:7;9486:23;9482:32;9479:119;;;9517:79;;:::i;:::-;9479:119;9637:1;9662:51;9705:7;9696:6;9685:9;9681:22;9662:51;:::i;:::-;9652:61;;9608:115;9405:325;;;;:::o;9736:179::-;9805:10;9826:46;9868:3;9860:6;9826:46;:::i;:::-;9904:4;9899:3;9895:14;9881:28;;9736:179;;;;:::o;9921:118::-;10008:24;10026:5;10008:24;:::i;:::-;10003:3;9996:37;9921:118;;:::o;10075:732::-;10194:3;10223:54;10271:5;10223:54;:::i;:::-;10293:86;10372:6;10367:3;10293:86;:::i;:::-;10286:93;;10403:56;10453:5;10403:56;:::i;:::-;10482:7;10513:1;10498:284;10523:6;10520:1;10517:13;10498:284;;;10599:6;10593:13;10626:63;10685:3;10670:13;10626:63;:::i;:::-;10619:70;;10712:60;10765:6;10712:60;:::i;:::-;10702:70;;10558:224;10545:1;10542;10538:9;10533:14;;10498:284;;;10502:14;10798:3;10791:10;;10199:608;;;10075:732;;;;:::o;10813:109::-;10894:21;10909:5;10894:21;:::i;:::-;10889:3;10882:34;10813:109;;:::o;10928:360::-;11014:3;11042:38;11074:5;11042:38;:::i;:::-;11096:70;11159:6;11154:3;11096:70;:::i;:::-;11089:77;;11175:52;11220:6;11215:3;11208:4;11201:5;11197:16;11175:52;:::i;:::-;11252:29;11274:6;11252:29;:::i;:::-;11247:3;11243:39;11236:46;;11018:270;10928:360;;;;:::o;11294:364::-;11382:3;11410:39;11443:5;11410:39;:::i;:::-;11465:71;11529:6;11524:3;11465:71;:::i;:::-;11458:78;;11545:52;11590:6;11585:3;11578:4;11571:5;11567:16;11545:52;:::i;:::-;11622:29;11644:6;11622:29;:::i;:::-;11617:3;11613:39;11606:46;;11386:272;11294:364;;;;:::o;11664:377::-;11770:3;11798:39;11831:5;11798:39;:::i;:::-;11853:89;11935:6;11930:3;11853:89;:::i;:::-;11846:96;;11951:52;11996:6;11991:3;11984:4;11977:5;11973:16;11951:52;:::i;:::-;12028:6;12023:3;12019:16;12012:23;;11774:267;11664:377;;;;:::o;12071:845::-;12174:3;12211:5;12205:12;12240:36;12266:9;12240:36;:::i;:::-;12292:89;12374:6;12369:3;12292:89;:::i;:::-;12285:96;;12412:1;12401:9;12397:17;12428:1;12423:137;;;;12574:1;12569:341;;;;12390:520;;12423:137;12507:4;12503:9;12492;12488:25;12483:3;12476:38;12543:6;12538:3;12534:16;12527:23;;12423:137;;12569:341;12636:38;12668:5;12636:38;:::i;:::-;12696:1;12710:154;12724:6;12721:1;12718:13;12710:154;;;12798:7;12792:14;12788:1;12783:3;12779:11;12772:35;12848:1;12839:7;12835:15;12824:26;;12746:4;12743:1;12739:12;12734:17;;12710:154;;;12893:6;12888:3;12884:16;12877:23;;12576:334;;12390:520;;12178:738;;12071:845;;;;:::o;12922:366::-;13064:3;13085:67;13149:2;13144:3;13085:67;:::i;:::-;13078:74;;13161:93;13250:3;13161:93;:::i;:::-;13279:2;13274:3;13270:12;13263:19;;12922:366;;;:::o;13294:::-;13436:3;13457:67;13521:2;13516:3;13457:67;:::i;:::-;13450:74;;13533:93;13622:3;13533:93;:::i;:::-;13651:2;13646:3;13642:12;13635:19;;13294:366;;;:::o;13666:::-;13808:3;13829:67;13893:2;13888:3;13829:67;:::i;:::-;13822:74;;13905:93;13994:3;13905:93;:::i;:::-;14023:2;14018:3;14014:12;14007:19;;13666:366;;;:::o;14038:::-;14180:3;14201:67;14265:2;14260:3;14201:67;:::i;:::-;14194:74;;14277:93;14366:3;14277:93;:::i;:::-;14395:2;14390:3;14386:12;14379:19;;14038:366;;;:::o;14410:::-;14552:3;14573:67;14637:2;14632:3;14573:67;:::i;:::-;14566:74;;14649:93;14738:3;14649:93;:::i;:::-;14767:2;14762:3;14758:12;14751:19;;14410:366;;;:::o;14782:::-;14924:3;14945:67;15009:2;15004:3;14945:67;:::i;:::-;14938:74;;15021:93;15110:3;15021:93;:::i;:::-;15139:2;15134:3;15130:12;15123:19;;14782:366;;;:::o;15154:::-;15296:3;15317:67;15381:2;15376:3;15317:67;:::i;:::-;15310:74;;15393:93;15482:3;15393:93;:::i;:::-;15511:2;15506:3;15502:12;15495:19;;15154:366;;;:::o;15526:::-;15668:3;15689:67;15753:2;15748:3;15689:67;:::i;:::-;15682:74;;15765:93;15854:3;15765:93;:::i;:::-;15883:2;15878:3;15874:12;15867:19;;15526:366;;;:::o;15898:::-;16040:3;16061:67;16125:2;16120:3;16061:67;:::i;:::-;16054:74;;16137:93;16226:3;16137:93;:::i;:::-;16255:2;16250:3;16246:12;16239:19;;15898:366;;;:::o;16270:::-;16412:3;16433:67;16497:2;16492:3;16433:67;:::i;:::-;16426:74;;16509:93;16598:3;16509:93;:::i;:::-;16627:2;16622:3;16618:12;16611:19;;16270:366;;;:::o;16642:::-;16784:3;16805:67;16869:2;16864:3;16805:67;:::i;:::-;16798:74;;16881:93;16970:3;16881:93;:::i;:::-;16999:2;16994:3;16990:12;16983:19;;16642:366;;;:::o;17014:::-;17156:3;17177:67;17241:2;17236:3;17177:67;:::i;:::-;17170:74;;17253:93;17342:3;17253:93;:::i;:::-;17371:2;17366:3;17362:12;17355:19;;17014:366;;;:::o;17386:::-;17528:3;17549:67;17613:2;17608:3;17549:67;:::i;:::-;17542:74;;17625:93;17714:3;17625:93;:::i;:::-;17743:2;17738:3;17734:12;17727:19;;17386:366;;;:::o;17758:::-;17900:3;17921:67;17985:2;17980:3;17921:67;:::i;:::-;17914:74;;17997:93;18086:3;17997:93;:::i;:::-;18115:2;18110:3;18106:12;18099:19;;17758:366;;;:::o;18130:::-;18272:3;18293:67;18357:2;18352:3;18293:67;:::i;:::-;18286:74;;18369:93;18458:3;18369:93;:::i;:::-;18487:2;18482:3;18478:12;18471:19;;18130:366;;;:::o;18502:::-;18644:3;18665:67;18729:2;18724:3;18665:67;:::i;:::-;18658:74;;18741:93;18830:3;18741:93;:::i;:::-;18859:2;18854:3;18850:12;18843:19;;18502:366;;;:::o;18874:::-;19016:3;19037:67;19101:2;19096:3;19037:67;:::i;:::-;19030:74;;19113:93;19202:3;19113:93;:::i;:::-;19231:2;19226:3;19222:12;19215:19;;18874:366;;;:::o;19246:::-;19388:3;19409:67;19473:2;19468:3;19409:67;:::i;:::-;19402:74;;19485:93;19574:3;19485:93;:::i;:::-;19603:2;19598:3;19594:12;19587:19;;19246:366;;;:::o;19618:398::-;19777:3;19798:83;19879:1;19874:3;19798:83;:::i;:::-;19791:90;;19890:93;19979:3;19890:93;:::i;:::-;20008:1;20003:3;19999:11;19992:18;;19618:398;;;:::o;20022:366::-;20164:3;20185:67;20249:2;20244:3;20185:67;:::i;:::-;20178:74;;20261:93;20350:3;20261:93;:::i;:::-;20379:2;20374:3;20370:12;20363:19;;20022:366;;;:::o;20394:::-;20536:3;20557:67;20621:2;20616:3;20557:67;:::i;:::-;20550:74;;20633:93;20722:3;20633:93;:::i;:::-;20751:2;20746:3;20742:12;20735:19;;20394:366;;;:::o;20766:::-;20908:3;20929:67;20993:2;20988:3;20929:67;:::i;:::-;20922:74;;21005:93;21094:3;21005:93;:::i;:::-;21123:2;21118:3;21114:12;21107:19;;20766:366;;;:::o;21138:108::-;21215:24;21233:5;21215:24;:::i;:::-;21210:3;21203:37;21138:108;;:::o;21252:118::-;21339:24;21357:5;21339:24;:::i;:::-;21334:3;21327:37;21252:118;;:::o;21376:589::-;21601:3;21623:95;21714:3;21705:6;21623:95;:::i;:::-;21616:102;;21735:95;21826:3;21817:6;21735:95;:::i;:::-;21728:102;;21847:92;21935:3;21926:6;21847:92;:::i;:::-;21840:99;;21956:3;21949:10;;21376:589;;;;;;:::o;21971:379::-;22155:3;22177:147;22320:3;22177:147;:::i;:::-;22170:154;;22341:3;22334:10;;21971:379;;;:::o;22356:222::-;22449:4;22487:2;22476:9;22472:18;22464:26;;22500:71;22568:1;22557:9;22553:17;22544:6;22500:71;:::i;:::-;22356:222;;;;:::o;22584:640::-;22779:4;22817:3;22806:9;22802:19;22794:27;;22831:71;22899:1;22888:9;22884:17;22875:6;22831:71;:::i;:::-;22912:72;22980:2;22969:9;22965:18;22956:6;22912:72;:::i;:::-;22994;23062:2;23051:9;23047:18;23038:6;22994:72;:::i;:::-;23113:9;23107:4;23103:20;23098:2;23087:9;23083:18;23076:48;23141:76;23212:4;23203:6;23141:76;:::i;:::-;23133:84;;22584:640;;;;;;;:::o;23230:373::-;23373:4;23411:2;23400:9;23396:18;23388:26;;23460:9;23454:4;23450:20;23446:1;23435:9;23431:17;23424:47;23488:108;23591:4;23582:6;23488:108;:::i;:::-;23480:116;;23230:373;;;;:::o;23609:210::-;23696:4;23734:2;23723:9;23719:18;23711:26;;23747:65;23809:1;23798:9;23794:17;23785:6;23747:65;:::i;:::-;23609:210;;;;:::o;23825:313::-;23938:4;23976:2;23965:9;23961:18;23953:26;;24025:9;24019:4;24015:20;24011:1;24000:9;23996:17;23989:47;24053:78;24126:4;24117:6;24053:78;:::i;:::-;24045:86;;23825:313;;;;:::o;24144:419::-;24310:4;24348:2;24337:9;24333:18;24325:26;;24397:9;24391:4;24387:20;24383:1;24372:9;24368:17;24361:47;24425:131;24551:4;24425:131;:::i;:::-;24417:139;;24144:419;;;:::o;24569:::-;24735:4;24773:2;24762:9;24758:18;24750:26;;24822:9;24816:4;24812:20;24808:1;24797:9;24793:17;24786:47;24850:131;24976:4;24850:131;:::i;:::-;24842:139;;24569:419;;;:::o;24994:::-;25160:4;25198:2;25187:9;25183:18;25175:26;;25247:9;25241:4;25237:20;25233:1;25222:9;25218:17;25211:47;25275:131;25401:4;25275:131;:::i;:::-;25267:139;;24994:419;;;:::o;25419:::-;25585:4;25623:2;25612:9;25608:18;25600:26;;25672:9;25666:4;25662:20;25658:1;25647:9;25643:17;25636:47;25700:131;25826:4;25700:131;:::i;:::-;25692:139;;25419:419;;;:::o;25844:::-;26010:4;26048:2;26037:9;26033:18;26025:26;;26097:9;26091:4;26087:20;26083:1;26072:9;26068:17;26061:47;26125:131;26251:4;26125:131;:::i;:::-;26117:139;;25844:419;;;:::o;26269:::-;26435:4;26473:2;26462:9;26458:18;26450:26;;26522:9;26516:4;26512:20;26508:1;26497:9;26493:17;26486:47;26550:131;26676:4;26550:131;:::i;:::-;26542:139;;26269:419;;;:::o;26694:::-;26860:4;26898:2;26887:9;26883:18;26875:26;;26947:9;26941:4;26937:20;26933:1;26922:9;26918:17;26911:47;26975:131;27101:4;26975:131;:::i;:::-;26967:139;;26694:419;;;:::o;27119:::-;27285:4;27323:2;27312:9;27308:18;27300:26;;27372:9;27366:4;27362:20;27358:1;27347:9;27343:17;27336:47;27400:131;27526:4;27400:131;:::i;:::-;27392:139;;27119:419;;;:::o;27544:::-;27710:4;27748:2;27737:9;27733:18;27725:26;;27797:9;27791:4;27787:20;27783:1;27772:9;27768:17;27761:47;27825:131;27951:4;27825:131;:::i;:::-;27817:139;;27544:419;;;:::o;27969:::-;28135:4;28173:2;28162:9;28158:18;28150:26;;28222:9;28216:4;28212:20;28208:1;28197:9;28193:17;28186:47;28250:131;28376:4;28250:131;:::i;:::-;28242:139;;27969:419;;;:::o;28394:::-;28560:4;28598:2;28587:9;28583:18;28575:26;;28647:9;28641:4;28637:20;28633:1;28622:9;28618:17;28611:47;28675:131;28801:4;28675:131;:::i;:::-;28667:139;;28394:419;;;:::o;28819:::-;28985:4;29023:2;29012:9;29008:18;29000:26;;29072:9;29066:4;29062:20;29058:1;29047:9;29043:17;29036:47;29100:131;29226:4;29100:131;:::i;:::-;29092:139;;28819:419;;;:::o;29244:::-;29410:4;29448:2;29437:9;29433:18;29425:26;;29497:9;29491:4;29487:20;29483:1;29472:9;29468:17;29461:47;29525:131;29651:4;29525:131;:::i;:::-;29517:139;;29244:419;;;:::o;29669:::-;29835:4;29873:2;29862:9;29858:18;29850:26;;29922:9;29916:4;29912:20;29908:1;29897:9;29893:17;29886:47;29950:131;30076:4;29950:131;:::i;:::-;29942:139;;29669:419;;;:::o;30094:::-;30260:4;30298:2;30287:9;30283:18;30275:26;;30347:9;30341:4;30337:20;30333:1;30322:9;30318:17;30311:47;30375:131;30501:4;30375:131;:::i;:::-;30367:139;;30094:419;;;:::o;30519:::-;30685:4;30723:2;30712:9;30708:18;30700:26;;30772:9;30766:4;30762:20;30758:1;30747:9;30743:17;30736:47;30800:131;30926:4;30800:131;:::i;:::-;30792:139;;30519:419;;;:::o;30944:::-;31110:4;31148:2;31137:9;31133:18;31125:26;;31197:9;31191:4;31187:20;31183:1;31172:9;31168:17;31161:47;31225:131;31351:4;31225:131;:::i;:::-;31217:139;;30944:419;;;:::o;31369:::-;31535:4;31573:2;31562:9;31558:18;31550:26;;31622:9;31616:4;31612:20;31608:1;31597:9;31593:17;31586:47;31650:131;31776:4;31650:131;:::i;:::-;31642:139;;31369:419;;;:::o;31794:::-;31960:4;31998:2;31987:9;31983:18;31975:26;;32047:9;32041:4;32037:20;32033:1;32022:9;32018:17;32011:47;32075:131;32201:4;32075:131;:::i;:::-;32067:139;;31794:419;;;:::o;32219:::-;32385:4;32423:2;32412:9;32408:18;32400:26;;32472:9;32466:4;32462:20;32458:1;32447:9;32443:17;32436:47;32500:131;32626:4;32500:131;:::i;:::-;32492:139;;32219:419;;;:::o;32644:::-;32810:4;32848:2;32837:9;32833:18;32825:26;;32897:9;32891:4;32887:20;32883:1;32872:9;32868:17;32861:47;32925:131;33051:4;32925:131;:::i;:::-;32917:139;;32644:419;;;:::o;33069:222::-;33162:4;33200:2;33189:9;33185:18;33177:26;;33213:71;33281:1;33270:9;33266:17;33257:6;33213:71;:::i;:::-;33069:222;;;;:::o;33297:129::-;33331:6;33358:20;;:::i;:::-;33348:30;;33387:33;33415:4;33407:6;33387:33;:::i;:::-;33297:129;;;:::o;33432:75::-;33465:6;33498:2;33492:9;33482:19;;33432:75;:::o;33513:307::-;33574:4;33664:18;33656:6;33653:30;33650:56;;;33686:18;;:::i;:::-;33650:56;33724:29;33746:6;33724:29;:::i;:::-;33716:37;;33808:4;33802;33798:15;33790:23;;33513:307;;;:::o;33826:308::-;33888:4;33978:18;33970:6;33967:30;33964:56;;;34000:18;;:::i;:::-;33964:56;34038:29;34060:6;34038:29;:::i;:::-;34030:37;;34122:4;34116;34112:15;34104:23;;33826:308;;;:::o;34140:132::-;34207:4;34230:3;34222:11;;34260:4;34255:3;34251:14;34243:22;;34140:132;;;:::o;34278:141::-;34327:4;34350:3;34342:11;;34373:3;34370:1;34363:14;34407:4;34404:1;34394:18;34386:26;;34278:141;;;:::o;34425:114::-;34492:6;34526:5;34520:12;34510:22;;34425:114;;;:::o;34545:98::-;34596:6;34630:5;34624:12;34614:22;;34545:98;;;:::o;34649:99::-;34701:6;34735:5;34729:12;34719:22;;34649:99;;;:::o;34754:113::-;34824:4;34856;34851:3;34847:14;34839:22;;34754:113;;;:::o;34873:184::-;34972:11;35006:6;35001:3;34994:19;35046:4;35041:3;35037:14;35022:29;;34873:184;;;;:::o;35063:168::-;35146:11;35180:6;35175:3;35168:19;35220:4;35215:3;35211:14;35196:29;;35063:168;;;;:::o;35237:147::-;35338:11;35375:3;35360:18;;35237:147;;;;:::o;35390:169::-;35474:11;35508:6;35503:3;35496:19;35548:4;35543:3;35539:14;35524:29;;35390:169;;;;:::o;35565:148::-;35667:11;35704:3;35689:18;;35565:148;;;;:::o;35719:305::-;35759:3;35778:20;35796:1;35778:20;:::i;:::-;35773:25;;35812:20;35830:1;35812:20;:::i;:::-;35807:25;;35966:1;35898:66;35894:74;35891:1;35888:81;35885:107;;;35972:18;;:::i;:::-;35885:107;36016:1;36013;36009:9;36002:16;;35719:305;;;;:::o;36030:185::-;36070:1;36087:20;36105:1;36087:20;:::i;:::-;36082:25;;36121:20;36139:1;36121:20;:::i;:::-;36116:25;;36160:1;36150:35;;36165:18;;:::i;:::-;36150:35;36207:1;36204;36200:9;36195:14;;36030:185;;;;:::o;36221:191::-;36261:4;36281:20;36299:1;36281:20;:::i;:::-;36276:25;;36315:20;36333:1;36315:20;:::i;:::-;36310:25;;36354:1;36351;36348:8;36345:34;;;36359:18;;:::i;:::-;36345:34;36404:1;36401;36397:9;36389:17;;36221:191;;;;:::o;36418:185::-;36456:4;36476:18;36492:1;36476:18;:::i;:::-;36471:23;;36508:18;36524:1;36508:18;:::i;:::-;36503:23;;36545:1;36542;36539:8;36536:34;;;36550:18;;:::i;:::-;36536:34;36595:1;36592;36588:9;36580:17;;36418:185;;;;:::o;36609:96::-;36646:7;36675:24;36693:5;36675:24;:::i;:::-;36664:35;;36609:96;;;:::o;36711:90::-;36745:7;36788:5;36781:13;36774:21;36763:32;;36711:90;;;:::o;36807:149::-;36843:7;36883:66;36876:5;36872:78;36861:89;;36807:149;;;:::o;36962:126::-;36999:7;37039:42;37032:5;37028:54;37017:65;;36962:126;;;:::o;37094:77::-;37131:7;37160:5;37149:16;;37094:77;;;:::o;37177:86::-;37212:7;37252:4;37245:5;37241:16;37230:27;;37177:86;;;:::o;37269:154::-;37353:6;37348:3;37343;37330:30;37415:1;37406:6;37401:3;37397:16;37390:27;37269:154;;;:::o;37429:307::-;37497:1;37507:113;37521:6;37518:1;37515:13;37507:113;;;37606:1;37601:3;37597:11;37591:18;37587:1;37582:3;37578:11;37571:39;37543:2;37540:1;37536:10;37531:15;;37507:113;;;37638:6;37635:1;37632:13;37629:101;;;37718:1;37709:6;37704:3;37700:16;37693:27;37629:101;37478:258;37429:307;;;:::o;37742:320::-;37786:6;37823:1;37817:4;37813:12;37803:22;;37870:1;37864:4;37860:12;37891:18;37881:81;;37947:4;37939:6;37935:17;37925:27;;37881:81;38009:2;38001:6;37998:14;37978:18;37975:38;37972:84;;;38028:18;;:::i;:::-;37972:84;37793:269;37742:320;;;:::o;38068:281::-;38151:27;38173:4;38151:27;:::i;:::-;38143:6;38139:40;38281:6;38269:10;38266:22;38245:18;38233:10;38230:34;38227:62;38224:88;;;38292:18;;:::i;:::-;38224:88;38332:10;38328:2;38321:22;38111:238;38068:281;;:::o;38355:233::-;38394:3;38417:24;38435:5;38417:24;:::i;:::-;38408:33;;38463:66;38456:5;38453:77;38450:103;;;38533:18;;:::i;:::-;38450:103;38580:1;38573:5;38569:13;38562:20;;38355:233;;;:::o;38594:176::-;38626:1;38643:20;38661:1;38643:20;:::i;:::-;38638:25;;38677:20;38695:1;38677:20;:::i;:::-;38672:25;;38716:1;38706:35;;38721:18;;:::i;:::-;38706:35;38762:1;38759;38755:9;38750:14;;38594:176;;;;:::o;38776:180::-;38824:77;38821:1;38814:88;38921:4;38918:1;38911:15;38945:4;38942:1;38935:15;38962:180;39010:77;39007:1;39000:88;39107:4;39104:1;39097:15;39131:4;39128:1;39121:15;39148:180;39196:77;39193:1;39186:88;39293:4;39290:1;39283:15;39317:4;39314:1;39307:15;39334:180;39382:77;39379:1;39372:88;39479:4;39476:1;39469:15;39503:4;39500:1;39493:15;39520:180;39568:77;39565:1;39558:88;39665:4;39662:1;39655:15;39689:4;39686:1;39679:15;39706:117;39815:1;39812;39805:12;39829:117;39938:1;39935;39928:12;39952:117;40061:1;40058;40051:12;40075:117;40184:1;40181;40174:12;40198:117;40307:1;40304;40297:12;40321:117;40430:1;40427;40420:12;40444:102;40485:6;40536:2;40532:7;40527:2;40520:5;40516:14;40512:28;40502:38;;40444:102;;;:::o;40552:168::-;40692:20;40688:1;40680:6;40676:14;40669:44;40552:168;:::o;40726:237::-;40866:34;40862:1;40854:6;40850:14;40843:58;40935:20;40930:2;40922:6;40918:15;40911:45;40726:237;:::o;40969:225::-;41109:34;41105:1;41097:6;41093:14;41086:58;41178:8;41173:2;41165:6;41161:15;41154:33;40969:225;:::o;41200:182::-;41340:34;41336:1;41328:6;41324:14;41317:58;41200:182;:::o;41388:224::-;41528:34;41524:1;41516:6;41512:14;41505:58;41597:7;41592:2;41584:6;41580:15;41573:32;41388:224;:::o;41618:178::-;41758:30;41754:1;41746:6;41742:14;41735:54;41618:178;:::o;41802:170::-;41942:22;41938:1;41930:6;41926:14;41919:46;41802:170;:::o;41978:223::-;42118:34;42114:1;42106:6;42102:14;42095:58;42187:6;42182:2;42174:6;42170:15;42163:31;41978:223;:::o;42207:175::-;42347:27;42343:1;42335:6;42331:14;42324:51;42207:175;:::o;42388:228::-;42528:34;42524:1;42516:6;42512:14;42505:58;42597:11;42592:2;42584:6;42580:15;42573:36;42388:228;:::o;42622:249::-;42762:34;42758:1;42750:6;42746:14;42739:58;42831:32;42826:2;42818:6;42814:15;42807:57;42622:249;:::o;42877:182::-;43017:34;43013:1;43005:6;43001:14;42994:58;42877:182;:::o;43065:::-;43205:34;43201:1;43193:6;43189:14;43182:58;43065:182;:::o;43253:173::-;43393:25;43389:1;43381:6;43377:14;43370:49;43253:173;:::o;43432:234::-;43572:34;43568:1;43560:6;43556:14;43549:58;43641:17;43636:2;43628:6;43624:15;43617:42;43432:234;:::o;43672:174::-;43812:26;43808:1;43800:6;43796:14;43789:50;43672:174;:::o;43852:220::-;43992:34;43988:1;43980:6;43976:14;43969:58;44061:3;44056:2;44048:6;44044:15;44037:28;43852:220;:::o;44078:221::-;44218:34;44214:1;44206:6;44202:14;44195:58;44287:4;44282:2;44274:6;44270:15;44263:29;44078:221;:::o;44305:114::-;;:::o;44425:170::-;44565:22;44561:1;44553:6;44549:14;44542:46;44425:170;:::o;44601:174::-;44741:26;44737:1;44729:6;44725:14;44718:50;44601:174;:::o;44781:233::-;44921:34;44917:1;44909:6;44905:14;44898:58;44990:16;44985:2;44977:6;44973:15;44966:41;44781:233;:::o;45020:122::-;45093:24;45111:5;45093:24;:::i;:::-;45086:5;45083:35;45073:63;;45132:1;45129;45122:12;45073:63;45020:122;:::o;45148:116::-;45218:21;45233:5;45218:21;:::i;:::-;45211:5;45208:32;45198:60;;45254:1;45251;45244:12;45198:60;45148:116;:::o;45270:120::-;45342:23;45359:5;45342:23;:::i;:::-;45335:5;45332:34;45322:62;;45380:1;45377;45370:12;45322:62;45270:120;:::o;45396:122::-;45469:24;45487:5;45469:24;:::i;:::-;45462:5;45459:35;45449:63;;45508:1;45505;45498:12;45449:63;45396:122;:::o;45524:118::-;45595:22;45611:5;45595:22;:::i;:::-;45588:5;45585:33;45575:61;;45632:1;45629;45622:12;45575:61;45524:118;:::o
Swarm Source
ipfs://9c71ef1d30d97486bd0bb397ba6e308ef5b1735df0f31223d480bb7f6ac82c63
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.