Overview
TokenID
1
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheKitchen
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-03 */ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: TheKitchen.sol pragma solidity ^0.8.13; // IN THE KITCHEN WE TRUST /* 888888888888 88 88 88888888888 88 a8P 88 888888888888 ,ad8888ba, 88 88 88888888888 888b 88 88 88 88 88 88 ,88' 88 88 d8"' `"8b 88 88 88 8888b 88 88 88 88 88 88 ,88" 88 88 d8' 88 88 88 88 `8b 88 88 88aaaaaaaa88 88aaaaa 88,d88' 88 88 88 88aaaaaaaa88 88aaaaa 88 `8b 88 88 88""""""""88 88""""" 8888"88, 88 88 88 88""""""""88 88""""" 88 `8b 88 88 88 88 88 88P Y8b 88 88 Y8, 88 88 88 88 `8b 88 88 88 88 88 88 "88, 88 88 Y8a. .a8P 88 88 88 88 `8888 88 88 88 88888888888 88 Y8b 88 88 `"Y8888Y"' 88 88 88888888888 88 `888 */ contract TheKitchen is ERC1155, Ownable { //MERKLE ROOTS + URIS mapping(uint256 => bytes32) public merkleRoots; // ID => Merkle Root mapping(uint256 => string) private URIS; //IDS uint256 public constant LIFETIME = 0; uint256 public constant PREMIUM = 1; uint256 public SEASON = 1; //KEEP TRACK OF TOTAL MINTS mapping(uint256 => uint256) public seasonMinted; uint256 public lifetimeMinted = 0; uint256 public premiumMinted = 0; //SET MAX SUPPLY uint256 public maxSupplyLifetime = 100; uint256 public maxSupplyPremium = 100; mapping(uint256 => uint256) public maxSeasonSupply; //MAKE SURE THEY DONT MINT TWICE mapping(address => bool) public lifetimeClaimed; mapping(address => bool) public premiumClaimed; mapping(uint256 => mapping(address => bool)) public seasonClaimed; //PRICES uint256 public premiumPrice = 0.15 ether; uint256 public seasonPrice = 0.03 ether; //FCFS MODE bool public FCFSTime = false; constructor() ERC1155("") { merkleRoots[0] = 0x04812ed1d83a598b1094ebe9001ffd7c6b62de198944bfc81592565bb5f75a9c; merkleRoots[1] = 0x490e9d2b6864f17bba2d9d3308c854ffb25f0eb5c048d8590282cadb9c542370; merkleRoots[2] = 0x56a48591b129d83f2e39af32dfb9a7bb088c1542ee490b7c1befa5c9a5915809; URIS[0] = "https://gateway.pinata.cloud/ipfs/QmWAWEPS29jL5oPJKgSqUEQKCLkmMFQ5Z7Hia5u8XKXQJk"; URIS[1] = "https://gateway.pinata.cloud/ipfs/QmewXHkekwjdWtUzessZCai8Dg6SEiXAzfj9FRK6QrKN5Q"; URIS[2] = "https://gateway.pinata.cloud/ipfs/QmWZkA1CmmNskrDDMXuBMTakEKnpwXv3bBHLEmrhve5CpN"; URIS[3] = "https://gateway.pinata.cloud/ipfs/QmbcCdC6e3HHS27yA7yWYfvVdMiDbq7a3TvGnGcEzk4dQX"; } function mintLifetime(bytes32[] calldata _merkleProof) public { require(!lifetimeClaimed[msg.sender], "Address Already Claimed"); require(maxSupplyLifetime >= lifetimeMinted, "OOS"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoots[LIFETIME], leaf), "Invalid Merkle Proof"); lifetimeClaimed[msg.sender] = true; lifetimeMinted++; _mint(msg.sender, LIFETIME, 1, ""); } function mintPremium(bytes32[] calldata _merkleProof) public payable { require(msg.value >= premiumPrice, "Not enough Ether"); require(!premiumClaimed[msg.sender], "Address Already Claimed"); require(maxSupplyPremium >= premiumMinted, "OOS"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoots[PREMIUM], leaf), "Invalid Merkle Proof"); premiumClaimed[msg.sender] = true; _mint(msg.sender, PREMIUM, 1, ""); } function mintSeason(bytes32[] calldata _merkleProof) public payable { require(msg.value >= seasonPrice, "Not enough Ether"); require(!seasonClaimed[SEASON][msg.sender], "Address Already Claimed"); require(maxSeasonSupply[SEASON] >= seasonMinted[SEASON], "OOS"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoots[SEASON], leaf), "Invalid Merkle Proof"); seasonMinted[SEASON]++; seasonClaimed[SEASON][msg.sender] = true; _mint(msg.sender, SEASON, 1, ""); } function seasonFCFS() public payable { require(FCFSTime, "Sale is not Live"); require(msg.value >= seasonPrice, "Not enough Ether"); require(!seasonClaimed[SEASON][msg.sender], "Address Already Claimed"); require(maxSeasonSupply[SEASON] > seasonMinted[SEASON], "OOS"); seasonMinted[SEASON]++; seasonClaimed[SEASON][msg.sender] = true; _mint(msg.sender, SEASON, 1, ""); } function createNewSeason(uint256 totalSupply) public onlyOwner { SEASON++; maxSeasonSupply[SEASON] = totalSupply; } function uri(uint256 _id) override public view returns (string memory) { return(URIS[_id]); } function setTokenURI(uint256 _id, string memory _uri) public onlyOwner { URIS[_id] = _uri; } function setMerkleRoot(uint256 _id, bytes32 _merkleRoot) public onlyOwner { merkleRoots[_id] = _merkleRoot; } function updatePremiumPrice(uint256 _newPrice) public onlyOwner { premiumPrice = _newPrice; } function updateSeasonPrice(uint256 _newPrice) public onlyOwner { seasonPrice = _newPrice; } function flipFCFS() public onlyOwner { FCFSTime = !FCFSTime; } function changeSeason(uint256 _season) public onlyOwner { SEASON = _season; } function withdraw() external onlyOwner { uint256 balance = address(this).balance; Address.sendValue(payable(owner()), balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"FCFSTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIFETIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PREMIUM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SEASON","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_season","type":"uint256"}],"name":"changeSeason","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"createNewSeason","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipFCFS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lifetimeClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lifetimeMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSeasonSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyLifetime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyPremium","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"merkleRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintLifetime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintPremium","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintSeason","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"premiumClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premiumMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premiumPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"seasonClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seasonFCFS","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"seasonMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seasonPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setTokenURI","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"updatePremiumPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"updateSeasonPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600655600060085560006009556064600a556064600b55670214e8348c4f0000601055666a94d74f4300006011556000601260006101000a81548160ff0219169083151502179055503480156200005c57600080fd5b50604051806020016040528060008152506200007e816200026760201b60201c565b506200009f620000936200028360201b60201c565b6200028b60201b60201c565b7f04812ed1d83a598b1094ebe9001ffd7c6b62de198944bfc81592565bb5f75a9c60001b60046000808152602001908152602001600020819055507f490e9d2b6864f17bba2d9d3308c854ffb25f0eb5c048d8590282cadb9c54237060001b6004600060018152602001908152602001600020819055507f56a48591b129d83f2e39af32dfb9a7bb088c1542ee490b7c1befa5c9a591580960001b60046000600281526020019081526020016000208190555060405180608001604052806050815260200162004f53605091396005600080815260200190815260200160002090805190602001906200019492919062000351565b5060405180608001604052806050815260200162004fa36050913960056000600181526020019081526020016000209080519060200190620001d892919062000351565b5060405180608001604052806050815260200162004ff360509139600560006002815260200190815260200160002090805190602001906200021c92919062000351565b5060405180608001604052806050815260200162004f0360509139600560006003815260200190815260200160002090805190602001906200026092919062000351565b5062000465565b80600290805190602001906200027f92919062000351565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200035f9062000430565b90600052602060002090601f016020900481019282620003835760008555620003cf565b82601f106200039e57805160ff1916838001178555620003cf565b82800160010185558215620003cf579182015b82811115620003ce578251825591602001919060010190620003b1565b5b509050620003de9190620003e2565b5090565b5b80821115620003fd576000816000905550600101620003e3565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044957607f821691505b6020821081036200045f576200045e62000401565b5b50919050565b614a8e80620004756000396000f3fe60806040526004361061022f5760003560e01c8063715018a61161012e578063b649a08f116100ab578063e985e9c51161006f578063e985e9c5146107ff578063ea3696ca1461083c578063f242432a14610867578063f2fde38b14610890578063fe8b3634146108b95761022f565b8063b649a08f1461071a578063c5bbb77f14610743578063d3c576d814610780578063de76bc64146107ab578063e6be48f1146107d65761022f565b80638f0203b3116100f25780638f0203b3146106235780639e87bc3614610660578063a22cb46514610689578063a7c6a98f146106b2578063aec6b5e7146106dd5761022f565b8063715018a61461055d57806371c5ecb1146105745780637bf544d5146105b15780638677f18b146105dc5780638da5cb5b146105f85761022f565b80632eb2c2d6116101bc5780634da7a3dc116101805780634da7a3dc146104ad5780634e1273f4146104d657806355378a1b146105135780635876f0d81461052a5780635c82dbc6146105535761022f565b80632eb2c2d6146103e957806330654e1314610412578063310fb53d1461043d5780633ccfd60b1461047a5780633fb47661146104915761022f565b8063162094c411610203578063162094c41461031657806318712c211461033f5780631d4d79951461036857806320c233d81461039357806327edb5ce146103be5761022f565b8062fdd58e1461023457806301ffc9a71461027157806304f7f0e0146102ae5780630e89341c146102d9575b600080fd5b34801561024057600080fd5b5061025b6004803603810190610256919061306a565b6108f6565b60405161026891906130b9565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061312c565b6109be565b6040516102a59190613174565b60405180910390f35b3480156102ba57600080fd5b506102c3610aa0565b6040516102d091906130b9565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb919061318f565b610aa6565b60405161030d9190613255565b60405180910390f35b34801561032257600080fd5b5061033d600480360381019061033891906133ac565b610b4b565b005b34801561034b57600080fd5b506103666004803603810190610361919061343e565b610bf3565b005b34801561037457600080fd5b5061037d610c8b565b60405161038a91906130b9565b60405180910390f35b34801561039f57600080fd5b506103a8610c91565b6040516103b59190613174565b60405180910390f35b3480156103ca57600080fd5b506103d3610ca4565b6040516103e091906130b9565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906135e7565b610caa565b005b34801561041e57600080fd5b50610427610d4b565b60405161043491906130b9565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f91906136b6565b610d51565b6040516104719190613174565b60405180910390f35b34801561048657600080fd5b5061048f610d71565b005b6104ab60048036038101906104a6919061373e565b610e06565b005b3480156104b957600080fd5b506104d460048036038101906104cf919061318f565b6110dc565b005b3480156104e257600080fd5b506104fd60048036038101906104f8919061384e565b61118d565b60405161050a9190613984565b60405180910390f35b34801561051f57600080fd5b506105286112a6565b005b34801561053657600080fd5b50610551600480360381019061054c919061318f565b61134e565b005b61055b6113d4565b005b34801561056957600080fd5b5061057261162a565b005b34801561058057600080fd5b5061059b6004803603810190610596919061318f565b6116b2565b6040516105a891906139b5565b60405180910390f35b3480156105bd57600080fd5b506105c66116ca565b6040516105d391906130b9565b60405180910390f35b6105f660048036038101906105f1919061373e565b6116d0565b005b34801561060457600080fd5b5061060d61192c565b60405161061a91906139df565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906139fa565b611956565b6040516106579190613174565b60405180910390f35b34801561066c57600080fd5b506106876004803603810190610682919061318f565b611985565b005b34801561069557600080fd5b506106b060048036038101906106ab9190613a66565b611a0b565b005b3480156106be57600080fd5b506106c7611a21565b6040516106d491906130b9565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061318f565b611a27565b60405161071191906130b9565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c919061373e565b611a3f565b005b34801561074f57600080fd5b5061076a6004803603810190610765919061318f565b611c6e565b60405161077791906130b9565b60405180910390f35b34801561078c57600080fd5b50610795611c86565b6040516107a291906130b9565b60405180910390f35b3480156107b757600080fd5b506107c0611c8b565b6040516107cd91906130b9565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f8919061318f565b611c91565b005b34801561080b57600080fd5b5061082660048036038101906108219190613aa6565b611d17565b6040516108339190613174565b60405180910390f35b34801561084857600080fd5b50610851611dab565b60405161085e91906130b9565b60405180910390f35b34801561087357600080fd5b5061088e60048036038101906108899190613ae6565b611db0565b005b34801561089c57600080fd5b506108b760048036038101906108b291906136b6565b611e51565b005b3480156108c557600080fd5b506108e060048036038101906108db91906136b6565b611f48565b6040516108ed9190613174565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90613bef565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a995750610a9882611f68565b5b9050919050565b60085481565b6060600560008381526020019081526020016000208054610ac690613c3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610af290613c3e565b8015610b3f5780601f10610b1457610100808354040283529160200191610b3f565b820191906000526020600020905b815481529060010190602001808311610b2257829003601f168201915b50505050509050919050565b610b53611fd2565b73ffffffffffffffffffffffffffffffffffffffff16610b7161192c565b73ffffffffffffffffffffffffffffffffffffffff1614610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe90613cbb565b60405180910390fd5b80600560008481526020019081526020016000209080519060200190610bee929190612f1f565b505050565b610bfb611fd2565b73ffffffffffffffffffffffffffffffffffffffff16610c1961192c565b73ffffffffffffffffffffffffffffffffffffffff1614610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6690613cbb565b60405180910390fd5b8060046000848152602001908152602001600020819055505050565b600b5481565b601260009054906101000a900460ff1681565b60115481565b610cb2611fd2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610cf85750610cf785610cf2611fd2565b611d17565b5b610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90613d4d565b60405180910390fd5b610d448585858585611fda565b5050505050565b60105481565b600d6020528060005260406000206000915054906101000a900460ff1681565b610d79611fd2565b73ffffffffffffffffffffffffffffffffffffffff16610d9761192c565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613cbb565b60405180910390fd5b6000479050610e03610dfd61192c565b826122ed565b50565b601154341015610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4290613db9565b60405180910390fd5b600f6000600654815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290613e25565b60405180910390fd5b60076000600654815260200190815260200160002054600c60006006548152602001908152602001600020541015610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f90613e91565b60405180910390fd5b600033604051602001610f6b9190613ef9565b604051602081830303815290604052805190602001209050610fe4838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060046000600654815260200190815260200160002054836123e1565b611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90613f60565b60405180910390fd5b600760006006548152602001908152602001600020600081548092919061104990613faf565b91905055506001600f6000600654815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506110d7336006546001604051806020016040528060008152506123f8565b505050565b6110e4611fd2565b73ffffffffffffffffffffffffffffffffffffffff1661110261192c565b73ffffffffffffffffffffffffffffffffffffffff1614611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90613cbb565b60405180910390fd5b6006600081548092919061116b90613faf565b919050555080600c600060065481526020019081526020016000208190555050565b606081518351146111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca90614069565b60405180910390fd5b6000835167ffffffffffffffff8111156111f0576111ef613281565b5b60405190808252806020026020018201604052801561121e5781602001602082028036833780820191505090505b50905060005b845181101561129b5761126b85828151811061124357611242614089565b5b602002602001015185838151811061125e5761125d614089565b5b60200260200101516108f6565b82828151811061127e5761127d614089565b5b6020026020010181815250508061129490613faf565b9050611224565b508091505092915050565b6112ae611fd2565b73ffffffffffffffffffffffffffffffffffffffff166112cc61192c565b73ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990613cbb565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b611356611fd2565b73ffffffffffffffffffffffffffffffffffffffff1661137461192c565b73ffffffffffffffffffffffffffffffffffffffff16146113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c190613cbb565b60405180910390fd5b8060118190555050565b601260009054906101000a900460ff16611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a90614104565b60405180910390fd5b601154341015611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90613db9565b60405180910390fd5b600f6000600654815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff90613e25565b60405180910390fd5b60076000600654815260200190815260200160002054600c600060065481526020019081526020016000205411611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613e91565b60405180910390fd5b600760006006548152602001908152602001600020600081548092919061159a90613faf565b91905055506001600f6000600654815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611628336006546001604051806020016040528060008152506123f8565b565b611632611fd2565b73ffffffffffffffffffffffffffffffffffffffff1661165061192c565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90613cbb565b60405180910390fd5b6116b0600061258d565b565b60046020528060005260406000206000915090505481565b60065481565b601054341015611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c90613db9565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179990613e25565b60405180910390fd5b600954600b5410156117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090613e91565b60405180910390fd5b6000336040516020016117fc9190613ef9565b604051602081830303815290604052805190602001209050611874838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600460006001815260200190815260200160002054836123e1565b6118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90613f60565b60405180910390fd5b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061192733600180604051806020016040528060008152506123f8565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b61198d611fd2565b73ffffffffffffffffffffffffffffffffffffffff166119ab61192c565b73ffffffffffffffffffffffffffffffffffffffff1614611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890613cbb565b60405180910390fd5b8060068190555050565b611a1d611a16611fd2565b8383612653565b5050565b600a5481565b60076020528060005260406000206000915090505481565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390613e25565b60405180910390fd5b600854600a541015611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90613e91565b60405180910390fd5b600033604051602001611b269190613ef9565b604051602081830303815290604052805190602001209050611b9d838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506004600080815260200190815260200160002054836123e1565b611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd390613f60565b60405180910390fd5b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060086000815480929190611c4790613faf565b9190505550611c693360006001604051806020016040528060008152506123f8565b505050565b600c6020528060005260406000206000915090505481565b600081565b60095481565b611c99611fd2565b73ffffffffffffffffffffffffffffffffffffffff16611cb761192c565b73ffffffffffffffffffffffffffffffffffffffff1614611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490613cbb565b60405180910390fd5b8060108190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600181565b611db8611fd2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611dfe5750611dfd85611df8611fd2565b611d17565b5b611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3490614196565b60405180910390fd5b611e4a85858585856127bf565b5050505050565b611e59611fd2565b73ffffffffffffffffffffffffffffffffffffffff16611e7761192c565b73ffffffffffffffffffffffffffffffffffffffff1614611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613cbb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3390614228565b60405180910390fd5b611f458161258d565b50565b600e6020528060005260406000206000915054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b815183511461201e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612015906142ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361208d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120849061434c565b60405180910390fd5b6000612097611fd2565b90506120a7818787878787612a40565b60005b84518110156122585760008582815181106120c8576120c7614089565b5b6020026020010151905060008583815181106120e7576120e6614089565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f906143de565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223d91906143fe565b925050819055505050508061225190613faf565b90506120aa565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516122cf929190614454565b60405180910390a46122e5818787878787612a48565b505050505050565b80471015612330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612327906144d7565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161235690614528565b60006040518083038185875af1925050503d8060008114612393576040519150601f19603f3d011682016040523d82523d6000602084013e612398565b606091505b50509050806123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d3906145af565b60405180910390fd5b505050565b6000826123ee8584612c1f565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90614641565b60405180910390fd5b6000612471611fd2565b90506124928160008761248388612c94565b61248c88612c94565b87612a40565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124f191906143fe565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161256f929190614661565b60405180910390a461258681600087878787612d0e565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b8906146fc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127b29190613174565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361282e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128259061434c565b60405180910390fd5b6000612838611fd2565b905061285881878761284988612c94565b61285288612c94565b87612a40565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156128ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e6906143de565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129a491906143fe565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612a21929190614661565b60405180910390a4612a37828888888888612d0e565b50505050505050565b505050505050565b612a678473ffffffffffffffffffffffffffffffffffffffff16612ee5565b15612c17578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612aad959493929190614771565b6020604051808303816000875af1925050508015612ae957506040513d601f19601f82011682018060405250810190612ae691906147ee565b60015b612b8e57612af5614828565b806308c379a003612b515750612b0961484a565b80612b145750612b53565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b489190613255565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b859061494c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c906149de565b60405180910390fd5b505b505050505050565b60008082905060005b8451811015612c89576000858281518110612c4657612c45614089565b5b60200260200101519050808311612c6857612c618382612f08565b9250612c75565b612c728184612f08565b92505b508080612c8190613faf565b915050612c28565b508091505092915050565b60606000600167ffffffffffffffff811115612cb357612cb2613281565b5b604051908082528060200260200182016040528015612ce15781602001602082028036833780820191505090505b5090508281600081518110612cf957612cf8614089565b5b60200260200101818152505080915050919050565b612d2d8473ffffffffffffffffffffffffffffffffffffffff16612ee5565b15612edd578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612d739594939291906149fe565b6020604051808303816000875af1925050508015612daf57506040513d601f19601f82011682018060405250810190612dac91906147ee565b60015b612e5457612dbb614828565b806308c379a003612e175750612dcf61484a565b80612dda5750612e19565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0e9190613255565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4b9061494c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed2906149de565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b828054612f2b90613c3e565b90600052602060002090601f016020900481019282612f4d5760008555612f94565b82601f10612f6657805160ff1916838001178555612f94565b82800160010185558215612f94579182015b82811115612f93578251825591602001919060010190612f78565b5b509050612fa19190612fa5565b5090565b5b80821115612fbe576000816000905550600101612fa6565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061300182612fd6565b9050919050565b61301181612ff6565b811461301c57600080fd5b50565b60008135905061302e81613008565b92915050565b6000819050919050565b61304781613034565b811461305257600080fd5b50565b6000813590506130648161303e565b92915050565b6000806040838503121561308157613080612fcc565b5b600061308f8582860161301f565b92505060206130a085828601613055565b9150509250929050565b6130b381613034565b82525050565b60006020820190506130ce60008301846130aa565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613109816130d4565b811461311457600080fd5b50565b60008135905061312681613100565b92915050565b60006020828403121561314257613141612fcc565b5b600061315084828501613117565b91505092915050565b60008115159050919050565b61316e81613159565b82525050565b60006020820190506131896000830184613165565b92915050565b6000602082840312156131a5576131a4612fcc565b5b60006131b384828501613055565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131f65780820151818401526020810190506131db565b83811115613205576000848401525b50505050565b6000601f19601f8301169050919050565b6000613227826131bc565b61323181856131c7565b93506132418185602086016131d8565b61324a8161320b565b840191505092915050565b6000602082019050818103600083015261326f818461321c565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132b98261320b565b810181811067ffffffffffffffff821117156132d8576132d7613281565b5b80604052505050565b60006132eb612fc2565b90506132f782826132b0565b919050565b600067ffffffffffffffff82111561331757613316613281565b5b6133208261320b565b9050602081019050919050565b82818337600083830152505050565b600061334f61334a846132fc565b6132e1565b90508281526020810184848401111561336b5761336a61327c565b5b61337684828561332d565b509392505050565b600082601f83011261339357613392613277565b5b81356133a384826020860161333c565b91505092915050565b600080604083850312156133c3576133c2612fcc565b5b60006133d185828601613055565b925050602083013567ffffffffffffffff8111156133f2576133f1612fd1565b5b6133fe8582860161337e565b9150509250929050565b6000819050919050565b61341b81613408565b811461342657600080fd5b50565b60008135905061343881613412565b92915050565b6000806040838503121561345557613454612fcc565b5b600061346385828601613055565b925050602061347485828601613429565b9150509250929050565b600067ffffffffffffffff82111561349957613498613281565b5b602082029050602081019050919050565b600080fd5b60006134c26134bd8461347e565b6132e1565b905080838252602082019050602084028301858111156134e5576134e46134aa565b5b835b8181101561350e57806134fa8882613055565b8452602084019350506020810190506134e7565b5050509392505050565b600082601f83011261352d5761352c613277565b5b813561353d8482602086016134af565b91505092915050565b600067ffffffffffffffff82111561356157613560613281565b5b61356a8261320b565b9050602081019050919050565b600061358a61358584613546565b6132e1565b9050828152602081018484840111156135a6576135a561327c565b5b6135b184828561332d565b509392505050565b600082601f8301126135ce576135cd613277565b5b81356135de848260208601613577565b91505092915050565b600080600080600060a0868803121561360357613602612fcc565b5b60006136118882890161301f565b95505060206136228882890161301f565b945050604086013567ffffffffffffffff81111561364357613642612fd1565b5b61364f88828901613518565b935050606086013567ffffffffffffffff8111156136705761366f612fd1565b5b61367c88828901613518565b925050608086013567ffffffffffffffff81111561369d5761369c612fd1565b5b6136a9888289016135b9565b9150509295509295909350565b6000602082840312156136cc576136cb612fcc565b5b60006136da8482850161301f565b91505092915050565b600080fd5b60008083601f8401126136fe576136fd613277565b5b8235905067ffffffffffffffff81111561371b5761371a6136e3565b5b602083019150836020820283011115613737576137366134aa565b5b9250929050565b6000806020838503121561375557613754612fcc565b5b600083013567ffffffffffffffff81111561377357613772612fd1565b5b61377f858286016136e8565b92509250509250929050565b600067ffffffffffffffff8211156137a6576137a5613281565b5b602082029050602081019050919050565b60006137ca6137c58461378b565b6132e1565b905080838252602082019050602084028301858111156137ed576137ec6134aa565b5b835b818110156138165780613802888261301f565b8452602084019350506020810190506137ef565b5050509392505050565b600082601f83011261383557613834613277565b5b81356138458482602086016137b7565b91505092915050565b6000806040838503121561386557613864612fcc565b5b600083013567ffffffffffffffff81111561388357613882612fd1565b5b61388f85828601613820565b925050602083013567ffffffffffffffff8111156138b0576138af612fd1565b5b6138bc85828601613518565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138fb81613034565b82525050565b600061390d83836138f2565b60208301905092915050565b6000602082019050919050565b6000613931826138c6565b61393b81856138d1565b9350613946836138e2565b8060005b8381101561397757815161395e8882613901565b975061396983613919565b92505060018101905061394a565b5085935050505092915050565b6000602082019050818103600083015261399e8184613926565b905092915050565b6139af81613408565b82525050565b60006020820190506139ca60008301846139a6565b92915050565b6139d981612ff6565b82525050565b60006020820190506139f460008301846139d0565b92915050565b60008060408385031215613a1157613a10612fcc565b5b6000613a1f85828601613055565b9250506020613a308582860161301f565b9150509250929050565b613a4381613159565b8114613a4e57600080fd5b50565b600081359050613a6081613a3a565b92915050565b60008060408385031215613a7d57613a7c612fcc565b5b6000613a8b8582860161301f565b9250506020613a9c85828601613a51565b9150509250929050565b60008060408385031215613abd57613abc612fcc565b5b6000613acb8582860161301f565b9250506020613adc8582860161301f565b9150509250929050565b600080600080600060a08688031215613b0257613b01612fcc565b5b6000613b108882890161301f565b9550506020613b218882890161301f565b9450506040613b3288828901613055565b9350506060613b4388828901613055565b925050608086013567ffffffffffffffff811115613b6457613b63612fd1565b5b613b70888289016135b9565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613bd9602b836131c7565b9150613be482613b7d565b604082019050919050565b60006020820190508181036000830152613c0881613bcc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c5657607f821691505b602082108103613c6957613c68613c0f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ca56020836131c7565b9150613cb082613c6f565b602082019050919050565b60006020820190508181036000830152613cd481613c98565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613d376032836131c7565b9150613d4282613cdb565b604082019050919050565b60006020820190508181036000830152613d6681613d2a565b9050919050565b7f4e6f7420656e6f75676820457468657200000000000000000000000000000000600082015250565b6000613da36010836131c7565b9150613dae82613d6d565b602082019050919050565b60006020820190508181036000830152613dd281613d96565b9050919050565b7f4164647265737320416c726561647920436c61696d6564000000000000000000600082015250565b6000613e0f6017836131c7565b9150613e1a82613dd9565b602082019050919050565b60006020820190508181036000830152613e3e81613e02565b9050919050565b7f4f4f530000000000000000000000000000000000000000000000000000000000600082015250565b6000613e7b6003836131c7565b9150613e8682613e45565b602082019050919050565b60006020820190508181036000830152613eaa81613e6e565b9050919050565b60008160601b9050919050565b6000613ec982613eb1565b9050919050565b6000613edb82613ebe565b9050919050565b613ef3613eee82612ff6565b613ed0565b82525050565b6000613f058284613ee2565b60148201915081905092915050565b7f496e76616c6964204d65726b6c652050726f6f66000000000000000000000000600082015250565b6000613f4a6014836131c7565b9150613f5582613f14565b602082019050919050565b60006020820190508181036000830152613f7981613f3d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fba82613034565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613fec57613feb613f80565b5b600182019050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006140536029836131c7565b915061405e82613ff7565b604082019050919050565b6000602082019050818103600083015261408281614046565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f53616c65206973206e6f74204c69766500000000000000000000000000000000600082015250565b60006140ee6010836131c7565b91506140f9826140b8565b602082019050919050565b6000602082019050818103600083015261411d816140e1565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006141806029836131c7565b915061418b82614124565b604082019050919050565b600060208201905081810360008301526141af81614173565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142126026836131c7565b915061421d826141b6565b604082019050919050565b6000602082019050818103600083015261424181614205565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006142a46028836131c7565b91506142af82614248565b604082019050919050565b600060208201905081810360008301526142d381614297565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006143366025836131c7565b9150614341826142da565b604082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006143c8602a836131c7565b91506143d38261436c565b604082019050919050565b600060208201905081810360008301526143f7816143bb565b9050919050565b600061440982613034565b915061441483613034565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561444957614448613f80565b5b828201905092915050565b6000604082019050818103600083015261446e8185613926565b905081810360208301526144828184613926565b90509392505050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006144c1601d836131c7565b91506144cc8261448b565b602082019050919050565b600060208201905081810360008301526144f0816144b4565b9050919050565b600081905092915050565b50565b60006145126000836144f7565b915061451d82614502565b600082019050919050565b600061453382614505565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000614599603a836131c7565b91506145a48261453d565b604082019050919050565b600060208201905081810360008301526145c88161458c565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061462b6021836131c7565b9150614636826145cf565b604082019050919050565b6000602082019050818103600083015261465a8161461e565b9050919050565b600060408201905061467660008301856130aa565b61468360208301846130aa565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006146e66029836131c7565b91506146f18261468a565b604082019050919050565b60006020820190508181036000830152614715816146d9565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006147438261471c565b61474d8185614727565b935061475d8185602086016131d8565b6147668161320b565b840191505092915050565b600060a08201905061478660008301886139d0565b61479360208301876139d0565b81810360408301526147a58186613926565b905081810360608301526147b98185613926565b905081810360808301526147cd8184614738565b90509695505050505050565b6000815190506147e881613100565b92915050565b60006020828403121561480457614803612fcc565b5b6000614812848285016147d9565b91505092915050565b60008160e01c9050919050565b600060033d11156148475760046000803e61484460005161481b565b90505b90565b600060443d106148d75761485c612fc2565b60043d036004823e80513d602482011167ffffffffffffffff821117156148845750506148d7565b808201805167ffffffffffffffff8111156148a257505050506148d7565b80602083010160043d0385018111156148bf5750505050506148d7565b6148ce826020018501866132b0565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006149366034836131c7565b9150614941826148da565b604082019050919050565b6000602082019050818103600083015261496581614929565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006149c86028836131c7565b91506149d38261496c565b604082019050919050565b600060208201905081810360008301526149f7816149bb565b9050919050565b600060a082019050614a1360008301886139d0565b614a2060208301876139d0565b614a2d60408301866130aa565b614a3a60608301856130aa565b8181036080830152614a4c8184614738565b9050969550505050505056fea264697066735822122084d4980743398b9db24353fa6007469d9cc2ae54ecfea774d0019d0931df126e64736f6c634300080d003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d62634364433665334848533237794137795759667656644d694462713761335476476e4763457a6b3464515868747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d57415745505332396a4c356f504a4b6753715545514b434c6b6d4d4651355a37486961357538584b58514a6b68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d657758486b656b776a645774557a6573735a4361693844673653456958417a666a3946524b3651724b4e355168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d575a6b4131436d6d4e736b7244444d5875424d54616b454b6e70775876336242484c456d726876653543704e
Deployed Bytecode
0x60806040526004361061022f5760003560e01c8063715018a61161012e578063b649a08f116100ab578063e985e9c51161006f578063e985e9c5146107ff578063ea3696ca1461083c578063f242432a14610867578063f2fde38b14610890578063fe8b3634146108b95761022f565b8063b649a08f1461071a578063c5bbb77f14610743578063d3c576d814610780578063de76bc64146107ab578063e6be48f1146107d65761022f565b80638f0203b3116100f25780638f0203b3146106235780639e87bc3614610660578063a22cb46514610689578063a7c6a98f146106b2578063aec6b5e7146106dd5761022f565b8063715018a61461055d57806371c5ecb1146105745780637bf544d5146105b15780638677f18b146105dc5780638da5cb5b146105f85761022f565b80632eb2c2d6116101bc5780634da7a3dc116101805780634da7a3dc146104ad5780634e1273f4146104d657806355378a1b146105135780635876f0d81461052a5780635c82dbc6146105535761022f565b80632eb2c2d6146103e957806330654e1314610412578063310fb53d1461043d5780633ccfd60b1461047a5780633fb47661146104915761022f565b8063162094c411610203578063162094c41461031657806318712c211461033f5780631d4d79951461036857806320c233d81461039357806327edb5ce146103be5761022f565b8062fdd58e1461023457806301ffc9a71461027157806304f7f0e0146102ae5780630e89341c146102d9575b600080fd5b34801561024057600080fd5b5061025b6004803603810190610256919061306a565b6108f6565b60405161026891906130b9565b60405180910390f35b34801561027d57600080fd5b506102986004803603810190610293919061312c565b6109be565b6040516102a59190613174565b60405180910390f35b3480156102ba57600080fd5b506102c3610aa0565b6040516102d091906130b9565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb919061318f565b610aa6565b60405161030d9190613255565b60405180910390f35b34801561032257600080fd5b5061033d600480360381019061033891906133ac565b610b4b565b005b34801561034b57600080fd5b506103666004803603810190610361919061343e565b610bf3565b005b34801561037457600080fd5b5061037d610c8b565b60405161038a91906130b9565b60405180910390f35b34801561039f57600080fd5b506103a8610c91565b6040516103b59190613174565b60405180910390f35b3480156103ca57600080fd5b506103d3610ca4565b6040516103e091906130b9565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906135e7565b610caa565b005b34801561041e57600080fd5b50610427610d4b565b60405161043491906130b9565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f91906136b6565b610d51565b6040516104719190613174565b60405180910390f35b34801561048657600080fd5b5061048f610d71565b005b6104ab60048036038101906104a6919061373e565b610e06565b005b3480156104b957600080fd5b506104d460048036038101906104cf919061318f565b6110dc565b005b3480156104e257600080fd5b506104fd60048036038101906104f8919061384e565b61118d565b60405161050a9190613984565b60405180910390f35b34801561051f57600080fd5b506105286112a6565b005b34801561053657600080fd5b50610551600480360381019061054c919061318f565b61134e565b005b61055b6113d4565b005b34801561056957600080fd5b5061057261162a565b005b34801561058057600080fd5b5061059b6004803603810190610596919061318f565b6116b2565b6040516105a891906139b5565b60405180910390f35b3480156105bd57600080fd5b506105c66116ca565b6040516105d391906130b9565b60405180910390f35b6105f660048036038101906105f1919061373e565b6116d0565b005b34801561060457600080fd5b5061060d61192c565b60405161061a91906139df565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906139fa565b611956565b6040516106579190613174565b60405180910390f35b34801561066c57600080fd5b506106876004803603810190610682919061318f565b611985565b005b34801561069557600080fd5b506106b060048036038101906106ab9190613a66565b611a0b565b005b3480156106be57600080fd5b506106c7611a21565b6040516106d491906130b9565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061318f565b611a27565b60405161071191906130b9565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c919061373e565b611a3f565b005b34801561074f57600080fd5b5061076a6004803603810190610765919061318f565b611c6e565b60405161077791906130b9565b60405180910390f35b34801561078c57600080fd5b50610795611c86565b6040516107a291906130b9565b60405180910390f35b3480156107b757600080fd5b506107c0611c8b565b6040516107cd91906130b9565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f8919061318f565b611c91565b005b34801561080b57600080fd5b5061082660048036038101906108219190613aa6565b611d17565b6040516108339190613174565b60405180910390f35b34801561084857600080fd5b50610851611dab565b60405161085e91906130b9565b60405180910390f35b34801561087357600080fd5b5061088e60048036038101906108899190613ae6565b611db0565b005b34801561089c57600080fd5b506108b760048036038101906108b291906136b6565b611e51565b005b3480156108c557600080fd5b506108e060048036038101906108db91906136b6565b611f48565b6040516108ed9190613174565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90613bef565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a995750610a9882611f68565b5b9050919050565b60085481565b6060600560008381526020019081526020016000208054610ac690613c3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610af290613c3e565b8015610b3f5780601f10610b1457610100808354040283529160200191610b3f565b820191906000526020600020905b815481529060010190602001808311610b2257829003601f168201915b50505050509050919050565b610b53611fd2565b73ffffffffffffffffffffffffffffffffffffffff16610b7161192c565b73ffffffffffffffffffffffffffffffffffffffff1614610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe90613cbb565b60405180910390fd5b80600560008481526020019081526020016000209080519060200190610bee929190612f1f565b505050565b610bfb611fd2565b73ffffffffffffffffffffffffffffffffffffffff16610c1961192c565b73ffffffffffffffffffffffffffffffffffffffff1614610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6690613cbb565b60405180910390fd5b8060046000848152602001908152602001600020819055505050565b600b5481565b601260009054906101000a900460ff1681565b60115481565b610cb2611fd2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610cf85750610cf785610cf2611fd2565b611d17565b5b610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90613d4d565b60405180910390fd5b610d448585858585611fda565b5050505050565b60105481565b600d6020528060005260406000206000915054906101000a900460ff1681565b610d79611fd2565b73ffffffffffffffffffffffffffffffffffffffff16610d9761192c565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613cbb565b60405180910390fd5b6000479050610e03610dfd61192c565b826122ed565b50565b601154341015610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4290613db9565b60405180910390fd5b600f6000600654815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290613e25565b60405180910390fd5b60076000600654815260200190815260200160002054600c60006006548152602001908152602001600020541015610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f90613e91565b60405180910390fd5b600033604051602001610f6b9190613ef9565b604051602081830303815290604052805190602001209050610fe4838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060046000600654815260200190815260200160002054836123e1565b611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90613f60565b60405180910390fd5b600760006006548152602001908152602001600020600081548092919061104990613faf565b91905055506001600f6000600654815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506110d7336006546001604051806020016040528060008152506123f8565b505050565b6110e4611fd2565b73ffffffffffffffffffffffffffffffffffffffff1661110261192c565b73ffffffffffffffffffffffffffffffffffffffff1614611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90613cbb565b60405180910390fd5b6006600081548092919061116b90613faf565b919050555080600c600060065481526020019081526020016000208190555050565b606081518351146111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca90614069565b60405180910390fd5b6000835167ffffffffffffffff8111156111f0576111ef613281565b5b60405190808252806020026020018201604052801561121e5781602001602082028036833780820191505090505b50905060005b845181101561129b5761126b85828151811061124357611242614089565b5b602002602001015185838151811061125e5761125d614089565b5b60200260200101516108f6565b82828151811061127e5761127d614089565b5b6020026020010181815250508061129490613faf565b9050611224565b508091505092915050565b6112ae611fd2565b73ffffffffffffffffffffffffffffffffffffffff166112cc61192c565b73ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990613cbb565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b611356611fd2565b73ffffffffffffffffffffffffffffffffffffffff1661137461192c565b73ffffffffffffffffffffffffffffffffffffffff16146113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c190613cbb565b60405180910390fd5b8060118190555050565b601260009054906101000a900460ff16611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a90614104565b60405180910390fd5b601154341015611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90613db9565b60405180910390fd5b600f6000600654815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff90613e25565b60405180910390fd5b60076000600654815260200190815260200160002054600c600060065481526020019081526020016000205411611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613e91565b60405180910390fd5b600760006006548152602001908152602001600020600081548092919061159a90613faf565b91905055506001600f6000600654815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611628336006546001604051806020016040528060008152506123f8565b565b611632611fd2565b73ffffffffffffffffffffffffffffffffffffffff1661165061192c565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d90613cbb565b60405180910390fd5b6116b0600061258d565b565b60046020528060005260406000206000915090505481565b60065481565b601054341015611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c90613db9565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179990613e25565b60405180910390fd5b600954600b5410156117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090613e91565b60405180910390fd5b6000336040516020016117fc9190613ef9565b604051602081830303815290604052805190602001209050611874838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600460006001815260200190815260200160002054836123e1565b6118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90613f60565b60405180910390fd5b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061192733600180604051806020016040528060008152506123f8565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b61198d611fd2565b73ffffffffffffffffffffffffffffffffffffffff166119ab61192c565b73ffffffffffffffffffffffffffffffffffffffff1614611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890613cbb565b60405180910390fd5b8060068190555050565b611a1d611a16611fd2565b8383612653565b5050565b600a5481565b60076020528060005260406000206000915090505481565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390613e25565b60405180910390fd5b600854600a541015611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90613e91565b60405180910390fd5b600033604051602001611b269190613ef9565b604051602081830303815290604052805190602001209050611b9d838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506004600080815260200190815260200160002054836123e1565b611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd390613f60565b60405180910390fd5b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060086000815480929190611c4790613faf565b9190505550611c693360006001604051806020016040528060008152506123f8565b505050565b600c6020528060005260406000206000915090505481565b600081565b60095481565b611c99611fd2565b73ffffffffffffffffffffffffffffffffffffffff16611cb761192c565b73ffffffffffffffffffffffffffffffffffffffff1614611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490613cbb565b60405180910390fd5b8060108190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600181565b611db8611fd2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611dfe5750611dfd85611df8611fd2565b611d17565b5b611e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3490614196565b60405180910390fd5b611e4a85858585856127bf565b5050505050565b611e59611fd2565b73ffffffffffffffffffffffffffffffffffffffff16611e7761192c565b73ffffffffffffffffffffffffffffffffffffffff1614611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613cbb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3390614228565b60405180910390fd5b611f458161258d565b50565b600e6020528060005260406000206000915054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b815183511461201e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612015906142ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361208d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120849061434c565b60405180910390fd5b6000612097611fd2565b90506120a7818787878787612a40565b60005b84518110156122585760008582815181106120c8576120c7614089565b5b6020026020010151905060008583815181106120e7576120e6614089565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f906143de565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223d91906143fe565b925050819055505050508061225190613faf565b90506120aa565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516122cf929190614454565b60405180910390a46122e5818787878787612a48565b505050505050565b80471015612330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612327906144d7565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161235690614528565b60006040518083038185875af1925050503d8060008114612393576040519150601f19603f3d011682016040523d82523d6000602084013e612398565b606091505b50509050806123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d3906145af565b60405180910390fd5b505050565b6000826123ee8584612c1f565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90614641565b60405180910390fd5b6000612471611fd2565b90506124928160008761248388612c94565b61248c88612c94565b87612a40565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124f191906143fe565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161256f929190614661565b60405180910390a461258681600087878787612d0e565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b8906146fc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127b29190613174565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361282e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128259061434c565b60405180910390fd5b6000612838611fd2565b905061285881878761284988612c94565b61285288612c94565b87612a40565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156128ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e6906143de565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129a491906143fe565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612a21929190614661565b60405180910390a4612a37828888888888612d0e565b50505050505050565b505050505050565b612a678473ffffffffffffffffffffffffffffffffffffffff16612ee5565b15612c17578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612aad959493929190614771565b6020604051808303816000875af1925050508015612ae957506040513d601f19601f82011682018060405250810190612ae691906147ee565b60015b612b8e57612af5614828565b806308c379a003612b515750612b0961484a565b80612b145750612b53565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b489190613255565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b859061494c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c906149de565b60405180910390fd5b505b505050505050565b60008082905060005b8451811015612c89576000858281518110612c4657612c45614089565b5b60200260200101519050808311612c6857612c618382612f08565b9250612c75565b612c728184612f08565b92505b508080612c8190613faf565b915050612c28565b508091505092915050565b60606000600167ffffffffffffffff811115612cb357612cb2613281565b5b604051908082528060200260200182016040528015612ce15781602001602082028036833780820191505090505b5090508281600081518110612cf957612cf8614089565b5b60200260200101818152505080915050919050565b612d2d8473ffffffffffffffffffffffffffffffffffffffff16612ee5565b15612edd578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612d739594939291906149fe565b6020604051808303816000875af1925050508015612daf57506040513d601f19601f82011682018060405250810190612dac91906147ee565b60015b612e5457612dbb614828565b806308c379a003612e175750612dcf61484a565b80612dda5750612e19565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0e9190613255565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4b9061494c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed2906149de565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b828054612f2b90613c3e565b90600052602060002090601f016020900481019282612f4d5760008555612f94565b82601f10612f6657805160ff1916838001178555612f94565b82800160010185558215612f94579182015b82811115612f93578251825591602001919060010190612f78565b5b509050612fa19190612fa5565b5090565b5b80821115612fbe576000816000905550600101612fa6565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061300182612fd6565b9050919050565b61301181612ff6565b811461301c57600080fd5b50565b60008135905061302e81613008565b92915050565b6000819050919050565b61304781613034565b811461305257600080fd5b50565b6000813590506130648161303e565b92915050565b6000806040838503121561308157613080612fcc565b5b600061308f8582860161301f565b92505060206130a085828601613055565b9150509250929050565b6130b381613034565b82525050565b60006020820190506130ce60008301846130aa565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613109816130d4565b811461311457600080fd5b50565b60008135905061312681613100565b92915050565b60006020828403121561314257613141612fcc565b5b600061315084828501613117565b91505092915050565b60008115159050919050565b61316e81613159565b82525050565b60006020820190506131896000830184613165565b92915050565b6000602082840312156131a5576131a4612fcc565b5b60006131b384828501613055565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131f65780820151818401526020810190506131db565b83811115613205576000848401525b50505050565b6000601f19601f8301169050919050565b6000613227826131bc565b61323181856131c7565b93506132418185602086016131d8565b61324a8161320b565b840191505092915050565b6000602082019050818103600083015261326f818461321c565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6132b98261320b565b810181811067ffffffffffffffff821117156132d8576132d7613281565b5b80604052505050565b60006132eb612fc2565b90506132f782826132b0565b919050565b600067ffffffffffffffff82111561331757613316613281565b5b6133208261320b565b9050602081019050919050565b82818337600083830152505050565b600061334f61334a846132fc565b6132e1565b90508281526020810184848401111561336b5761336a61327c565b5b61337684828561332d565b509392505050565b600082601f83011261339357613392613277565b5b81356133a384826020860161333c565b91505092915050565b600080604083850312156133c3576133c2612fcc565b5b60006133d185828601613055565b925050602083013567ffffffffffffffff8111156133f2576133f1612fd1565b5b6133fe8582860161337e565b9150509250929050565b6000819050919050565b61341b81613408565b811461342657600080fd5b50565b60008135905061343881613412565b92915050565b6000806040838503121561345557613454612fcc565b5b600061346385828601613055565b925050602061347485828601613429565b9150509250929050565b600067ffffffffffffffff82111561349957613498613281565b5b602082029050602081019050919050565b600080fd5b60006134c26134bd8461347e565b6132e1565b905080838252602082019050602084028301858111156134e5576134e46134aa565b5b835b8181101561350e57806134fa8882613055565b8452602084019350506020810190506134e7565b5050509392505050565b600082601f83011261352d5761352c613277565b5b813561353d8482602086016134af565b91505092915050565b600067ffffffffffffffff82111561356157613560613281565b5b61356a8261320b565b9050602081019050919050565b600061358a61358584613546565b6132e1565b9050828152602081018484840111156135a6576135a561327c565b5b6135b184828561332d565b509392505050565b600082601f8301126135ce576135cd613277565b5b81356135de848260208601613577565b91505092915050565b600080600080600060a0868803121561360357613602612fcc565b5b60006136118882890161301f565b95505060206136228882890161301f565b945050604086013567ffffffffffffffff81111561364357613642612fd1565b5b61364f88828901613518565b935050606086013567ffffffffffffffff8111156136705761366f612fd1565b5b61367c88828901613518565b925050608086013567ffffffffffffffff81111561369d5761369c612fd1565b5b6136a9888289016135b9565b9150509295509295909350565b6000602082840312156136cc576136cb612fcc565b5b60006136da8482850161301f565b91505092915050565b600080fd5b60008083601f8401126136fe576136fd613277565b5b8235905067ffffffffffffffff81111561371b5761371a6136e3565b5b602083019150836020820283011115613737576137366134aa565b5b9250929050565b6000806020838503121561375557613754612fcc565b5b600083013567ffffffffffffffff81111561377357613772612fd1565b5b61377f858286016136e8565b92509250509250929050565b600067ffffffffffffffff8211156137a6576137a5613281565b5b602082029050602081019050919050565b60006137ca6137c58461378b565b6132e1565b905080838252602082019050602084028301858111156137ed576137ec6134aa565b5b835b818110156138165780613802888261301f565b8452602084019350506020810190506137ef565b5050509392505050565b600082601f83011261383557613834613277565b5b81356138458482602086016137b7565b91505092915050565b6000806040838503121561386557613864612fcc565b5b600083013567ffffffffffffffff81111561388357613882612fd1565b5b61388f85828601613820565b925050602083013567ffffffffffffffff8111156138b0576138af612fd1565b5b6138bc85828601613518565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138fb81613034565b82525050565b600061390d83836138f2565b60208301905092915050565b6000602082019050919050565b6000613931826138c6565b61393b81856138d1565b9350613946836138e2565b8060005b8381101561397757815161395e8882613901565b975061396983613919565b92505060018101905061394a565b5085935050505092915050565b6000602082019050818103600083015261399e8184613926565b905092915050565b6139af81613408565b82525050565b60006020820190506139ca60008301846139a6565b92915050565b6139d981612ff6565b82525050565b60006020820190506139f460008301846139d0565b92915050565b60008060408385031215613a1157613a10612fcc565b5b6000613a1f85828601613055565b9250506020613a308582860161301f565b9150509250929050565b613a4381613159565b8114613a4e57600080fd5b50565b600081359050613a6081613a3a565b92915050565b60008060408385031215613a7d57613a7c612fcc565b5b6000613a8b8582860161301f565b9250506020613a9c85828601613a51565b9150509250929050565b60008060408385031215613abd57613abc612fcc565b5b6000613acb8582860161301f565b9250506020613adc8582860161301f565b9150509250929050565b600080600080600060a08688031215613b0257613b01612fcc565b5b6000613b108882890161301f565b9550506020613b218882890161301f565b9450506040613b3288828901613055565b9350506060613b4388828901613055565b925050608086013567ffffffffffffffff811115613b6457613b63612fd1565b5b613b70888289016135b9565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613bd9602b836131c7565b9150613be482613b7d565b604082019050919050565b60006020820190508181036000830152613c0881613bcc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c5657607f821691505b602082108103613c6957613c68613c0f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ca56020836131c7565b9150613cb082613c6f565b602082019050919050565b60006020820190508181036000830152613cd481613c98565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613d376032836131c7565b9150613d4282613cdb565b604082019050919050565b60006020820190508181036000830152613d6681613d2a565b9050919050565b7f4e6f7420656e6f75676820457468657200000000000000000000000000000000600082015250565b6000613da36010836131c7565b9150613dae82613d6d565b602082019050919050565b60006020820190508181036000830152613dd281613d96565b9050919050565b7f4164647265737320416c726561647920436c61696d6564000000000000000000600082015250565b6000613e0f6017836131c7565b9150613e1a82613dd9565b602082019050919050565b60006020820190508181036000830152613e3e81613e02565b9050919050565b7f4f4f530000000000000000000000000000000000000000000000000000000000600082015250565b6000613e7b6003836131c7565b9150613e8682613e45565b602082019050919050565b60006020820190508181036000830152613eaa81613e6e565b9050919050565b60008160601b9050919050565b6000613ec982613eb1565b9050919050565b6000613edb82613ebe565b9050919050565b613ef3613eee82612ff6565b613ed0565b82525050565b6000613f058284613ee2565b60148201915081905092915050565b7f496e76616c6964204d65726b6c652050726f6f66000000000000000000000000600082015250565b6000613f4a6014836131c7565b9150613f5582613f14565b602082019050919050565b60006020820190508181036000830152613f7981613f3d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fba82613034565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613fec57613feb613f80565b5b600182019050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006140536029836131c7565b915061405e82613ff7565b604082019050919050565b6000602082019050818103600083015261408281614046565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f53616c65206973206e6f74204c69766500000000000000000000000000000000600082015250565b60006140ee6010836131c7565b91506140f9826140b8565b602082019050919050565b6000602082019050818103600083015261411d816140e1565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006141806029836131c7565b915061418b82614124565b604082019050919050565b600060208201905081810360008301526141af81614173565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142126026836131c7565b915061421d826141b6565b604082019050919050565b6000602082019050818103600083015261424181614205565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006142a46028836131c7565b91506142af82614248565b604082019050919050565b600060208201905081810360008301526142d381614297565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006143366025836131c7565b9150614341826142da565b604082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006143c8602a836131c7565b91506143d38261436c565b604082019050919050565b600060208201905081810360008301526143f7816143bb565b9050919050565b600061440982613034565b915061441483613034565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561444957614448613f80565b5b828201905092915050565b6000604082019050818103600083015261446e8185613926565b905081810360208301526144828184613926565b90509392505050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006144c1601d836131c7565b91506144cc8261448b565b602082019050919050565b600060208201905081810360008301526144f0816144b4565b9050919050565b600081905092915050565b50565b60006145126000836144f7565b915061451d82614502565b600082019050919050565b600061453382614505565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000614599603a836131c7565b91506145a48261453d565b604082019050919050565b600060208201905081810360008301526145c88161458c565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061462b6021836131c7565b9150614636826145cf565b604082019050919050565b6000602082019050818103600083015261465a8161461e565b9050919050565b600060408201905061467660008301856130aa565b61468360208301846130aa565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006146e66029836131c7565b91506146f18261468a565b604082019050919050565b60006020820190508181036000830152614715816146d9565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006147438261471c565b61474d8185614727565b935061475d8185602086016131d8565b6147668161320b565b840191505092915050565b600060a08201905061478660008301886139d0565b61479360208301876139d0565b81810360408301526147a58186613926565b905081810360608301526147b98185613926565b905081810360808301526147cd8184614738565b90509695505050505050565b6000815190506147e881613100565b92915050565b60006020828403121561480457614803612fcc565b5b6000614812848285016147d9565b91505092915050565b60008160e01c9050919050565b600060033d11156148475760046000803e61484460005161481b565b90505b90565b600060443d106148d75761485c612fc2565b60043d036004823e80513d602482011167ffffffffffffffff821117156148845750506148d7565b808201805167ffffffffffffffff8111156148a257505050506148d7565b80602083010160043d0385018111156148bf5750505050506148d7565b6148ce826020018501866132b0565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006149366034836131c7565b9150614941826148da565b604082019050919050565b6000602082019050818103600083015261496581614929565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006149c86028836131c7565b91506149d38261496c565b604082019050919050565b600060208201905081810360008301526149f7816149bb565b9050919050565b600060a082019050614a1360008301886139d0565b614a2060208301876139d0565b614a2d60408301866130aa565b614a3a60608301856130aa565b8181036080830152614a4c8184614738565b9050969550505050505056fea264697066735822122084d4980743398b9db24353fa6007469d9cc2ae54ecfea774d0019d0931df126e64736f6c634300080d0033
Deployed Bytecode Sourcemap
40817:5032:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25766:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24789:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41233:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44893:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45008:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45126:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41385:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41833:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41768:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27705:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41721:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41526:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45688:156;;;;;;;;;;;;;:::i;:::-;;43671:602;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44735:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26163:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45497:80;;;;;;;;;;;;;:::i;:::-;;45380:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44281:446;;;:::i;:::-;;4995:103;;;;;;;;;;;;;:::i;:::-;;40893:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41112:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43118:545;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4344:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41633:65;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45585:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26760:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41340:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41179:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42608:502;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41429:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41027:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41273:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45261:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26987:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41070:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27227:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5253:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41580:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25766:231;25852:7;25899:1;25880:21;;:7;:21;;;25872:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25967:9;:13;25977:2;25967:13;;;;;;;;;;;:22;25981:7;25967:22;;;;;;;;;;;;;;;;25960:29;;25766:231;;;;:::o;24789:310::-;24891:4;24943:26;24928:41;;;:11;:41;;;;:110;;;;25001:37;24986:52;;;:11;:52;;;;24928:110;:163;;;;25055:36;25079:11;25055:23;:36::i;:::-;24928:163;24908:183;;24789:310;;;:::o;41233:33::-;;;;:::o;44893:107::-;44949:13;44982:4;:9;44987:3;44982:9;;;;;;;;;;;44975:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44893:107;;;:::o;45008:110::-;4575:12;:10;:12::i;:::-;4564:23;;:7;:5;:7::i;:::-;:23;;;4556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45104:4:::1;45092;:9;45097:3;45092:9;;;;;;;;;;;:16;;;;;;;;;;;;:::i;:::-;;45008:110:::0;;:::o;45126:127::-;4575:12;:10;:12::i;:::-;4564:23;;:7;:5;:7::i;:::-;:23;;;4556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45232:11:::1;45213;:16;45225:3;45213:16;;;;;;;;;;;:30;;;;45126:127:::0;;:::o;41385:37::-;;;;:::o;41833:28::-;;;;;;;;;;;;;:::o;41768:39::-;;;;:::o;27705:442::-;27946:12;:10;:12::i;:::-;27938:20;;:4;:20;;;:60;;;;27962:36;27979:4;27985:12;:10;:12::i;:::-;27962:16;:36::i;:::-;27938:60;27916:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28087:52;28110:4;28116:2;28120:3;28125:7;28134:4;28087:22;:52::i;:::-;27705:442;;;;;:::o;41721:40::-;;;;:::o;41526:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;45688:156::-;4575:12;:10;:12::i;:::-;4564:23;;:7;:5;:7::i;:::-;:23;;;4556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45740:15:::1;45758:21;45740:39;;45792:44;45818:7;:5;:7::i;:::-;45828;45792:17;:44::i;:::-;45727:117;45688:156::o:0;43671:602::-;43773:11;;43760:9;:24;;43752:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43825:13;:21;43839:6;;43825:21;;;;;;;;;;;:33;43847:10;43825:33;;;;;;;;;;;;;;;;;;;;;;;;;43824:34;43816:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43932:12;:20;43945:6;;43932:20;;;;;;;;;;;;43905:15;:23;43921:6;;43905:23;;;;;;;;;;;;:47;;43897:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43973:12;44015:10;43998:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;43988:39;;;;;;43973:54;;44046:59;44065:12;;44046:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44079:11;:19;44091:6;;44079:19;;;;;;;;;;;;44100:4;44046:18;:59::i;:::-;44038:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;44145:12;:20;44158:6;;44145:20;;;;;;;;;;;;:22;;;;;;;;;:::i;:::-;;;;;;44214:4;44178:13;:21;44192:6;;44178:21;;;;;;;;;;;:33;44200:10;44178:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;44231:32;44237:10;44249:6;;44257:1;44231:32;;;;;;;;;;;;:5;:32::i;:::-;43739:534;43671:602;;:::o;44735:150::-;4575:12;:10;:12::i;:::-;4564:23;;:7;:5;:7::i;:::-;:23;;;4556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44819:6:::1;;:8;;;;;;;;;:::i;:::-;;;;;;44864:11;44838:15;:23;44854:6;;44838:23;;;;;;;;;;;:37;;;;44735:150:::0;:::o;26163:524::-;26319:16;26380:3;:10;26361:8;:15;:29;26353:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26449:30;26496:8;:15;26482:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26449:63;;26530:9;26525:122;26549:8;:15;26545:1;:19;26525:122;;;26605:30;26615:8;26624:1;26615:11;;;;;;;;:::i;:::-;;;;;;;;26628:3;26632:1;26628:6;;;;;;;;:::i;:::-;;;;;;;;26605:9;:30::i;:::-;26586:13;26600:1;26586:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26566:3;;;;:::i;:::-;;;26525:122;;;;26666:13;26659:20;;;26163:524;;;;:::o;45497:80::-;4575:12;:10;:12::i;:::-;4564:23;;:7;:5;:7::i;:::-;:23;;;4556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45559:8:::1;;;;;;;;;;;45558:9;45547:8;;:20;;;;;;;;;;;;;;;;;;45497:80::o:0;45380:109::-;4575:12;:10;:12::i;:::-;4564:23;;:7;:5;:7::i;:::-;:23;;;4556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45470:9:::1;45456:11;:23;;;;45380:109:::0;:::o;44281:446::-;44339:8;;;;;;;;;;;44331:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;44400:11;;44387:9;:24;;44379:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44452:13;:21;44466:6;;44452:21;;;;;;;;;;;:33;44474:10;44452:33;;;;;;;;;;;;;;;;;;;;;;;;;44451:34;44443:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44558:12;:20;44571:6;;44558:20;;;;;;;;;;;;44532:15;:23;44548:6;;44532:23;;;;;;;;;;;;:46;44524:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44599:12;:20;44612:6;;44599:20;;;;;;;;;;;;:22;;;;;;;;;:::i;:::-;;;;;;44668:4;44632:13;:21;44646:6;;44632:21;;;;;;;;;;;:33;44654:10;44632:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;44685:32;44691:10;44703:6;;44711:1;44685:32;;;;;;;;;;;;:5;:32::i;:::-;44281:446::o;4995:103::-;4575:12;:10;:12::i;:::-;4564:23;;:7;:5;:7::i;:::-;:23;;;4556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5060:30:::1;5087:1;5060:18;:30::i;:::-;4995:103::o:0;40893:46::-;;;;;;;;;;;;;;;;;:::o;41112:25::-;;;;:::o;43118:545::-;43221:12;;43208:9;:25;;43200:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;43274:14;:26;43289:10;43274:26;;;;;;;;;;;;;;;;;;;;;;;;;43273:27;43265:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43367:13;;43347:16;;:33;;43339:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;43403:12;43445:10;43428:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;43418:39;;;;;;43403:54;;43476:60;43495:12;;43476:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43509:11;:20;41104:1;43509:20;;;;;;;;;;;;43531:4;43476:18;:60::i;:::-;43468:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;43603:4;43574:14;:26;43589:10;43574:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;43620;43626:10;41104:1;43647;43620:33;;;;;;;;;;;;:5;:33::i;:::-;43187:476;43118:545;;:::o;4344:87::-;4390:7;4417:6;;;;;;;;;;;4410:13;;4344:87;:::o;41633:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45585:95::-;4575:12;:10;:12::i;:::-;4564:23;;:7;:5;:7::i;:::-;:23;;;4556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45663:7:::1;45654:6;:16;;;;45585:95:::0;:::o;26760:155::-;26855:52;26874:12;:10;:12::i;:::-;26888:8;26898;26855:18;:52::i;:::-;26760:155;;:::o;41340:38::-;;;;:::o;41179:47::-;;;;;;;;;;;;;;;;;:::o;42608:502::-;42692:15;:27;42708:10;42692:27;;;;;;;;;;;;;;;;;;;;;;;;;42691:28;42683:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42787:14;;42766:17;;:35;;42758:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42822:12;42864:10;42847:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;42837:39;;;;;;42822:54;;42895:61;42914:12;;42895:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42928:11;:21;41062:1;42928:21;;;;;;;;;;;;42951:4;42895:18;:61::i;:::-;42887:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;43024:4;42994:15;:27;43010:10;42994:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43039:14;;:16;;;;;;;;;:::i;:::-;;;;;;43068:34;43074:10;41062:1;43096;43068:34;;;;;;;;;;;;:5;:34::i;:::-;42670:440;42608:502;;:::o;41429:50::-;;;;;;;;;;;;;;;;;:::o;41027:36::-;41062:1;41027:36;:::o;41273:32::-;;;;:::o;45261:111::-;4575:12;:10;:12::i;:::-;4564:23;;:7;:5;:7::i;:::-;:23;;;4556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45353:9:::1;45338:12;:24;;;;45261:111:::0;:::o;26987:168::-;27086:4;27110:18;:27;27129:7;27110:27;;;;;;;;;;;;;;;:37;27138:8;27110:37;;;;;;;;;;;;;;;;;;;;;;;;;27103:44;;26987:168;;;;:::o;41070:35::-;41104:1;41070:35;:::o;27227:401::-;27443:12;:10;:12::i;:::-;27435:20;;:4;:20;;;:60;;;;27459:36;27476:4;27482:12;:10;:12::i;:::-;27459:16;:36::i;:::-;27435:60;27413:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;27575:45;27593:4;27599:2;27603;27607:6;27615:4;27575:17;:45::i;:::-;27227:401;;;;;:::o;5253:201::-;4575:12;:10;:12::i;:::-;4564:23;;:7;:5;:7::i;:::-;:23;;;4556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5362:1:::1;5342:22;;:8;:22;;::::0;5334:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5418:28;5437:8;5418:18;:28::i;:::-;5253:201:::0;:::o;41580:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;16097:157::-;16182:4;16221:25;16206:40;;;:11;:40;;;;16199:47;;16097:157;;;:::o;3068:98::-;3121:7;3148:10;3141:17;;3068:98;:::o;29789:1074::-;30016:7;:14;30002:3;:10;:28;29994:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30108:1;30094:16;;:2;:16;;;30086:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30165:16;30184:12;:10;:12::i;:::-;30165:31;;30209:60;30230:8;30240:4;30246:2;30250:3;30255:7;30264:4;30209:20;:60::i;:::-;30287:9;30282:421;30306:3;:10;30302:1;:14;30282:421;;;30338:10;30351:3;30355:1;30351:6;;;;;;;;:::i;:::-;;;;;;;;30338:19;;30372:14;30389:7;30397:1;30389:10;;;;;;;;:::i;:::-;;;;;;;;30372:27;;30416:19;30438:9;:13;30448:2;30438:13;;;;;;;;;;;:19;30452:4;30438:19;;;;;;;;;;;;;;;;30416:41;;30495:6;30480:11;:21;;30472:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30628:6;30614:11;:20;30592:9;:13;30602:2;30592:13;;;;;;;;;;;:19;30606:4;30592:19;;;;;;;;;;;;;;;:42;;;;30685:6;30664:9;:13;30674:2;30664:13;;;;;;;;;;;:17;30678:2;30664:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30323:380;;;30318:3;;;;:::i;:::-;;;30282:421;;;;30750:2;30720:47;;30744:4;30720:47;;30734:8;30720:47;;;30754:3;30759:7;30720:47;;;;;;;:::i;:::-;;;;;;;;30780:75;30816:8;30826:4;30832:2;30836:3;30841:7;30850:4;30780:35;:75::i;:::-;29983:880;29789:1074;;;;;:::o;8306:317::-;8421:6;8396:21;:31;;8388:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8475:12;8493:9;:14;;8515:6;8493:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8474:52;;;8545:7;8537:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;8377:246;8306:317;;:::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;1065:40;;923:190;;;;;:::o;32181:569::-;32348:1;32334:16;;:2;:16;;;32326:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32401:16;32420:12;:10;:12::i;:::-;32401:31;;32445:102;32466:8;32484:1;32488:2;32492:21;32510:2;32492:17;:21::i;:::-;32515:25;32533:6;32515:17;:25::i;:::-;32542:4;32445:20;:102::i;:::-;32581:6;32560:9;:13;32570:2;32560:13;;;;;;;;;;;:17;32574:2;32560:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32640:2;32603:52;;32636:1;32603:52;;32618:8;32603:52;;;32644:2;32648:6;32603:52;;;;;;;:::i;:::-;;;;;;;;32668:74;32699:8;32717:1;32721:2;32725;32729:6;32737:4;32668:30;:74::i;:::-;32315:435;32181:569;;;;:::o;5614:191::-;5688:16;5707:6;;;;;;;;;;;5688:25;;5733:8;5724:6;;:17;;;;;;;;;;;;;;;;;;5788:8;5757:40;;5778:8;5757:40;;;;;;;;;;;;5677:128;5614:191;:::o;35975:331::-;36130:8;36121:17;;:5;:17;;;36113:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36233:8;36195:18;:25;36214:5;36195:25;;;;;;;;;;;;;;;:35;36221:8;36195:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36279:8;36257:41;;36272:5;36257:41;;;36289:8;36257:41;;;;;;:::i;:::-;;;;;;;;35975:331;;;:::o;28611:820::-;28813:1;28799:16;;:2;:16;;;28791:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28870:16;28889:12;:10;:12::i;:::-;28870:31;;28914:96;28935:8;28945:4;28951:2;28955:21;28973:2;28955:17;:21::i;:::-;28978:25;28996:6;28978:17;:25::i;:::-;29005:4;28914:20;:96::i;:::-;29023:19;29045:9;:13;29055:2;29045:13;;;;;;;;;;;:19;29059:4;29045:19;;;;;;;;;;;;;;;;29023:41;;29098:6;29083:11;:21;;29075:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29223:6;29209:11;:20;29187:9;:13;29197:2;29187:13;;;;;;;;;;;:19;29201:4;29187:19;;;;;;;;;;;;;;;:42;;;;29272:6;29251:9;:13;29261:2;29251:13;;;;;;;;;;;:17;29265:2;29251:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29327:2;29296:46;;29321:4;29296:46;;29311:8;29296:46;;;29331:2;29335:6;29296:46;;;;;;;:::i;:::-;;;;;;;;29355:68;29386:8;29396:4;29402:2;29406;29410:6;29418:4;29355:30;:68::i;:::-;28780:651;;28611:820;;;;;:::o;37262:221::-;;;;;;;:::o;38243:813::-;38483:15;:2;:13;;;:15::i;:::-;38479:570;;;38536:2;38519:43;;;38563:8;38573:4;38579:3;38584:7;38593:4;38519:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38515:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38911:6;38904:14;;;;;;;;;;;:::i;:::-;;;;;;;;38515:523;;;38960:62;;;;;;;;;;:::i;:::-;;;;;;;;38515:523;38692:48;;;38680:60;;;:8;:60;;;;38676:159;;38765:50;;;;;;;;;;:::i;:::-;;;;;;;;38676:159;38599:251;38479:570;38243:813;;;;;;:::o;1475:675::-;1558:7;1578:20;1601:4;1578:27;;1621:9;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;:::i;:::-;;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;1867:42;1882:12;1896;1867:14;:42::i;:::-;1852:57;;1720:382;;;2044:42;2059:12;2073;2044:14;:42::i;:::-;2029:57;;1720:382;1659:454;1654:3;;;;;:::i;:::-;;;;1616:497;;;;2130:12;2123:19;;;1475:675;;;;:::o;39064:198::-;39130:16;39159:22;39198:1;39184:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39159:41;;39222:7;39211:5;39217:1;39211:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39249:5;39242:12;;;39064:198;;;:::o;37491:744::-;37706:15;:2;:13;;;:15::i;:::-;37702:526;;;37759:2;37742:38;;;37781:8;37791:4;37797:2;37801:6;37809:4;37742:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37738:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38090:6;38083:14;;;;;;;;;;;:::i;:::-;;;;;;;;37738:479;;;38139:62;;;;;;;;;;:::i;:::-;;;;;;;;37738:479;37876:43;;;37864:55;;;:8;:55;;;;37860:154;;37944:50;;;;;;;;;;:::i;:::-;;;;;;;;37860:154;37815:214;37702:526;37491:744;;;;;;:::o;7045:326::-;7105:4;7362:1;7340:7;:19;;;:23;7333:30;;7045:326;;;:::o;2158:224::-;2226:13;2289:1;2283:4;2276:15;2318:1;2312:4;2305:15;2359:4;2353;2343:21;2334:30;;2158:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:329::-;3272:6;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3213:329;;;;:::o;3548:99::-;3600:6;3634:5;3628:12;3618:22;;3548:99;;;:::o;3653:169::-;3737:11;3771:6;3766:3;3759:19;3811:4;3806:3;3802:14;3787:29;;3653:169;;;;:::o;3828:307::-;3896:1;3906:113;3920:6;3917:1;3914:13;3906:113;;;4005:1;4000:3;3996:11;3990:18;3986:1;3981:3;3977:11;3970:39;3942:2;3939:1;3935:10;3930:15;;3906:113;;;4037:6;4034:1;4031:13;4028:101;;;4117:1;4108:6;4103:3;4099:16;4092:27;4028:101;3877:258;3828:307;;;:::o;4141:102::-;4182:6;4233:2;4229:7;4224:2;4217:5;4213:14;4209:28;4199:38;;4141:102;;;:::o;4249:364::-;4337:3;4365:39;4398:5;4365:39;:::i;:::-;4420:71;4484:6;4479:3;4420:71;:::i;:::-;4413:78;;4500:52;4545:6;4540:3;4533:4;4526:5;4522:16;4500:52;:::i;:::-;4577:29;4599:6;4577:29;:::i;:::-;4572:3;4568:39;4561:46;;4341:272;4249:364;;;;:::o;4619:313::-;4732:4;4770:2;4759:9;4755:18;4747:26;;4819:9;4813:4;4809:20;4805:1;4794:9;4790:17;4783:47;4847:78;4920:4;4911:6;4847:78;:::i;:::-;4839:86;;4619:313;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:180;5232:77;5229:1;5222:88;5329:4;5326:1;5319:15;5353:4;5350:1;5343:15;5370:281;5453:27;5475:4;5453:27;:::i;:::-;5445:6;5441:40;5583:6;5571:10;5568:22;5547:18;5535:10;5532:34;5529:62;5526:88;;;5594:18;;:::i;:::-;5526:88;5634:10;5630:2;5623:22;5413:238;5370:281;;:::o;5657:129::-;5691:6;5718:20;;:::i;:::-;5708:30;;5747:33;5775:4;5767:6;5747:33;:::i;:::-;5657:129;;;:::o;5792:308::-;5854:4;5944:18;5936:6;5933:30;5930:56;;;5966:18;;:::i;:::-;5930:56;6004:29;6026:6;6004:29;:::i;:::-;5996:37;;6088:4;6082;6078:15;6070:23;;5792:308;;;:::o;6106:154::-;6190:6;6185:3;6180;6167:30;6252:1;6243:6;6238:3;6234:16;6227:27;6106:154;;;:::o;6266:412::-;6344:5;6369:66;6385:49;6427:6;6385:49;:::i;:::-;6369:66;:::i;:::-;6360:75;;6458:6;6451:5;6444:21;6496:4;6489:5;6485:16;6534:3;6525:6;6520:3;6516:16;6513:25;6510:112;;;6541:79;;:::i;:::-;6510:112;6631:41;6665:6;6660:3;6655;6631:41;:::i;:::-;6350:328;6266:412;;;;;:::o;6698:340::-;6754:5;6803:3;6796:4;6788:6;6784:17;6780:27;6770:122;;6811:79;;:::i;:::-;6770:122;6928:6;6915:20;6953:79;7028:3;7020:6;7013:4;7005:6;7001:17;6953:79;:::i;:::-;6944:88;;6760:278;6698:340;;;;:::o;7044:654::-;7122:6;7130;7179:2;7167:9;7158:7;7154:23;7150:32;7147:119;;;7185:79;;:::i;:::-;7147:119;7305:1;7330:53;7375:7;7366:6;7355:9;7351:22;7330:53;:::i;:::-;7320:63;;7276:117;7460:2;7449:9;7445:18;7432:32;7491:18;7483:6;7480:30;7477:117;;;7513:79;;:::i;:::-;7477:117;7618:63;7673:7;7664:6;7653:9;7649:22;7618:63;:::i;:::-;7608:73;;7403:288;7044:654;;;;;:::o;7704:77::-;7741:7;7770:5;7759:16;;7704:77;;;:::o;7787:122::-;7860:24;7878:5;7860:24;:::i;:::-;7853:5;7850:35;7840:63;;7899:1;7896;7889:12;7840:63;7787:122;:::o;7915:139::-;7961:5;7999:6;7986:20;7977:29;;8015:33;8042:5;8015:33;:::i;:::-;7915:139;;;;:::o;8060:474::-;8128:6;8136;8185:2;8173:9;8164:7;8160:23;8156:32;8153:119;;;8191:79;;:::i;:::-;8153:119;8311:1;8336:53;8381:7;8372:6;8361:9;8357:22;8336:53;:::i;:::-;8326:63;;8282:117;8438:2;8464:53;8509:7;8500:6;8489:9;8485:22;8464:53;:::i;:::-;8454:63;;8409:118;8060:474;;;;;:::o;8540:311::-;8617:4;8707:18;8699:6;8696:30;8693:56;;;8729:18;;:::i;:::-;8693:56;8779:4;8771:6;8767:17;8759:25;;8839:4;8833;8829:15;8821:23;;8540:311;;;:::o;8857:117::-;8966:1;8963;8956:12;8997:710;9093:5;9118:81;9134:64;9191:6;9134:64;:::i;:::-;9118:81;:::i;:::-;9109:90;;9219:5;9248:6;9241:5;9234:21;9282:4;9275:5;9271:16;9264:23;;9335:4;9327:6;9323:17;9315:6;9311:30;9364:3;9356:6;9353:15;9350:122;;;9383:79;;:::i;:::-;9350:122;9498:6;9481:220;9515:6;9510:3;9507:15;9481:220;;;9590:3;9619:37;9652:3;9640:10;9619:37;:::i;:::-;9614:3;9607:50;9686:4;9681:3;9677:14;9670:21;;9557:144;9541:4;9536:3;9532:14;9525:21;;9481:220;;;9485:21;9099:608;;8997:710;;;;;:::o;9730:370::-;9801:5;9850:3;9843:4;9835:6;9831:17;9827:27;9817:122;;9858:79;;:::i;:::-;9817:122;9975:6;9962:20;10000:94;10090:3;10082:6;10075:4;10067:6;10063:17;10000:94;:::i;:::-;9991:103;;9807:293;9730:370;;;;:::o;10106:307::-;10167:4;10257:18;10249:6;10246:30;10243:56;;;10279:18;;:::i;:::-;10243:56;10317:29;10339:6;10317:29;:::i;:::-;10309:37;;10401:4;10395;10391:15;10383:23;;10106:307;;;:::o;10419:410::-;10496:5;10521:65;10537:48;10578:6;10537:48;:::i;:::-;10521:65;:::i;:::-;10512:74;;10609:6;10602:5;10595:21;10647:4;10640:5;10636:16;10685:3;10676:6;10671:3;10667:16;10664:25;10661:112;;;10692:79;;:::i;:::-;10661:112;10782:41;10816:6;10811:3;10806;10782:41;:::i;:::-;10502:327;10419:410;;;;;:::o;10848:338::-;10903:5;10952:3;10945:4;10937:6;10933:17;10929:27;10919:122;;10960:79;;:::i;:::-;10919:122;11077:6;11064:20;11102:78;11176:3;11168:6;11161:4;11153:6;11149:17;11102:78;:::i;:::-;11093:87;;10909:277;10848:338;;;;:::o;11192:1509::-;11346:6;11354;11362;11370;11378;11427:3;11415:9;11406:7;11402:23;11398:33;11395:120;;;11434:79;;:::i;:::-;11395:120;11554:1;11579:53;11624:7;11615:6;11604:9;11600:22;11579:53;:::i;:::-;11569:63;;11525:117;11681:2;11707:53;11752:7;11743:6;11732:9;11728:22;11707:53;:::i;:::-;11697:63;;11652:118;11837:2;11826:9;11822:18;11809:32;11868:18;11860:6;11857:30;11854:117;;;11890:79;;:::i;:::-;11854:117;11995:78;12065:7;12056:6;12045:9;12041:22;11995:78;:::i;:::-;11985:88;;11780:303;12150:2;12139:9;12135:18;12122:32;12181:18;12173:6;12170:30;12167:117;;;12203:79;;:::i;:::-;12167:117;12308:78;12378:7;12369:6;12358:9;12354:22;12308:78;:::i;:::-;12298:88;;12093:303;12463:3;12452:9;12448:19;12435:33;12495:18;12487:6;12484:30;12481:117;;;12517:79;;:::i;:::-;12481:117;12622:62;12676:7;12667:6;12656:9;12652:22;12622:62;:::i;:::-;12612:72;;12406:288;11192:1509;;;;;;;;:::o;12707:329::-;12766:6;12815:2;12803:9;12794:7;12790:23;12786:32;12783:119;;;12821:79;;:::i;:::-;12783:119;12941:1;12966:53;13011:7;13002:6;12991:9;12987:22;12966:53;:::i;:::-;12956:63;;12912:117;12707:329;;;;:::o;13042:117::-;13151:1;13148;13141:12;13182:568;13255:8;13265:6;13315:3;13308:4;13300:6;13296:17;13292:27;13282:122;;13323:79;;:::i;:::-;13282:122;13436:6;13423:20;13413:30;;13466:18;13458:6;13455:30;13452:117;;;13488:79;;:::i;:::-;13452:117;13602:4;13594:6;13590:17;13578:29;;13656:3;13648:4;13640:6;13636:17;13626:8;13622:32;13619:41;13616:128;;;13663:79;;:::i;:::-;13616:128;13182:568;;;;;:::o;13756:559::-;13842:6;13850;13899:2;13887:9;13878:7;13874:23;13870:32;13867:119;;;13905:79;;:::i;:::-;13867:119;14053:1;14042:9;14038:17;14025:31;14083:18;14075:6;14072:30;14069:117;;;14105:79;;:::i;:::-;14069:117;14218:80;14290:7;14281:6;14270:9;14266:22;14218:80;:::i;:::-;14200:98;;;;13996:312;13756:559;;;;;:::o;14321:311::-;14398:4;14488:18;14480:6;14477:30;14474:56;;;14510:18;;:::i;:::-;14474:56;14560:4;14552:6;14548:17;14540:25;;14620:4;14614;14610:15;14602:23;;14321:311;;;:::o;14655:710::-;14751:5;14776:81;14792:64;14849:6;14792:64;:::i;:::-;14776:81;:::i;:::-;14767:90;;14877:5;14906:6;14899:5;14892:21;14940:4;14933:5;14929:16;14922:23;;14993:4;14985:6;14981:17;14973:6;14969:30;15022:3;15014:6;15011:15;15008:122;;;15041:79;;:::i;:::-;15008:122;15156:6;15139:220;15173:6;15168:3;15165:15;15139:220;;;15248:3;15277:37;15310:3;15298:10;15277:37;:::i;:::-;15272:3;15265:50;15344:4;15339:3;15335:14;15328:21;;15215:144;15199:4;15194:3;15190:14;15183:21;;15139:220;;;15143:21;14757:608;;14655:710;;;;;:::o;15388:370::-;15459:5;15508:3;15501:4;15493:6;15489:17;15485:27;15475:122;;15516:79;;:::i;:::-;15475:122;15633:6;15620:20;15658:94;15748:3;15740:6;15733:4;15725:6;15721:17;15658:94;:::i;:::-;15649:103;;15465:293;15388:370;;;;:::o;15764:894::-;15882:6;15890;15939:2;15927:9;15918:7;15914:23;15910:32;15907:119;;;15945:79;;:::i;:::-;15907:119;16093:1;16082:9;16078:17;16065:31;16123:18;16115:6;16112:30;16109:117;;;16145:79;;:::i;:::-;16109:117;16250:78;16320:7;16311:6;16300:9;16296:22;16250:78;:::i;:::-;16240:88;;16036:302;16405:2;16394:9;16390:18;16377:32;16436:18;16428:6;16425:30;16422:117;;;16458:79;;:::i;:::-;16422:117;16563:78;16633:7;16624:6;16613:9;16609:22;16563:78;:::i;:::-;16553:88;;16348:303;15764:894;;;;;:::o;16664:114::-;16731:6;16765:5;16759:12;16749:22;;16664:114;;;:::o;16784:184::-;16883:11;16917:6;16912:3;16905:19;16957:4;16952:3;16948:14;16933:29;;16784:184;;;;:::o;16974:132::-;17041:4;17064:3;17056:11;;17094:4;17089:3;17085:14;17077:22;;16974:132;;;:::o;17112:108::-;17189:24;17207:5;17189:24;:::i;:::-;17184:3;17177:37;17112:108;;:::o;17226:179::-;17295:10;17316:46;17358:3;17350:6;17316:46;:::i;:::-;17394:4;17389:3;17385:14;17371:28;;17226:179;;;;:::o;17411:113::-;17481:4;17513;17508:3;17504:14;17496:22;;17411:113;;;:::o;17560:732::-;17679:3;17708:54;17756:5;17708:54;:::i;:::-;17778:86;17857:6;17852:3;17778:86;:::i;:::-;17771:93;;17888:56;17938:5;17888:56;:::i;:::-;17967:7;17998:1;17983:284;18008:6;18005:1;18002:13;17983:284;;;18084:6;18078:13;18111:63;18170:3;18155:13;18111:63;:::i;:::-;18104:70;;18197:60;18250:6;18197:60;:::i;:::-;18187:70;;18043:224;18030:1;18027;18023:9;18018:14;;17983:284;;;17987:14;18283:3;18276:10;;17684:608;;;17560:732;;;;:::o;18298:373::-;18441:4;18479:2;18468:9;18464:18;18456:26;;18528:9;18522:4;18518:20;18514:1;18503:9;18499:17;18492:47;18556:108;18659:4;18650:6;18556:108;:::i;:::-;18548:116;;18298:373;;;;:::o;18677:118::-;18764:24;18782:5;18764:24;:::i;:::-;18759:3;18752:37;18677:118;;:::o;18801:222::-;18894:4;18932:2;18921:9;18917:18;18909:26;;18945:71;19013:1;19002:9;18998:17;18989:6;18945:71;:::i;:::-;18801:222;;;;:::o;19029:118::-;19116:24;19134:5;19116:24;:::i;:::-;19111:3;19104:37;19029:118;;:::o;19153:222::-;19246:4;19284:2;19273:9;19269:18;19261:26;;19297:71;19365:1;19354:9;19350:17;19341:6;19297:71;:::i;:::-;19153:222;;;;:::o;19381:474::-;19449:6;19457;19506:2;19494:9;19485:7;19481:23;19477:32;19474:119;;;19512:79;;:::i;:::-;19474:119;19632:1;19657:53;19702:7;19693:6;19682:9;19678:22;19657:53;:::i;:::-;19647:63;;19603:117;19759:2;19785:53;19830:7;19821:6;19810:9;19806:22;19785:53;:::i;:::-;19775:63;;19730:118;19381:474;;;;;:::o;19861:116::-;19931:21;19946:5;19931:21;:::i;:::-;19924:5;19921:32;19911:60;;19967:1;19964;19957:12;19911:60;19861:116;:::o;19983:133::-;20026:5;20064:6;20051:20;20042:29;;20080:30;20104:5;20080:30;:::i;:::-;19983:133;;;;:::o;20122:468::-;20187:6;20195;20244:2;20232:9;20223:7;20219:23;20215:32;20212:119;;;20250:79;;:::i;:::-;20212:119;20370:1;20395:53;20440:7;20431:6;20420:9;20416:22;20395:53;:::i;:::-;20385:63;;20341:117;20497:2;20523:50;20565:7;20556:6;20545:9;20541:22;20523:50;:::i;:::-;20513:60;;20468:115;20122:468;;;;;:::o;20596:474::-;20664:6;20672;20721:2;20709:9;20700:7;20696:23;20692:32;20689:119;;;20727:79;;:::i;:::-;20689:119;20847:1;20872:53;20917:7;20908:6;20897:9;20893:22;20872:53;:::i;:::-;20862:63;;20818:117;20974:2;21000:53;21045:7;21036:6;21025:9;21021:22;21000:53;:::i;:::-;20990:63;;20945:118;20596:474;;;;;:::o;21076:1089::-;21180:6;21188;21196;21204;21212;21261:3;21249:9;21240:7;21236:23;21232:33;21229:120;;;21268:79;;:::i;:::-;21229:120;21388:1;21413:53;21458:7;21449:6;21438:9;21434:22;21413:53;:::i;:::-;21403:63;;21359:117;21515:2;21541:53;21586:7;21577:6;21566:9;21562:22;21541:53;:::i;:::-;21531:63;;21486:118;21643:2;21669:53;21714:7;21705:6;21694:9;21690:22;21669:53;:::i;:::-;21659:63;;21614:118;21771:2;21797:53;21842:7;21833:6;21822:9;21818:22;21797:53;:::i;:::-;21787:63;;21742:118;21927:3;21916:9;21912:19;21899:33;21959:18;21951:6;21948:30;21945:117;;;21981:79;;:::i;:::-;21945:117;22086:62;22140:7;22131:6;22120:9;22116:22;22086:62;:::i;:::-;22076:72;;21870:288;21076:1089;;;;;;;;:::o;22171:230::-;22311:34;22307:1;22299:6;22295:14;22288:58;22380:13;22375:2;22367:6;22363:15;22356:38;22171:230;:::o;22407:366::-;22549:3;22570:67;22634:2;22629:3;22570:67;:::i;:::-;22563:74;;22646:93;22735:3;22646:93;:::i;:::-;22764:2;22759:3;22755:12;22748:19;;22407:366;;;:::o;22779:419::-;22945:4;22983:2;22972:9;22968:18;22960:26;;23032:9;23026:4;23022:20;23018:1;23007:9;23003:17;22996:47;23060:131;23186:4;23060:131;:::i;:::-;23052:139;;22779:419;;;:::o;23204:180::-;23252:77;23249:1;23242:88;23349:4;23346:1;23339:15;23373:4;23370:1;23363:15;23390:320;23434:6;23471:1;23465:4;23461:12;23451:22;;23518:1;23512:4;23508:12;23539:18;23529:81;;23595:4;23587:6;23583:17;23573:27;;23529:81;23657:2;23649:6;23646:14;23626:18;23623:38;23620:84;;23676:18;;:::i;:::-;23620:84;23441:269;23390:320;;;:::o;23716:182::-;23856:34;23852:1;23844:6;23840:14;23833:58;23716:182;:::o;23904:366::-;24046:3;24067:67;24131:2;24126:3;24067:67;:::i;:::-;24060:74;;24143:93;24232:3;24143:93;:::i;:::-;24261:2;24256:3;24252:12;24245:19;;23904:366;;;:::o;24276:419::-;24442:4;24480:2;24469:9;24465:18;24457:26;;24529:9;24523:4;24519:20;24515:1;24504:9;24500:17;24493:47;24557:131;24683:4;24557:131;:::i;:::-;24549:139;;24276:419;;;:::o;24701:237::-;24841:34;24837:1;24829:6;24825:14;24818:58;24910:20;24905:2;24897:6;24893:15;24886:45;24701:237;:::o;24944:366::-;25086:3;25107:67;25171:2;25166:3;25107:67;:::i;:::-;25100:74;;25183:93;25272:3;25183:93;:::i;:::-;25301:2;25296:3;25292:12;25285:19;;24944:366;;;:::o;25316:419::-;25482:4;25520:2;25509:9;25505:18;25497:26;;25569:9;25563:4;25559:20;25555:1;25544:9;25540:17;25533:47;25597:131;25723:4;25597:131;:::i;:::-;25589:139;;25316:419;;;:::o;25741:166::-;25881:18;25877:1;25869:6;25865:14;25858:42;25741:166;:::o;25913:366::-;26055:3;26076:67;26140:2;26135:3;26076:67;:::i;:::-;26069:74;;26152:93;26241:3;26152:93;:::i;:::-;26270:2;26265:3;26261:12;26254:19;;25913:366;;;:::o;26285:419::-;26451:4;26489:2;26478:9;26474:18;26466:26;;26538:9;26532:4;26528:20;26524:1;26513:9;26509:17;26502:47;26566:131;26692:4;26566:131;:::i;:::-;26558:139;;26285:419;;;:::o;26710:173::-;26850:25;26846:1;26838:6;26834:14;26827:49;26710:173;:::o;26889:366::-;27031:3;27052:67;27116:2;27111:3;27052:67;:::i;:::-;27045:74;;27128:93;27217:3;27128:93;:::i;:::-;27246:2;27241:3;27237:12;27230:19;;26889:366;;;:::o;27261:419::-;27427:4;27465:2;27454:9;27450:18;27442:26;;27514:9;27508:4;27504:20;27500:1;27489:9;27485:17;27478:47;27542:131;27668:4;27542:131;:::i;:::-;27534:139;;27261:419;;;:::o;27686:153::-;27826:5;27822:1;27814:6;27810:14;27803:29;27686:153;:::o;27845:365::-;27987:3;28008:66;28072:1;28067:3;28008:66;:::i;:::-;28001:73;;28083:93;28172:3;28083:93;:::i;:::-;28201:2;28196:3;28192:12;28185:19;;27845:365;;;:::o;28216:419::-;28382:4;28420:2;28409:9;28405:18;28397:26;;28469:9;28463:4;28459:20;28455:1;28444:9;28440:17;28433:47;28497:131;28623:4;28497:131;:::i;:::-;28489:139;;28216:419;;;:::o;28641:94::-;28674:8;28722:5;28718:2;28714:14;28693:35;;28641:94;;;:::o;28741:::-;28780:7;28809:20;28823:5;28809:20;:::i;:::-;28798:31;;28741:94;;;:::o;28841:100::-;28880:7;28909:26;28929:5;28909:26;:::i;:::-;28898:37;;28841:100;;;:::o;28947:157::-;29052:45;29072:24;29090:5;29072:24;:::i;:::-;29052:45;:::i;:::-;29047:3;29040:58;28947:157;;:::o;29110:256::-;29222:3;29237:75;29308:3;29299:6;29237:75;:::i;:::-;29337:2;29332:3;29328:12;29321:19;;29357:3;29350:10;;29110:256;;;;:::o;29372:170::-;29512:22;29508:1;29500:6;29496:14;29489:46;29372:170;:::o;29548:366::-;29690:3;29711:67;29775:2;29770:3;29711:67;:::i;:::-;29704:74;;29787:93;29876:3;29787:93;:::i;:::-;29905:2;29900:3;29896:12;29889:19;;29548:366;;;:::o;29920:419::-;30086:4;30124:2;30113:9;30109:18;30101:26;;30173:9;30167:4;30163:20;30159:1;30148:9;30144:17;30137:47;30201:131;30327:4;30201:131;:::i;:::-;30193:139;;29920:419;;;:::o;30345:180::-;30393:77;30390:1;30383:88;30490:4;30487:1;30480:15;30514:4;30511:1;30504:15;30531:233;30570:3;30593:24;30611:5;30593:24;:::i;:::-;30584:33;;30639:66;30632:5;30629:77;30626:103;;30709:18;;:::i;:::-;30626:103;30756:1;30749:5;30745:13;30738:20;;30531:233;;;:::o;30770:228::-;30910:34;30906:1;30898:6;30894:14;30887:58;30979:11;30974:2;30966:6;30962:15;30955:36;30770:228;:::o;31004:366::-;31146:3;31167:67;31231:2;31226:3;31167:67;:::i;:::-;31160:74;;31243:93;31332:3;31243:93;:::i;:::-;31361:2;31356:3;31352:12;31345:19;;31004:366;;;:::o;31376:419::-;31542:4;31580:2;31569:9;31565:18;31557:26;;31629:9;31623:4;31619:20;31615:1;31604:9;31600:17;31593:47;31657:131;31783:4;31657:131;:::i;:::-;31649:139;;31376:419;;;:::o;31801:180::-;31849:77;31846:1;31839:88;31946:4;31943:1;31936:15;31970:4;31967:1;31960:15;31987:166;32127:18;32123:1;32115:6;32111:14;32104:42;31987:166;:::o;32159:366::-;32301:3;32322:67;32386:2;32381:3;32322:67;:::i;:::-;32315:74;;32398:93;32487:3;32398:93;:::i;:::-;32516:2;32511:3;32507:12;32500:19;;32159:366;;;:::o;32531:419::-;32697:4;32735:2;32724:9;32720:18;32712:26;;32784:9;32778:4;32774:20;32770:1;32759:9;32755:17;32748:47;32812:131;32938:4;32812:131;:::i;:::-;32804:139;;32531:419;;;:::o;32956:228::-;33096:34;33092:1;33084:6;33080:14;33073:58;33165:11;33160:2;33152:6;33148:15;33141:36;32956:228;:::o;33190:366::-;33332:3;33353:67;33417:2;33412:3;33353:67;:::i;:::-;33346:74;;33429:93;33518:3;33429:93;:::i;:::-;33547:2;33542:3;33538:12;33531:19;;33190:366;;;:::o;33562:419::-;33728:4;33766:2;33755:9;33751:18;33743:26;;33815:9;33809:4;33805:20;33801:1;33790:9;33786:17;33779:47;33843:131;33969:4;33843:131;:::i;:::-;33835:139;;33562:419;;;:::o;33987:225::-;34127:34;34123:1;34115:6;34111:14;34104:58;34196:8;34191:2;34183:6;34179:15;34172:33;33987:225;:::o;34218:366::-;34360:3;34381:67;34445:2;34440:3;34381:67;:::i;:::-;34374:74;;34457:93;34546:3;34457:93;:::i;:::-;34575:2;34570:3;34566:12;34559:19;;34218:366;;;:::o;34590:419::-;34756:4;34794:2;34783:9;34779:18;34771:26;;34843:9;34837:4;34833:20;34829:1;34818:9;34814:17;34807:47;34871:131;34997:4;34871:131;:::i;:::-;34863:139;;34590:419;;;:::o;35015:227::-;35155:34;35151:1;35143:6;35139:14;35132:58;35224:10;35219:2;35211:6;35207:15;35200:35;35015:227;:::o;35248:366::-;35390:3;35411:67;35475:2;35470:3;35411:67;:::i;:::-;35404:74;;35487:93;35576:3;35487:93;:::i;:::-;35605:2;35600:3;35596:12;35589:19;;35248:366;;;:::o;35620:419::-;35786:4;35824:2;35813:9;35809:18;35801:26;;35873:9;35867:4;35863:20;35859:1;35848:9;35844:17;35837:47;35901:131;36027:4;35901:131;:::i;:::-;35893:139;;35620:419;;;:::o;36045:224::-;36185:34;36181:1;36173:6;36169:14;36162:58;36254:7;36249:2;36241:6;36237:15;36230:32;36045:224;:::o;36275:366::-;36417:3;36438:67;36502:2;36497:3;36438:67;:::i;:::-;36431:74;;36514:93;36603:3;36514:93;:::i;:::-;36632:2;36627:3;36623:12;36616:19;;36275:366;;;:::o;36647:419::-;36813:4;36851:2;36840:9;36836:18;36828:26;;36900:9;36894:4;36890:20;36886:1;36875:9;36871:17;36864:47;36928:131;37054:4;36928:131;:::i;:::-;36920:139;;36647:419;;;:::o;37072:229::-;37212:34;37208:1;37200:6;37196:14;37189:58;37281:12;37276:2;37268:6;37264:15;37257:37;37072:229;:::o;37307:366::-;37449:3;37470:67;37534:2;37529:3;37470:67;:::i;:::-;37463:74;;37546:93;37635:3;37546:93;:::i;:::-;37664:2;37659:3;37655:12;37648:19;;37307:366;;;:::o;37679:419::-;37845:4;37883:2;37872:9;37868:18;37860:26;;37932:9;37926:4;37922:20;37918:1;37907:9;37903:17;37896:47;37960:131;38086:4;37960:131;:::i;:::-;37952:139;;37679:419;;;:::o;38104:305::-;38144:3;38163:20;38181:1;38163:20;:::i;:::-;38158:25;;38197:20;38215:1;38197:20;:::i;:::-;38192:25;;38351:1;38283:66;38279:74;38276:1;38273:81;38270:107;;;38357:18;;:::i;:::-;38270:107;38401:1;38398;38394:9;38387:16;;38104:305;;;;:::o;38415:634::-;38636:4;38674:2;38663:9;38659:18;38651:26;;38723:9;38717:4;38713:20;38709:1;38698:9;38694:17;38687:47;38751:108;38854:4;38845:6;38751:108;:::i;:::-;38743:116;;38906:9;38900:4;38896:20;38891:2;38880:9;38876:18;38869:48;38934:108;39037:4;39028:6;38934:108;:::i;:::-;38926:116;;38415:634;;;;;:::o;39055:179::-;39195:31;39191:1;39183:6;39179:14;39172:55;39055:179;:::o;39240:366::-;39382:3;39403:67;39467:2;39462:3;39403:67;:::i;:::-;39396:74;;39479:93;39568:3;39479:93;:::i;:::-;39597:2;39592:3;39588:12;39581:19;;39240:366;;;:::o;39612:419::-;39778:4;39816:2;39805:9;39801:18;39793:26;;39865:9;39859:4;39855:20;39851:1;39840:9;39836:17;39829:47;39893:131;40019:4;39893:131;:::i;:::-;39885:139;;39612:419;;;:::o;40037:147::-;40138:11;40175:3;40160:18;;40037:147;;;;:::o;40190:114::-;;:::o;40310:398::-;40469:3;40490:83;40571:1;40566:3;40490:83;:::i;:::-;40483:90;;40582:93;40671:3;40582:93;:::i;:::-;40700:1;40695:3;40691:11;40684:18;;40310:398;;;:::o;40714:379::-;40898:3;40920:147;41063:3;40920:147;:::i;:::-;40913:154;;41084:3;41077:10;;40714:379;;;:::o;41099:245::-;41239:34;41235:1;41227:6;41223:14;41216:58;41308:28;41303:2;41295:6;41291:15;41284:53;41099:245;:::o;41350:366::-;41492:3;41513:67;41577:2;41572:3;41513:67;:::i;:::-;41506:74;;41589:93;41678:3;41589:93;:::i;:::-;41707:2;41702:3;41698:12;41691:19;;41350:366;;;:::o;41722:419::-;41888:4;41926:2;41915:9;41911:18;41903:26;;41975:9;41969:4;41965:20;41961:1;41950:9;41946:17;41939:47;42003:131;42129:4;42003:131;:::i;:::-;41995:139;;41722:419;;;:::o;42147:220::-;42287:34;42283:1;42275:6;42271:14;42264:58;42356:3;42351:2;42343:6;42339:15;42332:28;42147:220;:::o;42373:366::-;42515:3;42536:67;42600:2;42595:3;42536:67;:::i;:::-;42529:74;;42612:93;42701:3;42612:93;:::i;:::-;42730:2;42725:3;42721:12;42714:19;;42373:366;;;:::o;42745:419::-;42911:4;42949:2;42938:9;42934:18;42926:26;;42998:9;42992:4;42988:20;42984:1;42973:9;42969:17;42962:47;43026:131;43152:4;43026:131;:::i;:::-;43018:139;;42745:419;;;:::o;43170:332::-;43291:4;43329:2;43318:9;43314:18;43306:26;;43342:71;43410:1;43399:9;43395:17;43386:6;43342:71;:::i;:::-;43423:72;43491:2;43480:9;43476:18;43467:6;43423:72;:::i;:::-;43170:332;;;;;:::o;43508:228::-;43648:34;43644:1;43636:6;43632:14;43625:58;43717:11;43712:2;43704:6;43700:15;43693:36;43508:228;:::o;43742:366::-;43884:3;43905:67;43969:2;43964:3;43905:67;:::i;:::-;43898:74;;43981:93;44070:3;43981:93;:::i;:::-;44099:2;44094:3;44090:12;44083:19;;43742:366;;;:::o;44114:419::-;44280:4;44318:2;44307:9;44303:18;44295:26;;44367:9;44361:4;44357:20;44353:1;44342:9;44338:17;44331:47;44395:131;44521:4;44395:131;:::i;:::-;44387:139;;44114:419;;;:::o;44539:98::-;44590:6;44624:5;44618:12;44608:22;;44539:98;;;:::o;44643:168::-;44726:11;44760:6;44755:3;44748:19;44800:4;44795:3;44791:14;44776:29;;44643:168;;;;:::o;44817:360::-;44903:3;44931:38;44963:5;44931:38;:::i;:::-;44985:70;45048:6;45043:3;44985:70;:::i;:::-;44978:77;;45064:52;45109:6;45104:3;45097:4;45090:5;45086:16;45064:52;:::i;:::-;45141:29;45163:6;45141:29;:::i;:::-;45136:3;45132:39;45125:46;;44907:270;44817:360;;;;:::o;45183:1053::-;45506:4;45544:3;45533:9;45529:19;45521:27;;45558:71;45626:1;45615:9;45611:17;45602:6;45558:71;:::i;:::-;45639:72;45707:2;45696:9;45692:18;45683:6;45639:72;:::i;:::-;45758:9;45752:4;45748:20;45743:2;45732:9;45728:18;45721:48;45786:108;45889:4;45880:6;45786:108;:::i;:::-;45778:116;;45941:9;45935:4;45931:20;45926:2;45915:9;45911:18;45904:48;45969:108;46072:4;46063:6;45969:108;:::i;:::-;45961:116;;46125:9;46119:4;46115:20;46109:3;46098:9;46094:19;46087:49;46153:76;46224:4;46215:6;46153:76;:::i;:::-;46145:84;;45183:1053;;;;;;;;:::o;46242:141::-;46298:5;46329:6;46323:13;46314:22;;46345:32;46371:5;46345:32;:::i;:::-;46242:141;;;;:::o;46389:349::-;46458:6;46507:2;46495:9;46486:7;46482:23;46478:32;46475:119;;;46513:79;;:::i;:::-;46475:119;46633:1;46658:63;46713:7;46704:6;46693:9;46689:22;46658:63;:::i;:::-;46648:73;;46604:127;46389:349;;;;:::o;46744:106::-;46788:8;46837:5;46832:3;46828:15;46807:36;;46744:106;;;:::o;46856:183::-;46891:3;46929:1;46911:16;46908:23;46905:128;;;46967:1;46964;46961;46946:23;46989:34;47020:1;47014:8;46989:34;:::i;:::-;46982:41;;46905:128;46856:183;:::o;47045:711::-;47084:3;47122:4;47104:16;47101:26;47130:5;47098:39;47159:20;;:::i;:::-;47234:1;47216:16;47212:24;47209:1;47203:4;47188:49;47267:4;47261:11;47366:16;47359:4;47351:6;47347:17;47344:39;47311:18;47303:6;47300:30;47284:113;47281:146;;;47412:5;;;;47281:146;47458:6;47452:4;47448:17;47494:3;47488:10;47521:18;47513:6;47510:30;47507:43;;;47543:5;;;;;;47507:43;47591:6;47584:4;47579:3;47575:14;47571:27;47650:1;47632:16;47628:24;47622:4;47618:35;47613:3;47610:44;47607:57;;;47657:5;;;;;;;47607:57;47674;47722:6;47716:4;47712:17;47704:6;47700:30;47694:4;47674:57;:::i;:::-;47747:3;47740:10;;47088:668;;;;;47045:711;;:::o;47762:239::-;47902:34;47898:1;47890:6;47886:14;47879:58;47971:22;47966:2;47958:6;47954:15;47947:47;47762:239;:::o;48007:366::-;48149:3;48170:67;48234:2;48229:3;48170:67;:::i;:::-;48163:74;;48246:93;48335:3;48246:93;:::i;:::-;48364:2;48359:3;48355:12;48348:19;;48007:366;;;:::o;48379:419::-;48545:4;48583:2;48572:9;48568:18;48560:26;;48632:9;48626:4;48622:20;48618:1;48607:9;48603:17;48596:47;48660:131;48786:4;48660:131;:::i;:::-;48652:139;;48379:419;;;:::o;48804:227::-;48944:34;48940:1;48932:6;48928:14;48921:58;49013:10;49008:2;49000:6;48996:15;48989:35;48804:227;:::o;49037:366::-;49179:3;49200:67;49264:2;49259:3;49200:67;:::i;:::-;49193:74;;49276:93;49365:3;49276:93;:::i;:::-;49394:2;49389:3;49385:12;49378:19;;49037:366;;;:::o;49409:419::-;49575:4;49613:2;49602:9;49598:18;49590:26;;49662:9;49656:4;49652:20;49648:1;49637:9;49633:17;49626:47;49690:131;49816:4;49690:131;:::i;:::-;49682:139;;49409:419;;;:::o;49834:751::-;50057:4;50095:3;50084:9;50080:19;50072:27;;50109:71;50177:1;50166:9;50162:17;50153:6;50109:71;:::i;:::-;50190:72;50258:2;50247:9;50243:18;50234:6;50190:72;:::i;:::-;50272;50340:2;50329:9;50325:18;50316:6;50272:72;:::i;:::-;50354;50422:2;50411:9;50407:18;50398:6;50354:72;:::i;:::-;50474:9;50468:4;50464:20;50458:3;50447:9;50443:19;50436:49;50502:76;50573:4;50564:6;50502:76;:::i;:::-;50494:84;;49834:751;;;;;;;;:::o
Swarm Source
ipfs://84d4980743398b9db24353fa6007469d9cc2ae54ecfea774d0019d0931df126e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.