Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 513 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 20572179 | 2 days ago | IN | 0 ETH | 0.00020945 | ||||
Set Approval For... | 17918537 | 374 days ago | IN | 0 ETH | 0.00041671 | ||||
Set Approval For... | 17022072 | 500 days ago | IN | 0 ETH | 0.00124522 | ||||
Set Approval For... | 16523180 | 570 days ago | IN | 0 ETH | 0.00037824 | ||||
Set Approval For... | 16314372 | 599 days ago | IN | 0 ETH | 0.00035022 | ||||
Set Approval For... | 16300364 | 601 days ago | IN | 0 ETH | 0.00089454 | ||||
Set Approval For... | 15719039 | 682 days ago | IN | 0 ETH | 0.00176882 | ||||
Set Approval For... | 15679485 | 688 days ago | IN | 0 ETH | 0.00033194 | ||||
Set Approval For... | 15544294 | 707 days ago | IN | 0 ETH | 0.0003132 | ||||
Set Approval For... | 15515589 | 711 days ago | IN | 0 ETH | 0.00051331 | ||||
Set Approval For... | 15497761 | 714 days ago | IN | 0 ETH | 0.00121192 | ||||
Set Approval For... | 15426491 | 726 days ago | IN | 0 ETH | 0.0002454 | ||||
Set Approval For... | 15208521 | 760 days ago | IN | 0 ETH | 0.00043979 | ||||
Set Approval For... | 15153887 | 769 days ago | IN | 0 ETH | 0.00028231 | ||||
Transfer From | 15141438 | 770 days ago | IN | 0 ETH | 0.0020105 | ||||
Set Approval For... | 15077885 | 780 days ago | IN | 0 ETH | 0.00056543 | ||||
Set Approval For... | 15004843 | 793 days ago | IN | 0 ETH | 0.00083048 | ||||
Set Approval For... | 14943767 | 804 days ago | IN | 0 ETH | 0.00122461 | ||||
Transfer From | 14922386 | 807 days ago | IN | 0 ETH | 0.0020865 | ||||
Set Approval For... | 14873650 | 815 days ago | IN | 0 ETH | 0.00212314 | ||||
Set Approval For... | 14855353 | 818 days ago | IN | 0 ETH | 0.00088362 | ||||
Set Approval For... | 14795098 | 828 days ago | IN | 0 ETH | 0.00123793 | ||||
Set Approval For... | 14786471 | 830 days ago | IN | 0 ETH | 0.00064768 | ||||
Set Approval For... | 14728023 | 839 days ago | IN | 0 ETH | 0.00160077 | ||||
Set Approval For... | 14723817 | 840 days ago | IN | 0 ETH | 0.00203847 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14567670 | 864 days ago | 10.645 ETH |
Loading...
Loading
Contract Name:
CryptoTwins
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-08 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (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 `IERC721.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 v4.4.1 (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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // 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: erc721a/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // 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) internal _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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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 _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _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); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = 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; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @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); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { 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 TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * 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`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ 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. * And also called after one token has been burned. * * 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` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: twin.sol /* _______ _______ _______ _________ _______ _________ _________ _ _______ ( ____ \( ____ )|\ /|( ____ )\__ __/( ___ )\__ __/|\ /|\__ __/( ( /|( ____ \ | ( \/| ( )|( \ / )| ( )| ) ( | ( ) | ) ( | ) ( | ) ( | \ ( || ( \/ | | | (____)| \ (_) / | (____)| | | | | | | | | | | _ | | | | | \ | || (_____ | | | __) \ / | _____) | | | | | | | | | |( )| | | | | (\ \) |(_____ ) | | | (\ ( ) ( | ( | | | | | | | | | || || | | | | | \ | ) | | (____/\| ) \ \__ | | | ) | | | (___) | | | | () () |___) (___| ) \ |/\____) | (_______/|/ \__/ \_/ |/ )_( (_______) )_( (_______)\_______/|/ )_)\_______) LLC */ pragma solidity ^0.8.0; contract CryptoTwins is ERC721A, Ownable { using Strings for uint256; uint256 public maxSupply = 3333; bool public twinlistPause = true; bool public publicPause = true; bool public revealed = false; string public baseURI; string public unrevealedURI; mapping(address => uint256) public twinlist; mapping(address => uint256) public mintCount; constructor() ERC721A("Crypto Twins", "TWIN") { _safeMint(msg.sender, 183); } function setUnrevealedURI(string memory _unrevealedURI) public onlyOwner { unrevealedURI = _unrevealedURI; } function setBaseURI(string memory _baseURI) public onlyOwner { baseURI = _baseURI; } function reveal() public onlyOwner { revealed = true; } function flipTwinlistPause() public onlyOwner { twinlistPause = !twinlistPause; } function flipPublicPause() public onlyOwner { publicPause = !publicPause; twinlistPause = !twinlistPause; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require (_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); if (revealed == false) { return string(abi.encodePacked(unrevealedURI, _tokenId.toString(), ".json")); } return string(abi.encodePacked(baseURI, _tokenId.toString(), ".json")); } function uploadTwinlist(address[] calldata addresses) public onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { unchecked{ twinlist[addresses[i]] = 3; } } } function twinMint(uint256 num) external payable{ require (!twinlistPause || !publicPause, "Contract is paused"); require (totalSupply() + num <= maxSupply, "Minted out"); require (twinlist[msg.sender] >= 1 || !publicPause, "Not Twinlisted"); require (num <= 3 && num > 0, "Bad Number"); require (mintCount[msg.sender] + num <= 3, "No More for You"); if(num == 1){ require (msg.value >= (0.015 ether + (mintCount[msg.sender] * 0.02 ether)), "Not Enough Ether"); } else if(num == 2) { require (msg.value >= (0.05 ether + (mintCount[msg.sender] * 0.04 ether)), "Not Enough Ether"); } else { require (msg.value >= 0.105 ether, "Not Enough Ether"); } unchecked{ twinlist[msg.sender] -= num; mintCount[msg.sender] += num; _safeMint(msg.sender, num); } } function withdraw() public onlyOwner { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPublicPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipTwinlistPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicPause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"string","name":"_unrevealedURI","type":"string"}],"name":"setUnrevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"twinMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"twinlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"twinlistPause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unrevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"uploadTwinlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052610d056009556001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055503480156200006857600080fd5b506040518060400160405280600c81526020017f43727970746f205477696e7300000000000000000000000000000000000000008152506040518060400160405280600481526020017f5457494e000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000ed92919062000808565b5080600390805190602001906200010692919062000808565b50620001176200015860201b60201c565b60008190555050506200013f620001336200015d60201b60201c565b6200016560201b60201c565b620001523360b76200022b60201b60201c565b62000b09565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200024d8282604051806020016040528060008152506200025160201b60201c565b5050565b6200026683838360016200026b60201b60201c565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620002d9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141562000315576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200032a60008683876200066760201b60201c565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015620005025750620005018773ffffffffffffffffffffffffffffffffffffffff166200066d60201b62001ca11760201c565b5b15620005d5575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200058060008884806001019550886200069060201b60201c565b620005b7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141562000509578260005414620005cf57600080fd5b62000642565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415620005d6575b8160008190555050506200066060008683876200080260201b60201c565b5050505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006be6200015d60201b60201c565b8786866040518563ffffffff1660e01b8152600401620006e2949392919062000964565b602060405180830381600087803b158015620006fd57600080fd5b505af19250505080156200073157506040513d601f19601f820116820180604052508101906200072e9190620008cf565b60015b620007af573d806000811462000764576040519150601f19603f3d011682016040523d82523d6000602084013e62000769565b606091505b50600081511415620007a7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b828054620008169062000a74565b90600052602060002090601f0160209004810192826200083a576000855562000886565b82601f106200085557805160ff191683800117855562000886565b8280016001018555821562000886579182015b828111156200088557825182559160200191906001019062000868565b5b50905062000895919062000899565b5090565b5b80821115620008b45760008160009055506001016200089a565b5090565b600081519050620008c98162000aef565b92915050565b600060208284031215620008e857620008e762000ad9565b5b6000620008f884828501620008b8565b91505092915050565b6200090c81620009d4565b82525050565b60006200091f82620009b8565b6200092b8185620009c3565b93506200093d81856020860162000a3e565b620009488162000ade565b840191505092915050565b6200095e8162000a34565b82525050565b60006080820190506200097b600083018762000901565b6200098a602083018662000901565b62000999604083018562000953565b8181036060830152620009ad818462000912565b905095945050505050565b600081519050919050565b600082825260208201905092915050565b6000620009e18262000a14565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000a5e57808201518184015260208101905062000a41565b8381111562000a6e576000848401525b50505050565b6000600282049050600182168062000a8d57607f821691505b6020821081141562000aa45762000aa362000aaa565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b62000afa81620009e8565b811462000b0657600080fd5b50565b613e908062000b196000396000f3fe6080604052600436106101ee5760003560e01c8063715018a61161010d578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c5146106a1578063ed9ec888146106de578063f2fde38b1461071b578063f7e4c9c914610744578063fe2c7fee14610760576101ee565b8063b88d4fde146105e5578063c87b56dd1461060e578063d5abeb011461064b578063daaa09a414610676576101ee565b8063a36f7276116100dc578063a36f727614610575578063a475b5dd1461058c578063a83399d5146105a3578063b74e4db4146105ce576101ee565b8063715018a6146104df5780638da5cb5b146104f657806395d89b4114610521578063a22cb4651461054c576101ee565b806342842e0e1161018557806369087f2c1161015457806369087f2c146104235780636c0360eb1461044c5780637035bf181461047757806370a08231146104a2576101ee565b806342842e0e14610369578063518302271461039257806355f804b3146103bd5780636352211e146103e6576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632507fda2146103155780633ccfd60b14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906131a6565b610789565b60405161022791906135f1565b60405180910390f35b34801561023c57600080fd5b5061024561086b565b604051610252919061360c565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613249565b6108fd565b60405161028f919061358a565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613119565b610979565b005b3480156102cd57600080fd5b506102d6610a84565b6040516102e3919061374e565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190613003565b610a9b565b005b34801561032157600080fd5b5061033c60048036038101906103379190612f96565b610aab565b604051610349919061374e565b60405180910390f35b34801561035e57600080fd5b50610367610ac3565b005b34801561037557600080fd5b50610390600480360381019061038b9190613003565b610bb8565b005b34801561039e57600080fd5b506103a7610bd8565b6040516103b491906135f1565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df9190613200565b610beb565b005b3480156103f257600080fd5b5061040d60048036038101906104089190613249565b610c81565b60405161041a919061358a565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190613159565b610c97565b005b34801561045857600080fd5b50610461610da5565b60405161046e919061360c565b60405180910390f35b34801561048357600080fd5b5061048c610e33565b604051610499919061360c565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190612f96565b610ec1565b6040516104d6919061374e565b60405180910390f35b3480156104eb57600080fd5b506104f4610f91565b005b34801561050257600080fd5b5061050b611019565b604051610518919061358a565b60405180910390f35b34801561052d57600080fd5b50610536611043565b604051610543919061360c565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e91906130d9565b6110d5565b005b34801561058157600080fd5b5061058a61124d565b005b34801561059857600080fd5b506105a161131f565b005b3480156105af57600080fd5b506105b86113b8565b6040516105c591906135f1565b60405180910390f35b3480156105da57600080fd5b506105e36113cb565b005b3480156105f157600080fd5b5061060c60048036038101906106079190613056565b611473565b005b34801561061a57600080fd5b5061063560048036038101906106309190613249565b6114ef565b604051610642919061360c565b60405180910390f35b34801561065757600080fd5b506106606115ba565b60405161066d919061374e565b60405180910390f35b34801561068257600080fd5b5061068b6115c0565b60405161069891906135f1565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c39190612fc3565b6115d3565b6040516106d591906135f1565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190612f96565b611667565b604051610712919061374e565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190612f96565b61167f565b005b61075e60048036038101906107599190613249565b611777565b005b34801561076c57600080fd5b5061078760048036038101906107829190613200565b611c0b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061085457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610864575061086382611cc4565b5b9050919050565b60606002805461087a90613a1e565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613a1e565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b600061090882611d2e565b61093e576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061098482610c81565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ec576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0b611d7c565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a3d5750610a3b81610a36611d7c565b6115d3565b155b15610a74576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a7f838383611d84565b505050565b6000610a8e611e36565b6001546000540303905090565b610aa6838383611e3b565b505050565b600d6020528060005260406000206000915090505481565b610acb611d7c565b73ffffffffffffffffffffffffffffffffffffffff16610ae9611019565b73ffffffffffffffffffffffffffffffffffffffff1614610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b36906136ce565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610b6590613575565b60006040518083038185875af1925050503d8060008114610ba2576040519150601f19603f3d011682016040523d82523d6000602084013e610ba7565b606091505b5050905080610bb557600080fd5b50565b610bd383838360405180602001604052806000815250611473565b505050565b600a60029054906101000a900460ff1681565b610bf3611d7c565b73ffffffffffffffffffffffffffffffffffffffff16610c11611019565b73ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e906136ce565b60405180910390fd5b80600b9080519060200190610c7d929190612d11565b5050565b6000610c8c826122f1565b600001519050919050565b610c9f611d7c565b73ffffffffffffffffffffffffffffffffffffffff16610cbd611019565b73ffffffffffffffffffffffffffffffffffffffff1614610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a906136ce565b60405180910390fd5b60005b82829050811015610da0576003600d6000858585818110610d3a57610d39613b88565b5b9050602002016020810190610d4f9190612f96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d9890613a81565b915050610d16565b505050565b600b8054610db290613a1e565b80601f0160208091040260200160405190810160405280929190818152602001828054610dde90613a1e565b8015610e2b5780601f10610e0057610100808354040283529160200191610e2b565b820191906000526020600020905b815481529060010190602001808311610e0e57829003601f168201915b505050505081565b600c8054610e4090613a1e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c90613a1e565b8015610eb95780601f10610e8e57610100808354040283529160200191610eb9565b820191906000526020600020905b815481529060010190602001808311610e9c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f29576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610f99611d7c565b73ffffffffffffffffffffffffffffffffffffffff16610fb7611019565b73ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611004906136ce565b60405180910390fd5b6110176000612580565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461105290613a1e565b80601f016020809104026020016040519081016040528092919081815260200182805461107e90613a1e565b80156110cb5780601f106110a0576101008083540402835291602001916110cb565b820191906000526020600020905b8154815290600101906020018083116110ae57829003601f168201915b5050505050905090565b6110dd611d7c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611142576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061114f611d7c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111fc611d7c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161124191906135f1565b60405180910390a35050565b611255611d7c565b73ffffffffffffffffffffffffffffffffffffffff16611273611019565b73ffffffffffffffffffffffffffffffffffffffff16146112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c0906136ce565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b611327611d7c565b73ffffffffffffffffffffffffffffffffffffffff16611345611019565b73ffffffffffffffffffffffffffffffffffffffff161461139b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611392906136ce565b60405180910390fd5b6001600a60026101000a81548160ff021916908315150217905550565b600a60009054906101000a900460ff1681565b6113d3611d7c565b73ffffffffffffffffffffffffffffffffffffffff166113f1611019565b73ffffffffffffffffffffffffffffffffffffffff1614611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e906136ce565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b61147e848484611e3b565b61149d8373ffffffffffffffffffffffffffffffffffffffff16611ca1565b80156114b257506114b084848484612646565b155b156114e9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606114fa82611d2e565b611539576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611530906136ee565b60405180910390fd5b60001515600a60029054906101000a900460ff161515141561158757600c611560836127a6565b604051602001611571929190613546565b60405160208183030381529060405290506115b5565b600b611592836127a6565b6040516020016115a3929190613546565b60405160208183030381529060405290505b919050565b60095481565b600a60019054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e6020528060005260406000206000915090505481565b611687611d7c565b73ffffffffffffffffffffffffffffffffffffffff166116a5611019565b73ffffffffffffffffffffffffffffffffffffffff16146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f2906136ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561176b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117629061364e565b60405180910390fd5b61177481612580565b50565b600a60009054906101000a900460ff1615806117a05750600a60019054906101000a900460ff16155b6117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d69061372e565b60405180910390fd5b600954816117eb610a84565b6117f59190613853565b1115611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d9061370e565b60405180910390fd5b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015806118925750600a60019054906101000a900460ff16155b6118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c89061366e565b60405180910390fd5b600381111580156118e25750600081115b611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906136ae565b60405180910390fd5b600381600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461196e9190613853565b11156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a69061368e565b60405180910390fd5b6001811415611a635766470de4df820000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a0a91906138da565b66354a6ba7a18000611a1c9190613853565b341015611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a559061362e565b60405180910390fd5b611b64565b6002811415611b1757668e1bc9bf040000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611abe91906138da565b66b1a2bc2ec50000611ad09190613853565b341015611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b099061362e565b60405180910390fd5b611b63565b67017508f1956a8000341015611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b599061362e565b60405180910390fd5b5b5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611c083382612907565b50565b611c13611d7c565b73ffffffffffffffffffffffffffffffffffffffff16611c31611019565b73ffffffffffffffffffffffffffffffffffffffff1614611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e906136ce565b60405180910390fd5b80600c9080519060200190611c9d929190612d11565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611d39611e36565b11158015611d48575060005482105b8015611d75575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611e46826122f1565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611ed2611d7c565b73ffffffffffffffffffffffffffffffffffffffff161480611f015750611f0085611efb611d7c565b6115d3565b5b80611f465750611f0f611d7c565b73ffffffffffffffffffffffffffffffffffffffff16611f2e846108fd565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611f7f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fe6576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ff38585856001612925565b611fff60008487611d84565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561227f57600054821461227e57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122ea858585600161292b565b5050505050565b6122f9612d97565b600082905080612307611e36565b11158015612316575060005481105b15612549576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161254757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461242b57809250505061257b565b5b60011561254657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461254157809250505061257b565b61242c565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261266c611d7c565b8786866040518563ffffffff1660e01b815260040161268e94939291906135a5565b602060405180830381600087803b1580156126a857600080fd5b505af19250505080156126d957506040513d601f19601f820116820180604052508101906126d691906131d3565b60015b612753573d8060008114612709576040519150601f19603f3d011682016040523d82523d6000602084013e61270e565b606091505b5060008151141561274b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008214156127ee576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612902565b600082905060005b6000821461282057808061280990613a81565b915050600a8261281991906138a9565b91506127f6565b60008167ffffffffffffffff81111561283c5761283b613bb7565b5b6040519080825280601f01601f19166020018201604052801561286e5781602001600182028036833780820191505090505b5090505b600085146128fb576001826128879190613934565b9150600a856128969190613aca565b60306128a29190613853565b60f81b8183815181106128b8576128b7613b88565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128f491906138a9565b9450612872565b8093505050505b919050565b612921828260405180602001604052806000815250612931565b5050565b50505050565b50505050565b61293e8383836001612943565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156129b0576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156129eb576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129f86000868387612925565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612bc25750612bc18773ffffffffffffffffffffffffffffffffffffffff16611ca1565b5b15612c88575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c376000888480600101955088612646565b612c6d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612bc8578260005414612c8357600080fd5b612cf4565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612c89575b816000819055505050612d0a600086838761292b565b5050505050565b828054612d1d90613a1e565b90600052602060002090601f016020900481019282612d3f5760008555612d86565b82601f10612d5857805160ff1916838001178555612d86565b82800160010185558215612d86579182015b82811115612d85578251825591602001919060010190612d6a565b5b509050612d939190612dda565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612df3576000816000905550600101612ddb565b5090565b6000612e0a612e058461378e565b613769565b905082815260208101848484011115612e2657612e25613bf5565b5b612e318482856139dc565b509392505050565b6000612e4c612e47846137bf565b613769565b905082815260208101848484011115612e6857612e67613bf5565b5b612e738482856139dc565b509392505050565b600081359050612e8a81613dfe565b92915050565b60008083601f840112612ea657612ea5613beb565b5b8235905067ffffffffffffffff811115612ec357612ec2613be6565b5b602083019150836020820283011115612edf57612ede613bf0565b5b9250929050565b600081359050612ef581613e15565b92915050565b600081359050612f0a81613e2c565b92915050565b600081519050612f1f81613e2c565b92915050565b600082601f830112612f3a57612f39613beb565b5b8135612f4a848260208601612df7565b91505092915050565b600082601f830112612f6857612f67613beb565b5b8135612f78848260208601612e39565b91505092915050565b600081359050612f9081613e43565b92915050565b600060208284031215612fac57612fab613bff565b5b6000612fba84828501612e7b565b91505092915050565b60008060408385031215612fda57612fd9613bff565b5b6000612fe885828601612e7b565b9250506020612ff985828601612e7b565b9150509250929050565b60008060006060848603121561301c5761301b613bff565b5b600061302a86828701612e7b565b935050602061303b86828701612e7b565b925050604061304c86828701612f81565b9150509250925092565b600080600080608085870312156130705761306f613bff565b5b600061307e87828801612e7b565b945050602061308f87828801612e7b565b93505060406130a087828801612f81565b925050606085013567ffffffffffffffff8111156130c1576130c0613bfa565b5b6130cd87828801612f25565b91505092959194509250565b600080604083850312156130f0576130ef613bff565b5b60006130fe85828601612e7b565b925050602061310f85828601612ee6565b9150509250929050565b600080604083850312156131305761312f613bff565b5b600061313e85828601612e7b565b925050602061314f85828601612f81565b9150509250929050565b600080602083850312156131705761316f613bff565b5b600083013567ffffffffffffffff81111561318e5761318d613bfa565b5b61319a85828601612e90565b92509250509250929050565b6000602082840312156131bc576131bb613bff565b5b60006131ca84828501612efb565b91505092915050565b6000602082840312156131e9576131e8613bff565b5b60006131f784828501612f10565b91505092915050565b60006020828403121561321657613215613bff565b5b600082013567ffffffffffffffff81111561323457613233613bfa565b5b61324084828501612f53565b91505092915050565b60006020828403121561325f5761325e613bff565b5b600061326d84828501612f81565b91505092915050565b61327f81613968565b82525050565b61328e8161397a565b82525050565b600061329f82613805565b6132a9818561381b565b93506132b98185602086016139eb565b6132c281613c04565b840191505092915050565b60006132d882613810565b6132e28185613837565b93506132f28185602086016139eb565b6132fb81613c04565b840191505092915050565b600061331182613810565b61331b8185613848565b935061332b8185602086016139eb565b80840191505092915050565b6000815461334481613a1e565b61334e8186613848565b94506001821660008114613369576001811461337a576133ad565b60ff198316865281860193506133ad565b613383856137f0565b60005b838110156133a557815481890152600182019150602081019050613386565b838801955050505b50505092915050565b60006133c3601083613837565b91506133ce82613c15565b602082019050919050565b60006133e6602683613837565b91506133f182613c3e565b604082019050919050565b6000613409600e83613837565b915061341482613c8d565b602082019050919050565b600061342c600f83613837565b915061343782613cb6565b602082019050919050565b600061344f600583613848565b915061345a82613cdf565b600582019050919050565b6000613472600a83613837565b915061347d82613d08565b602082019050919050565b6000613495602083613837565b91506134a082613d31565b602082019050919050565b60006134b8602f83613837565b91506134c382613d5a565b604082019050919050565b60006134db60008361382c565b91506134e682613da9565b600082019050919050565b60006134fe600a83613837565b915061350982613dac565b602082019050919050565b6000613521601283613837565b915061352c82613dd5565b602082019050919050565b613540816139d2565b82525050565b60006135528285613337565b915061355e8284613306565b915061356982613442565b91508190509392505050565b6000613580826134ce565b9150819050919050565b600060208201905061359f6000830184613276565b92915050565b60006080820190506135ba6000830187613276565b6135c76020830186613276565b6135d46040830185613537565b81810360608301526135e68184613294565b905095945050505050565b60006020820190506136066000830184613285565b92915050565b6000602082019050818103600083015261362681846132cd565b905092915050565b60006020820190508181036000830152613647816133b6565b9050919050565b60006020820190508181036000830152613667816133d9565b9050919050565b60006020820190508181036000830152613687816133fc565b9050919050565b600060208201905081810360008301526136a78161341f565b9050919050565b600060208201905081810360008301526136c781613465565b9050919050565b600060208201905081810360008301526136e781613488565b9050919050565b60006020820190508181036000830152613707816134ab565b9050919050565b60006020820190508181036000830152613727816134f1565b9050919050565b6000602082019050818103600083015261374781613514565b9050919050565b60006020820190506137636000830184613537565b92915050565b6000613773613784565b905061377f8282613a50565b919050565b6000604051905090565b600067ffffffffffffffff8211156137a9576137a8613bb7565b5b6137b282613c04565b9050602081019050919050565b600067ffffffffffffffff8211156137da576137d9613bb7565b5b6137e382613c04565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061385e826139d2565b9150613869836139d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561389e5761389d613afb565b5b828201905092915050565b60006138b4826139d2565b91506138bf836139d2565b9250826138cf576138ce613b2a565b5b828204905092915050565b60006138e5826139d2565b91506138f0836139d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561392957613928613afb565b5b828202905092915050565b600061393f826139d2565b915061394a836139d2565b92508282101561395d5761395c613afb565b5b828203905092915050565b6000613973826139b2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a095780820151818401526020810190506139ee565b83811115613a18576000848401525b50505050565b60006002820490506001821680613a3657607f821691505b60208210811415613a4a57613a49613b59565b5b50919050565b613a5982613c04565b810181811067ffffffffffffffff82111715613a7857613a77613bb7565b5b80604052505050565b6000613a8c826139d2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613abf57613abe613afb565b5b600182019050919050565b6000613ad5826139d2565b9150613ae0836139d2565b925082613af057613aef613b2a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420456e6f75676820457468657200000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74205477696e6c6973746564000000000000000000000000000000000000600082015250565b7f4e6f204d6f726520666f7220596f750000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f426164204e756d62657200000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d696e746564206f757400000000000000000000000000000000000000000000600082015250565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b613e0781613968565b8114613e1257600080fd5b50565b613e1e8161397a565b8114613e2957600080fd5b50565b613e3581613986565b8114613e4057600080fd5b50565b613e4c816139d2565b8114613e5757600080fd5b5056fea26469706673582212204841355ac1fa02e8e2b4d5381ca4c4e1cbcdb8a8a13172c6e4f730a8384db0b264736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c8063715018a61161010d578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c5146106a1578063ed9ec888146106de578063f2fde38b1461071b578063f7e4c9c914610744578063fe2c7fee14610760576101ee565b8063b88d4fde146105e5578063c87b56dd1461060e578063d5abeb011461064b578063daaa09a414610676576101ee565b8063a36f7276116100dc578063a36f727614610575578063a475b5dd1461058c578063a83399d5146105a3578063b74e4db4146105ce576101ee565b8063715018a6146104df5780638da5cb5b146104f657806395d89b4114610521578063a22cb4651461054c576101ee565b806342842e0e1161018557806369087f2c1161015457806369087f2c146104235780636c0360eb1461044c5780637035bf181461047757806370a08231146104a2576101ee565b806342842e0e14610369578063518302271461039257806355f804b3146103bd5780636352211e146103e6576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632507fda2146103155780633ccfd60b14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906131a6565b610789565b60405161022791906135f1565b60405180910390f35b34801561023c57600080fd5b5061024561086b565b604051610252919061360c565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613249565b6108fd565b60405161028f919061358a565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190613119565b610979565b005b3480156102cd57600080fd5b506102d6610a84565b6040516102e3919061374e565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190613003565b610a9b565b005b34801561032157600080fd5b5061033c60048036038101906103379190612f96565b610aab565b604051610349919061374e565b60405180910390f35b34801561035e57600080fd5b50610367610ac3565b005b34801561037557600080fd5b50610390600480360381019061038b9190613003565b610bb8565b005b34801561039e57600080fd5b506103a7610bd8565b6040516103b491906135f1565b60405180910390f35b3480156103c957600080fd5b506103e460048036038101906103df9190613200565b610beb565b005b3480156103f257600080fd5b5061040d60048036038101906104089190613249565b610c81565b60405161041a919061358a565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190613159565b610c97565b005b34801561045857600080fd5b50610461610da5565b60405161046e919061360c565b60405180910390f35b34801561048357600080fd5b5061048c610e33565b604051610499919061360c565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190612f96565b610ec1565b6040516104d6919061374e565b60405180910390f35b3480156104eb57600080fd5b506104f4610f91565b005b34801561050257600080fd5b5061050b611019565b604051610518919061358a565b60405180910390f35b34801561052d57600080fd5b50610536611043565b604051610543919061360c565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e91906130d9565b6110d5565b005b34801561058157600080fd5b5061058a61124d565b005b34801561059857600080fd5b506105a161131f565b005b3480156105af57600080fd5b506105b86113b8565b6040516105c591906135f1565b60405180910390f35b3480156105da57600080fd5b506105e36113cb565b005b3480156105f157600080fd5b5061060c60048036038101906106079190613056565b611473565b005b34801561061a57600080fd5b5061063560048036038101906106309190613249565b6114ef565b604051610642919061360c565b60405180910390f35b34801561065757600080fd5b506106606115ba565b60405161066d919061374e565b60405180910390f35b34801561068257600080fd5b5061068b6115c0565b60405161069891906135f1565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c39190612fc3565b6115d3565b6040516106d591906135f1565b60405180910390f35b3480156106ea57600080fd5b5061070560048036038101906107009190612f96565b611667565b604051610712919061374e565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190612f96565b61167f565b005b61075e60048036038101906107599190613249565b611777565b005b34801561076c57600080fd5b5061078760048036038101906107829190613200565b611c0b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061085457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610864575061086382611cc4565b5b9050919050565b60606002805461087a90613a1e565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613a1e565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b600061090882611d2e565b61093e576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061098482610c81565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ec576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0b611d7c565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a3d5750610a3b81610a36611d7c565b6115d3565b155b15610a74576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a7f838383611d84565b505050565b6000610a8e611e36565b6001546000540303905090565b610aa6838383611e3b565b505050565b600d6020528060005260406000206000915090505481565b610acb611d7c565b73ffffffffffffffffffffffffffffffffffffffff16610ae9611019565b73ffffffffffffffffffffffffffffffffffffffff1614610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b36906136ce565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610b6590613575565b60006040518083038185875af1925050503d8060008114610ba2576040519150601f19603f3d011682016040523d82523d6000602084013e610ba7565b606091505b5050905080610bb557600080fd5b50565b610bd383838360405180602001604052806000815250611473565b505050565b600a60029054906101000a900460ff1681565b610bf3611d7c565b73ffffffffffffffffffffffffffffffffffffffff16610c11611019565b73ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e906136ce565b60405180910390fd5b80600b9080519060200190610c7d929190612d11565b5050565b6000610c8c826122f1565b600001519050919050565b610c9f611d7c565b73ffffffffffffffffffffffffffffffffffffffff16610cbd611019565b73ffffffffffffffffffffffffffffffffffffffff1614610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a906136ce565b60405180910390fd5b60005b82829050811015610da0576003600d6000858585818110610d3a57610d39613b88565b5b9050602002016020810190610d4f9190612f96565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d9890613a81565b915050610d16565b505050565b600b8054610db290613a1e565b80601f0160208091040260200160405190810160405280929190818152602001828054610dde90613a1e565b8015610e2b5780601f10610e0057610100808354040283529160200191610e2b565b820191906000526020600020905b815481529060010190602001808311610e0e57829003601f168201915b505050505081565b600c8054610e4090613a1e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c90613a1e565b8015610eb95780601f10610e8e57610100808354040283529160200191610eb9565b820191906000526020600020905b815481529060010190602001808311610e9c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f29576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610f99611d7c565b73ffffffffffffffffffffffffffffffffffffffff16610fb7611019565b73ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611004906136ce565b60405180910390fd5b6110176000612580565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461105290613a1e565b80601f016020809104026020016040519081016040528092919081815260200182805461107e90613a1e565b80156110cb5780601f106110a0576101008083540402835291602001916110cb565b820191906000526020600020905b8154815290600101906020018083116110ae57829003601f168201915b5050505050905090565b6110dd611d7c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611142576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061114f611d7c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111fc611d7c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161124191906135f1565b60405180910390a35050565b611255611d7c565b73ffffffffffffffffffffffffffffffffffffffff16611273611019565b73ffffffffffffffffffffffffffffffffffffffff16146112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c0906136ce565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b611327611d7c565b73ffffffffffffffffffffffffffffffffffffffff16611345611019565b73ffffffffffffffffffffffffffffffffffffffff161461139b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611392906136ce565b60405180910390fd5b6001600a60026101000a81548160ff021916908315150217905550565b600a60009054906101000a900460ff1681565b6113d3611d7c565b73ffffffffffffffffffffffffffffffffffffffff166113f1611019565b73ffffffffffffffffffffffffffffffffffffffff1614611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e906136ce565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b61147e848484611e3b565b61149d8373ffffffffffffffffffffffffffffffffffffffff16611ca1565b80156114b257506114b084848484612646565b155b156114e9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606114fa82611d2e565b611539576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611530906136ee565b60405180910390fd5b60001515600a60029054906101000a900460ff161515141561158757600c611560836127a6565b604051602001611571929190613546565b60405160208183030381529060405290506115b5565b600b611592836127a6565b6040516020016115a3929190613546565b60405160208183030381529060405290505b919050565b60095481565b600a60019054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e6020528060005260406000206000915090505481565b611687611d7c565b73ffffffffffffffffffffffffffffffffffffffff166116a5611019565b73ffffffffffffffffffffffffffffffffffffffff16146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f2906136ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561176b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117629061364e565b60405180910390fd5b61177481612580565b50565b600a60009054906101000a900460ff1615806117a05750600a60019054906101000a900460ff16155b6117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d69061372e565b60405180910390fd5b600954816117eb610a84565b6117f59190613853565b1115611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d9061370e565b60405180910390fd5b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015806118925750600a60019054906101000a900460ff16155b6118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c89061366e565b60405180910390fd5b600381111580156118e25750600081115b611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906136ae565b60405180910390fd5b600381600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461196e9190613853565b11156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a69061368e565b60405180910390fd5b6001811415611a635766470de4df820000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a0a91906138da565b66354a6ba7a18000611a1c9190613853565b341015611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a559061362e565b60405180910390fd5b611b64565b6002811415611b1757668e1bc9bf040000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611abe91906138da565b66b1a2bc2ec50000611ad09190613853565b341015611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b099061362e565b60405180910390fd5b611b63565b67017508f1956a8000341015611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b599061362e565b60405180910390fd5b5b5b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611c083382612907565b50565b611c13611d7c565b73ffffffffffffffffffffffffffffffffffffffff16611c31611019565b73ffffffffffffffffffffffffffffffffffffffff1614611c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7e906136ce565b60405180910390fd5b80600c9080519060200190611c9d929190612d11565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611d39611e36565b11158015611d48575060005482105b8015611d75575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611e46826122f1565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611ed2611d7c565b73ffffffffffffffffffffffffffffffffffffffff161480611f015750611f0085611efb611d7c565b6115d3565b5b80611f465750611f0f611d7c565b73ffffffffffffffffffffffffffffffffffffffff16611f2e846108fd565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611f7f576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fe6576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ff38585856001612925565b611fff60008487611d84565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561227f57600054821461227e57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122ea858585600161292b565b5050505050565b6122f9612d97565b600082905080612307611e36565b11158015612316575060005481105b15612549576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161254757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461242b57809250505061257b565b5b60011561254657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461254157809250505061257b565b61242c565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261266c611d7c565b8786866040518563ffffffff1660e01b815260040161268e94939291906135a5565b602060405180830381600087803b1580156126a857600080fd5b505af19250505080156126d957506040513d601f19601f820116820180604052508101906126d691906131d3565b60015b612753573d8060008114612709576040519150601f19603f3d011682016040523d82523d6000602084013e61270e565b606091505b5060008151141561274b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008214156127ee576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612902565b600082905060005b6000821461282057808061280990613a81565b915050600a8261281991906138a9565b91506127f6565b60008167ffffffffffffffff81111561283c5761283b613bb7565b5b6040519080825280601f01601f19166020018201604052801561286e5781602001600182028036833780820191505090505b5090505b600085146128fb576001826128879190613934565b9150600a856128969190613aca565b60306128a29190613853565b60f81b8183815181106128b8576128b7613b88565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128f491906138a9565b9450612872565b8093505050505b919050565b612921828260405180602001604052806000815250612931565b5050565b50505050565b50505050565b61293e8383836001612943565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156129b0576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156129eb576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129f86000868387612925565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612bc25750612bc18773ffffffffffffffffffffffffffffffffffffffff16611ca1565b5b15612c88575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c376000888480600101955088612646565b612c6d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612bc8578260005414612c8357600080fd5b612cf4565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612c89575b816000819055505050612d0a600086838761292b565b5050505050565b828054612d1d90613a1e565b90600052602060002090601f016020900481019282612d3f5760008555612d86565b82601f10612d5857805160ff1916838001178555612d86565b82800160010185558215612d86579182015b82811115612d85578251825591602001919060010190612d6a565b5b509050612d939190612dda565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612df3576000816000905550600101612ddb565b5090565b6000612e0a612e058461378e565b613769565b905082815260208101848484011115612e2657612e25613bf5565b5b612e318482856139dc565b509392505050565b6000612e4c612e47846137bf565b613769565b905082815260208101848484011115612e6857612e67613bf5565b5b612e738482856139dc565b509392505050565b600081359050612e8a81613dfe565b92915050565b60008083601f840112612ea657612ea5613beb565b5b8235905067ffffffffffffffff811115612ec357612ec2613be6565b5b602083019150836020820283011115612edf57612ede613bf0565b5b9250929050565b600081359050612ef581613e15565b92915050565b600081359050612f0a81613e2c565b92915050565b600081519050612f1f81613e2c565b92915050565b600082601f830112612f3a57612f39613beb565b5b8135612f4a848260208601612df7565b91505092915050565b600082601f830112612f6857612f67613beb565b5b8135612f78848260208601612e39565b91505092915050565b600081359050612f9081613e43565b92915050565b600060208284031215612fac57612fab613bff565b5b6000612fba84828501612e7b565b91505092915050565b60008060408385031215612fda57612fd9613bff565b5b6000612fe885828601612e7b565b9250506020612ff985828601612e7b565b9150509250929050565b60008060006060848603121561301c5761301b613bff565b5b600061302a86828701612e7b565b935050602061303b86828701612e7b565b925050604061304c86828701612f81565b9150509250925092565b600080600080608085870312156130705761306f613bff565b5b600061307e87828801612e7b565b945050602061308f87828801612e7b565b93505060406130a087828801612f81565b925050606085013567ffffffffffffffff8111156130c1576130c0613bfa565b5b6130cd87828801612f25565b91505092959194509250565b600080604083850312156130f0576130ef613bff565b5b60006130fe85828601612e7b565b925050602061310f85828601612ee6565b9150509250929050565b600080604083850312156131305761312f613bff565b5b600061313e85828601612e7b565b925050602061314f85828601612f81565b9150509250929050565b600080602083850312156131705761316f613bff565b5b600083013567ffffffffffffffff81111561318e5761318d613bfa565b5b61319a85828601612e90565b92509250509250929050565b6000602082840312156131bc576131bb613bff565b5b60006131ca84828501612efb565b91505092915050565b6000602082840312156131e9576131e8613bff565b5b60006131f784828501612f10565b91505092915050565b60006020828403121561321657613215613bff565b5b600082013567ffffffffffffffff81111561323457613233613bfa565b5b61324084828501612f53565b91505092915050565b60006020828403121561325f5761325e613bff565b5b600061326d84828501612f81565b91505092915050565b61327f81613968565b82525050565b61328e8161397a565b82525050565b600061329f82613805565b6132a9818561381b565b93506132b98185602086016139eb565b6132c281613c04565b840191505092915050565b60006132d882613810565b6132e28185613837565b93506132f28185602086016139eb565b6132fb81613c04565b840191505092915050565b600061331182613810565b61331b8185613848565b935061332b8185602086016139eb565b80840191505092915050565b6000815461334481613a1e565b61334e8186613848565b94506001821660008114613369576001811461337a576133ad565b60ff198316865281860193506133ad565b613383856137f0565b60005b838110156133a557815481890152600182019150602081019050613386565b838801955050505b50505092915050565b60006133c3601083613837565b91506133ce82613c15565b602082019050919050565b60006133e6602683613837565b91506133f182613c3e565b604082019050919050565b6000613409600e83613837565b915061341482613c8d565b602082019050919050565b600061342c600f83613837565b915061343782613cb6565b602082019050919050565b600061344f600583613848565b915061345a82613cdf565b600582019050919050565b6000613472600a83613837565b915061347d82613d08565b602082019050919050565b6000613495602083613837565b91506134a082613d31565b602082019050919050565b60006134b8602f83613837565b91506134c382613d5a565b604082019050919050565b60006134db60008361382c565b91506134e682613da9565b600082019050919050565b60006134fe600a83613837565b915061350982613dac565b602082019050919050565b6000613521601283613837565b915061352c82613dd5565b602082019050919050565b613540816139d2565b82525050565b60006135528285613337565b915061355e8284613306565b915061356982613442565b91508190509392505050565b6000613580826134ce565b9150819050919050565b600060208201905061359f6000830184613276565b92915050565b60006080820190506135ba6000830187613276565b6135c76020830186613276565b6135d46040830185613537565b81810360608301526135e68184613294565b905095945050505050565b60006020820190506136066000830184613285565b92915050565b6000602082019050818103600083015261362681846132cd565b905092915050565b60006020820190508181036000830152613647816133b6565b9050919050565b60006020820190508181036000830152613667816133d9565b9050919050565b60006020820190508181036000830152613687816133fc565b9050919050565b600060208201905081810360008301526136a78161341f565b9050919050565b600060208201905081810360008301526136c781613465565b9050919050565b600060208201905081810360008301526136e781613488565b9050919050565b60006020820190508181036000830152613707816134ab565b9050919050565b60006020820190508181036000830152613727816134f1565b9050919050565b6000602082019050818103600083015261374781613514565b9050919050565b60006020820190506137636000830184613537565b92915050565b6000613773613784565b905061377f8282613a50565b919050565b6000604051905090565b600067ffffffffffffffff8211156137a9576137a8613bb7565b5b6137b282613c04565b9050602081019050919050565b600067ffffffffffffffff8211156137da576137d9613bb7565b5b6137e382613c04565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061385e826139d2565b9150613869836139d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561389e5761389d613afb565b5b828201905092915050565b60006138b4826139d2565b91506138bf836139d2565b9250826138cf576138ce613b2a565b5b828204905092915050565b60006138e5826139d2565b91506138f0836139d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561392957613928613afb565b5b828202905092915050565b600061393f826139d2565b915061394a836139d2565b92508282101561395d5761395c613afb565b5b828203905092915050565b6000613973826139b2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a095780820151818401526020810190506139ee565b83811115613a18576000848401525b50505050565b60006002820490506001821680613a3657607f821691505b60208210811415613a4a57613a49613b59565b5b50919050565b613a5982613c04565b810181811067ffffffffffffffff82111715613a7857613a77613bb7565b5b80604052505050565b6000613a8c826139d2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613abf57613abe613afb565b5b600182019050919050565b6000613ad5826139d2565b9150613ae0836139d2565b925082613af057613aef613b2a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420456e6f75676820457468657200000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74205477696e6c6973746564000000000000000000000000000000000000600082015250565b7f4e6f204d6f726520666f7220596f750000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f426164204e756d62657200000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d696e746564206f757400000000000000000000000000000000000000000000600082015250565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b613e0781613968565b8114613e1257600080fd5b50565b613e1e8161397a565b8114613e2957600080fd5b50565b613e3581613986565b8114613e4057600080fd5b50565b613e4c816139d2565b8114613e5757600080fd5b5056fea26469706673582212204841355ac1fa02e8e2b4d5381ca4c4e1cbcdb8a8a13172c6e4f730a8384db0b264736f6c63430008070033
Deployed Bytecode Sourcemap
45606:2806:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26972:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30085:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31588:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31151:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26221:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32453:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45905:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48258:151;;;;;;;;;;;;;:::i;:::-;;32694:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45804:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46245:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29893:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47080:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45841:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45869:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27341:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30254:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31864:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46531:130;;;;;;;;;;;;;:::i;:::-;;46351:69;;;;;;;;;;;;;:::i;:::-;;45728:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46428:95;;;;;;;;;;;;;:::i;:::-;;32950:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46669:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45688:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45767:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32222:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45955:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47320:930;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46115:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26972:305;27074:4;27126:25;27111:40;;;:11;:40;;;;:105;;;;27183:33;27168:48;;;:11;:48;;;;27111:105;:158;;;;27233:36;27257:11;27233:23;:36::i;:::-;27111:158;27091:178;;26972:305;;;:::o;30085:100::-;30139:13;30172:5;30165:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30085:100;:::o;31588:204::-;31656:7;31681:16;31689:7;31681;:16::i;:::-;31676:64;;31706:34;;;;;;;;;;;;;;31676:64;31760:15;:24;31776:7;31760:24;;;;;;;;;;;;;;;;;;;;;31753:31;;31588:204;;;:::o;31151:371::-;31224:13;31240:24;31256:7;31240:15;:24::i;:::-;31224:40;;31285:5;31279:11;;:2;:11;;;31275:48;;;31299:24;;;;;;;;;;;;;;31275:48;31356:5;31340:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;31366:37;31383:5;31390:12;:10;:12::i;:::-;31366:16;:37::i;:::-;31365:38;31340:63;31336:138;;;31427:35;;;;;;;;;;;;;;31336:138;31486:28;31495:2;31499:7;31508:5;31486:8;:28::i;:::-;31213:309;31151:371;;:::o;26221:303::-;26265:7;26490:15;:13;:15::i;:::-;26475:12;;26459:13;;:28;:46;26452:53;;26221:303;:::o;32453:170::-;32587:28;32597:4;32603:2;32607:7;32587:9;:28::i;:::-;32453:170;;;:::o;45905:43::-;;;;;;;;;;;;;;;;;:::o;48258:151::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48307:12:::1;48325:10;:15;;48348:21;48325:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48306:68;;;48393:7;48385:16;;;::::0;::::1;;48295:114;48258:151::o:0;32694:185::-;32832:39;32849:4;32855:2;32859:7;32832:39;;;;;;;;;;;;:16;:39::i;:::-;32694:185;;;:::o;45804:28::-;;;;;;;;;;;;;:::o;46245:98::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46327:8:::1;46317:7;:18;;;;;;;;;;;;:::i;:::-;;46245:98:::0;:::o;29893:125::-;29957:7;29984:21;29997:7;29984:12;:21::i;:::-;:26;;;29977:33;;29893:125;;;:::o;47080:232::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47167:9:::1;47162:143;47186:9;;:16;;47182:1;:20;47162:143;;;47277:1;47252:8;:22;47261:9;;47271:1;47261:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47252:22;;;;;;;;;;;;;;;:26;;;;47204:3;;;;;:::i;:::-;;;;47162:143;;;;47080:232:::0;;:::o;45841:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45869:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27341:206::-;27405:7;27446:1;27429:19;;:5;:19;;;27425:60;;;27457:28;;;;;;;;;;;;;;27425:60;27511:12;:19;27524:5;27511:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27503:36;;27496:43;;27341:206;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;30254:104::-;30310:13;30343:7;30336:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30254:104;:::o;31864:287::-;31975:12;:10;:12::i;:::-;31963:24;;:8;:24;;;31959:54;;;31996:17;;;;;;;;;;;;;;31959:54;32071:8;32026:18;:32;32045:12;:10;:12::i;:::-;32026:32;;;;;;;;;;;;;;;:42;32059:8;32026:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32124:8;32095:48;;32110:12;:10;:12::i;:::-;32095:48;;;32134:8;32095:48;;;;;;:::i;:::-;;;;;;;;31864:287;;:::o;46531:130::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46601:11:::1;;;;;;;;;;;46600:12;46586:11;;:26;;;;;;;;;;;;;;;;;;46640:13;;;;;;;;;;;46639:14;46623:13;;:30;;;;;;;;;;;;;;;;;;46531:130::o:0;46351:69::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46408:4:::1;46397:8;;:15;;;;;;;;;;;;;;;;;;46351:69::o:0;45728:32::-;;;;;;;;;;;;;:::o;46428:95::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46502:13:::1;;;;;;;;;;;46501:14;46485:13;;:30;;;;;;;;;;;;;;;;;;46428:95::o:0;32950:369::-;33117:28;33127:4;33133:2;33137:7;33117:9;:28::i;:::-;33160:15;:2;:13;;;:15::i;:::-;:76;;;;;33180:56;33211:4;33217:2;33221:7;33230:5;33180:30;:56::i;:::-;33179:57;33160:76;33156:156;;;33260:40;;;;;;;;;;;;;;33156:156;32950:369;;;;:::o;46669:403::-;46743:13;46778:17;46786:8;46778:7;:17::i;:::-;46769:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;46874:5;46862:17;;:8;;;;;;;;;;;:17;;;46858:126;;;46927:13;46942:19;:8;:17;:19::i;:::-;46910:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46896:76;;;;46858:126;47025:7;47034:19;:8;:17;:19::i;:::-;47008:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46994:70;;46669:403;;;;:::o;45688:31::-;;;;:::o;45767:30::-;;;;;;;;;;;;;:::o;32222:164::-;32319:4;32343:18;:25;32362:5;32343:25;;;;;;;;;;;;;;;:35;32369:8;32343:35;;;;;;;;;;;;;;;;;;;;;;;;;32336:42;;32222:164;;;;:::o;45955:44::-;;;;;;;;;;;;;;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;47320:930::-;47388:13;;;;;;;;;;;47387:14;:30;;;;47406:11;;;;;;;;;;;47405:12;47387:30;47378:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47483:9;;47476:3;47460:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:32;;47451:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;47552:1;47528:8;:20;47537:10;47528:20;;;;;;;;;;;;;;;;:25;;:41;;;;47558:11;;;;;;;;;;;47557:12;47528:41;47519:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;47615:1;47608:3;:8;;:19;;;;;47626:1;47620:3;:7;47608:19;47599:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;47693:1;47686:3;47662:9;:21;47672:10;47662:21;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;:32;;47653:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47735:1;47728:3;:8;47725:361;;;47814:10;47790:9;:21;47800:10;47790:21;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;47775:11;:50;;;;:::i;:::-;47761:9;:65;;47752:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;47725:361;;;47875:1;47868:3;:8;47865:221;;;47954:10;47930:9;:21;47940:10;47930:21;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;47916:10;:49;;;;:::i;:::-;47902:9;:64;;47893:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;47865:221;;;48042:11;48029:9;:24;;48020:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;47865:221;47725:361;48144:3;48120:8;:20;48129:10;48120:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;48187:3;48162:9;:21;48172:10;48162:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;48205:26;48215:10;48227:3;48205:9;:26::i;:::-;47320:930;:::o;46115:122::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46215:14:::1;46199:13;:30;;;;;;;;;;;;:::i;:::-;;46115:122:::0;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;16863:157::-;16948:4;16987:25;16972:40;;;:11;:40;;;;16965:47;;16863:157;;;:::o;33574:187::-;33631:4;33674:7;33655:15;:13;:15::i;:::-;:26;;:53;;;;;33695:13;;33685:7;:23;33655:53;:98;;;;;33726:11;:20;33738:7;33726:20;;;;;;;;;;;:27;;;;;;;;;;;;33725:28;33655:98;33648:105;;33574:187;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;41744:196::-;41886:2;41859:15;:24;41875:7;41859:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41924:7;41920:2;41904:28;;41913:5;41904:28;;;;;;;;;;;;41744:196;;;:::o;25995:92::-;26051:7;25995:92;:::o;36687:2130::-;36802:35;36840:21;36853:7;36840:12;:21::i;:::-;36802:59;;36900:4;36878:26;;:13;:18;;;:26;;;36874:67;;36913:28;;;;;;;;;;;;;;36874:67;36954:22;36996:4;36980:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;37017:36;37034:4;37040:12;:10;:12::i;:::-;37017:16;:36::i;:::-;36980:73;:126;;;;37094:12;:10;:12::i;:::-;37070:36;;:20;37082:7;37070:11;:20::i;:::-;:36;;;36980:126;36954:153;;37125:17;37120:66;;37151:35;;;;;;;;;;;;;;37120:66;37215:1;37201:16;;:2;:16;;;37197:52;;;37226:23;;;;;;;;;;;;;;37197:52;37262:43;37284:4;37290:2;37294:7;37303:1;37262:21;:43::i;:::-;37370:35;37387:1;37391:7;37400:4;37370:8;:35::i;:::-;37731:1;37701:12;:18;37714:4;37701:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37775:1;37747:12;:16;37760:2;37747:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37793:31;37827:11;:20;37839:7;37827:20;;;;;;;;;;;37793:54;;37878:2;37862:8;:13;;;:18;;;;;;;;;;;;;;;;;;37928:15;37895:8;:23;;;:49;;;;;;;;;;;;;;;;;;38196:19;38228:1;38218:7;:11;38196:33;;38244:31;38278:11;:24;38290:11;38278:24;;;;;;;;;;;38244:58;;38346:1;38321:27;;:8;:13;;;;;;;;;;;;:27;;;38317:384;;;38531:13;;38516:11;:28;38512:174;;38585:4;38569:8;:13;;;:20;;;;;;;;;;;;;;;;;;38638:13;:28;;;38612:8;:23;;;:54;;;;;;;;;;;;;;;;;;38512:174;38317:384;37676:1036;;;38748:7;38744:2;38729:27;;38738:4;38729:27;;;;;;;;;;;;38767:42;38788:4;38794:2;38798:7;38807:1;38767:20;:42::i;:::-;36791:2026;;36687:2130;;;:::o;28722:1109::-;28784:21;;:::i;:::-;28818:12;28833:7;28818:22;;28901:4;28882:15;:13;:15::i;:::-;:23;;:47;;;;;28916:13;;28909:4;:20;28882:47;28878:886;;;28950:31;28984:11;:17;28996:4;28984:17;;;;;;;;;;;28950:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29025:9;:16;;;29020:729;;29096:1;29070:28;;:9;:14;;;:28;;;29066:101;;29134:9;29127:16;;;;;;29066:101;29469:261;29476:4;29469:261;;;29509:6;;;;;;;;29554:11;:17;29566:4;29554:17;;;;;;;;;;;29542:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29628:1;29602:28;;:9;:14;;;:28;;;29598:109;;29670:9;29663:16;;;;;;29598:109;29469:261;;;29020:729;28931:833;28878:886;29792:31;;;;;;;;;;;;;;28722:1109;;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;42432:667::-;42595:4;42632:2;42616:36;;;42653:12;:10;:12::i;:::-;42667:4;42673:7;42682:5;42616:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42612:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42867:1;42850:6;:13;:18;42846:235;;;42896:40;;;;;;;;;;;;;;42846:235;43039:6;43033:13;43024:6;43020:2;43016:15;43009:38;42612:480;42745:45;;;42735:55;;;:6;:55;;;;42728:62;;;42432:667;;;;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;33769:104::-;33838:27;33848:2;33852:8;33838:27;;;;;;;;;;;;:9;:27::i;:::-;33769:104;;:::o;43747:159::-;;;;;:::o;44565:158::-;;;;;:::o;34236:163::-;34359:32;34365:2;34369:8;34379:5;34386:4;34359:5;:32::i;:::-;34236:163;;;:::o;34658:1775::-;34797:20;34820:13;;34797:36;;34862:1;34848:16;;:2;:16;;;34844:48;;;34873:19;;;;;;;;;;;;;;34844:48;34919:1;34907:8;:13;34903:44;;;34929:18;;;;;;;;;;;;;;34903:44;34960:61;34990:1;34994:2;34998:12;35012:8;34960:21;:61::i;:::-;35333:8;35298:12;:16;35311:2;35298:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35397:8;35357:12;:16;35370:2;35357:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35456:2;35423:11;:25;35435:12;35423:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;35523:15;35473:11;:25;35485:12;35473:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;35556:20;35579:12;35556:35;;35606:11;35635:8;35620:12;:23;35606:37;;35664:4;:23;;;;;35672:15;:2;:13;;;:15::i;:::-;35664:23;35660:641;;;35708:314;35764:12;35760:2;35739:38;;35756:1;35739:38;;;;;;;;;;;;35805:69;35844:1;35848:2;35852:14;;;;;;35868:5;35805:30;:69::i;:::-;35800:174;;35910:40;;;;;;;;;;;;;;35800:174;36017:3;36001:12;:19;;35708:314;;36103:12;36086:13;;:29;36082:43;;36117:8;;;36082:43;35660:641;;;36166:120;36222:14;;;;;;36218:2;36197:40;;36214:1;36197:40;;;;;;;;;;;;36281:3;36265:12;:19;;36166:120;;35660:641;36331:12;36315:13;:28;;;;35273:1082;;36365:60;36394:1;36398:2;36402:12;36416:8;36365:20;:60::i;:::-;34786:1647;34658:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9696:845::-;9799:3;9836:5;9830:12;9865:36;9891:9;9865:36;:::i;:::-;9917:89;9999:6;9994:3;9917:89;:::i;:::-;9910:96;;10037:1;10026:9;10022:17;10053:1;10048:137;;;;10199:1;10194:341;;;;10015:520;;10048:137;10132:4;10128:9;10117;10113:25;10108:3;10101:38;10168:6;10163:3;10159:16;10152:23;;10048:137;;10194:341;10261:38;10293:5;10261:38;:::i;:::-;10321:1;10335:154;10349:6;10346:1;10343:13;10335:154;;;10423:7;10417:14;10413:1;10408:3;10404:11;10397:35;10473:1;10464:7;10460:15;10449:26;;10371:4;10368:1;10364:12;10359:17;;10335:154;;;10518:6;10513:3;10509:16;10502:23;;10201:334;;10015:520;;9803:738;;9696:845;;;;:::o;10547:366::-;10689:3;10710:67;10774:2;10769:3;10710:67;:::i;:::-;10703:74;;10786:93;10875:3;10786:93;:::i;:::-;10904:2;10899:3;10895:12;10888:19;;10547:366;;;:::o;10919:::-;11061:3;11082:67;11146:2;11141:3;11082:67;:::i;:::-;11075:74;;11158:93;11247:3;11158:93;:::i;:::-;11276:2;11271:3;11267:12;11260:19;;10919:366;;;:::o;11291:::-;11433:3;11454:67;11518:2;11513:3;11454:67;:::i;:::-;11447:74;;11530:93;11619:3;11530:93;:::i;:::-;11648:2;11643:3;11639:12;11632:19;;11291:366;;;:::o;11663:::-;11805:3;11826:67;11890:2;11885:3;11826:67;:::i;:::-;11819:74;;11902:93;11991:3;11902:93;:::i;:::-;12020:2;12015:3;12011:12;12004:19;;11663:366;;;:::o;12035:400::-;12195:3;12216:84;12298:1;12293:3;12216:84;:::i;:::-;12209:91;;12309:93;12398:3;12309:93;:::i;:::-;12427:1;12422:3;12418:11;12411:18;;12035:400;;;:::o;12441:366::-;12583:3;12604:67;12668:2;12663:3;12604:67;:::i;:::-;12597:74;;12680:93;12769:3;12680:93;:::i;:::-;12798:2;12793:3;12789:12;12782:19;;12441:366;;;:::o;12813:::-;12955:3;12976:67;13040:2;13035:3;12976:67;:::i;:::-;12969:74;;13052:93;13141:3;13052:93;:::i;:::-;13170:2;13165:3;13161:12;13154:19;;12813:366;;;:::o;13185:::-;13327:3;13348:67;13412:2;13407:3;13348:67;:::i;:::-;13341:74;;13424:93;13513:3;13424:93;:::i;:::-;13542:2;13537:3;13533:12;13526:19;;13185:366;;;:::o;13557:398::-;13716:3;13737:83;13818:1;13813:3;13737:83;:::i;:::-;13730:90;;13829:93;13918:3;13829:93;:::i;:::-;13947:1;13942:3;13938:11;13931:18;;13557:398;;;:::o;13961:366::-;14103:3;14124:67;14188:2;14183:3;14124:67;:::i;:::-;14117:74;;14200:93;14289:3;14200:93;:::i;:::-;14318:2;14313:3;14309:12;14302:19;;13961:366;;;:::o;14333:::-;14475:3;14496:67;14560:2;14555:3;14496:67;:::i;:::-;14489:74;;14572:93;14661:3;14572:93;:::i;:::-;14690:2;14685:3;14681:12;14674:19;;14333:366;;;:::o;14705:118::-;14792:24;14810:5;14792:24;:::i;:::-;14787:3;14780:37;14705:118;;:::o;14829:695::-;15107:3;15129:92;15217:3;15208:6;15129:92;:::i;:::-;15122:99;;15238:95;15329:3;15320:6;15238:95;:::i;:::-;15231:102;;15350:148;15494:3;15350:148;:::i;:::-;15343:155;;15515:3;15508:10;;14829:695;;;;;:::o;15530:379::-;15714:3;15736:147;15879:3;15736:147;:::i;:::-;15729:154;;15900:3;15893:10;;15530:379;;;:::o;15915:222::-;16008:4;16046:2;16035:9;16031:18;16023:26;;16059:71;16127:1;16116:9;16112:17;16103:6;16059:71;:::i;:::-;15915:222;;;;:::o;16143:640::-;16338:4;16376:3;16365:9;16361:19;16353:27;;16390:71;16458:1;16447:9;16443:17;16434:6;16390:71;:::i;:::-;16471:72;16539:2;16528:9;16524:18;16515:6;16471:72;:::i;:::-;16553;16621:2;16610:9;16606:18;16597:6;16553:72;:::i;:::-;16672:9;16666:4;16662:20;16657:2;16646:9;16642:18;16635:48;16700:76;16771:4;16762:6;16700:76;:::i;:::-;16692:84;;16143:640;;;;;;;:::o;16789:210::-;16876:4;16914:2;16903:9;16899:18;16891:26;;16927:65;16989:1;16978:9;16974:17;16965:6;16927:65;:::i;:::-;16789:210;;;;:::o;17005:313::-;17118:4;17156:2;17145:9;17141:18;17133:26;;17205:9;17199:4;17195:20;17191:1;17180:9;17176:17;17169:47;17233:78;17306:4;17297:6;17233:78;:::i;:::-;17225:86;;17005:313;;;;:::o;17324:419::-;17490:4;17528:2;17517:9;17513:18;17505:26;;17577:9;17571:4;17567:20;17563:1;17552:9;17548:17;17541:47;17605:131;17731:4;17605:131;:::i;:::-;17597:139;;17324:419;;;:::o;17749:::-;17915:4;17953:2;17942:9;17938:18;17930:26;;18002:9;17996:4;17992:20;17988:1;17977:9;17973:17;17966:47;18030:131;18156:4;18030:131;:::i;:::-;18022:139;;17749:419;;;:::o;18174:::-;18340:4;18378:2;18367:9;18363:18;18355:26;;18427:9;18421:4;18417:20;18413:1;18402:9;18398:17;18391:47;18455:131;18581:4;18455:131;:::i;:::-;18447:139;;18174:419;;;:::o;18599:::-;18765:4;18803:2;18792:9;18788:18;18780:26;;18852:9;18846:4;18842:20;18838:1;18827:9;18823:17;18816:47;18880:131;19006:4;18880:131;:::i;:::-;18872:139;;18599:419;;;:::o;19024:::-;19190:4;19228:2;19217:9;19213:18;19205:26;;19277:9;19271:4;19267:20;19263:1;19252:9;19248:17;19241:47;19305:131;19431:4;19305:131;:::i;:::-;19297:139;;19024:419;;;:::o;19449:::-;19615:4;19653:2;19642:9;19638:18;19630:26;;19702:9;19696:4;19692:20;19688:1;19677:9;19673:17;19666:47;19730:131;19856:4;19730:131;:::i;:::-;19722:139;;19449:419;;;:::o;19874:::-;20040:4;20078:2;20067:9;20063:18;20055:26;;20127:9;20121:4;20117:20;20113:1;20102:9;20098:17;20091:47;20155:131;20281:4;20155:131;:::i;:::-;20147:139;;19874:419;;;:::o;20299:::-;20465:4;20503:2;20492:9;20488:18;20480:26;;20552:9;20546:4;20542:20;20538:1;20527:9;20523:17;20516:47;20580:131;20706:4;20580:131;:::i;:::-;20572:139;;20299:419;;;:::o;20724:::-;20890:4;20928:2;20917:9;20913:18;20905:26;;20977:9;20971:4;20967:20;20963:1;20952:9;20948:17;20941:47;21005:131;21131:4;21005:131;:::i;:::-;20997:139;;20724:419;;;:::o;21149:222::-;21242:4;21280:2;21269:9;21265:18;21257:26;;21293:71;21361:1;21350:9;21346:17;21337:6;21293:71;:::i;:::-;21149:222;;;;:::o;21377:129::-;21411:6;21438:20;;:::i;:::-;21428:30;;21467:33;21495:4;21487:6;21467:33;:::i;:::-;21377:129;;;:::o;21512:75::-;21545:6;21578:2;21572:9;21562:19;;21512:75;:::o;21593:307::-;21654:4;21744:18;21736:6;21733:30;21730:56;;;21766:18;;:::i;:::-;21730:56;21804:29;21826:6;21804:29;:::i;:::-;21796:37;;21888:4;21882;21878:15;21870:23;;21593:307;;;:::o;21906:308::-;21968:4;22058:18;22050:6;22047:30;22044:56;;;22080:18;;:::i;:::-;22044:56;22118:29;22140:6;22118:29;:::i;:::-;22110:37;;22202:4;22196;22192:15;22184:23;;21906:308;;;:::o;22220:141::-;22269:4;22292:3;22284:11;;22315:3;22312:1;22305:14;22349:4;22346:1;22336:18;22328:26;;22220:141;;;:::o;22367:98::-;22418:6;22452:5;22446:12;22436:22;;22367:98;;;:::o;22471:99::-;22523:6;22557:5;22551:12;22541:22;;22471:99;;;:::o;22576:168::-;22659:11;22693:6;22688:3;22681:19;22733:4;22728:3;22724:14;22709:29;;22576:168;;;;:::o;22750:147::-;22851:11;22888:3;22873:18;;22750:147;;;;:::o;22903:169::-;22987:11;23021:6;23016:3;23009:19;23061:4;23056:3;23052:14;23037:29;;22903:169;;;;:::o;23078:148::-;23180:11;23217:3;23202:18;;23078:148;;;;:::o;23232:305::-;23272:3;23291:20;23309:1;23291:20;:::i;:::-;23286:25;;23325:20;23343:1;23325:20;:::i;:::-;23320:25;;23479:1;23411:66;23407:74;23404:1;23401:81;23398:107;;;23485:18;;:::i;:::-;23398:107;23529:1;23526;23522:9;23515:16;;23232:305;;;;:::o;23543:185::-;23583:1;23600:20;23618:1;23600:20;:::i;:::-;23595:25;;23634:20;23652:1;23634:20;:::i;:::-;23629:25;;23673:1;23663:35;;23678:18;;:::i;:::-;23663:35;23720:1;23717;23713:9;23708:14;;23543:185;;;;:::o;23734:348::-;23774:7;23797:20;23815:1;23797:20;:::i;:::-;23792:25;;23831:20;23849:1;23831:20;:::i;:::-;23826:25;;24019:1;23951:66;23947:74;23944:1;23941:81;23936:1;23929:9;23922:17;23918:105;23915:131;;;24026:18;;:::i;:::-;23915:131;24074:1;24071;24067:9;24056:20;;23734:348;;;;:::o;24088:191::-;24128:4;24148:20;24166:1;24148:20;:::i;:::-;24143:25;;24182:20;24200:1;24182:20;:::i;:::-;24177:25;;24221:1;24218;24215:8;24212:34;;;24226:18;;:::i;:::-;24212:34;24271:1;24268;24264:9;24256:17;;24088:191;;;;:::o;24285:96::-;24322:7;24351:24;24369:5;24351:24;:::i;:::-;24340:35;;24285:96;;;:::o;24387:90::-;24421:7;24464:5;24457:13;24450:21;24439:32;;24387:90;;;:::o;24483:149::-;24519:7;24559:66;24552:5;24548:78;24537:89;;24483:149;;;:::o;24638:126::-;24675:7;24715:42;24708:5;24704:54;24693:65;;24638:126;;;:::o;24770:77::-;24807:7;24836:5;24825:16;;24770:77;;;:::o;24853:154::-;24937:6;24932:3;24927;24914:30;24999:1;24990:6;24985:3;24981:16;24974:27;24853:154;;;:::o;25013:307::-;25081:1;25091:113;25105:6;25102:1;25099:13;25091:113;;;25190:1;25185:3;25181:11;25175:18;25171:1;25166:3;25162:11;25155:39;25127:2;25124:1;25120:10;25115:15;;25091:113;;;25222:6;25219:1;25216:13;25213:101;;;25302:1;25293:6;25288:3;25284:16;25277:27;25213:101;25062:258;25013:307;;;:::o;25326:320::-;25370:6;25407:1;25401:4;25397:12;25387:22;;25454:1;25448:4;25444:12;25475:18;25465:81;;25531:4;25523:6;25519:17;25509:27;;25465:81;25593:2;25585:6;25582:14;25562:18;25559:38;25556:84;;;25612:18;;:::i;:::-;25556:84;25377:269;25326:320;;;:::o;25652:281::-;25735:27;25757:4;25735:27;:::i;:::-;25727:6;25723:40;25865:6;25853:10;25850:22;25829:18;25817:10;25814:34;25811:62;25808:88;;;25876:18;;:::i;:::-;25808:88;25916:10;25912:2;25905:22;25695:238;25652:281;;:::o;25939:233::-;25978:3;26001:24;26019:5;26001:24;:::i;:::-;25992:33;;26047:66;26040:5;26037:77;26034:103;;;26117:18;;:::i;:::-;26034:103;26164:1;26157:5;26153:13;26146:20;;25939:233;;;:::o;26178:176::-;26210:1;26227:20;26245:1;26227:20;:::i;:::-;26222:25;;26261:20;26279:1;26261:20;:::i;:::-;26256:25;;26300:1;26290:35;;26305:18;;:::i;:::-;26290:35;26346:1;26343;26339:9;26334:14;;26178:176;;;;:::o;26360:180::-;26408:77;26405:1;26398:88;26505:4;26502:1;26495:15;26529:4;26526:1;26519:15;26546:180;26594:77;26591:1;26584:88;26691:4;26688:1;26681:15;26715:4;26712:1;26705:15;26732:180;26780:77;26777:1;26770:88;26877:4;26874:1;26867:15;26901:4;26898:1;26891:15;26918:180;26966:77;26963:1;26956:88;27063:4;27060:1;27053:15;27087:4;27084:1;27077:15;27104:180;27152:77;27149:1;27142:88;27249:4;27246:1;27239:15;27273:4;27270:1;27263:15;27290:117;27399:1;27396;27389:12;27413:117;27522:1;27519;27512:12;27536:117;27645:1;27642;27635:12;27659:117;27768:1;27765;27758:12;27782:117;27891:1;27888;27881:12;27905:117;28014:1;28011;28004:12;28028:102;28069:6;28120:2;28116:7;28111:2;28104:5;28100:14;28096:28;28086:38;;28028:102;;;:::o;28136:166::-;28276:18;28272:1;28264:6;28260:14;28253:42;28136:166;:::o;28308:225::-;28448:34;28444:1;28436:6;28432:14;28425:58;28517:8;28512:2;28504:6;28500:15;28493:33;28308:225;:::o;28539:164::-;28679:16;28675:1;28667:6;28663:14;28656:40;28539:164;:::o;28709:165::-;28849:17;28845:1;28837:6;28833:14;28826:41;28709:165;:::o;28880:155::-;29020:7;29016:1;29008:6;29004:14;28997:31;28880:155;:::o;29041:160::-;29181:12;29177:1;29169:6;29165:14;29158:36;29041:160;:::o;29207:182::-;29347:34;29343:1;29335:6;29331:14;29324:58;29207:182;:::o;29395:234::-;29535:34;29531:1;29523:6;29519:14;29512:58;29604:17;29599:2;29591:6;29587:15;29580:42;29395:234;:::o;29635:114::-;;:::o;29755:160::-;29895:12;29891:1;29883:6;29879:14;29872:36;29755:160;:::o;29921:168::-;30061:20;30057:1;30049:6;30045:14;30038:44;29921:168;:::o;30095:122::-;30168:24;30186:5;30168:24;:::i;:::-;30161:5;30158:35;30148:63;;30207:1;30204;30197:12;30148:63;30095:122;:::o;30223:116::-;30293:21;30308:5;30293:21;:::i;:::-;30286:5;30283:32;30273:60;;30329:1;30326;30319:12;30273:60;30223:116;:::o;30345:120::-;30417:23;30434:5;30417:23;:::i;:::-;30410:5;30407:34;30397:62;;30455:1;30452;30445:12;30397:62;30345:120;:::o;30471:122::-;30544:24;30562:5;30544:24;:::i;:::-;30537:5;30534:35;30524:63;;30583:1;30580;30573:12;30524:63;30471:122;:::o
Swarm Source
ipfs://4841355ac1fa02e8e2b4d5381ca4c4e1cbcdb8a8a13172c6e4f730a8384db0b2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.