Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 65 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 21566635 | 8 days ago | IN | 0 ETH | 0.00310146 | ||||
Mint Free | 21453890 | 23 days ago | IN | 0 ETH | 0.00122883 | ||||
Set Approval For... | 21399827 | 31 days ago | IN | 0 ETH | 0.00042386 | ||||
Get Toads | 21343472 | 39 days ago | IN | 0 ETH | 0.00172203 | ||||
Mint1 | 21329696 | 41 days ago | IN | 0.03 ETH | 0.0069579 | ||||
Mint3 | 21329694 | 41 days ago | IN | 0.08 ETH | 0.01483638 | ||||
Mint Free | 21329079 | 41 days ago | IN | 0 ETH | 0.00820964 | ||||
Mint Free | 21295601 | 46 days ago | IN | 0 ETH | 0.00040031 | ||||
Mint Free | 21295600 | 46 days ago | IN | 0 ETH | 0.00455274 | ||||
Mint Free | 21284601 | 47 days ago | IN | 0 ETH | 0.00029291 | ||||
Mint Free | 21284598 | 47 days ago | IN | 0 ETH | 0.00235789 | ||||
Mint Free | 21275178 | 48 days ago | IN | 0 ETH | 0.00189284 | ||||
Mint Free | 21275168 | 48 days ago | IN | 0 ETH | 0.00600117 | ||||
Mint Free | 21271371 | 49 days ago | IN | 0 ETH | 0.01380195 | ||||
Mint Free | 21269109 | 49 days ago | IN | 0 ETH | 0.0096593 | ||||
Mint Free | 21261005 | 50 days ago | IN | 0 ETH | 0.01092809 | ||||
Mint3 | 21258689 | 51 days ago | IN | 0.08 ETH | 0.00604246 | ||||
Mint Free | 21258633 | 51 days ago | IN | 0 ETH | 0.03833334 | ||||
Mint Free | 21258283 | 51 days ago | IN | 0 ETH | 0.02230285 | ||||
Mint Free | 21245588 | 53 days ago | IN | 0 ETH | 0.01336512 | ||||
Mint Free | 21242973 | 53 days ago | IN | 0 ETH | 0.0518122 | ||||
Mint1 | 21242790 | 53 days ago | IN | 0.03 ETH | 0.00225042 | ||||
Mint Free | 21242774 | 53 days ago | IN | 0 ETH | 0.0157813 | ||||
Mint Free | 21242492 | 53 days ago | IN | 0 ETH | 0.00485153 | ||||
Mint1 | 21241241 | 53 days ago | IN | 0.03 ETH | 0.00166128 |
Latest 23 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21343472 | 39 days ago | 0.09333333 ETH | ||||
21329696 | 41 days ago | 0.01 ETH | ||||
21329696 | 41 days ago | 0.01 ETH | ||||
21329694 | 41 days ago | 0.02666666 ETH | ||||
21329694 | 41 days ago | 0.02666666 ETH | ||||
21258689 | 51 days ago | 0.02666666 ETH | ||||
21258689 | 51 days ago | 0.02666666 ETH | ||||
21242790 | 53 days ago | 0.01 ETH | ||||
21242790 | 53 days ago | 0.01 ETH | ||||
21241241 | 53 days ago | 0.01 ETH | ||||
21241241 | 53 days ago | 0.01 ETH | ||||
21223336 | 56 days ago | 0.01 ETH | ||||
21223336 | 56 days ago | 0.01 ETH | ||||
21217343 | 56 days ago | 0.10666666 ETH | ||||
21214938 | 57 days ago | 0.06666666 ETH | ||||
21214938 | 57 days ago | 0.06666666 ETH | ||||
21214192 | 57 days ago | 0.04 ETH | ||||
21214192 | 57 days ago | 0.04 ETH | ||||
21214151 | 57 days ago | 0.06666666 ETH | ||||
21212916 | 57 days ago | 0.02666666 ETH | ||||
21212916 | 57 days ago | 0.02666666 ETH | ||||
21212903 | 57 days ago | 0.04 ETH | ||||
21212903 | 57 days ago | 0.04 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
FrogSoupReheated
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-11-17 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* ,---.,---. .---. ,--, .---. .---. .-. .-.,---. | .-'| .-.\ / .-. ) .' .' ( .-._)/ .-. ) | | | || .-.\ | `-.| `-'/ | | |(_)| | __ (_) \ | | |(_)| | | || |-' ) | .-'| ( | | | | \ \ ( _) _ \ \ | | | | | | | || |--' | | | |\ \ \ `-' / \ `-) ) ( `-' ) \ `-' / | `-')|| | )\| |_| \)\ )---' )\____/ `----' )---' `---(_)/( (__) (__)(_) (__) (_) (__) */ //IERC20 for Token usage interface IERC20 { function transfer(address _to, uint256 _amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); function balanceOf(address account) external view returns (uint256); } /** * @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); } /** * @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; } } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved( uint256 tokenId ) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll( address owner, address operator ) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @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); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /* * @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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString( uint256 value, uint256 length ) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex( address owner, uint256 index ) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface( bytes4 interfaceId ) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf( address owner ) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf( uint256 tokenId ) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI( uint256 tokenId ) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(),".json")) : ""; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved( uint256 tokenId ) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll( address operator, bool approved ) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll( address owner, address operator ) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner( address spender, uint256 tokenId ) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { // solhint-disable-next-line no-inline-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` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface( bytes4 interfaceId ) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex( address owner, uint256 index ) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex( uint256 index ) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration( address from, uint256 tokenId ) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } interface IOldContract { function ownerOf(uint256 tokenId) external view returns (address); function balanceOf(address owner) external view returns (uint256); } interface IUniswapV2Router02 { function WETH() external pure returns (address); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); } contract FrogSoupReheated is ERC721Enumerable { using Strings for uint256; string _baseTokenURI = ""; string _baseContractURI = ""; uint256 private _price1 = 0.03 ether; // Single Soup uint256 private _price3 = 0.08 ether; // Triple Bundle uint256 private _price5 = 0.12 ether; // Penta Bundle uint256 private _price10 = 0.20 ether; // Deca Bundle uint256 public immutable collectionSize = 5029; //Total Supply // Constants for Cooking Frogs IUniswapV2Router02 private uniswapRouter; address private UNISWAP_ROUTER_ADDRESS = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address private constant TOAD_ADDRESS = 0x370a366f402e2e41CDBbE54EcEC12aaE0cce1955; address private constant SOUP_KITCHEN = 0x000000000000000000000000000000000000dEaD; // Dev address address private constant SARAH_ADDRESS = 0xe4017661491fA0fbeaE3734018E8d2b5CB218A9F; address private constant COMIC_ADDRESS = 0x2C4Ae75ef6AF3C67bBCF7897864B8d2dA237F0D7; // Address of the old contract IOldContract public oldContract; address private constant OLD_CONTRACT = 0x58172B314187e35892DeEc5DD0e2f847893e5405; // Highest token ID allowed for free mints uint256 public highestOldTokenId = 1850; // Separate supply counters for free and paid mints uint256 public freeMintSupply; uint256 public totalSupplyMinted; constructor() ERC721("Frog Soup Reheated", "SOUP") { oldContract = IOldContract(OLD_CONTRACT); uniswapRouter = IUniswapV2Router02(UNISWAP_ROUTER_ADDRESS); // Pre-mint specified tokens _premint(1650, 0xd1AF1Ec83b06b0DDc8157B903016d967A3ec585F, true); _premint(1220, 0xd1AF1Ec83b06b0DDc8157B903016d967A3ec585F, true); _premint(1579, 0x532D41d58d8babe4bD94D54ed6E8d45195743fFf, true); for (uint256 i = 1851; i <= 1860; i++) { _premint(i, 0xF1e2a69d7De6d0eE883fD8FE961CE293dF87901E, false); } _premint(1317, 0x2bCf8A19650d8d0f2DaE9e4AF5e5e61D149607A8, true); _premint(682, 0xed44ceb196ea8d15654D677a3b49FEe3b6724066, true); _premint(1724, 0xed44ceb196ea8d15654D677a3b49FEe3b6724066, true); for (uint256 i = 1412; i <= 1416; i++) { _premint(i, 0xed44ceb196ea8d15654D677a3b49FEe3b6724066, true); } for (uint256 i = 1718; i <= 1720; i++) { _premint(i, 0xed44ceb196ea8d15654D677a3b49FEe3b6724066, true); } } function _premint(uint256 tokenId, address recipient, bool isFreeMint) internal { require(!_exists(tokenId), "Token already minted"); _safeMint(recipient, tokenId); if (isFreeMint) { freeMintSupply++; } else { totalSupplyMinted++; } } // Free mint function (IDs 0-1850) function mintFree(uint256[] calldata tokenIds) public { uint256 length = tokenIds.length; address caller = msg.sender; for (uint256 i = 0; i < length; ) { require(tokenIds[i] <= highestOldTokenId, "Token ID must be between 0 and 1850"); require(oldContract.ownerOf(tokenIds[i]) == caller, "You do not own this token ID"); require(!_exists(tokenIds[i]), "Token already minted"); _safeMint(caller, tokenIds[i]); unchecked { i++; } } // Increment the free mint supply counter without affecting paid mints freeMintSupply += length; } // Paid mint functions (IDs 1851-5029) function mint1() public payable { require(msg.value >= _price1, "Ether sent is not correct"); require(freeMintSupply + totalSupplyMinted + 1 <= collectionSize, "Exceeds maximum supply"); uint256 newTokenId = highestOldTokenId + 1 + totalSupplyMinted; _safeMint(msg.sender, newTokenId); totalSupplyMinted++; uint256 amountToSend = msg.value / 3; (bool successSarah, ) = SARAH_ADDRESS.call{value: amountToSend}(""); require(successSarah, "Transfer to SARAH_ADDRESS failed"); (bool successComic, ) = COMIC_ADDRESS.call{value: amountToSend}(""); require(successComic, "Transfer to COMIC_ADDRESS failed"); } function mint3() public payable { require(msg.value >= _price3, "Ether sent is not correct"); require(freeMintSupply + totalSupplyMinted + 3 <= collectionSize, "Exceeds maximum supply"); for (uint256 i = 0; i < 3; i++) { _safeMint(msg.sender, highestOldTokenId + 1 + totalSupplyMinted + i); } totalSupplyMinted += 3; uint256 amountToSend = msg.value / 3; (bool successSarah, ) = SARAH_ADDRESS.call{value: amountToSend}(""); require(successSarah, "Transfer to SARAH_ADDRESS failed"); (bool successComic, ) = COMIC_ADDRESS.call{value: amountToSend}(""); require(successComic, "Transfer to COMIC_ADDRESS failed"); } function mint5() public payable { require(msg.value >= _price5, "Ether sent is not correct"); require(freeMintSupply + totalSupplyMinted + 5 <= collectionSize, "Exceeds maximum supply"); for (uint256 i = 0; i < 5; i++) { _safeMint(msg.sender, highestOldTokenId + 1 + totalSupplyMinted + i); } totalSupplyMinted += 5; uint256 amountToSend = msg.value / 3; (bool successSarah, ) = SARAH_ADDRESS.call{value: amountToSend}(""); require(successSarah, "Transfer to SARAH_ADDRESS failed"); (bool successComic, ) = COMIC_ADDRESS.call{value: amountToSend}(""); require(successComic, "Transfer to COMIC_ADDRESS failed"); } function mint10() public payable { require(msg.value >= _price10, "Ether sent is not correct"); require(freeMintSupply + totalSupplyMinted + 10 <= collectionSize, "Exceeds maximum supply"); for (uint256 i = 0; i < 10; i++) { _safeMint(msg.sender, highestOldTokenId + 1 + totalSupplyMinted + i); } totalSupplyMinted += 10; uint256 amountToSend = msg.value / 3; (bool successSarah, ) = SARAH_ADDRESS.call{value: amountToSend}(""); require(successSarah, "Transfer to SARAH_ADDRESS failed"); (bool successComic, ) = COMIC_ADDRESS.call{value: amountToSend}(""); require(successComic, "Transfer to COMIC_ADDRESS failed"); } function latestMintedTokenId() external view returns (uint256) { return highestOldTokenId + totalSupplyMinted; } //View Tokens owned by wallet address - used for potential soup gallery and apis function walletOfOwner( address _owner ) public view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for (uint256 i; i < tokenCount; i++) { tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function setBaseTokenURI(string memory newBaseTokenURI) external { require(msg.sender == 0x9F9e3B9A36d79B4F5CBa3F2E75a5fCAB63932438, "Not authorized"); _baseTokenURI = newBaseTokenURI; } function setBaseContractURI(string memory newBaseContractURI) external { require(msg.sender == 0x9F9e3B9A36d79B4F5CBa3F2E75a5fCAB63932438, "Not authorized"); _baseContractURI = newBaseContractURI; } //Get URI for token function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } //Collection Metadata for Opensea function contractURI() public view returns (string memory) { return _baseContractURI; } function getToads() external { uint256 weiAmount = address(this).balance; // Get the entire Ether balance of the contract require(weiAmount > 0, "Contract has no Ether to swap"); // Define path with explicit memory keyword and address[] type address[] memory path = new address[](2); path[0] = uniswapRouter.WETH(); path[1] = TOAD_ADDRESS; // Set the deadline for the swap transaction uint256 deadline = block.timestamp + 180; // 3 minute deadline // Perform the Toad purchase uniswapRouter.swapExactETHForTokens{value: weiAmount}( 0, // Accept any amount of Toad for our ETH path, SOUP_KITCHEN, //Send directly to our kitchen for storage deadline ); } // Fallback function to handle Ether sent directly to the contract fallback() external payable { require(msg.value > 0, "No Ether sent"); uint256 amountToSend = msg.value / 3; (bool successSarah, ) = SARAH_ADDRESS.call{value: amountToSend}(""); require(successSarah, "Transfer to SARAH_ADDRESS failed"); (bool successComic, ) = COMIC_ADDRESS.call{value: amountToSend}(""); require(successComic, "Transfer to COMIC_ADDRESS failed"); } }
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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"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":"collectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintSupply","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":"getToads","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"highestOldTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"latestMintedTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mint10","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mint3","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mint5","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"mintFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldContract","outputs":[{"internalType":"contract IOldContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseContractURI","type":"string"}],"name":"setBaseContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyMinted","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":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405260405180602001604052805f815250600a90816100219190610ff6565b5060405180602001604052805f815250600b908161003f9190610ff6565b50666a94d74f430000600c5567011c37937e080000600d556701aa535d3d0c0000600e556702c68af0bb140000600f556113a5608090815250737a250d5630b4cf539739df2c5dacb4c659f2488d60115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061073a6013553480156100dd575f80fd5b506040518060400160405280601281526020017f46726f6720536f757020526568656174656400000000000000000000000000008152506040518060400160405280600481526020017f534f555000000000000000000000000000000000000000000000000000000000815250815f90816101589190610ff6565b5080600190816101689190610ff6565b5050507358172b314187e35892deec5dd0e2f847893e540560125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061024861067273d1af1ec83b06b0ddc8157b903016d967a3ec585f60016103f260201b60201c565b6102706104c473d1af1ec83b06b0ddc8157b903016d967a3ec585f60016103f260201b60201c565b61029861062b73532d41d58d8babe4bd94d54ed6e8d45195743fff60016103f260201b60201c565b5f61073b90505b61074481116102e0576102cd8173f1e2a69d7de6d0ee883fd8fe961ce293df87901e5f6103f260201b60201c565b80806102d8906110f2565b91505061029f565b50610309610525732bcf8a19650d8d0f2dae9e4af5e5e61d149607a860016103f260201b60201c565b6103316102aa73ed44ceb196ea8d15654d677a3b49fee3b672406660016103f260201b60201c565b6103596106bc73ed44ceb196ea8d15654d677a3b49fee3b672406660016103f260201b60201c565b5f61058490505b61058881116103a25761038f8173ed44ceb196ea8d15654d677a3b49fee3b672406660016103f260201b60201c565b808061039a906110f2565b915050610360565b505f6106b690505b6106b881116103ec576103d98173ed44ceb196ea8d15654d677a3b49fee3b672406660016103f260201b60201c565b80806103e4906110f2565b9150506103aa565b506115e9565b6104018361049060201b60201c565b15610441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043890611193565b60405180910390fd5b61045182846104f860201b60201c565b80156104735760145f815480929190610469906110f2565b919050555061048b565b60155f815480929190610485906110f2565b91905055505b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b610517828260405180602001604052805f81525061051b60201b60201c565b5050565b61052b838361058160201b60201c565b61053d5f84848461075160201b60201c565b61057c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057390611221565b60405180910390fd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e690611289565b60405180910390fd5b6105fe8161049060201b60201c565b1561063e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610635906112f1565b60405180910390fd5b61064f5f83836108df60201b60201c565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461069c919061130f565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f6107778473ffffffffffffffffffffffffffffffffffffffff16610a0d60201b60201c565b156108d2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026107a6610a1e60201b60201c565b8786866040518563ffffffff1660e01b81526004016107c89493929190611400565b6020604051808303815f875af192505050801561080357506040513d601f19601f8201168201806040525081019061080091906114a3565b60015b610882573d805f8114610831576040519150601f19603f3d011682016040523d82523d5f602084013e610836565b606091505b505f81510361087a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087190611221565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506108d7565b600190505b949350505050565b6108f0838383610a2560201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109375761093281610a2a60201b60201c565b61097c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461097b5761097a8382610a6e60201b60201c565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109c3576109be81610bca60201b60201c565b610a08565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610a0757610a068282610c8a60201b60201c565b5b5b505050565b5f80823b90505f8111915050919050565b5f33905090565b505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f6001610a8084610d0860201b60201c565b610a8a91906114ce565b90505f60075f8481526020019081526020015f20549050818114610b61575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f6001600880549050610bdd91906114ce565b90505f60095f8481526020019081526020015f205490505f60088381548110610c0957610c08611501565b5b905f5260205f20015490508060088381548110610c2957610c28611501565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f90556008805480610c7157610c7061152e565b5b600190038181905f5260205f20015f9055905550505050565b5f610c9a83610d0860201b60201c565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e906115cb565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610e3757607f821691505b602082108103610e4a57610e49610df3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610eac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610e71565b610eb68683610e71565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610efa610ef5610ef084610ece565b610ed7565b610ece565b9050919050565b5f819050919050565b610f1383610ee0565b610f27610f1f82610f01565b848454610e7d565b825550505050565b5f90565b610f3b610f2f565b610f46818484610f0a565b505050565b5b81811015610f6957610f5e5f82610f33565b600181019050610f4c565b5050565b601f821115610fae57610f7f81610e50565b610f8884610e62565b81016020851015610f97578190505b610fab610fa385610e62565b830182610f4b565b50505b505050565b5f82821c905092915050565b5f610fce5f1984600802610fb3565b1980831691505092915050565b5f610fe68383610fbf565b9150826002028217905092915050565b610fff82610dbc565b67ffffffffffffffff81111561101857611017610dc6565b5b6110228254610e20565b61102d828285610f6d565b5f60209050601f83116001811461105e575f841561104c578287015190505b6110568582610fdb565b8655506110bd565b601f19841661106c86610e50565b5f5b828110156110935784890151825560018201915060208501945060208101905061106e565b868310156110b057848901516110ac601f891682610fbf565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6110fc82610ece565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361112e5761112d6110c5565b5b600182019050919050565b5f82825260208201905092915050565b7f546f6b656e20616c7265616479206d696e7465640000000000000000000000005f82015250565b5f61117d601483611139565b915061118882611149565b602082019050919050565b5f6020820190508181035f8301526111aa81611171565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f61120b603283611139565b9150611216826111b1565b604082019050919050565b5f6020820190508181035f830152611238816111ff565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f611273602083611139565b915061127e8261123f565b602082019050919050565b5f6020820190508181035f8301526112a081611267565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f6112db601c83611139565b91506112e6826112a7565b602082019050919050565b5f6020820190508181035f830152611308816112cf565b9050919050565b5f61131982610ece565b915061132483610ece565b925082820190508082111561133c5761133b6110c5565b5b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61136b82611342565b9050919050565b61137b81611361565b82525050565b61138a81610ece565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6113d282611390565b6113dc818561139a565b93506113ec8185602086016113aa565b6113f5816113b8565b840191505092915050565b5f6080820190506114135f830187611372565b6114206020830186611372565b61142d6040830185611381565b818103606083015261143f81846113c8565b905095945050505050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6114828161144e565b811461148c575f80fd5b50565b5f8151905061149d81611479565b92915050565b5f602082840312156114b8576114b761144a565b5b5f6114c58482850161148f565b91505092915050565b5f6114d882610ece565b91506114e383610ece565b92508282039050818111156114fb576114fa6110c5565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f6115b5602a83611139565b91506115c08261155b565b604082019050919050565b5f6020820190508181035f8301526115e2816115a9565b9050919050565b60805161520161161d5f395f81816109b101528181610cd101528181611391015281816116c20152611b0a01526152015ff3fe6080604052600436106101e6575f3560e01c8063438b630011610101578063a9decdda11610094578063e150007e11610063578063e150007e1461084b578063e8a3d48514610875578063e985e9c51461089f578063ff81ff1c146108db576101e7565b8063a9decdda146107b5578063b88d4fde146107bf578063c87b56dd146107e7578063d8f4b08914610823576101e7565b806370a08231116100d057806370a08231146106fd578063933e95b21461073957806395d89b4114610763578063a22cb4651461078d576101e7565b8063438b63001461061f57806345c0f5331461065b5780634f6ccce7146106855780636352211e146106c1576101e7565b80632009dbf21161017957806330176e131161014857806330176e131461059b57806330503c4e146105c35780633f85880d146105ed57806342842e0e146105f7576101e7565b80632009dbf2146104e357806323b872dd1461050d57806323cf9882146105355780632f745c591461055f576101e7565b8063081812fc116101b5578063081812fc1461042d578063095ea7b3146104695780630cd3a5381461049157806318160ddd146104b9576101e7565b806301ffc9a7146103b3578063044b4b5d146103ef57806306fdde03146103f95780630788ce7914610423576101e7565b5b5f3411610229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102209061345f565b60405180910390fd5b5f60033461023791906134e0565b90505f73e4017661491fa0fbeae3734018e8d2b5cb218a9f73ffffffffffffffffffffffffffffffffffffffff16826040516102729061353d565b5f6040518083038185875af1925050503d805f81146102ac576040519150601f19603f3d011682016040523d82523d5f602084013e6102b1565b606091505b50509050806102f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ec9061359b565b60405180910390fd5b5f732c4ae75ef6af3c67bbcf7897864b8d2da237f0d773ffffffffffffffffffffffffffffffffffffffff168360405161032e9061353d565b5f6040518083038185875af1925050503d805f8114610368576040519150601f19603f3d011682016040523d82523d5f602084013e61036d565b606091505b50509050806103b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a890613603565b60405180910390fd5b005b3480156103be575f80fd5b506103d960048036038101906103d49190613687565b6108f1565b6040516103e691906136cc565b60405180910390f35b6103f761096a565b005b348015610404575f80fd5b5061040d610bfb565b60405161041a9190613745565b60405180910390f35b61042b610c8a565b005b348015610438575f80fd5b50610453600480360381019061044e919061378f565b610f3c565b60405161046091906137f9565b60405180910390f35b348015610474575f80fd5b5061048f600480360381019061048a919061383c565b610fbd565b005b34801561049c575f80fd5b506104b760048036038101906104b291906139a6565b6110d3565b005b3480156104c4575f80fd5b506104cd611168565b6040516104da91906139fc565b60405180910390f35b3480156104ee575f80fd5b506104f7611174565b60405161050491906139fc565b60405180910390f35b348015610518575f80fd5b50610533600480360381019061052e9190613a15565b61118a565b005b348015610540575f80fd5b506105496111ea565b60405161055691906139fc565b60405180910390f35b34801561056a575f80fd5b506105856004803603810190610580919061383c565b6111f0565b60405161059291906139fc565b60405180910390f35b3480156105a6575f80fd5b506105c160048036038101906105bc91906139a6565b611290565b005b3480156105ce575f80fd5b506105d7611325565b6040516105e49190613ac0565b60405180910390f35b6105f561134a565b005b348015610602575f80fd5b5061061d60048036038101906106189190613a15565b6115fc565b005b34801561062a575f80fd5b5061064560048036038101906106409190613ad9565b61161b565b6040516106529190613bbb565b60405180910390f35b348015610666575f80fd5b5061066f6116c0565b60405161067c91906139fc565b60405180910390f35b348015610690575f80fd5b506106ab60048036038101906106a6919061378f565b6116e4565b6040516106b891906139fc565b60405180910390f35b3480156106cc575f80fd5b506106e760048036038101906106e2919061378f565b611752565b6040516106f491906137f9565b60405180910390f35b348015610708575f80fd5b50610723600480360381019061071e9190613ad9565b6117fe565b60405161073091906139fc565b60405180910390f35b348015610744575f80fd5b5061074d6118b2565b60405161075a91906139fc565b60405180910390f35b34801561076e575f80fd5b506107776118b8565b6040516107849190613745565b60405180910390f35b348015610798575f80fd5b506107b360048036038101906107ae9190613c05565b611948565b005b6107bd611ac3565b005b3480156107ca575f80fd5b506107e560048036038101906107e09190613ce1565b611d75565b005b3480156107f2575f80fd5b5061080d6004803603810190610808919061378f565b611dd7565b60405161081a9190613745565b60405180910390f35b34801561082e575f80fd5b5061084960048036038101906108449190613dbe565b611e7b565b005b348015610856575f80fd5b5061085f6120be565b60405161086c91906139fc565b60405180910390f35b348015610880575f80fd5b506108896120c4565b6040516108969190613745565b60405180910390f35b3480156108aa575f80fd5b506108c560048036038101906108c09190613e09565b612154565b6040516108d291906136cc565b60405180910390f35b3480156108e6575f80fd5b506108ef6121e2565b005b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610963575061096282612470565b5b9050919050565b600c543410156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690613e91565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060016015546014546109e29190613eaf565b6109ec9190613eaf565b1115610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490613f2c565b60405180910390fd5b5f6015546001601354610a409190613eaf565b610a4a9190613eaf565b9050610a563382612551565b60155f815480929190610a6890613f4a565b91905055505f600334610a7b91906134e0565b90505f73e4017661491fa0fbeae3734018e8d2b5cb218a9f73ffffffffffffffffffffffffffffffffffffffff1682604051610ab69061353d565b5f6040518083038185875af1925050503d805f8114610af0576040519150601f19603f3d011682016040523d82523d5f602084013e610af5565b606091505b5050905080610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b309061359b565b60405180910390fd5b5f732c4ae75ef6af3c67bbcf7897864b8d2da237f0d773ffffffffffffffffffffffffffffffffffffffff1683604051610b729061353d565b5f6040518083038185875af1925050503d805f8114610bac576040519150601f19603f3d011682016040523d82523d5f602084013e610bb1565b606091505b5050905080610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90613603565b60405180910390fd5b50505050565b60605f8054610c0990613fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3590613fbe565b8015610c805780601f10610c5757610100808354040283529160200191610c80565b820191905f5260205f20905b815481529060010190602001808311610c6357829003601f168201915b5050505050905090565b600d54341015610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613e91565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006003601554601454610d029190613eaf565b610d0c9190613eaf565b1115610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490613f2c565b60405180910390fd5b5f5b6003811015610d9557610d8833826015546001601354610d6f9190613eaf565b610d799190613eaf565b610d839190613eaf565b612551565b8080600101915050610d4f565b50600360155f828254610da89190613eaf565b925050819055505f600334610dbd91906134e0565b90505f73e4017661491fa0fbeae3734018e8d2b5cb218a9f73ffffffffffffffffffffffffffffffffffffffff1682604051610df89061353d565b5f6040518083038185875af1925050503d805f8114610e32576040519150601f19603f3d011682016040523d82523d5f602084013e610e37565b606091505b5050905080610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e729061359b565b60405180910390fd5b5f732c4ae75ef6af3c67bbcf7897864b8d2da237f0d773ffffffffffffffffffffffffffffffffffffffff1683604051610eb49061353d565b5f6040518083038185875af1925050503d805f8114610eee576040519150601f19603f3d011682016040523d82523d5f602084013e610ef3565b606091505b5050905080610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90613603565b60405180910390fd5b505050565b5f610f468261256e565b610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c9061405e565b60405180910390fd5b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610fc782611752565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e906140ec565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110566125d6565b73ffffffffffffffffffffffffffffffffffffffff16148061108557506110848161107f6125d6565b612154565b5b6110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb9061417a565b60405180910390fd5b6110ce83836125dd565b505050565b739f9e3b9a36d79b4f5cba3f2e75a5fcab6393243873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c906141e2565b60405180910390fd5b80600b90816111649190614394565b5050565b5f600880549050905090565b5f6015546013546111859190613eaf565b905090565b61119b6111956125d6565b82612693565b6111da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d1906144d3565b60405180910390fd5b6111e583838361276f565b505050565b60135481565b5f6111fa836117fe565b821061123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614561565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b739f9e3b9a36d79b4f5cba3f2e75a5fcab6393243873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611309906141e2565b60405180910390fd5b80600a90816113219190614394565b5050565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5434101561138f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138690613e91565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000600a6015546014546113c29190613eaf565b6113cc9190613eaf565b111561140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490613f2c565b60405180910390fd5b5f5b600a811015611455576114483382601554600160135461142f9190613eaf565b6114399190613eaf565b6114439190613eaf565b612551565b808060010191505061140f565b50600a60155f8282546114689190613eaf565b925050819055505f60033461147d91906134e0565b90505f73e4017661491fa0fbeae3734018e8d2b5cb218a9f73ffffffffffffffffffffffffffffffffffffffff16826040516114b89061353d565b5f6040518083038185875af1925050503d805f81146114f2576040519150601f19603f3d011682016040523d82523d5f602084013e6114f7565b606091505b505090508061153b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115329061359b565b60405180910390fd5b5f732c4ae75ef6af3c67bbcf7897864b8d2da237f0d773ffffffffffffffffffffffffffffffffffffffff16836040516115749061353d565b5f6040518083038185875af1925050503d805f81146115ae576040519150601f19603f3d011682016040523d82523d5f602084013e6115b3565b606091505b50509050806115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee90613603565b60405180910390fd5b505050565b61161683838360405180602001604052805f815250611d75565b505050565b60605f611627836117fe565b90505f8167ffffffffffffffff81111561164457611643613882565b5b6040519080825280602002602001820160405280156116725781602001602082028036833780820191505090505b5090505f5b828110156116b55761168985826111f0565b82828151811061169c5761169b61457f565b5b6020026020010181815250508080600101915050611677565b508092505050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6116ed611168565b821061172e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117259061461c565b60405180910390fd5b600882815481106117425761174161457f565b5b905f5260205f2001549050919050565b5f8060025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec906146aa565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490614738565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60155481565b6060600180546118c790613fbe565b80601f01602080910402602001604051908101604052809291908181526020018280546118f390613fbe565b801561193e5780601f106119155761010080835404028352916020019161193e565b820191905f5260205f20905b81548152906001019060200180831161192157829003601f168201915b5050505050905090565b6119506125d6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b4906147a0565b60405180910390fd5b8060055f6119c96125d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a726125d6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ab791906136cc565b60405180910390a35050565b600e54341015611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff90613e91565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006005601554601454611b3b9190613eaf565b611b459190613eaf565b1115611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d90613f2c565b60405180910390fd5b5f5b6005811015611bce57611bc133826015546001601354611ba89190613eaf565b611bb29190613eaf565b611bbc9190613eaf565b612551565b8080600101915050611b88565b50600560155f828254611be19190613eaf565b925050819055505f600334611bf691906134e0565b90505f73e4017661491fa0fbeae3734018e8d2b5cb218a9f73ffffffffffffffffffffffffffffffffffffffff1682604051611c319061353d565b5f6040518083038185875af1925050503d805f8114611c6b576040519150601f19603f3d011682016040523d82523d5f602084013e611c70565b606091505b5050905080611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab9061359b565b60405180910390fd5b5f732c4ae75ef6af3c67bbcf7897864b8d2da237f0d773ffffffffffffffffffffffffffffffffffffffff1683604051611ced9061353d565b5f6040518083038185875af1925050503d805f8114611d27576040519150601f19603f3d011682016040523d82523d5f602084013e611d2c565b606091505b5050905080611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790613603565b60405180910390fd5b505050565b611d86611d806125d6565b83612693565b611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906144d3565b60405180910390fd5b611dd1848484846129bf565b50505050565b6060611de28261256e565b611e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e189061482e565b60405180910390fd5b5f611e2a612a1b565b90505f815111611e485760405180602001604052805f815250611e73565b80611e5284612aab565b604051602001611e639291906148d0565b6040516020818303038152906040525b915050919050565b5f8282905090505f3390505f5b8281101561209f57601354858583818110611ea657611ea561457f565b5b905060200201351115611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee59061496e565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e878785818110611f5557611f5461457f565b5b905060200201356040518263ffffffff1660e01b8152600401611f7891906139fc565b602060405180830381865afa158015611f93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fb791906149a0565b73ffffffffffffffffffffffffffffffffffffffff161461200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490614a15565b60405180910390fd5b61202f8585838181106120235761202261457f565b5b9050602002013561256e565b1561206f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206690614a7d565b60405180910390fd5b612092828686848181106120865761208561457f565b5b90506020020135612551565b8080600101915050611e88565b508160145f8282546120b19190613eaf565b9250508190555050505050565b60145481565b6060600b80546120d390613fbe565b80601f01602080910402602001604051908101604052809291908181526020018280546120ff90613fbe565b801561214a5780601f106121215761010080835404028352916020019161214a565b820191905f5260205f20905b81548152906001019060200180831161212d57829003601f168201915b5050505050905090565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f4790505f8111612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221f90614ae5565b60405180910390fd5b5f600267ffffffffffffffff81111561224457612243613882565b5b6040519080825280602002602001820160405280156122725781602001602082028036833780820191505090505b50905060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122df573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230391906149a0565b815f815181106123165761231561457f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073370a366f402e2e41cdbbe54ecec12aae0cce1955816001815181106123795761237861457f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60b4426123c19190613eaf565b905060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab5845f8561dead866040518663ffffffff1660e01b81526004016124269493929190614bf3565b5f6040518083038185885af1158015612441573d5f803e3d5ffd5b50505050506040513d5f823e3d601f19601f8201168201806040525081019061246a9190614d11565b50505050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061253a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061254a575061254982612c04565b5b9050919050565b61256a828260405180602001604052805f815250612c6d565b5050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f33905090565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661264d83611752565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f61269d8261256e565b6126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d390614dc8565b60405180910390fd5b5f6126e683611752565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061275557508373ffffffffffffffffffffffffffffffffffffffff1661273d84610f3c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061276657506127658185612154565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661278f82611752565b73ffffffffffffffffffffffffffffffffffffffff16146127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614e56565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284a90614ee4565b60405180910390fd5b61285e838383612cc7565b6128685f826125dd565b600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546128b59190614f02565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546129099190613eaf565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6129ca84848461276f565b6129d684848484612dd7565b612a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0c90614fa5565b60405180910390fd5b50505050565b6060600a8054612a2a90613fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054612a5690613fbe565b8015612aa15780601f10612a7857610100808354040283529160200191612aa1565b820191905f5260205f20905b815481529060010190602001808311612a8457829003601f168201915b5050505050905090565b60605f8203612af1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bff565b5f8290505f5b5f8214612b20578080612b0990613f4a565b915050600a82612b1991906134e0565b9150612af7565b5f8167ffffffffffffffff811115612b3b57612b3a613882565b5b6040519080825280601f01601f191660200182016040528015612b6d5781602001600182028036833780820191505090505b5090505b5f8514612bf857600182612b859190614f02565b9150600a85612b949190614fc3565b6030612ba09190613eaf565b60f81b818381518110612bb657612bb561457f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85612bf191906134e0565b9450612b71565b8093505050505b919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c778383612f59565b612c835f848484612dd7565b612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990614fa5565b60405180910390fd5b505050565b612cd283838361311d565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1357612d0e81613122565b612d52565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d5157612d508382613166565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d9357612d8e816132bc565b612dd2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612dd157612dd0828261337c565b5b5b505050565b5f612df78473ffffffffffffffffffffffffffffffffffffffff166133f4565b15612f4c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e206125d6565b8786866040518563ffffffff1660e01b8152600401612e429493929190615045565b6020604051808303815f875af1925050508015612e7d57506040513d601f19601f82011682018060405250810190612e7a91906150a3565b60015b612efc573d805f8114612eab576040519150601f19603f3d011682016040523d82523d5f602084013e612eb0565b606091505b505f815103612ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eeb90614fa5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f51565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbe90615118565b60405180910390fd5b612fd08161256e565b15613010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300790615180565b60405180910390fd5b61301b5f8383612cc7565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546130689190613eaf565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f6001613172846117fe565b61317c9190614f02565b90505f60075f8481526020019081526020015f20549050818114613253575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f60016008805490506132cf9190614f02565b90505f60095f8481526020019081526020015f205490505f600883815481106132fb576132fa61457f565b5b905f5260205f2001549050806008838154811061331b5761331a61457f565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f905560088054806133635761336261519e565b5b600190038181905f5260205f20015f9055905550505050565b5f613386836117fe565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f80823b90505f8111915050919050565b5f82825260208201905092915050565b7f4e6f2045746865722073656e74000000000000000000000000000000000000005f82015250565b5f613449600d83613405565b915061345482613415565b602082019050919050565b5f6020820190508181035f8301526134768161343d565b9050919050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6134ea8261347d565b91506134f58361347d565b92508261350557613504613486565b5b828204905092915050565b5f81905092915050565b50565b5f6135285f83613510565b91506135338261351a565b5f82019050919050565b5f6135478261351d565b9150819050919050565b7f5472616e7366657220746f2053415241485f41444452455353206661696c65645f82015250565b5f613585602083613405565b915061359082613551565b602082019050919050565b5f6020820190508181035f8301526135b281613579565b9050919050565b7f5472616e7366657220746f20434f4d49435f41444452455353206661696c65645f82015250565b5f6135ed602083613405565b91506135f8826135b9565b602082019050919050565b5f6020820190508181035f83015261361a816135e1565b9050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61366681613632565b8114613670575f80fd5b50565b5f813590506136818161365d565b92915050565b5f6020828403121561369c5761369b61362a565b5b5f6136a984828501613673565b91505092915050565b5f8115159050919050565b6136c6816136b2565b82525050565b5f6020820190506136df5f8301846136bd565b92915050565b5f81519050919050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613717826136e5565b6137218185613405565b93506137318185602086016136ef565b61373a816136fd565b840191505092915050565b5f6020820190508181035f83015261375d818461370d565b905092915050565b61376e8161347d565b8114613778575f80fd5b50565b5f8135905061378981613765565b92915050565b5f602082840312156137a4576137a361362a565b5b5f6137b18482850161377b565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137e3826137ba565b9050919050565b6137f3816137d9565b82525050565b5f60208201905061380c5f8301846137ea565b92915050565b61381b816137d9565b8114613825575f80fd5b50565b5f8135905061383681613812565b92915050565b5f80604083850312156138525761385161362a565b5b5f61385f85828601613828565b92505060206138708582860161377b565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6138b8826136fd565b810181811067ffffffffffffffff821117156138d7576138d6613882565b5b80604052505050565b5f6138e9613621565b90506138f582826138af565b919050565b5f67ffffffffffffffff82111561391457613913613882565b5b61391d826136fd565b9050602081019050919050565b828183375f83830152505050565b5f61394a613945846138fa565b6138e0565b9050828152602081018484840111156139665761396561387e565b5b61397184828561392a565b509392505050565b5f82601f83011261398d5761398c61387a565b5b813561399d848260208601613938565b91505092915050565b5f602082840312156139bb576139ba61362a565b5b5f82013567ffffffffffffffff8111156139d8576139d761362e565b5b6139e484828501613979565b91505092915050565b6139f68161347d565b82525050565b5f602082019050613a0f5f8301846139ed565b92915050565b5f805f60608486031215613a2c57613a2b61362a565b5b5f613a3986828701613828565b9350506020613a4a86828701613828565b9250506040613a5b8682870161377b565b9150509250925092565b5f819050919050565b5f613a88613a83613a7e846137ba565b613a65565b6137ba565b9050919050565b5f613a9982613a6e565b9050919050565b5f613aaa82613a8f565b9050919050565b613aba81613aa0565b82525050565b5f602082019050613ad35f830184613ab1565b92915050565b5f60208284031215613aee57613aed61362a565b5b5f613afb84828501613828565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613b368161347d565b82525050565b5f613b478383613b2d565b60208301905092915050565b5f602082019050919050565b5f613b6982613b04565b613b738185613b0e565b9350613b7e83613b1e565b805f5b83811015613bae578151613b958882613b3c565b9750613ba083613b53565b925050600181019050613b81565b5085935050505092915050565b5f6020820190508181035f830152613bd38184613b5f565b905092915050565b613be4816136b2565b8114613bee575f80fd5b50565b5f81359050613bff81613bdb565b92915050565b5f8060408385031215613c1b57613c1a61362a565b5b5f613c2885828601613828565b9250506020613c3985828601613bf1565b9150509250929050565b5f67ffffffffffffffff821115613c5d57613c5c613882565b5b613c66826136fd565b9050602081019050919050565b5f613c85613c8084613c43565b6138e0565b905082815260208101848484011115613ca157613ca061387e565b5b613cac84828561392a565b509392505050565b5f82601f830112613cc857613cc761387a565b5b8135613cd8848260208601613c73565b91505092915050565b5f805f8060808587031215613cf957613cf861362a565b5b5f613d0687828801613828565b9450506020613d1787828801613828565b9350506040613d288782880161377b565b925050606085013567ffffffffffffffff811115613d4957613d4861362e565b5b613d5587828801613cb4565b91505092959194509250565b5f80fd5b5f80fd5b5f8083601f840112613d7e57613d7d61387a565b5b8235905067ffffffffffffffff811115613d9b57613d9a613d61565b5b602083019150836020820283011115613db757613db6613d65565b5b9250929050565b5f8060208385031215613dd457613dd361362a565b5b5f83013567ffffffffffffffff811115613df157613df061362e565b5b613dfd85828601613d69565b92509250509250929050565b5f8060408385031215613e1f57613e1e61362a565b5b5f613e2c85828601613828565b9250506020613e3d85828601613828565b9150509250929050565b7f45746865722073656e74206973206e6f7420636f7272656374000000000000005f82015250565b5f613e7b601983613405565b9150613e8682613e47565b602082019050919050565b5f6020820190508181035f830152613ea881613e6f565b9050919050565b5f613eb98261347d565b9150613ec48361347d565b9250828201905080821115613edc57613edb6134b3565b5b92915050565b7f45786365656473206d6178696d756d20737570706c79000000000000000000005f82015250565b5f613f16601683613405565b9150613f2182613ee2565b602082019050919050565b5f6020820190508181035f830152613f4381613f0a565b9050919050565b5f613f548261347d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f8657613f856134b3565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fd557607f821691505b602082108103613fe857613fe7613f91565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f614048602c83613405565b915061405382613fee565b604082019050919050565b5f6020820190508181035f8301526140758161403c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140d6602183613405565b91506140e18261407c565b604082019050919050565b5f6020820190508181035f830152614103816140ca565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f775f8201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b5f614164603883613405565b915061416f8261410a565b604082019050919050565b5f6020820190508181035f83015261419181614158565b9050919050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f6141cc600e83613405565b91506141d782614198565b602082019050919050565b5f6020820190508181035f8301526141f9816141c0565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261425c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614221565b6142668683614221565b95508019841693508086168417925050509392505050565b5f61429861429361428e8461347d565b613a65565b61347d565b9050919050565b5f819050919050565b6142b18361427e565b6142c56142bd8261429f565b84845461422d565b825550505050565b5f90565b6142d96142cd565b6142e48184846142a8565b505050565b5b81811015614307576142fc5f826142d1565b6001810190506142ea565b5050565b601f82111561434c5761431d81614200565b61432684614212565b81016020851015614335578190505b61434961434185614212565b8301826142e9565b50505b505050565b5f82821c905092915050565b5f61436c5f1984600802614351565b1980831691505092915050565b5f614384838361435d565b9150826002028217905092915050565b61439d826136e5565b67ffffffffffffffff8111156143b6576143b5613882565b5b6143c08254613fbe565b6143cb82828561430b565b5f60209050601f8311600181146143fc575f84156143ea578287015190505b6143f48582614379565b86555061445b565b601f19841661440a86614200565b5f5b828110156144315784890151825560018201915060208501945060208101905061440c565b8683101561444e578489015161444a601f89168261435d565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f5f8201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b5f6144bd603183613405565b91506144c882614463565b604082019050919050565b5f6020820190508181035f8301526144ea816144b1565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f755f8201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b5f61454b602b83613405565b9150614556826144f1565b604082019050919050565b5f6020820190508181035f8301526145788161453f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f5f8201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b5f614606602c83613405565b9150614611826145ac565b604082019050919050565b5f6020820190508181035f830152614633816145fa565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e65786973745f8201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b5f614694602983613405565b915061469f8261463a565b604082019050919050565b5f6020820190508181035f8301526146c181614688565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f614722602a83613405565b915061472d826146c8565b604082019050919050565b5f6020820190508181035f83015261474f81614716565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f61478a601983613405565b915061479582614756565b602082019050919050565b5f6020820190508181035f8301526147b78161477e565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f614818602f83613405565b9150614823826147be565b604082019050919050565b5f6020820190508181035f8301526148458161480c565b9050919050565b5f81905092915050565b5f614860826136e5565b61486a818561484c565b935061487a8185602086016136ef565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6148ba60058361484c565b91506148c582614886565b600582019050919050565b5f6148db8285614856565b91506148e78284614856565b91506148f2826148ae565b91508190509392505050565b7f546f6b656e204944206d757374206265206265747765656e203020616e6420315f8201527f3835300000000000000000000000000000000000000000000000000000000000602082015250565b5f614958602383613405565b9150614963826148fe565b604082019050919050565b5f6020820190508181035f8301526149858161494c565b9050919050565b5f8151905061499a81613812565b92915050565b5f602082840312156149b5576149b461362a565b5b5f6149c28482850161498c565b91505092915050565b7f596f7520646f206e6f74206f776e207468697320746f6b656e204944000000005f82015250565b5f6149ff601c83613405565b9150614a0a826149cb565b602082019050919050565b5f6020820190508181035f830152614a2c816149f3565b9050919050565b7f546f6b656e20616c7265616479206d696e7465640000000000000000000000005f82015250565b5f614a67601483613405565b9150614a7282614a33565b602082019050919050565b5f6020820190508181035f830152614a9481614a5b565b9050919050565b7f436f6e747261637420686173206e6f20457468657220746f20737761700000005f82015250565b5f614acf601d83613405565b9150614ada82614a9b565b602082019050919050565b5f6020820190508181035f830152614afc81614ac3565b9050919050565b5f819050919050565b5f614b26614b21614b1c84614b03565b613a65565b61347d565b9050919050565b614b3681614b0c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b6e816137d9565b82525050565b5f614b7f8383614b65565b60208301905092915050565b5f602082019050919050565b5f614ba182614b3c565b614bab8185614b46565b9350614bb683614b56565b805f5b83811015614be6578151614bcd8882614b74565b9750614bd883614b8b565b925050600181019050614bb9565b5085935050505092915050565b5f608082019050614c065f830187614b2d565b8181036020830152614c188186614b97565b9050614c2760408301856137ea565b614c3460608301846139ed565b95945050505050565b5f67ffffffffffffffff821115614c5757614c56613882565b5b602082029050602081019050919050565b5f81519050614c7681613765565b92915050565b5f614c8e614c8984614c3d565b6138e0565b90508083825260208201905060208402830185811115614cb157614cb0613d65565b5b835b81811015614cda5780614cc68882614c68565b845260208401935050602081019050614cb3565b5050509392505050565b5f82601f830112614cf857614cf761387a565b5b8151614d08848260208601614c7c565b91505092915050565b5f60208284031215614d2657614d2561362a565b5b5f82015167ffffffffffffffff811115614d4357614d4261362e565b5b614d4f84828501614ce4565b91505092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f614db2602c83613405565b9150614dbd82614d58565b604082019050919050565b5f6020820190508181035f830152614ddf81614da6565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e207468617420695f8201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b5f614e40602983613405565b9150614e4b82614de6565b604082019050919050565b5f6020820190508181035f830152614e6d81614e34565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614ece602483613405565b9150614ed982614e74565b604082019050919050565b5f6020820190508181035f830152614efb81614ec2565b9050919050565b5f614f0c8261347d565b9150614f178361347d565b9250828203905081811115614f2f57614f2e6134b3565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f614f8f603283613405565b9150614f9a82614f35565b604082019050919050565b5f6020820190508181035f830152614fbc81614f83565b9050919050565b5f614fcd8261347d565b9150614fd88361347d565b925082614fe857614fe7613486565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61501782614ff3565b6150218185614ffd565b93506150318185602086016136ef565b61503a816136fd565b840191505092915050565b5f6080820190506150585f8301876137ea565b61506560208301866137ea565b61507260408301856139ed565b8181036060830152615084818461500d565b905095945050505050565b5f8151905061509d8161365d565b92915050565b5f602082840312156150b8576150b761362a565b5b5f6150c58482850161508f565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f615102602083613405565b915061510d826150ce565b602082019050919050565b5f6020820190508181035f83015261512f816150f6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f61516a601c83613405565b915061517582615136565b602082019050919050565b5f6020820190508181035f8301526151978161515e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212204ae5954644e6870f378c11b749faa021006e8145012b9cb799114bded02a954264736f6c634300081a0033
Deployed Bytecode
0x6080604052600436106101e6575f3560e01c8063438b630011610101578063a9decdda11610094578063e150007e11610063578063e150007e1461084b578063e8a3d48514610875578063e985e9c51461089f578063ff81ff1c146108db576101e7565b8063a9decdda146107b5578063b88d4fde146107bf578063c87b56dd146107e7578063d8f4b08914610823576101e7565b806370a08231116100d057806370a08231146106fd578063933e95b21461073957806395d89b4114610763578063a22cb4651461078d576101e7565b8063438b63001461061f57806345c0f5331461065b5780634f6ccce7146106855780636352211e146106c1576101e7565b80632009dbf21161017957806330176e131161014857806330176e131461059b57806330503c4e146105c35780633f85880d146105ed57806342842e0e146105f7576101e7565b80632009dbf2146104e357806323b872dd1461050d57806323cf9882146105355780632f745c591461055f576101e7565b8063081812fc116101b5578063081812fc1461042d578063095ea7b3146104695780630cd3a5381461049157806318160ddd146104b9576101e7565b806301ffc9a7146103b3578063044b4b5d146103ef57806306fdde03146103f95780630788ce7914610423576101e7565b5b5f3411610229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102209061345f565b60405180910390fd5b5f60033461023791906134e0565b90505f73e4017661491fa0fbeae3734018e8d2b5cb218a9f73ffffffffffffffffffffffffffffffffffffffff16826040516102729061353d565b5f6040518083038185875af1925050503d805f81146102ac576040519150601f19603f3d011682016040523d82523d5f602084013e6102b1565b606091505b50509050806102f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ec9061359b565b60405180910390fd5b5f732c4ae75ef6af3c67bbcf7897864b8d2da237f0d773ffffffffffffffffffffffffffffffffffffffff168360405161032e9061353d565b5f6040518083038185875af1925050503d805f8114610368576040519150601f19603f3d011682016040523d82523d5f602084013e61036d565b606091505b50509050806103b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a890613603565b60405180910390fd5b005b3480156103be575f80fd5b506103d960048036038101906103d49190613687565b6108f1565b6040516103e691906136cc565b60405180910390f35b6103f761096a565b005b348015610404575f80fd5b5061040d610bfb565b60405161041a9190613745565b60405180910390f35b61042b610c8a565b005b348015610438575f80fd5b50610453600480360381019061044e919061378f565b610f3c565b60405161046091906137f9565b60405180910390f35b348015610474575f80fd5b5061048f600480360381019061048a919061383c565b610fbd565b005b34801561049c575f80fd5b506104b760048036038101906104b291906139a6565b6110d3565b005b3480156104c4575f80fd5b506104cd611168565b6040516104da91906139fc565b60405180910390f35b3480156104ee575f80fd5b506104f7611174565b60405161050491906139fc565b60405180910390f35b348015610518575f80fd5b50610533600480360381019061052e9190613a15565b61118a565b005b348015610540575f80fd5b506105496111ea565b60405161055691906139fc565b60405180910390f35b34801561056a575f80fd5b506105856004803603810190610580919061383c565b6111f0565b60405161059291906139fc565b60405180910390f35b3480156105a6575f80fd5b506105c160048036038101906105bc91906139a6565b611290565b005b3480156105ce575f80fd5b506105d7611325565b6040516105e49190613ac0565b60405180910390f35b6105f561134a565b005b348015610602575f80fd5b5061061d60048036038101906106189190613a15565b6115fc565b005b34801561062a575f80fd5b5061064560048036038101906106409190613ad9565b61161b565b6040516106529190613bbb565b60405180910390f35b348015610666575f80fd5b5061066f6116c0565b60405161067c91906139fc565b60405180910390f35b348015610690575f80fd5b506106ab60048036038101906106a6919061378f565b6116e4565b6040516106b891906139fc565b60405180910390f35b3480156106cc575f80fd5b506106e760048036038101906106e2919061378f565b611752565b6040516106f491906137f9565b60405180910390f35b348015610708575f80fd5b50610723600480360381019061071e9190613ad9565b6117fe565b60405161073091906139fc565b60405180910390f35b348015610744575f80fd5b5061074d6118b2565b60405161075a91906139fc565b60405180910390f35b34801561076e575f80fd5b506107776118b8565b6040516107849190613745565b60405180910390f35b348015610798575f80fd5b506107b360048036038101906107ae9190613c05565b611948565b005b6107bd611ac3565b005b3480156107ca575f80fd5b506107e560048036038101906107e09190613ce1565b611d75565b005b3480156107f2575f80fd5b5061080d6004803603810190610808919061378f565b611dd7565b60405161081a9190613745565b60405180910390f35b34801561082e575f80fd5b5061084960048036038101906108449190613dbe565b611e7b565b005b348015610856575f80fd5b5061085f6120be565b60405161086c91906139fc565b60405180910390f35b348015610880575f80fd5b506108896120c4565b6040516108969190613745565b60405180910390f35b3480156108aa575f80fd5b506108c560048036038101906108c09190613e09565b612154565b6040516108d291906136cc565b60405180910390f35b3480156108e6575f80fd5b506108ef6121e2565b005b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610963575061096282612470565b5b9050919050565b600c543410156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690613e91565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000013a560016015546014546109e29190613eaf565b6109ec9190613eaf565b1115610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490613f2c565b60405180910390fd5b5f6015546001601354610a409190613eaf565b610a4a9190613eaf565b9050610a563382612551565b60155f815480929190610a6890613f4a565b91905055505f600334610a7b91906134e0565b90505f73e4017661491fa0fbeae3734018e8d2b5cb218a9f73ffffffffffffffffffffffffffffffffffffffff1682604051610ab69061353d565b5f6040518083038185875af1925050503d805f8114610af0576040519150601f19603f3d011682016040523d82523d5f602084013e610af5565b606091505b5050905080610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b309061359b565b60405180910390fd5b5f732c4ae75ef6af3c67bbcf7897864b8d2da237f0d773ffffffffffffffffffffffffffffffffffffffff1683604051610b729061353d565b5f6040518083038185875af1925050503d805f8114610bac576040519150601f19603f3d011682016040523d82523d5f602084013e610bb1565b606091505b5050905080610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90613603565b60405180910390fd5b50505050565b60605f8054610c0990613fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3590613fbe565b8015610c805780601f10610c5757610100808354040283529160200191610c80565b820191905f5260205f20905b815481529060010190602001808311610c6357829003601f168201915b5050505050905090565b600d54341015610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613e91565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000013a56003601554601454610d029190613eaf565b610d0c9190613eaf565b1115610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490613f2c565b60405180910390fd5b5f5b6003811015610d9557610d8833826015546001601354610d6f9190613eaf565b610d799190613eaf565b610d839190613eaf565b612551565b8080600101915050610d4f565b50600360155f828254610da89190613eaf565b925050819055505f600334610dbd91906134e0565b90505f73e4017661491fa0fbeae3734018e8d2b5cb218a9f73ffffffffffffffffffffffffffffffffffffffff1682604051610df89061353d565b5f6040518083038185875af1925050503d805f8114610e32576040519150601f19603f3d011682016040523d82523d5f602084013e610e37565b606091505b5050905080610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e729061359b565b60405180910390fd5b5f732c4ae75ef6af3c67bbcf7897864b8d2da237f0d773ffffffffffffffffffffffffffffffffffffffff1683604051610eb49061353d565b5f6040518083038185875af1925050503d805f8114610eee576040519150601f19603f3d011682016040523d82523d5f602084013e610ef3565b606091505b5050905080610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90613603565b60405180910390fd5b505050565b5f610f468261256e565b610f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7c9061405e565b60405180910390fd5b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610fc782611752565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e906140ec565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110566125d6565b73ffffffffffffffffffffffffffffffffffffffff16148061108557506110848161107f6125d6565b612154565b5b6110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb9061417a565b60405180910390fd5b6110ce83836125dd565b505050565b739f9e3b9a36d79b4f5cba3f2e75a5fcab6393243873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c906141e2565b60405180910390fd5b80600b90816111649190614394565b5050565b5f600880549050905090565b5f6015546013546111859190613eaf565b905090565b61119b6111956125d6565b82612693565b6111da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d1906144d3565b60405180910390fd5b6111e583838361276f565b505050565b60135481565b5f6111fa836117fe565b821061123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614561565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b739f9e3b9a36d79b4f5cba3f2e75a5fcab6393243873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611309906141e2565b60405180910390fd5b80600a90816113219190614394565b5050565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5434101561138f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138690613e91565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000013a5600a6015546014546113c29190613eaf565b6113cc9190613eaf565b111561140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490613f2c565b60405180910390fd5b5f5b600a811015611455576114483382601554600160135461142f9190613eaf565b6114399190613eaf565b6114439190613eaf565b612551565b808060010191505061140f565b50600a60155f8282546114689190613eaf565b925050819055505f60033461147d91906134e0565b90505f73e4017661491fa0fbeae3734018e8d2b5cb218a9f73ffffffffffffffffffffffffffffffffffffffff16826040516114b89061353d565b5f6040518083038185875af1925050503d805f81146114f2576040519150601f19603f3d011682016040523d82523d5f602084013e6114f7565b606091505b505090508061153b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115329061359b565b60405180910390fd5b5f732c4ae75ef6af3c67bbcf7897864b8d2da237f0d773ffffffffffffffffffffffffffffffffffffffff16836040516115749061353d565b5f6040518083038185875af1925050503d805f81146115ae576040519150601f19603f3d011682016040523d82523d5f602084013e6115b3565b606091505b50509050806115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee90613603565b60405180910390fd5b505050565b61161683838360405180602001604052805f815250611d75565b505050565b60605f611627836117fe565b90505f8167ffffffffffffffff81111561164457611643613882565b5b6040519080825280602002602001820160405280156116725781602001602082028036833780820191505090505b5090505f5b828110156116b55761168985826111f0565b82828151811061169c5761169b61457f565b5b6020026020010181815250508080600101915050611677565b508092505050919050565b7f00000000000000000000000000000000000000000000000000000000000013a581565b5f6116ed611168565b821061172e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117259061461c565b60405180910390fd5b600882815481106117425761174161457f565b5b905f5260205f2001549050919050565b5f8060025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec906146aa565b60405180910390fd5b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490614738565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60155481565b6060600180546118c790613fbe565b80601f01602080910402602001604051908101604052809291908181526020018280546118f390613fbe565b801561193e5780601f106119155761010080835404028352916020019161193e565b820191905f5260205f20905b81548152906001019060200180831161192157829003601f168201915b5050505050905090565b6119506125d6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b4906147a0565b60405180910390fd5b8060055f6119c96125d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a726125d6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ab791906136cc565b60405180910390a35050565b600e54341015611b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aff90613e91565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000013a56005601554601454611b3b9190613eaf565b611b459190613eaf565b1115611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d90613f2c565b60405180910390fd5b5f5b6005811015611bce57611bc133826015546001601354611ba89190613eaf565b611bb29190613eaf565b611bbc9190613eaf565b612551565b8080600101915050611b88565b50600560155f828254611be19190613eaf565b925050819055505f600334611bf691906134e0565b90505f73e4017661491fa0fbeae3734018e8d2b5cb218a9f73ffffffffffffffffffffffffffffffffffffffff1682604051611c319061353d565b5f6040518083038185875af1925050503d805f8114611c6b576040519150601f19603f3d011682016040523d82523d5f602084013e611c70565b606091505b5050905080611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab9061359b565b60405180910390fd5b5f732c4ae75ef6af3c67bbcf7897864b8d2da237f0d773ffffffffffffffffffffffffffffffffffffffff1683604051611ced9061353d565b5f6040518083038185875af1925050503d805f8114611d27576040519150601f19603f3d011682016040523d82523d5f602084013e611d2c565b606091505b5050905080611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790613603565b60405180910390fd5b505050565b611d86611d806125d6565b83612693565b611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906144d3565b60405180910390fd5b611dd1848484846129bf565b50505050565b6060611de28261256e565b611e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e189061482e565b60405180910390fd5b5f611e2a612a1b565b90505f815111611e485760405180602001604052805f815250611e73565b80611e5284612aab565b604051602001611e639291906148d0565b6040516020818303038152906040525b915050919050565b5f8282905090505f3390505f5b8281101561209f57601354858583818110611ea657611ea561457f565b5b905060200201351115611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee59061496e565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e878785818110611f5557611f5461457f565b5b905060200201356040518263ffffffff1660e01b8152600401611f7891906139fc565b602060405180830381865afa158015611f93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fb791906149a0565b73ffffffffffffffffffffffffffffffffffffffff161461200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490614a15565b60405180910390fd5b61202f8585838181106120235761202261457f565b5b9050602002013561256e565b1561206f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206690614a7d565b60405180910390fd5b612092828686848181106120865761208561457f565b5b90506020020135612551565b8080600101915050611e88565b508160145f8282546120b19190613eaf565b9250508190555050505050565b60145481565b6060600b80546120d390613fbe565b80601f01602080910402602001604051908101604052809291908181526020018280546120ff90613fbe565b801561214a5780601f106121215761010080835404028352916020019161214a565b820191905f5260205f20905b81548152906001019060200180831161212d57829003601f168201915b5050505050905090565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f4790505f8111612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221f90614ae5565b60405180910390fd5b5f600267ffffffffffffffff81111561224457612243613882565b5b6040519080825280602002602001820160405280156122725781602001602082028036833780820191505090505b50905060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122df573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230391906149a0565b815f815181106123165761231561457f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073370a366f402e2e41cdbbe54ecec12aae0cce1955816001815181106123795761237861457f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60b4426123c19190613eaf565b905060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab5845f8561dead866040518663ffffffff1660e01b81526004016124269493929190614bf3565b5f6040518083038185885af1158015612441573d5f803e3d5ffd5b50505050506040513d5f823e3d601f19601f8201168201806040525081019061246a9190614d11565b50505050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061253a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061254a575061254982612c04565b5b9050919050565b61256a828260405180602001604052805f815250612c6d565b5050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b5f33905090565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661264d83611752565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f61269d8261256e565b6126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d390614dc8565b60405180910390fd5b5f6126e683611752565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061275557508373ffffffffffffffffffffffffffffffffffffffff1661273d84610f3c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061276657506127658185612154565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661278f82611752565b73ffffffffffffffffffffffffffffffffffffffff16146127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90614e56565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284a90614ee4565b60405180910390fd5b61285e838383612cc7565b6128685f826125dd565b600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546128b59190614f02565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546129099190613eaf565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6129ca84848461276f565b6129d684848484612dd7565b612a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0c90614fa5565b60405180910390fd5b50505050565b6060600a8054612a2a90613fbe565b80601f0160208091040260200160405190810160405280929190818152602001828054612a5690613fbe565b8015612aa15780601f10612a7857610100808354040283529160200191612aa1565b820191905f5260205f20905b815481529060010190602001808311612a8457829003601f168201915b5050505050905090565b60605f8203612af1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bff565b5f8290505f5b5f8214612b20578080612b0990613f4a565b915050600a82612b1991906134e0565b9150612af7565b5f8167ffffffffffffffff811115612b3b57612b3a613882565b5b6040519080825280601f01601f191660200182016040528015612b6d5781602001600182028036833780820191505090505b5090505b5f8514612bf857600182612b859190614f02565b9150600a85612b949190614fc3565b6030612ba09190613eaf565b60f81b818381518110612bb657612bb561457f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85612bf191906134e0565b9450612b71565b8093505050505b919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c778383612f59565b612c835f848484612dd7565b612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990614fa5565b60405180910390fd5b505050565b612cd283838361311d565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1357612d0e81613122565b612d52565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d5157612d508382613166565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d9357612d8e816132bc565b612dd2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612dd157612dd0828261337c565b5b5b505050565b5f612df78473ffffffffffffffffffffffffffffffffffffffff166133f4565b15612f4c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e206125d6565b8786866040518563ffffffff1660e01b8152600401612e429493929190615045565b6020604051808303815f875af1925050508015612e7d57506040513d601f19601f82011682018060405250810190612e7a91906150a3565b60015b612efc573d805f8114612eab576040519150601f19603f3d011682016040523d82523d5f602084013e612eb0565b606091505b505f815103612ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eeb90614fa5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f51565b600190505b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbe90615118565b60405180910390fd5b612fd08161256e565b15613010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300790615180565b60405180910390fd5b61301b5f8383612cc7565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546130689190613eaf565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f6001613172846117fe565b61317c9190614f02565b90505f60075f8481526020019081526020015f20549050818114613253575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f60016008805490506132cf9190614f02565b90505f60095f8481526020019081526020015f205490505f600883815481106132fb576132fa61457f565b5b905f5260205f2001549050806008838154811061331b5761331a61457f565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f905560088054806133635761336261519e565b5b600190038181905f5260205f20015f9055905550505050565b5f613386836117fe565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f80823b90505f8111915050919050565b5f82825260208201905092915050565b7f4e6f2045746865722073656e74000000000000000000000000000000000000005f82015250565b5f613449600d83613405565b915061345482613415565b602082019050919050565b5f6020820190508181035f8301526134768161343d565b9050919050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6134ea8261347d565b91506134f58361347d565b92508261350557613504613486565b5b828204905092915050565b5f81905092915050565b50565b5f6135285f83613510565b91506135338261351a565b5f82019050919050565b5f6135478261351d565b9150819050919050565b7f5472616e7366657220746f2053415241485f41444452455353206661696c65645f82015250565b5f613585602083613405565b915061359082613551565b602082019050919050565b5f6020820190508181035f8301526135b281613579565b9050919050565b7f5472616e7366657220746f20434f4d49435f41444452455353206661696c65645f82015250565b5f6135ed602083613405565b91506135f8826135b9565b602082019050919050565b5f6020820190508181035f83015261361a816135e1565b9050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61366681613632565b8114613670575f80fd5b50565b5f813590506136818161365d565b92915050565b5f6020828403121561369c5761369b61362a565b5b5f6136a984828501613673565b91505092915050565b5f8115159050919050565b6136c6816136b2565b82525050565b5f6020820190506136df5f8301846136bd565b92915050565b5f81519050919050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613717826136e5565b6137218185613405565b93506137318185602086016136ef565b61373a816136fd565b840191505092915050565b5f6020820190508181035f83015261375d818461370d565b905092915050565b61376e8161347d565b8114613778575f80fd5b50565b5f8135905061378981613765565b92915050565b5f602082840312156137a4576137a361362a565b5b5f6137b18482850161377b565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6137e3826137ba565b9050919050565b6137f3816137d9565b82525050565b5f60208201905061380c5f8301846137ea565b92915050565b61381b816137d9565b8114613825575f80fd5b50565b5f8135905061383681613812565b92915050565b5f80604083850312156138525761385161362a565b5b5f61385f85828601613828565b92505060206138708582860161377b565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6138b8826136fd565b810181811067ffffffffffffffff821117156138d7576138d6613882565b5b80604052505050565b5f6138e9613621565b90506138f582826138af565b919050565b5f67ffffffffffffffff82111561391457613913613882565b5b61391d826136fd565b9050602081019050919050565b828183375f83830152505050565b5f61394a613945846138fa565b6138e0565b9050828152602081018484840111156139665761396561387e565b5b61397184828561392a565b509392505050565b5f82601f83011261398d5761398c61387a565b5b813561399d848260208601613938565b91505092915050565b5f602082840312156139bb576139ba61362a565b5b5f82013567ffffffffffffffff8111156139d8576139d761362e565b5b6139e484828501613979565b91505092915050565b6139f68161347d565b82525050565b5f602082019050613a0f5f8301846139ed565b92915050565b5f805f60608486031215613a2c57613a2b61362a565b5b5f613a3986828701613828565b9350506020613a4a86828701613828565b9250506040613a5b8682870161377b565b9150509250925092565b5f819050919050565b5f613a88613a83613a7e846137ba565b613a65565b6137ba565b9050919050565b5f613a9982613a6e565b9050919050565b5f613aaa82613a8f565b9050919050565b613aba81613aa0565b82525050565b5f602082019050613ad35f830184613ab1565b92915050565b5f60208284031215613aee57613aed61362a565b5b5f613afb84828501613828565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613b368161347d565b82525050565b5f613b478383613b2d565b60208301905092915050565b5f602082019050919050565b5f613b6982613b04565b613b738185613b0e565b9350613b7e83613b1e565b805f5b83811015613bae578151613b958882613b3c565b9750613ba083613b53565b925050600181019050613b81565b5085935050505092915050565b5f6020820190508181035f830152613bd38184613b5f565b905092915050565b613be4816136b2565b8114613bee575f80fd5b50565b5f81359050613bff81613bdb565b92915050565b5f8060408385031215613c1b57613c1a61362a565b5b5f613c2885828601613828565b9250506020613c3985828601613bf1565b9150509250929050565b5f67ffffffffffffffff821115613c5d57613c5c613882565b5b613c66826136fd565b9050602081019050919050565b5f613c85613c8084613c43565b6138e0565b905082815260208101848484011115613ca157613ca061387e565b5b613cac84828561392a565b509392505050565b5f82601f830112613cc857613cc761387a565b5b8135613cd8848260208601613c73565b91505092915050565b5f805f8060808587031215613cf957613cf861362a565b5b5f613d0687828801613828565b9450506020613d1787828801613828565b9350506040613d288782880161377b565b925050606085013567ffffffffffffffff811115613d4957613d4861362e565b5b613d5587828801613cb4565b91505092959194509250565b5f80fd5b5f80fd5b5f8083601f840112613d7e57613d7d61387a565b5b8235905067ffffffffffffffff811115613d9b57613d9a613d61565b5b602083019150836020820283011115613db757613db6613d65565b5b9250929050565b5f8060208385031215613dd457613dd361362a565b5b5f83013567ffffffffffffffff811115613df157613df061362e565b5b613dfd85828601613d69565b92509250509250929050565b5f8060408385031215613e1f57613e1e61362a565b5b5f613e2c85828601613828565b9250506020613e3d85828601613828565b9150509250929050565b7f45746865722073656e74206973206e6f7420636f7272656374000000000000005f82015250565b5f613e7b601983613405565b9150613e8682613e47565b602082019050919050565b5f6020820190508181035f830152613ea881613e6f565b9050919050565b5f613eb98261347d565b9150613ec48361347d565b9250828201905080821115613edc57613edb6134b3565b5b92915050565b7f45786365656473206d6178696d756d20737570706c79000000000000000000005f82015250565b5f613f16601683613405565b9150613f2182613ee2565b602082019050919050565b5f6020820190508181035f830152613f4381613f0a565b9050919050565b5f613f548261347d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f8657613f856134b3565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613fd557607f821691505b602082108103613fe857613fe7613f91565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f614048602c83613405565b915061405382613fee565b604082019050919050565b5f6020820190508181035f8301526140758161403c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f6140d6602183613405565b91506140e18261407c565b604082019050919050565b5f6020820190508181035f830152614103816140ca565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f775f8201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b5f614164603883613405565b915061416f8261410a565b604082019050919050565b5f6020820190508181035f83015261419181614158565b9050919050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f6141cc600e83613405565b91506141d782614198565b602082019050919050565b5f6020820190508181035f8301526141f9816141c0565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261425c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614221565b6142668683614221565b95508019841693508086168417925050509392505050565b5f61429861429361428e8461347d565b613a65565b61347d565b9050919050565b5f819050919050565b6142b18361427e565b6142c56142bd8261429f565b84845461422d565b825550505050565b5f90565b6142d96142cd565b6142e48184846142a8565b505050565b5b81811015614307576142fc5f826142d1565b6001810190506142ea565b5050565b601f82111561434c5761431d81614200565b61432684614212565b81016020851015614335578190505b61434961434185614212565b8301826142e9565b50505b505050565b5f82821c905092915050565b5f61436c5f1984600802614351565b1980831691505092915050565b5f614384838361435d565b9150826002028217905092915050565b61439d826136e5565b67ffffffffffffffff8111156143b6576143b5613882565b5b6143c08254613fbe565b6143cb82828561430b565b5f60209050601f8311600181146143fc575f84156143ea578287015190505b6143f48582614379565b86555061445b565b601f19841661440a86614200565b5f5b828110156144315784890151825560018201915060208501945060208101905061440c565b8683101561444e578489015161444a601f89168261435d565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f5f8201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b5f6144bd603183613405565b91506144c882614463565b604082019050919050565b5f6020820190508181035f8301526144ea816144b1565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f755f8201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b5f61454b602b83613405565b9150614556826144f1565b604082019050919050565b5f6020820190508181035f8301526145788161453f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f5f8201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b5f614606602c83613405565b9150614611826145ac565b604082019050919050565b5f6020820190508181035f830152614633816145fa565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e65786973745f8201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b5f614694602983613405565b915061469f8261463a565b604082019050919050565b5f6020820190508181035f8301526146c181614688565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f614722602a83613405565b915061472d826146c8565b604082019050919050565b5f6020820190508181035f83015261474f81614716565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f61478a601983613405565b915061479582614756565b602082019050919050565b5f6020820190508181035f8301526147b78161477e565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f614818602f83613405565b9150614823826147be565b604082019050919050565b5f6020820190508181035f8301526148458161480c565b9050919050565b5f81905092915050565b5f614860826136e5565b61486a818561484c565b935061487a8185602086016136ef565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6148ba60058361484c565b91506148c582614886565b600582019050919050565b5f6148db8285614856565b91506148e78284614856565b91506148f2826148ae565b91508190509392505050565b7f546f6b656e204944206d757374206265206265747765656e203020616e6420315f8201527f3835300000000000000000000000000000000000000000000000000000000000602082015250565b5f614958602383613405565b9150614963826148fe565b604082019050919050565b5f6020820190508181035f8301526149858161494c565b9050919050565b5f8151905061499a81613812565b92915050565b5f602082840312156149b5576149b461362a565b5b5f6149c28482850161498c565b91505092915050565b7f596f7520646f206e6f74206f776e207468697320746f6b656e204944000000005f82015250565b5f6149ff601c83613405565b9150614a0a826149cb565b602082019050919050565b5f6020820190508181035f830152614a2c816149f3565b9050919050565b7f546f6b656e20616c7265616479206d696e7465640000000000000000000000005f82015250565b5f614a67601483613405565b9150614a7282614a33565b602082019050919050565b5f6020820190508181035f830152614a9481614a5b565b9050919050565b7f436f6e747261637420686173206e6f20457468657220746f20737761700000005f82015250565b5f614acf601d83613405565b9150614ada82614a9b565b602082019050919050565b5f6020820190508181035f830152614afc81614ac3565b9050919050565b5f819050919050565b5f614b26614b21614b1c84614b03565b613a65565b61347d565b9050919050565b614b3681614b0c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b6e816137d9565b82525050565b5f614b7f8383614b65565b60208301905092915050565b5f602082019050919050565b5f614ba182614b3c565b614bab8185614b46565b9350614bb683614b56565b805f5b83811015614be6578151614bcd8882614b74565b9750614bd883614b8b565b925050600181019050614bb9565b5085935050505092915050565b5f608082019050614c065f830187614b2d565b8181036020830152614c188186614b97565b9050614c2760408301856137ea565b614c3460608301846139ed565b95945050505050565b5f67ffffffffffffffff821115614c5757614c56613882565b5b602082029050602081019050919050565b5f81519050614c7681613765565b92915050565b5f614c8e614c8984614c3d565b6138e0565b90508083825260208201905060208402830185811115614cb157614cb0613d65565b5b835b81811015614cda5780614cc68882614c68565b845260208401935050602081019050614cb3565b5050509392505050565b5f82601f830112614cf857614cf761387a565b5b8151614d08848260208601614c7c565b91505092915050565b5f60208284031215614d2657614d2561362a565b5b5f82015167ffffffffffffffff811115614d4357614d4261362e565b5b614d4f84828501614ce4565b91505092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f614db2602c83613405565b9150614dbd82614d58565b604082019050919050565b5f6020820190508181035f830152614ddf81614da6565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e207468617420695f8201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b5f614e40602983613405565b9150614e4b82614de6565b604082019050919050565b5f6020820190508181035f830152614e6d81614e34565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614ece602483613405565b9150614ed982614e74565b604082019050919050565b5f6020820190508181035f830152614efb81614ec2565b9050919050565b5f614f0c8261347d565b9150614f178361347d565b9250828203905081811115614f2f57614f2e6134b3565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f614f8f603283613405565b9150614f9a82614f35565b604082019050919050565b5f6020820190508181035f830152614fbc81614f83565b9050919050565b5f614fcd8261347d565b9150614fd88361347d565b925082614fe857614fe7613486565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61501782614ff3565b6150218185614ffd565b93506150318185602086016136ef565b61503a816136fd565b840191505092915050565b5f6080820190506150585f8301876137ea565b61506560208301866137ea565b61507260408301856139ed565b8181036060830152615084818461500d565b905095945050505050565b5f8151905061509d8161365d565b92915050565b5f602082840312156150b8576150b761362a565b5b5f6150c58482850161508f565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f615102602083613405565b915061510d826150ce565b602082019050919050565b5f6020820190508181035f83015261512f816150f6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f61516a601c83613405565b915061517582615136565b602082019050919050565b5f6020820190508181035f8301526151978161515e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212204ae5954644e6870f378c11b749faa021006e8145012b9cb799114bded02a954264736f6c634300081a0033
Deployed Bytecode Sourcemap
42938:9039:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51622:1;51610:9;:13;51602:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;51650:20;51685:1;51673:9;:13;;;;:::i;:::-;51650:36;;51696:17;43816:42;51719:18;;51745:12;51719:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51695:67;;;51777:12;51769:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;51836:17;43906:42;51859:18;;51885:12;51859:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51835:67;;;51917:12;51909:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;51595:379;36142:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46413:703;;;:::i;:::-;;23519:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47124:726;;;:::i;:::-;;25075:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24598:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50137:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36886:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49331:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26068:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44170:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36492:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49920:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43993:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48592:731;;;:::i;:::-;;26515:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49551:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43332:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37076:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23160:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22837:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44311:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23688:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25421:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47858:726;;;:::i;:::-;;26771:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23863:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45700:661;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44275:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50560:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25812:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50669:814;;;;;;;;;;;;;:::i;:::-;;36142:266;36260:4;36312:35;36297:50;;;:11;:50;;;;:103;;;;36364:36;36388:11;36364:23;:36::i;:::-;36297:103;36277:123;;36142:266;;;:::o;46413:703::-;46477:7;;46464:9;:20;;46456:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46575:14;46570:1;46550:17;;46533:14;;:34;;;;:::i;:::-;:38;;;;:::i;:::-;:56;;46525:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;46629:18;46674:17;;46670:1;46650:17;;:21;;;;:::i;:::-;:41;;;;:::i;:::-;46629:62;;46702:33;46712:10;46724;46702:9;:33::i;:::-;46746:17;;:19;;;;;;;;;:::i;:::-;;;;;;46778:20;46813:1;46801:9;:13;;;;:::i;:::-;46778:36;;46826:17;43816:42;46849:18;;46875:12;46849:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46825:67;;;46911:12;46903:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46974:17;43906:42;46997:18;;47023:12;46997:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46973:67;;;47059:12;47051:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46445:671;;;;46413:703::o;23519:100::-;23573:13;23606:5;23599:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23519:100;:::o;47124:726::-;47188:7;;47175:9;:20;;47167:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47286:14;47281:1;47261:17;;47244:14;;:34;;;;:::i;:::-;:38;;;;:::i;:::-;:56;;47236:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;47345:9;47340:127;47364:1;47360;:5;47340:127;;;47387:68;47397:10;47453:1;47433:17;;47429:1;47409:17;;:21;;;;:::i;:::-;:41;;;;:::i;:::-;:45;;;;:::i;:::-;47387:9;:68::i;:::-;47367:3;;;;;;;47340:127;;;;47498:1;47477:17;;:22;;;;;;;:::i;:::-;;;;;;;;47512:20;47547:1;47535:9;:13;;;;:::i;:::-;47512:36;;47560:17;43816:42;47583:18;;47609:12;47583:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47559:67;;;47645:12;47637:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;47708:17;43906:42;47731:18;;47757:12;47731:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47707:67;;;47793:12;47785:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;47156:694;;;47124:726::o;25075:274::-;25167:7;25209:16;25217:7;25209;:16::i;:::-;25187:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25317:15;:24;25333:7;25317:24;;;;;;;;;;;;;;;;;;;;;25310:31;;25075:274;;;:::o;24598:411::-;24679:13;24695:23;24710:7;24695:14;:23::i;:::-;24679:39;;24743:5;24737:11;;:2;:11;;;24729:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24837:5;24821:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24846:37;24863:5;24870:12;:10;:12::i;:::-;24846:16;:37::i;:::-;24821:62;24799:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24980:21;24989:2;24993:7;24980:8;:21::i;:::-;24668:341;24598:411;;:::o;50137:221::-;50241:42;50227:56;;:10;:56;;;50219:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;50332:18;50313:16;:37;;;;;;:::i;:::-;;50137:221;:::o;36886:113::-;36947:7;36974:10;:17;;;;36967:24;;36886:113;:::o;49331:126::-;49385:7;49432:17;;49412;;:37;;;;:::i;:::-;49405:44;;49331:126;:::o;26068:376::-;26277:41;26296:12;:10;:12::i;:::-;26310:7;26277:18;:41::i;:::-;26255:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26408:28;26418:4;26424:2;26428:7;26408:9;:28::i;:::-;26068:376;;;:::o;44170:39::-;;;;:::o;36492:318::-;36614:7;36664:23;36681:5;36664:16;:23::i;:::-;36656:5;:31;36634:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;36776:12;:19;36789:5;36776:19;;;;;;;;;;;;;;;:26;36796:5;36776:26;;;;;;;;;;;;36769:33;;36492:318;;;;:::o;49920:209::-;50018:42;50004:56;;:10;:56;;;49996:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;50106:15;50090:13;:31;;;;;;:::i;:::-;;49920:209;:::o;43993:31::-;;;;;;;;;;;;;:::o;48592:731::-;48657:8;;48644:9;:21;;48636:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;48757:14;48751:2;48731:17;;48714:14;;:34;;;;:::i;:::-;:39;;;;:::i;:::-;:57;;48706:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;48816:9;48811:128;48835:2;48831:1;:6;48811:128;;;48859:68;48869:10;48925:1;48905:17;;48901:1;48881:17;;:21;;;;:::i;:::-;:41;;;;:::i;:::-;:45;;;;:::i;:::-;48859:9;:68::i;:::-;48839:3;;;;;;;48811:128;;;;48970:2;48949:17;;:23;;;;;;;:::i;:::-;;;;;;;;48985:20;49020:1;49008:9;:13;;;;:::i;:::-;48985:36;;49033:17;43816:42;49056:18;;49082:12;49056:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49032:67;;;49118:12;49110:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;49181:17;43906:42;49204:18;;49230:12;49204:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49180:67;;;49266:12;49258:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;48625:698;;;48592:731::o;26515:185::-;26653:39;26670:4;26676:2;26680:7;26653:39;;;;;;;;;;;;:16;:39::i;:::-;26515:185;;;:::o;49551:361::-;49627:16;49656:18;49677:17;49687:6;49677:9;:17::i;:::-;49656:38;;49707:25;49749:10;49735:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49707:53;;49776:9;49771:108;49791:10;49787:1;:14;49771:108;;;49837:30;49857:6;49865:1;49837:19;:30::i;:::-;49823:8;49832:1;49823:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49803:3;;;;;;;49771:108;;;;49896:8;49889:15;;;;49551:361;;;:::o;43332:46::-;;;:::o;37076:286::-;37167:7;37217:30;:28;:30::i;:::-;37209:5;:38;37187:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;37337:10;37348:5;37337:17;;;;;;;;:::i;:::-;;;;;;;;;;37330:24;;37076:286;;;:::o;23160:292::-;23248:7;23268:13;23284:7;:16;23292:7;23284:16;;;;;;;;;;;;;;;;;;;;;23268:32;;23350:1;23333:19;;:5;:19;;;23311:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;23439:5;23432:12;;;23160:292;;;:::o;22837:261::-;22925:7;22984:1;22967:19;;:5;:19;;;22945:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23074:9;:16;23084:5;23074:16;;;;;;;;;;;;;;;;23067:23;;22837:261;;;:::o;44311:32::-;;;;:::o;23688:104::-;23744:13;23777:7;23770:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23688:104;:::o;25421:320::-;25561:12;:10;:12::i;:::-;25549:24;;:8;:24;;;25541:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25661:8;25616:18;:32;25635:12;:10;:12::i;:::-;25616:32;;;;;;;;;;;;;;;:42;25649:8;25616:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25714:8;25685:48;;25700:12;:10;:12::i;:::-;25685:48;;;25724:8;25685:48;;;;;;:::i;:::-;;;;;;;;25421:320;;:::o;47858:726::-;47922:7;;47909:9;:20;;47901:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48020:14;48015:1;47995:17;;47978:14;;:34;;;;:::i;:::-;:38;;;;:::i;:::-;:56;;47970:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;48079:9;48074:127;48098:1;48094;:5;48074:127;;;48121:68;48131:10;48187:1;48167:17;;48163:1;48143:17;;:21;;;;:::i;:::-;:41;;;;:::i;:::-;:45;;;;:::i;:::-;48121:9;:68::i;:::-;48101:3;;;;;;;48074:127;;;;48232:1;48211:17;;:22;;;;;;;:::i;:::-;;;;;;;;48246:20;48281:1;48269:9;:13;;;;:::i;:::-;48246:36;;48294:17;43816:42;48317:18;;48343:12;48317:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48293:67;;;48379:12;48371:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;48442:17;43906:42;48465:18;;48491:12;48465:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48441:67;;;48527:12;48519:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;47890:694;;;47858:726::o;26771:365::-;26960:41;26979:12;:10;:12::i;:::-;26993:7;26960:18;:41::i;:::-;26938:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27089:39;27103:4;27109:2;27113:7;27122:5;27089:13;:39::i;:::-;26771:365;;;;:::o;23863:442::-;23952:13;24000:16;24008:7;24000;:16::i;:::-;23978:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;24104:21;24128:10;:8;:10::i;:::-;24104:34;;24193:1;24175:7;24169:21;:25;:128;;;;;;;;;;;;;;;;;24238:7;24247:18;:7;:16;:18::i;:::-;24221:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24169:128;24149:148;;;23863:442;;;:::o;45700:661::-;45765:14;45782:8;;:15;;45765:32;;45808:14;45825:10;45808:27;;45853:9;45848:389;45872:6;45868:1;:10;45848:389;;;45920:17;;45905:8;;45914:1;45905:11;;;;;;;:::i;:::-;;;;;;;;:32;;45897:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;46036:6;46000:42;;:11;;;;;;;;;;;:19;;;46020:8;;46029:1;46020:11;;;;;;;:::i;:::-;;;;;;;;46000:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;45992:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;46099:20;46107:8;;46116:1;46107:11;;;;;;;:::i;:::-;;;;;;;;46099:7;:20::i;:::-;46098:21;46090:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;46161:30;46171:6;46179:8;;46188:1;46179:11;;;;;;;:::i;:::-;;;;;;;;46161:9;:30::i;:::-;46220:3;;;;;;;45848:389;;;;46347:6;46329:14;;:24;;;;;;;:::i;:::-;;;;;;;;45754:607;;45700:661;;:::o;44275:29::-;;;;:::o;50560:101::-;50604:13;50637:16;50630:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50560:101;:::o;25812:189::-;25934:4;25958:18;:25;25977:5;25958:25;;;;;;;;;;;;;;;:35;25984:8;25958:35;;;;;;;;;;;;;;;;;;;;;;;;;25951:42;;25812:189;;;;:::o;50669:814::-;50709:17;50729:21;50709:41;;50829:1;50817:9;:13;50809:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50949:21;50987:1;50973:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50949:40;;51010:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51000:4;51005:1;51000:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;43615:42;51041:4;51046:1;51041:7;;;;;;;;:::i;:::-;;;;;;;:22;;;;;;;;;;;51130:16;51167:3;51149:15;:21;;;;:::i;:::-;51130:40;;51242:13;;;;;;;;;;;:35;;;51285:9;51310:1;51367:4;43704:42;51456:8;51242:233;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;50698:785;;;50669:814::o;22452:321::-;22570:4;22622:25;22607:40;;;:11;:40;;;;:105;;;;22679:33;22664:48;;;:11;:48;;;;22607:105;:158;;;;22729:36;22753:11;22729:23;:36::i;:::-;22607:158;22587:178;;22452:321;;;:::o;29755:110::-;29831:26;29841:2;29845:7;29831:26;;;;;;;;;;;;:9;:26::i;:::-;29755:110;;:::o;28683:127::-;28748:4;28800:1;28772:30;;:7;:16;28780:7;28772:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28765:37;;28683:127;;;:::o;17974:98::-;18027:7;18054:10;18047:17;;17974:98;:::o;32790:174::-;32892:2;32865:15;:24;32881:7;32865:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32948:7;32944:2;32910:46;;32919:23;32934:7;32919:14;:23::i;:::-;32910:46;;;;;;;;;;;;32790:174;;:::o;28977:436::-;29095:4;29134:16;29142:7;29134;:16::i;:::-;29112:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29233:13;29249:23;29264:7;29249:14;:23::i;:::-;29233:39;;29302:5;29291:16;;:7;:16;;;:64;;;;29348:7;29324:31;;:20;29336:7;29324:11;:20::i;:::-;:31;;;29291:64;:113;;;;29372:32;29389:5;29396:7;29372:16;:32::i;:::-;29291:113;29283:122;;;28977:436;;;;:::o;32057:615::-;32230:4;32203:31;;:23;32218:7;32203:14;:23::i;:::-;:31;;;32181:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;32336:1;32322:16;;:2;:16;;;32314:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32392:39;32413:4;32419:2;32423:7;32392:20;:39::i;:::-;32496:29;32513:1;32517:7;32496:8;:29::i;:::-;32557:1;32538:9;:15;32548:4;32538:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32586:1;32569:9;:13;32579:2;32569:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32617:2;32598:7;:16;32606:7;32598:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32656:7;32652:2;32637:27;;32646:4;32637:27;;;;;;;;;;;;32057:615;;;:::o;28018:352::-;28175:28;28185:4;28191:2;28195:7;28175:9;:28::i;:::-;28236:48;28259:4;28265:2;28269:7;28278:5;28236:22;:48::i;:::-;28214:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;28018:352;;;;:::o;50399:114::-;50459:13;50492;50485:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50399:114;:::o;18544:723::-;18600:13;18830:1;18821:5;:10;18817:53;;18848:10;;;;;;;;;;;;;;;;;;;;;18817:53;18880:12;18895:5;18880:20;;18911:14;18936:78;18951:1;18943:4;:9;18936:78;;18969:8;;;;;:::i;:::-;;;;19000:2;18992:10;;;;;:::i;:::-;;;18936:78;;;19024:19;19056:6;19046:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19024:39;;19074:154;19090:1;19081:5;:10;19074:154;;19118:1;19108:11;;;;;:::i;:::-;;;19185:2;19177:5;:10;;;;:::i;:::-;19164:2;:24;;;;:::i;:::-;19151:39;;19134:6;19141;19134:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19214:2;19205:11;;;;;:::i;:::-;;;19074:154;;;19252:6;19238:21;;;;;18544:723;;;;:::o;2319:173::-;2420:4;2459:25;2444:40;;;:11;:40;;;;2437:47;;2319:173;;;:::o;30092:321::-;30222:18;30228:2;30232:7;30222:5;:18::i;:::-;30273:54;30304:1;30308:2;30312:7;30321:5;30273:22;:54::i;:::-;30251:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30092:321;;;:::o;37975:589::-;38119:45;38146:4;38152:2;38156:7;38119:26;:45::i;:::-;38197:1;38181:18;;:4;:18;;;38177:187;;38216:40;38248:7;38216:31;:40::i;:::-;38177:187;;;38286:2;38278:10;;:4;:10;;;38274:90;;38305:47;38338:4;38344:7;38305:32;:47::i;:::-;38274:90;38177:187;38392:1;38378:16;;:2;:16;;;38374:183;;38411:45;38448:7;38411:36;:45::i;:::-;38374:183;;;38484:4;38478:10;;:2;:10;;;38474:83;;38505:40;38533:2;38537:7;38505:27;:40::i;:::-;38474:83;38374:183;37975:589;;;:::o;33529:1053::-;33684:4;33705:15;:2;:13;;;:15::i;:::-;33701:874;;;33774:2;33758:36;;;33817:12;:10;:12::i;:::-;33852:4;33879:7;33909:5;33758:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33737:783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34137:1;34120:6;:13;:18;34116:389;;34163:108;;;;;;;;;;:::i;:::-;;;;;;;;34116:389;34455:6;34449:13;34440:6;34436:2;34432:15;34425:38;33737:783;34007:45;;;33997:55;;;:6;:55;;;;33990:62;;;;;33701:874;34559:4;34552:11;;33529:1053;;;;;;;:::o;30749:382::-;30843:1;30829:16;;:2;:16;;;30821:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30902:16;30910:7;30902;:16::i;:::-;30901:17;30893:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30964:45;30993:1;30997:2;31001:7;30964:20;:45::i;:::-;31039:1;31022:9;:13;31032:2;31022:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31070:2;31051:7;:16;31059:7;31051:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31115:7;31111:2;31090:33;;31107:1;31090:33;;;;;;;;;;;;30749:382;;:::o;35195:126::-;;;;:::o;39287:164::-;39391:10;:17;;;;39364:15;:24;39380:7;39364:24;;;;;;;;;;;:44;;;;39419:10;39435:7;39419:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39287:164;:::o;40078:1013::-;40369:22;40419:1;40394:22;40411:4;40394:16;:22::i;:::-;:26;;;;:::i;:::-;40369:51;;40431:18;40452:17;:26;40470:7;40452:26;;;;;;;;;;;;40431:47;;40599:14;40585:10;:28;40581:328;;40630:19;40652:12;:18;40665:4;40652:18;;;;;;;;;;;;;;;:34;40671:14;40652:34;;;;;;;;;;;;40630:56;;40736:11;40703:12;:18;40716:4;40703:18;;;;;;;;;;;;;;;:30;40722:10;40703:30;;;;;;;;;;;:44;;;;40853:10;40820:17;:30;40838:11;40820:30;;;;;;;;;;;:43;;;;40615:294;40581:328;41005:17;:26;41023:7;41005:26;;;;;;;;;;;40998:33;;;41049:12;:18;41062:4;41049:18;;;;;;;;;;;;;;;:34;41068:14;41049:34;;;;;;;;;;;41042:41;;;40184:907;;40078:1013;;:::o;41386:1079::-;41639:22;41684:1;41664:10;:17;;;;:21;;;;:::i;:::-;41639:46;;41696:18;41717:15;:24;41733:7;41717:24;;;;;;;;;;;;41696:45;;42068:19;42090:10;42101:14;42090:26;;;;;;;;:::i;:::-;;;;;;;;;;42068:48;;42154:11;42129:10;42140;42129:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42265:10;42234:15;:28;42250:11;42234:28;;;;;;;;;;;:41;;;;42406:15;:24;42422:7;42406:24;;;;;;;;;;;42399:31;;;42441:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41457:1008;;;41386:1079;:::o;38865:221::-;38950:14;38967:20;38984:2;38967:16;:20::i;:::-;38950:37;;39025:7;38998:12;:16;39011:2;38998:16;;;;;;;;;;;;;;;:24;39015:6;38998:24;;;;;;;;;;;:34;;;;39072:6;39043:17;:26;39061:7;39043:26;;;;;;;;;;;:35;;;;38939:147;38865:221;;:::o;9478:444::-;9538:4;9746:12;9870:7;9858:20;9850:28;;9913:1;9906:4;:8;9899:15;;;9478:444;;;:::o;7:169:1:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:163::-;322:15;318:1;310:6;306:14;299:39;182:163;:::o;351:366::-;493:3;514:67;578:2;573:3;514:67;:::i;:::-;507:74;;590:93;679:3;590:93;:::i;:::-;708:2;703:3;699:12;692:19;;351:366;;;:::o;723:419::-;889:4;927:2;916:9;912:18;904:26;;976:9;970:4;966:20;962:1;951:9;947:17;940:47;1004:131;1130:4;1004:131;:::i;:::-;996:139;;723:419;;;:::o;1148:77::-;1185:7;1214:5;1203:16;;1148:77;;;:::o;1231:180::-;1279:77;1276:1;1269:88;1376:4;1373:1;1366:15;1400:4;1397:1;1390:15;1417:180;1465:77;1462:1;1455:88;1562:4;1559:1;1552:15;1586:4;1583:1;1576:15;1603:185;1643:1;1660:20;1678:1;1660:20;:::i;:::-;1655:25;;1694:20;1712:1;1694:20;:::i;:::-;1689:25;;1733:1;1723:35;;1738:18;;:::i;:::-;1723:35;1780:1;1777;1773:9;1768:14;;1603:185;;;;:::o;1794:147::-;1895:11;1932:3;1917:18;;1794:147;;;;:::o;1947:114::-;;:::o;2067:398::-;2226:3;2247:83;2328:1;2323:3;2247:83;:::i;:::-;2240:90;;2339:93;2428:3;2339:93;:::i;:::-;2457:1;2452:3;2448:11;2441:18;;2067:398;;;:::o;2471:379::-;2655:3;2677:147;2820:3;2677:147;:::i;:::-;2670:154;;2841:3;2834:10;;2471:379;;;:::o;2856:182::-;2996:34;2992:1;2984:6;2980:14;2973:58;2856:182;:::o;3044:366::-;3186:3;3207:67;3271:2;3266:3;3207:67;:::i;:::-;3200:74;;3283:93;3372:3;3283:93;:::i;:::-;3401:2;3396:3;3392:12;3385:19;;3044:366;;;:::o;3416:419::-;3582:4;3620:2;3609:9;3605:18;3597:26;;3669:9;3663:4;3659:20;3655:1;3644:9;3640:17;3633:47;3697:131;3823:4;3697:131;:::i;:::-;3689:139;;3416:419;;;:::o;3841:182::-;3981:34;3977:1;3969:6;3965:14;3958:58;3841:182;:::o;4029:366::-;4171:3;4192:67;4256:2;4251:3;4192:67;:::i;:::-;4185:74;;4268:93;4357:3;4268:93;:::i;:::-;4386:2;4381:3;4377:12;4370:19;;4029:366;;;:::o;4401:419::-;4567:4;4605:2;4594:9;4590:18;4582:26;;4654:9;4648:4;4644:20;4640:1;4629:9;4625:17;4618:47;4682:131;4808:4;4682:131;:::i;:::-;4674:139;;4401:419;;;:::o;4826:75::-;4859:6;4892:2;4886:9;4876:19;;4826:75;:::o;4907:117::-;5016:1;5013;5006:12;5030:117;5139:1;5136;5129:12;5153:149;5189:7;5229:66;5222:5;5218:78;5207:89;;5153:149;;;:::o;5308:120::-;5380:23;5397:5;5380:23;:::i;:::-;5373:5;5370:34;5360:62;;5418:1;5415;5408:12;5360:62;5308:120;:::o;5434:137::-;5479:5;5517:6;5504:20;5495:29;;5533:32;5559:5;5533:32;:::i;:::-;5434:137;;;;:::o;5577:327::-;5635:6;5684:2;5672:9;5663:7;5659:23;5655:32;5652:119;;;5690:79;;:::i;:::-;5652:119;5810:1;5835:52;5879:7;5870:6;5859:9;5855:22;5835:52;:::i;:::-;5825:62;;5781:116;5577:327;;;;:::o;5910:90::-;5944:7;5987:5;5980:13;5973:21;5962:32;;5910:90;;;:::o;6006:109::-;6087:21;6102:5;6087:21;:::i;:::-;6082:3;6075:34;6006:109;;:::o;6121:210::-;6208:4;6246:2;6235:9;6231:18;6223:26;;6259:65;6321:1;6310:9;6306:17;6297:6;6259:65;:::i;:::-;6121:210;;;;:::o;6337:99::-;6389:6;6423:5;6417:12;6407:22;;6337:99;;;:::o;6442:139::-;6531:6;6526:3;6521;6515:23;6572:1;6563:6;6558:3;6554:16;6547:27;6442:139;;;:::o;6587:102::-;6628:6;6679:2;6675:7;6670:2;6663:5;6659:14;6655:28;6645:38;;6587:102;;;:::o;6695:377::-;6783:3;6811:39;6844:5;6811:39;:::i;:::-;6866:71;6930:6;6925:3;6866:71;:::i;:::-;6859:78;;6946:65;7004:6;6999:3;6992:4;6985:5;6981:16;6946:65;:::i;:::-;7036:29;7058:6;7036:29;:::i;:::-;7031:3;7027:39;7020:46;;6787:285;6695:377;;;;:::o;7078:313::-;7191:4;7229:2;7218:9;7214:18;7206:26;;7278:9;7272:4;7268:20;7264:1;7253:9;7249:17;7242:47;7306:78;7379:4;7370:6;7306:78;:::i;:::-;7298:86;;7078:313;;;;:::o;7397:122::-;7470:24;7488:5;7470:24;:::i;:::-;7463:5;7460:35;7450:63;;7509:1;7506;7499:12;7450:63;7397:122;:::o;7525:139::-;7571:5;7609:6;7596:20;7587:29;;7625:33;7652:5;7625:33;:::i;:::-;7525:139;;;;:::o;7670:329::-;7729:6;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;7670:329;;;;:::o;8005:126::-;8042:7;8082:42;8075:5;8071:54;8060:65;;8005:126;;;:::o;8137:96::-;8174:7;8203:24;8221:5;8203:24;:::i;:::-;8192:35;;8137:96;;;:::o;8239:118::-;8326:24;8344:5;8326:24;:::i;:::-;8321:3;8314:37;8239:118;;:::o;8363:222::-;8456:4;8494:2;8483:9;8479:18;8471:26;;8507:71;8575:1;8564:9;8560:17;8551:6;8507:71;:::i;:::-;8363:222;;;;:::o;8591:122::-;8664:24;8682:5;8664:24;:::i;:::-;8657:5;8654:35;8644:63;;8703:1;8700;8693:12;8644:63;8591:122;:::o;8719:139::-;8765:5;8803:6;8790:20;8781:29;;8819:33;8846:5;8819:33;:::i;:::-;8719:139;;;;:::o;8864:474::-;8932:6;8940;8989:2;8977:9;8968:7;8964:23;8960:32;8957:119;;;8995:79;;:::i;:::-;8957:119;9115:1;9140:53;9185:7;9176:6;9165:9;9161:22;9140:53;:::i;:::-;9130:63;;9086:117;9242:2;9268:53;9313:7;9304:6;9293:9;9289:22;9268:53;:::i;:::-;9258:63;;9213:118;8864:474;;;;;:::o;9344:117::-;9453:1;9450;9443:12;9467:117;9576:1;9573;9566:12;9590:180;9638:77;9635:1;9628:88;9735:4;9732:1;9725:15;9759:4;9756:1;9749:15;9776:281;9859:27;9881:4;9859:27;:::i;:::-;9851:6;9847:40;9989:6;9977:10;9974:22;9953:18;9941:10;9938:34;9935:62;9932:88;;;10000:18;;:::i;:::-;9932:88;10040:10;10036:2;10029:22;9819:238;9776:281;;:::o;10063:129::-;10097:6;10124:20;;:::i;:::-;10114:30;;10153:33;10181:4;10173:6;10153:33;:::i;:::-;10063:129;;;:::o;10198:308::-;10260:4;10350:18;10342:6;10339:30;10336:56;;;10372:18;;:::i;:::-;10336:56;10410:29;10432:6;10410:29;:::i;:::-;10402:37;;10494:4;10488;10484:15;10476:23;;10198:308;;;:::o;10512:148::-;10610:6;10605:3;10600;10587:30;10651:1;10642:6;10637:3;10633:16;10626:27;10512:148;;;:::o;10666:425::-;10744:5;10769:66;10785:49;10827:6;10785:49;:::i;:::-;10769:66;:::i;:::-;10760:75;;10858:6;10851:5;10844:21;10896:4;10889:5;10885:16;10934:3;10925:6;10920:3;10916:16;10913:25;10910:112;;;10941:79;;:::i;:::-;10910:112;11031:54;11078:6;11073:3;11068;11031:54;:::i;:::-;10750:341;10666:425;;;;;:::o;11111:340::-;11167:5;11216:3;11209:4;11201:6;11197:17;11193:27;11183:122;;11224:79;;:::i;:::-;11183:122;11341:6;11328:20;11366:79;11441:3;11433:6;11426:4;11418:6;11414:17;11366:79;:::i;:::-;11357:88;;11173:278;11111:340;;;;:::o;11457:509::-;11526:6;11575:2;11563:9;11554:7;11550:23;11546:32;11543:119;;;11581:79;;:::i;:::-;11543:119;11729:1;11718:9;11714:17;11701:31;11759:18;11751:6;11748:30;11745:117;;;11781:79;;:::i;:::-;11745:117;11886:63;11941:7;11932:6;11921:9;11917:22;11886:63;:::i;:::-;11876:73;;11672:287;11457:509;;;;:::o;11972:118::-;12059:24;12077:5;12059:24;:::i;:::-;12054:3;12047:37;11972:118;;:::o;12096:222::-;12189:4;12227:2;12216:9;12212:18;12204:26;;12240:71;12308:1;12297:9;12293:17;12284:6;12240:71;:::i;:::-;12096:222;;;;:::o;12324:619::-;12401:6;12409;12417;12466:2;12454:9;12445:7;12441:23;12437:32;12434:119;;;12472:79;;:::i;:::-;12434:119;12592:1;12617:53;12662:7;12653:6;12642:9;12638:22;12617:53;:::i;:::-;12607:63;;12563:117;12719:2;12745:53;12790:7;12781:6;12770:9;12766:22;12745:53;:::i;:::-;12735:63;;12690:118;12847:2;12873:53;12918:7;12909:6;12898:9;12894:22;12873:53;:::i;:::-;12863:63;;12818:118;12324:619;;;;;:::o;12949:60::-;12977:3;12998:5;12991:12;;12949:60;;;:::o;13015:142::-;13065:9;13098:53;13116:34;13125:24;13143:5;13125:24;:::i;:::-;13116:34;:::i;:::-;13098:53;:::i;:::-;13085:66;;13015:142;;;:::o;13163:126::-;13213:9;13246:37;13277:5;13246:37;:::i;:::-;13233:50;;13163:126;;;:::o;13295:147::-;13366:9;13399:37;13430:5;13399:37;:::i;:::-;13386:50;;13295:147;;;:::o;13448:173::-;13556:58;13608:5;13556:58;:::i;:::-;13551:3;13544:71;13448:173;;:::o;13627:264::-;13741:4;13779:2;13768:9;13764:18;13756:26;;13792:92;13881:1;13870:9;13866:17;13857:6;13792:92;:::i;:::-;13627:264;;;;:::o;13897:329::-;13956:6;14005:2;13993:9;13984:7;13980:23;13976:32;13973:119;;;14011:79;;:::i;:::-;13973:119;14131:1;14156:53;14201:7;14192:6;14181:9;14177:22;14156:53;:::i;:::-;14146:63;;14102:117;13897:329;;;;:::o;14232:114::-;14299:6;14333:5;14327:12;14317:22;;14232:114;;;:::o;14352:184::-;14451:11;14485:6;14480:3;14473:19;14525:4;14520:3;14516:14;14501:29;;14352:184;;;;:::o;14542:132::-;14609:4;14632:3;14624:11;;14662:4;14657:3;14653:14;14645:22;;14542:132;;;:::o;14680:108::-;14757:24;14775:5;14757:24;:::i;:::-;14752:3;14745:37;14680:108;;:::o;14794:179::-;14863:10;14884:46;14926:3;14918:6;14884:46;:::i;:::-;14962:4;14957:3;14953:14;14939:28;;14794:179;;;;:::o;14979:113::-;15049:4;15081;15076:3;15072:14;15064:22;;14979:113;;;:::o;15128:732::-;15247:3;15276:54;15324:5;15276:54;:::i;:::-;15346:86;15425:6;15420:3;15346:86;:::i;:::-;15339:93;;15456:56;15506:5;15456:56;:::i;:::-;15535:7;15566:1;15551:284;15576:6;15573:1;15570:13;15551:284;;;15652:6;15646:13;15679:63;15738:3;15723:13;15679:63;:::i;:::-;15672:70;;15765:60;15818:6;15765:60;:::i;:::-;15755:70;;15611:224;15598:1;15595;15591:9;15586:14;;15551:284;;;15555:14;15851:3;15844:10;;15252:608;;;15128:732;;;;:::o;15866:373::-;16009:4;16047:2;16036:9;16032:18;16024:26;;16096:9;16090:4;16086:20;16082:1;16071:9;16067:17;16060:47;16124:108;16227:4;16218:6;16124:108;:::i;:::-;16116:116;;15866:373;;;;:::o;16245:116::-;16315:21;16330:5;16315:21;:::i;:::-;16308:5;16305:32;16295:60;;16351:1;16348;16341:12;16295:60;16245:116;:::o;16367:133::-;16410:5;16448:6;16435:20;16426:29;;16464:30;16488:5;16464:30;:::i;:::-;16367:133;;;;:::o;16506:468::-;16571:6;16579;16628:2;16616:9;16607:7;16603:23;16599:32;16596:119;;;16634:79;;:::i;:::-;16596:119;16754:1;16779:53;16824:7;16815:6;16804:9;16800:22;16779:53;:::i;:::-;16769:63;;16725:117;16881:2;16907:50;16949:7;16940:6;16929:9;16925:22;16907:50;:::i;:::-;16897:60;;16852:115;16506:468;;;;;:::o;16980:307::-;17041:4;17131:18;17123:6;17120:30;17117:56;;;17153:18;;:::i;:::-;17117:56;17191:29;17213:6;17191:29;:::i;:::-;17183:37;;17275:4;17269;17265:15;17257:23;;16980:307;;;:::o;17293:423::-;17370:5;17395:65;17411:48;17452:6;17411:48;:::i;:::-;17395:65;:::i;:::-;17386:74;;17483:6;17476:5;17469:21;17521:4;17514:5;17510:16;17559:3;17550:6;17545:3;17541:16;17538:25;17535:112;;;17566:79;;:::i;:::-;17535:112;17656:54;17703:6;17698:3;17693;17656:54;:::i;:::-;17376:340;17293:423;;;;;:::o;17735:338::-;17790:5;17839:3;17832:4;17824:6;17820:17;17816:27;17806:122;;17847:79;;:::i;:::-;17806:122;17964:6;17951:20;17989:78;18063:3;18055:6;18048:4;18040:6;18036:17;17989:78;:::i;:::-;17980:87;;17796:277;17735:338;;;;:::o;18079:943::-;18174:6;18182;18190;18198;18247:3;18235:9;18226:7;18222:23;18218:33;18215:120;;;18254:79;;:::i;:::-;18215:120;18374:1;18399:53;18444:7;18435:6;18424:9;18420:22;18399:53;:::i;:::-;18389:63;;18345:117;18501:2;18527:53;18572:7;18563:6;18552:9;18548:22;18527:53;:::i;:::-;18517:63;;18472:118;18629:2;18655:53;18700:7;18691:6;18680:9;18676:22;18655:53;:::i;:::-;18645:63;;18600:118;18785:2;18774:9;18770:18;18757:32;18816:18;18808:6;18805:30;18802:117;;;18838:79;;:::i;:::-;18802:117;18943:62;18997:7;18988:6;18977:9;18973:22;18943:62;:::i;:::-;18933:72;;18728:287;18079:943;;;;;;;:::o;19028:117::-;19137:1;19134;19127:12;19151:117;19260:1;19257;19250:12;19291:568;19364:8;19374:6;19424:3;19417:4;19409:6;19405:17;19401:27;19391:122;;19432:79;;:::i;:::-;19391:122;19545:6;19532:20;19522:30;;19575:18;19567:6;19564:30;19561:117;;;19597:79;;:::i;:::-;19561:117;19711:4;19703:6;19699:17;19687:29;;19765:3;19757:4;19749:6;19745:17;19735:8;19731:32;19728:41;19725:128;;;19772:79;;:::i;:::-;19725:128;19291:568;;;;;:::o;19865:559::-;19951:6;19959;20008:2;19996:9;19987:7;19983:23;19979:32;19976:119;;;20014:79;;:::i;:::-;19976:119;20162:1;20151:9;20147:17;20134:31;20192:18;20184:6;20181:30;20178:117;;;20214:79;;:::i;:::-;20178:117;20327:80;20399:7;20390:6;20379:9;20375:22;20327:80;:::i;:::-;20309:98;;;;20105:312;19865:559;;;;;:::o;20430:474::-;20498:6;20506;20555:2;20543:9;20534:7;20530:23;20526:32;20523:119;;;20561:79;;:::i;:::-;20523:119;20681:1;20706:53;20751:7;20742:6;20731:9;20727:22;20706:53;:::i;:::-;20696:63;;20652:117;20808:2;20834:53;20879:7;20870:6;20859:9;20855:22;20834:53;:::i;:::-;20824:63;;20779:118;20430:474;;;;;:::o;20910:175::-;21050:27;21046:1;21038:6;21034:14;21027:51;20910:175;:::o;21091:366::-;21233:3;21254:67;21318:2;21313:3;21254:67;:::i;:::-;21247:74;;21330:93;21419:3;21330:93;:::i;:::-;21448:2;21443:3;21439:12;21432:19;;21091:366;;;:::o;21463:419::-;21629:4;21667:2;21656:9;21652:18;21644:26;;21716:9;21710:4;21706:20;21702:1;21691:9;21687:17;21680:47;21744:131;21870:4;21744:131;:::i;:::-;21736:139;;21463:419;;;:::o;21888:191::-;21928:3;21947:20;21965:1;21947:20;:::i;:::-;21942:25;;21981:20;21999:1;21981:20;:::i;:::-;21976:25;;22024:1;22021;22017:9;22010:16;;22045:3;22042:1;22039:10;22036:36;;;22052:18;;:::i;:::-;22036:36;21888:191;;;;:::o;22085:172::-;22225:24;22221:1;22213:6;22209:14;22202:48;22085:172;:::o;22263:366::-;22405:3;22426:67;22490:2;22485:3;22426:67;:::i;:::-;22419:74;;22502:93;22591:3;22502:93;:::i;:::-;22620:2;22615:3;22611:12;22604:19;;22263:366;;;:::o;22635:419::-;22801:4;22839:2;22828:9;22824:18;22816:26;;22888:9;22882:4;22878:20;22874:1;22863:9;22859:17;22852:47;22916:131;23042:4;22916:131;:::i;:::-;22908:139;;22635:419;;;:::o;23060:233::-;23099:3;23122:24;23140:5;23122:24;:::i;:::-;23113:33;;23168:66;23161:5;23158:77;23155:103;;23238:18;;:::i;:::-;23155:103;23285:1;23278:5;23274:13;23267:20;;23060:233;;;:::o;23299:180::-;23347:77;23344:1;23337:88;23444:4;23441:1;23434:15;23468:4;23465:1;23458:15;23485:320;23529:6;23566:1;23560:4;23556:12;23546:22;;23613:1;23607:4;23603:12;23634:18;23624:81;;23690:4;23682:6;23678:17;23668:27;;23624:81;23752:2;23744:6;23741:14;23721:18;23718:38;23715:84;;23771:18;;:::i;:::-;23715:84;23536:269;23485:320;;;:::o;23811:231::-;23951:34;23947:1;23939:6;23935:14;23928:58;24020:14;24015:2;24007:6;24003:15;23996:39;23811:231;:::o;24048:366::-;24190:3;24211:67;24275:2;24270:3;24211:67;:::i;:::-;24204:74;;24287:93;24376:3;24287:93;:::i;:::-;24405:2;24400:3;24396:12;24389:19;;24048:366;;;:::o;24420:419::-;24586:4;24624:2;24613:9;24609:18;24601:26;;24673:9;24667:4;24663:20;24659:1;24648:9;24644:17;24637:47;24701:131;24827:4;24701:131;:::i;:::-;24693:139;;24420:419;;;:::o;24845:220::-;24985:34;24981:1;24973:6;24969:14;24962:58;25054:3;25049:2;25041:6;25037:15;25030:28;24845:220;:::o;25071:366::-;25213:3;25234:67;25298:2;25293:3;25234:67;:::i;:::-;25227:74;;25310:93;25399:3;25310:93;:::i;:::-;25428:2;25423:3;25419:12;25412:19;;25071:366;;;:::o;25443:419::-;25609:4;25647:2;25636:9;25632:18;25624:26;;25696:9;25690:4;25686:20;25682:1;25671:9;25667:17;25660:47;25724:131;25850:4;25724:131;:::i;:::-;25716:139;;25443:419;;;:::o;25868:243::-;26008:34;26004:1;25996:6;25992:14;25985:58;26077:26;26072:2;26064:6;26060:15;26053:51;25868:243;:::o;26117:366::-;26259:3;26280:67;26344:2;26339:3;26280:67;:::i;:::-;26273:74;;26356:93;26445:3;26356:93;:::i;:::-;26474:2;26469:3;26465:12;26458:19;;26117:366;;;:::o;26489:419::-;26655:4;26693:2;26682:9;26678:18;26670:26;;26742:9;26736:4;26732:20;26728:1;26717:9;26713:17;26706:47;26770:131;26896:4;26770:131;:::i;:::-;26762:139;;26489:419;;;:::o;26914:164::-;27054:16;27050:1;27042:6;27038:14;27031:40;26914:164;:::o;27084:366::-;27226:3;27247:67;27311:2;27306:3;27247:67;:::i;:::-;27240:74;;27323:93;27412:3;27323:93;:::i;:::-;27441:2;27436:3;27432:12;27425:19;;27084:366;;;:::o;27456:419::-;27622:4;27660:2;27649:9;27645:18;27637:26;;27709:9;27703:4;27699:20;27695:1;27684:9;27680:17;27673:47;27737:131;27863:4;27737:131;:::i;:::-;27729:139;;27456:419;;;:::o;27881:141::-;27930:4;27953:3;27945:11;;27976:3;27973:1;27966:14;28010:4;28007:1;27997:18;27989:26;;27881:141;;;:::o;28028:93::-;28065:6;28112:2;28107;28100:5;28096:14;28092:23;28082:33;;28028:93;;;:::o;28127:107::-;28171:8;28221:5;28215:4;28211:16;28190:37;;28127:107;;;;:::o;28240:393::-;28309:6;28359:1;28347:10;28343:18;28382:97;28412:66;28401:9;28382:97;:::i;:::-;28500:39;28530:8;28519:9;28500:39;:::i;:::-;28488:51;;28572:4;28568:9;28561:5;28557:21;28548:30;;28621:4;28611:8;28607:19;28600:5;28597:30;28587:40;;28316:317;;28240:393;;;;;:::o;28639:142::-;28689:9;28722:53;28740:34;28749:24;28767:5;28749:24;:::i;:::-;28740:34;:::i;:::-;28722:53;:::i;:::-;28709:66;;28639:142;;;:::o;28787:75::-;28830:3;28851:5;28844:12;;28787:75;;;:::o;28868:269::-;28978:39;29009:7;28978:39;:::i;:::-;29039:91;29088:41;29112:16;29088:41;:::i;:::-;29080:6;29073:4;29067:11;29039:91;:::i;:::-;29033:4;29026:105;28944:193;28868:269;;;:::o;29143:73::-;29188:3;29143:73;:::o;29222:189::-;29299:32;;:::i;:::-;29340:65;29398:6;29390;29384:4;29340:65;:::i;:::-;29275:136;29222:189;;:::o;29417:186::-;29477:120;29494:3;29487:5;29484:14;29477:120;;;29548:39;29585:1;29578:5;29548:39;:::i;:::-;29521:1;29514:5;29510:13;29501:22;;29477:120;;;29417:186;;:::o;29609:543::-;29710:2;29705:3;29702:11;29699:446;;;29744:38;29776:5;29744:38;:::i;:::-;29828:29;29846:10;29828:29;:::i;:::-;29818:8;29814:44;30011:2;29999:10;29996:18;29993:49;;;30032:8;30017:23;;29993:49;30055:80;30111:22;30129:3;30111:22;:::i;:::-;30101:8;30097:37;30084:11;30055:80;:::i;:::-;29714:431;;29699:446;29609:543;;;:::o;30158:117::-;30212:8;30262:5;30256:4;30252:16;30231:37;;30158:117;;;;:::o;30281:169::-;30325:6;30358:51;30406:1;30402:6;30394:5;30391:1;30387:13;30358:51;:::i;:::-;30354:56;30439:4;30433;30429:15;30419:25;;30332:118;30281:169;;;;:::o;30455:295::-;30531:4;30677:29;30702:3;30696:4;30677:29;:::i;:::-;30669:37;;30739:3;30736:1;30732:11;30726:4;30723:21;30715:29;;30455:295;;;;:::o;30755:1395::-;30872:37;30905:3;30872:37;:::i;:::-;30974:18;30966:6;30963:30;30960:56;;;30996:18;;:::i;:::-;30960:56;31040:38;31072:4;31066:11;31040:38;:::i;:::-;31125:67;31185:6;31177;31171:4;31125:67;:::i;:::-;31219:1;31243:4;31230:17;;31275:2;31267:6;31264:14;31292:1;31287:618;;;;31949:1;31966:6;31963:77;;;32015:9;32010:3;32006:19;32000:26;31991:35;;31963:77;32066:67;32126:6;32119:5;32066:67;:::i;:::-;32060:4;32053:81;31922:222;31257:887;;31287:618;31339:4;31335:9;31327:6;31323:22;31373:37;31405:4;31373:37;:::i;:::-;31432:1;31446:208;31460:7;31457:1;31454:14;31446:208;;;31539:9;31534:3;31530:19;31524:26;31516:6;31509:42;31590:1;31582:6;31578:14;31568:24;;31637:2;31626:9;31622:18;31609:31;;31483:4;31480:1;31476:12;31471:17;;31446:208;;;31682:6;31673:7;31670:19;31667:179;;;31740:9;31735:3;31731:19;31725:26;31783:48;31825:4;31817:6;31813:17;31802:9;31783:48;:::i;:::-;31775:6;31768:64;31690:156;31667:179;31892:1;31888;31880:6;31876:14;31872:22;31866:4;31859:36;31294:611;;;31257:887;;30847:1303;;;30755:1395;;:::o;32156:236::-;32296:34;32292:1;32284:6;32280:14;32273:58;32365:19;32360:2;32352:6;32348:15;32341:44;32156:236;:::o;32398:366::-;32540:3;32561:67;32625:2;32620:3;32561:67;:::i;:::-;32554:74;;32637:93;32726:3;32637:93;:::i;:::-;32755:2;32750:3;32746:12;32739:19;;32398:366;;;:::o;32770:419::-;32936:4;32974:2;32963:9;32959:18;32951:26;;33023:9;33017:4;33013:20;33009:1;32998:9;32994:17;32987:47;33051:131;33177:4;33051:131;:::i;:::-;33043:139;;32770:419;;;:::o;33195:230::-;33335:34;33331:1;33323:6;33319:14;33312:58;33404:13;33399:2;33391:6;33387:15;33380:38;33195:230;:::o;33431:366::-;33573:3;33594:67;33658:2;33653:3;33594:67;:::i;:::-;33587:74;;33670:93;33759:3;33670:93;:::i;:::-;33788:2;33783:3;33779:12;33772:19;;33431:366;;;:::o;33803:419::-;33969:4;34007:2;33996:9;33992:18;33984:26;;34056:9;34050:4;34046:20;34042:1;34031:9;34027:17;34020:47;34084:131;34210:4;34084:131;:::i;:::-;34076:139;;33803:419;;;:::o;34228:180::-;34276:77;34273:1;34266:88;34373:4;34370:1;34363:15;34397:4;34394:1;34387:15;34414:231;34554:34;34550:1;34542:6;34538:14;34531:58;34623:14;34618:2;34610:6;34606:15;34599:39;34414:231;:::o;34651:366::-;34793:3;34814:67;34878:2;34873:3;34814:67;:::i;:::-;34807:74;;34890:93;34979:3;34890:93;:::i;:::-;35008:2;35003:3;34999:12;34992:19;;34651:366;;;:::o;35023:419::-;35189:4;35227:2;35216:9;35212:18;35204:26;;35276:9;35270:4;35266:20;35262:1;35251:9;35247:17;35240:47;35304:131;35430:4;35304:131;:::i;:::-;35296:139;;35023:419;;;:::o;35448:228::-;35588:34;35584:1;35576:6;35572:14;35565:58;35657:11;35652:2;35644:6;35640:15;35633:36;35448:228;:::o;35682:366::-;35824:3;35845:67;35909:2;35904:3;35845:67;:::i;:::-;35838:74;;35921:93;36010:3;35921:93;:::i;:::-;36039:2;36034:3;36030:12;36023:19;;35682:366;;;:::o;36054:419::-;36220:4;36258:2;36247:9;36243:18;36235:26;;36307:9;36301:4;36297:20;36293:1;36282:9;36278:17;36271:47;36335:131;36461:4;36335:131;:::i;:::-;36327:139;;36054:419;;;:::o;36479:229::-;36619:34;36615:1;36607:6;36603:14;36596:58;36688:12;36683:2;36675:6;36671:15;36664:37;36479:229;:::o;36714:366::-;36856:3;36877:67;36941:2;36936:3;36877:67;:::i;:::-;36870:74;;36953:93;37042:3;36953:93;:::i;:::-;37071:2;37066:3;37062:12;37055:19;;36714:366;;;:::o;37086:419::-;37252:4;37290:2;37279:9;37275:18;37267:26;;37339:9;37333:4;37329:20;37325:1;37314:9;37310:17;37303:47;37367:131;37493:4;37367:131;:::i;:::-;37359:139;;37086:419;;;:::o;37511:175::-;37651:27;37647:1;37639:6;37635:14;37628:51;37511:175;:::o;37692:366::-;37834:3;37855:67;37919:2;37914:3;37855:67;:::i;:::-;37848:74;;37931:93;38020:3;37931:93;:::i;:::-;38049:2;38044:3;38040:12;38033:19;;37692:366;;;:::o;38064:419::-;38230:4;38268:2;38257:9;38253:18;38245:26;;38317:9;38311:4;38307:20;38303:1;38292:9;38288:17;38281:47;38345:131;38471:4;38345:131;:::i;:::-;38337:139;;38064:419;;;:::o;38489:234::-;38629:34;38625:1;38617:6;38613:14;38606:58;38698:17;38693:2;38685:6;38681:15;38674:42;38489:234;:::o;38729:366::-;38871:3;38892:67;38956:2;38951:3;38892:67;:::i;:::-;38885:74;;38968:93;39057:3;38968:93;:::i;:::-;39086:2;39081:3;39077:12;39070:19;;38729:366;;;:::o;39101:419::-;39267:4;39305:2;39294:9;39290:18;39282:26;;39354:9;39348:4;39344:20;39340:1;39329:9;39325:17;39318:47;39382:131;39508:4;39382:131;:::i;:::-;39374:139;;39101:419;;;:::o;39526:148::-;39628:11;39665:3;39650:18;;39526:148;;;;:::o;39680:390::-;39786:3;39814:39;39847:5;39814:39;:::i;:::-;39869:89;39951:6;39946:3;39869:89;:::i;:::-;39862:96;;39967:65;40025:6;40020:3;40013:4;40006:5;40002:16;39967:65;:::i;:::-;40057:6;40052:3;40048:16;40041:23;;39790:280;39680:390;;;;:::o;40076:155::-;40216:7;40212:1;40204:6;40200:14;40193:31;40076:155;:::o;40237:400::-;40397:3;40418:84;40500:1;40495:3;40418:84;:::i;:::-;40411:91;;40511:93;40600:3;40511:93;:::i;:::-;40629:1;40624:3;40620:11;40613:18;;40237:400;;;:::o;40643:701::-;40924:3;40946:95;41037:3;41028:6;40946:95;:::i;:::-;40939:102;;41058:95;41149:3;41140:6;41058:95;:::i;:::-;41051:102;;41170:148;41314:3;41170:148;:::i;:::-;41163:155;;41335:3;41328:10;;40643:701;;;;;:::o;41350:222::-;41490:34;41486:1;41478:6;41474:14;41467:58;41559:5;41554:2;41546:6;41542:15;41535:30;41350:222;:::o;41578:366::-;41720:3;41741:67;41805:2;41800:3;41741:67;:::i;:::-;41734:74;;41817:93;41906:3;41817:93;:::i;:::-;41935:2;41930:3;41926:12;41919:19;;41578:366;;;:::o;41950:419::-;42116:4;42154:2;42143:9;42139:18;42131:26;;42203:9;42197:4;42193:20;42189:1;42178:9;42174:17;42167:47;42231:131;42357:4;42231:131;:::i;:::-;42223:139;;41950:419;;;:::o;42375:143::-;42432:5;42463:6;42457:13;42448:22;;42479:33;42506:5;42479:33;:::i;:::-;42375:143;;;;:::o;42524:351::-;42594:6;42643:2;42631:9;42622:7;42618:23;42614:32;42611:119;;;42649:79;;:::i;:::-;42611:119;42769:1;42794:64;42850:7;42841:6;42830:9;42826:22;42794:64;:::i;:::-;42784:74;;42740:128;42524:351;;;;:::o;42881:178::-;43021:30;43017:1;43009:6;43005:14;42998:54;42881:178;:::o;43065:366::-;43207:3;43228:67;43292:2;43287:3;43228:67;:::i;:::-;43221:74;;43304:93;43393:3;43304:93;:::i;:::-;43422:2;43417:3;43413:12;43406:19;;43065:366;;;:::o;43437:419::-;43603:4;43641:2;43630:9;43626:18;43618:26;;43690:9;43684:4;43680:20;43676:1;43665:9;43661:17;43654:47;43718:131;43844:4;43718:131;:::i;:::-;43710:139;;43437:419;;;:::o;43862:170::-;44002:22;43998:1;43990:6;43986:14;43979:46;43862:170;:::o;44038:366::-;44180:3;44201:67;44265:2;44260:3;44201:67;:::i;:::-;44194:74;;44277:93;44366:3;44277:93;:::i;:::-;44395:2;44390:3;44386:12;44379:19;;44038:366;;;:::o;44410:419::-;44576:4;44614:2;44603:9;44599:18;44591:26;;44663:9;44657:4;44653:20;44649:1;44638:9;44634:17;44627:47;44691:131;44817:4;44691:131;:::i;:::-;44683:139;;44410:419;;;:::o;44835:179::-;44975:31;44971:1;44963:6;44959:14;44952:55;44835:179;:::o;45020:366::-;45162:3;45183:67;45247:2;45242:3;45183:67;:::i;:::-;45176:74;;45259:93;45348:3;45259:93;:::i;:::-;45377:2;45372:3;45368:12;45361:19;;45020:366;;;:::o;45392:419::-;45558:4;45596:2;45585:9;45581:18;45573:26;;45645:9;45639:4;45635:20;45631:1;45620:9;45616:17;45609:47;45673:131;45799:4;45673:131;:::i;:::-;45665:139;;45392:419;;;:::o;45817:85::-;45862:7;45891:5;45880:16;;45817:85;;;:::o;45908:158::-;45966:9;45999:61;46017:42;46026:32;46052:5;46026:32;:::i;:::-;46017:42;:::i;:::-;45999:61;:::i;:::-;45986:74;;45908:158;;;:::o;46072:147::-;46167:45;46206:5;46167:45;:::i;:::-;46162:3;46155:58;46072:147;;:::o;46225:114::-;46292:6;46326:5;46320:12;46310:22;;46225:114;;;:::o;46345:184::-;46444:11;46478:6;46473:3;46466:19;46518:4;46513:3;46509:14;46494:29;;46345:184;;;;:::o;46535:132::-;46602:4;46625:3;46617:11;;46655:4;46650:3;46646:14;46638:22;;46535:132;;;:::o;46673:108::-;46750:24;46768:5;46750:24;:::i;:::-;46745:3;46738:37;46673:108;;:::o;46787:179::-;46856:10;46877:46;46919:3;46911:6;46877:46;:::i;:::-;46955:4;46950:3;46946:14;46932:28;;46787:179;;;;:::o;46972:113::-;47042:4;47074;47069:3;47065:14;47057:22;;46972:113;;;:::o;47121:732::-;47240:3;47269:54;47317:5;47269:54;:::i;:::-;47339:86;47418:6;47413:3;47339:86;:::i;:::-;47332:93;;47449:56;47499:5;47449:56;:::i;:::-;47528:7;47559:1;47544:284;47569:6;47566:1;47563:13;47544:284;;;47645:6;47639:13;47672:63;47731:3;47716:13;47672:63;:::i;:::-;47665:70;;47758:60;47811:6;47758:60;:::i;:::-;47748:70;;47604:224;47591:1;47588;47584:9;47579:14;;47544:284;;;47548:14;47844:3;47837:10;;47245:608;;;47121:732;;;;:::o;47859:720::-;48094:4;48132:3;48121:9;48117:19;48109:27;;48146:79;48222:1;48211:9;48207:17;48198:6;48146:79;:::i;:::-;48272:9;48266:4;48262:20;48257:2;48246:9;48242:18;48235:48;48300:108;48403:4;48394:6;48300:108;:::i;:::-;48292:116;;48418:72;48486:2;48475:9;48471:18;48462:6;48418:72;:::i;:::-;48500;48568:2;48557:9;48553:18;48544:6;48500:72;:::i;:::-;47859:720;;;;;;;:::o;48585:311::-;48662:4;48752:18;48744:6;48741:30;48738:56;;;48774:18;;:::i;:::-;48738:56;48824:4;48816:6;48812:17;48804:25;;48884:4;48878;48874:15;48866:23;;48585:311;;;:::o;48902:143::-;48959:5;48990:6;48984:13;48975:22;;49006:33;49033:5;49006:33;:::i;:::-;48902:143;;;;:::o;49068:732::-;49175:5;49200:81;49216:64;49273:6;49216:64;:::i;:::-;49200:81;:::i;:::-;49191:90;;49301:5;49330:6;49323:5;49316:21;49364:4;49357:5;49353:16;49346:23;;49417:4;49409:6;49405:17;49397:6;49393:30;49446:3;49438:6;49435:15;49432:122;;;49465:79;;:::i;:::-;49432:122;49580:6;49563:231;49597:6;49592:3;49589:15;49563:231;;;49672:3;49701:48;49745:3;49733:10;49701:48;:::i;:::-;49696:3;49689:61;49779:4;49774:3;49770:14;49763:21;;49639:155;49623:4;49618:3;49614:14;49607:21;;49563:231;;;49567:21;49181:619;;49068:732;;;;;:::o;49823:385::-;49905:5;49954:3;49947:4;49939:6;49935:17;49931:27;49921:122;;49962:79;;:::i;:::-;49921:122;50072:6;50066:13;50097:105;50198:3;50190:6;50183:4;50175:6;50171:17;50097:105;:::i;:::-;50088:114;;49911:297;49823:385;;;;:::o;50214:554::-;50309:6;50358:2;50346:9;50337:7;50333:23;50329:32;50326:119;;;50364:79;;:::i;:::-;50326:119;50505:1;50494:9;50490:17;50484:24;50535:18;50527:6;50524:30;50521:117;;;50557:79;;:::i;:::-;50521:117;50662:89;50743:7;50734:6;50723:9;50719:22;50662:89;:::i;:::-;50652:99;;50455:306;50214:554;;;;:::o;50774:231::-;50914:34;50910:1;50902:6;50898:14;50891:58;50983:14;50978:2;50970:6;50966:15;50959:39;50774:231;:::o;51011:366::-;51153:3;51174:67;51238:2;51233:3;51174:67;:::i;:::-;51167:74;;51250:93;51339:3;51250:93;:::i;:::-;51368:2;51363:3;51359:12;51352:19;;51011:366;;;:::o;51383:419::-;51549:4;51587:2;51576:9;51572:18;51564:26;;51636:9;51630:4;51626:20;51622:1;51611:9;51607:17;51600:47;51664:131;51790:4;51664:131;:::i;:::-;51656:139;;51383:419;;;:::o;51808:228::-;51948:34;51944:1;51936:6;51932:14;51925:58;52017:11;52012:2;52004:6;52000:15;51993:36;51808:228;:::o;52042:366::-;52184:3;52205:67;52269:2;52264:3;52205:67;:::i;:::-;52198:74;;52281:93;52370:3;52281:93;:::i;:::-;52399:2;52394:3;52390:12;52383:19;;52042:366;;;:::o;52414:419::-;52580:4;52618:2;52607:9;52603:18;52595:26;;52667:9;52661:4;52657:20;52653:1;52642:9;52638:17;52631:47;52695:131;52821:4;52695:131;:::i;:::-;52687:139;;52414:419;;;:::o;52839:223::-;52979:34;52975:1;52967:6;52963:14;52956:58;53048:6;53043:2;53035:6;53031:15;53024:31;52839:223;:::o;53068:366::-;53210:3;53231:67;53295:2;53290:3;53231:67;:::i;:::-;53224:74;;53307:93;53396:3;53307:93;:::i;:::-;53425:2;53420:3;53416:12;53409:19;;53068:366;;;:::o;53440:419::-;53606:4;53644:2;53633:9;53629:18;53621:26;;53693:9;53687:4;53683:20;53679:1;53668:9;53664:17;53657:47;53721:131;53847:4;53721:131;:::i;:::-;53713:139;;53440:419;;;:::o;53865:194::-;53905:4;53925:20;53943:1;53925:20;:::i;:::-;53920:25;;53959:20;53977:1;53959:20;:::i;:::-;53954:25;;54003:1;54000;53996:9;53988:17;;54027:1;54021:4;54018:11;54015:37;;;54032:18;;:::i;:::-;54015:37;53865:194;;;;:::o;54065:237::-;54205:34;54201:1;54193:6;54189:14;54182:58;54274:20;54269:2;54261:6;54257:15;54250:45;54065:237;:::o;54308:366::-;54450:3;54471:67;54535:2;54530:3;54471:67;:::i;:::-;54464:74;;54547:93;54636:3;54547:93;:::i;:::-;54665:2;54660:3;54656:12;54649:19;;54308:366;;;:::o;54680:419::-;54846:4;54884:2;54873:9;54869:18;54861:26;;54933:9;54927:4;54923:20;54919:1;54908:9;54904:17;54897:47;54961:131;55087:4;54961:131;:::i;:::-;54953:139;;54680:419;;;:::o;55105:176::-;55137:1;55154:20;55172:1;55154:20;:::i;:::-;55149:25;;55188:20;55206:1;55188:20;:::i;:::-;55183:25;;55227:1;55217:35;;55232:18;;:::i;:::-;55217:35;55273:1;55270;55266:9;55261:14;;55105:176;;;;:::o;55287:98::-;55338:6;55372:5;55366:12;55356:22;;55287:98;;;:::o;55391:168::-;55474:11;55508:6;55503:3;55496:19;55548:4;55543:3;55539:14;55524:29;;55391:168;;;;:::o;55565:373::-;55651:3;55679:38;55711:5;55679:38;:::i;:::-;55733:70;55796:6;55791:3;55733:70;:::i;:::-;55726:77;;55812:65;55870:6;55865:3;55858:4;55851:5;55847:16;55812:65;:::i;:::-;55902:29;55924:6;55902:29;:::i;:::-;55897:3;55893:39;55886:46;;55655:283;55565:373;;;;:::o;55944:640::-;56139:4;56177:3;56166:9;56162:19;56154:27;;56191:71;56259:1;56248:9;56244:17;56235:6;56191:71;:::i;:::-;56272:72;56340:2;56329:9;56325:18;56316:6;56272:72;:::i;:::-;56354;56422:2;56411:9;56407:18;56398:6;56354:72;:::i;:::-;56473:9;56467:4;56463:20;56458:2;56447:9;56443:18;56436:48;56501:76;56572:4;56563:6;56501:76;:::i;:::-;56493:84;;55944:640;;;;;;;:::o;56590:141::-;56646:5;56677:6;56671:13;56662:22;;56693:32;56719:5;56693:32;:::i;:::-;56590:141;;;;:::o;56737:349::-;56806:6;56855:2;56843:9;56834:7;56830:23;56826:32;56823:119;;;56861:79;;:::i;:::-;56823:119;56981:1;57006:63;57061:7;57052:6;57041:9;57037:22;57006:63;:::i;:::-;56996:73;;56952:127;56737:349;;;;:::o;57092:182::-;57232:34;57228:1;57220:6;57216:14;57209:58;57092:182;:::o;57280:366::-;57422:3;57443:67;57507:2;57502:3;57443:67;:::i;:::-;57436:74;;57519:93;57608:3;57519:93;:::i;:::-;57637:2;57632:3;57628:12;57621:19;;57280:366;;;:::o;57652:419::-;57818:4;57856:2;57845:9;57841:18;57833:26;;57905:9;57899:4;57895:20;57891:1;57880:9;57876:17;57869:47;57933:131;58059:4;57933:131;:::i;:::-;57925:139;;57652:419;;;:::o;58077:178::-;58217:30;58213:1;58205:6;58201:14;58194:54;58077:178;:::o;58261:366::-;58403:3;58424:67;58488:2;58483:3;58424:67;:::i;:::-;58417:74;;58500:93;58589:3;58500:93;:::i;:::-;58618:2;58613:3;58609:12;58602:19;;58261:366;;;:::o;58633:419::-;58799:4;58837:2;58826:9;58822:18;58814:26;;58886:9;58880:4;58876:20;58872:1;58861:9;58857:17;58850:47;58914:131;59040:4;58914:131;:::i;:::-;58906:139;;58633:419;;;:::o;59058:180::-;59106:77;59103:1;59096:88;59203:4;59200:1;59193:15;59227:4;59224:1;59217:15
Swarm Source
ipfs://4ae5954644e6870f378c11b749faa021006e8145012b9cb799114bded02a9542
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.