ERC-721
Overview
Max Total Supply
1,170 CYBERSKIER
Holders
226
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 CYBERSKIERLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CyberSkier
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-05 */ // 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: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/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/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: 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: @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: scripts/CyberSkier/cyberskier.sol // @name: CyberSkier // @info: We are the skiers of the metaverse. // @site: cyberskier.io pragma solidity ^0.8.15; contract CyberSkier is ERC721A, ReentrancyGuard, Ownable { using Strings for uint256; bool public isMaskActive = true; bool public isSaleActive = false; bool public isAllowlistActive = false; uint256 public constant MAX_SUPPLY = 3333; uint256 public MAX_RETAIN = 333; uint256 public mintPrice = 0.008 ether; uint256 public maxAllowlistMint = 2; string private maskURI; string private baseURI; string private baseExtension = ".json"; mapping(uint256 => string) private _tokenURIs; constructor() ERC721A("CyberSkier", "CYBERSKIER") {} function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (isMaskActive) { return maskURI; } string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); if (bytes(base).length == 0) { return _tokenURI; } if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return string(abi.encodePacked(base, tokenId.toString(), baseExtension)); } modifier onlyUser() { require(tx.origin == msg.sender, "Only user"); _; } // MINT function mint(uint256 quantity) external payable onlyUser { require(isSaleActive, "Unavailable"); uint256 supply = totalSupply(); require( supply + quantity <= MAX_SUPPLY - MAX_RETAIN, "Exceeded maximum supply" ); require(mintPrice * quantity <= msg.value, "Insufficient funds"); _safeMint(msg.sender, quantity); safeRefund(mintPrice * quantity); } // SAFE REFUND function safeRefund(uint256 price) private { uint256 refund = msg.value - price; if (refund > 0) { payable(msg.sender).transfer(refund); } } // ALLOWLIST MINT bytes32 public allowlistMerkleRoot; mapping(address => bool) private allowlistClaimed; function setAllowlistMerkleRoot(bytes32 _merkleRoot) external onlyOwner { allowlistMerkleRoot = _merkleRoot; } function allowlistMint(bytes32[] calldata merkleProof) external onlyUser { require(isAllowlistActive, "Unavailable"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require( MerkleProof.verify(merkleProof, allowlistMerkleRoot, leaf), "Invalid proof" ); require(!allowlistClaimed[msg.sender], "Already claimed"); uint256 supply = totalSupply(); require( supply + maxAllowlistMint <= MAX_SUPPLY - MAX_RETAIN, "Exceeded maximum supply" ); _safeMint(msg.sender, maxAllowlistMint); allowlistClaimed[msg.sender] = true; } // RETAIN MINT function retainMint(uint256 quantity) external onlyOwner { require(quantity <= MAX_RETAIN, "Exceeded maximum retain"); uint256 supply = totalSupply(); require(supply + quantity <= MAX_SUPPLY, "Exceeded maximum supply"); _safeMint(msg.sender, quantity); MAX_RETAIN = MAX_RETAIN - quantity; } // METADATA URI function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setMaskURI(string memory _maskURI) external onlyOwner { maskURI = _maskURI; } function setBaseURI(string memory _baseTokenURI) external onlyOwner { baseURI = _baseTokenURI; } function setBaseExtension(string memory _baseExtension) external onlyOwner { baseExtension = _baseExtension; } function setIsMaskActive(bool _isMaskActive) external onlyOwner { isMaskActive = _isMaskActive; } function setIsAllowlistActive(bool _isAllowlistActive) external onlyOwner { isAllowlistActive = _isAllowlistActive; } function setIsSaleActive(bool _isSaleActive) external onlyOwner { isSaleActive = _isSaleActive; } function setMintPrice(uint256 _mintPrice) external onlyOwner { mintPrice = _mintPrice; } function setMaxAllowlistMint(uint256 _maxAllowlistMint) external onlyOwner { maxAllowlistMint = _maxAllowlistMint; } // WITHDRAW function withdraw() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Withdraw Failed"); } }
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":[],"name":"MAX_RETAIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"allowlistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAllowlistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaskActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxAllowlistMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"retainMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setAllowlistMerkleRoot","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":"_baseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isAllowlistActive","type":"bool"}],"name":"setIsAllowlistActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isMaskActive","type":"bool"}],"name":"setIsMaskActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isSaleActive","type":"bool"}],"name":"setIsSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_maskURI","type":"string"}],"name":"setMaskURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAllowlistMint","type":"uint256"}],"name":"setMaxAllowlistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600960146101000a81548160ff0219169083151502179055506000600960156101000a81548160ff0219169083151502179055506000600960166101000a81548160ff02191690831515021790555061014d600a55661c6bf526340000600b556002600c556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600f9081620000b19190620004e3565b50348015620000bf57600080fd5b506040518060400160405280600a81526020017f4379626572536b696572000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f4359424552534b4945520000000000000000000000000000000000000000000081525081600290816200013d9190620004e3565b5080600390816200014f9190620004e3565b50620001606200019660201b60201c565b6000819055505050600160088190555062000190620001846200019b60201b60201c565b620001a360201b60201c565b620005ca565b600090565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002eb57607f821691505b602082108103620003015762000300620002a3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200036b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200032c565b6200037786836200032c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003c4620003be620003b8846200038f565b62000399565b6200038f565b9050919050565b6000819050919050565b620003e083620003a3565b620003f8620003ef82620003cb565b84845462000339565b825550505050565b600090565b6200040f62000400565b6200041c818484620003d5565b505050565b5b8181101562000444576200043860008262000405565b60018101905062000422565b5050565b601f82111562000493576200045d8162000307565b62000468846200031c565b8101602085101562000478578190505b6200049062000487856200031c565b83018262000421565b50505b505050565b600082821c905092915050565b6000620004b86000198460080262000498565b1980831691505092915050565b6000620004d38383620004a5565b9150826002028217905092915050565b620004ee8262000269565b67ffffffffffffffff8111156200050a576200050962000274565b5b620005168254620002d2565b6200052382828562000448565b600060209050601f8311600181146200055b576000841562000546578287015190505b620005528582620004c5565b865550620005c2565b601f1984166200056b8662000307565b60005b8281101562000595578489015182556001820191506020850194506020810190506200056e565b86831015620005b55784890151620005b1601f891682620004a5565b8355505b6001600288020188555050505b505050505050565b6147a980620005da6000396000f3fe6080604052600436106102255760003560e01c8063817cc12d11610123578063c87b56dd116100ab578063e68a7cd11161006f578063e68a7cd1146107be578063e985e9c5146107e7578063f2fde38b14610824578063f4a0a5281461084d578063f95df4141461087657610225565b8063c87b56dd146106db578063c8a86c7c14610718578063d2d515cc14610741578063d2d65ff51461076c578063da3ef23f1461079557610225565b8063a22cb465116100f2578063a22cb4651461060c578063ae46e25214610635578063b88d4fde1461065e578063bcb49d9e14610687578063c4ee0fd9146106b257610225565b8063817cc12d146105715780638da5cb5b1461059a57806395d89b41146105c5578063a0712d68146105f057610225565b80633ccfd60b116101b15780636352211e116101755780636352211e1461048a5780636817c76c146104c757806370a08231146104f2578063715018a61461052f57806373a8f6b31461054657610225565b80633ccfd60b146103cd57806342842e0e146103e4578063537924ef1461040d57806355f804b314610436578063564566a81461045f57610225565b806313ffc9d6116101f857806313ffc9d6146102f857806318160ddd1461032357806323b872dd1461034e578063293108e01461037757806332cb6b0c146103a257610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906132d6565b61089f565b60405161025e919061331e565b60405180910390f35b34801561027357600080fd5b5061027c610981565b60405161028991906133d2565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061342a565b610a13565b6040516102c69190613498565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906134df565b610a8f565b005b34801561030457600080fd5b5061030d610b99565b60405161031a919061331e565b60405180910390f35b34801561032f57600080fd5b50610338610bac565b604051610345919061352e565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613549565b610bc3565b005b34801561038357600080fd5b5061038c610bd3565b60405161039991906135b5565b60405180910390f35b3480156103ae57600080fd5b506103b7610bd9565b6040516103c4919061352e565b60405180910390f35b3480156103d957600080fd5b506103e2610bdf565b005b3480156103f057600080fd5b5061040b60048036038101906104069190613549565b610d5f565b005b34801561041957600080fd5b50610434600480360381019061042f9190613635565b610d7f565b005b34801561044257600080fd5b5061045d600480360381019061045891906137b2565b611056565b005b34801561046b57600080fd5b506104746110e5565b604051610481919061331e565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac919061342a565b6110f8565b6040516104be9190613498565b60405180910390f35b3480156104d357600080fd5b506104dc61110e565b6040516104e9919061352e565b60405180910390f35b3480156104fe57600080fd5b50610519600480360381019061051491906137fb565b611114565b604051610526919061352e565b60405180910390f35b34801561053b57600080fd5b506105446111e3565b005b34801561055257600080fd5b5061055b61126b565b604051610568919061352e565b60405180910390f35b34801561057d57600080fd5b506105986004803603810190610593919061342a565b611271565b005b3480156105a657600080fd5b506105af6112f7565b6040516105bc9190613498565b60405180910390f35b3480156105d157600080fd5b506105da611321565b6040516105e791906133d2565b60405180910390f35b61060a6004803603810190610605919061342a565b6113b3565b005b34801561061857600080fd5b50610633600480360381019061062e9190613854565b61154d565b005b34801561064157600080fd5b5061065c60048036038101906106579190613894565b6116c4565b005b34801561066a57600080fd5b5061068560048036038101906106809190613962565b61175d565b005b34801561069357600080fd5b5061069c6117d9565b6040516106a9919061352e565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d491906137b2565b6117df565b005b3480156106e757600080fd5b5061070260048036038101906106fd919061342a565b61186e565b60405161070f91906133d2565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a919061342a565b611a8a565b005b34801561074d57600080fd5b50610756611bc9565b604051610763919061331e565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190613894565b611bdc565b005b3480156107a157600080fd5b506107bc60048036038101906107b791906137b2565b611c75565b005b3480156107ca57600080fd5b506107e560048036038101906107e09190613894565b611d04565b005b3480156107f357600080fd5b5061080e600480360381019061080991906139e5565b611d9d565b60405161081b919061331e565b60405180910390f35b34801561083057600080fd5b5061084b600480360381019061084691906137fb565b611e31565b005b34801561085957600080fd5b50610874600480360381019061086f919061342a565b611f28565b005b34801561088257600080fd5b5061089d60048036038101906108989190613a51565b611fae565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061097a575061097982612034565b5b9050919050565b60606002805461099090613aad565b80601f01602080910402602001604051908101604052809291908181526020018280546109bc90613aad565b8015610a095780601f106109de57610100808354040283529160200191610a09565b820191906000526020600020905b8154815290600101906020018083116109ec57829003601f168201915b5050505050905090565b6000610a1e8261209e565b610a54576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a9a826110f8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b01576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b206120ec565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b525750610b5081610b4b6120ec565b611d9d565b155b15610b89576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b948383836120f4565b505050565b600960149054906101000a900460ff1681565b6000610bb66121a6565b6001546000540303905090565b610bce8383836121ab565b505050565b60115481565b610d0581565b610be76120ec565b73ffffffffffffffffffffffffffffffffffffffff16610c056112f7565b73ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290613b2a565b60405180910390fd5b600260085403610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613b96565b60405180910390fd5b600260088190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610cce90613be7565b60006040518083038185875af1925050503d8060008114610d0b576040519150601f19603f3d011682016040523d82523d6000602084013e610d10565b606091505b5050905080610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90613c48565b60405180910390fd5b506001600881905550565b610d7a8383836040518060200160405280600081525061175d565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613cb4565b60405180910390fd5b600960169054906101000a900460ff16610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390613d20565b60405180910390fd5b600033604051602001610e4f9190613d88565b604051602081830303815290604052805190602001209050610eb5838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011548361265f565b610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb90613def565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613e5b565b60405180910390fd5b6000610f8b610bac565b9050600a54610d05610f9d9190613eaa565b600c5482610fab9190613ede565b1115610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390613f80565b60405180910390fd5b610ff833600c54612676565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b61105e6120ec565b73ffffffffffffffffffffffffffffffffffffffff1661107c6112f7565b73ffffffffffffffffffffffffffffffffffffffff16146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990613b2a565b60405180910390fd5b80600e90816110e1919061414c565b5050565b600960159054906101000a900460ff1681565b600061110382612694565b600001519050919050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117b576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6111eb6120ec565b73ffffffffffffffffffffffffffffffffffffffff166112096112f7565b73ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613b2a565b60405180910390fd5b6112696000612923565b565b600a5481565b6112796120ec565b73ffffffffffffffffffffffffffffffffffffffff166112976112f7565b73ffffffffffffffffffffffffffffffffffffffff16146112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490613b2a565b60405180910390fd5b80600c8190555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461133090613aad565b80601f016020809104026020016040519081016040528092919081815260200182805461135c90613aad565b80156113a95780601f1061137e576101008083540402835291602001916113a9565b820191906000526020600020905b81548152906001019060200180831161138c57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613cb4565b60405180910390fd5b600960159054906101000a900460ff16611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790613d20565b60405180910390fd5b600061147a610bac565b9050600a54610d0561148c9190613eaa565b82826114989190613ede565b11156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090613f80565b60405180910390fd5b3482600b546114e8919061421e565b1115611529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611520906142c4565b60405180910390fd5b6115333383612676565b61154982600b54611544919061421e565b6129e9565b5050565b6115556120ec565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115b9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006115c66120ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116736120ec565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116b8919061331e565b60405180910390a35050565b6116cc6120ec565b73ffffffffffffffffffffffffffffffffffffffff166116ea6112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790613b2a565b60405180910390fd5b80600960166101000a81548160ff02191690831515021790555050565b6117688484846121ab565b6117878373ffffffffffffffffffffffffffffffffffffffff16612a4e565b801561179c575061179a84848484612a71565b155b156117d3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600c5481565b6117e76120ec565b73ffffffffffffffffffffffffffffffffffffffff166118056112f7565b73ffffffffffffffffffffffffffffffffffffffff161461185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290613b2a565b60405180910390fd5b80600d908161186a919061414c565b5050565b60606118798261209e565b6118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af90614356565b60405180910390fd5b600960149054906101000a900460ff161561195f57600d80546118da90613aad565b80601f016020809104026020016040519081016040528092919081815260200182805461190690613aad565b80156119535780601f1061192857610100808354040283529160200191611953565b820191906000526020600020905b81548152906001019060200180831161193657829003601f168201915b50505050509050611a85565b600060106000848152602001908152602001600020805461197f90613aad565b80601f01602080910402602001604051908101604052809291908181526020018280546119ab90613aad565b80156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b505050505090506000611a09612bc1565b90506000815103611a1e578192505050611a85565b600082511115611a53578082604051602001611a3b9291906143b2565b60405160208183030381529060405292505050611a85565b80611a5d85612c53565b600f604051602001611a7193929190614459565b604051602081830303815290604052925050505b919050565b611a926120ec565b73ffffffffffffffffffffffffffffffffffffffff16611ab06112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90613b2a565b60405180910390fd5b600a54811115611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906144d6565b60405180910390fd5b6000611b55610bac565b9050610d058282611b669190613ede565b1115611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e90613f80565b60405180910390fd5b611bb13383612676565b81600a54611bbf9190613eaa565b600a819055505050565b600960169054906101000a900460ff1681565b611be46120ec565b73ffffffffffffffffffffffffffffffffffffffff16611c026112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90613b2a565b60405180910390fd5b80600960156101000a81548160ff02191690831515021790555050565b611c7d6120ec565b73ffffffffffffffffffffffffffffffffffffffff16611c9b6112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce890613b2a565b60405180910390fd5b80600f9081611d00919061414c565b5050565b611d0c6120ec565b73ffffffffffffffffffffffffffffffffffffffff16611d2a6112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790613b2a565b60405180910390fd5b80600960146101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e396120ec565b73ffffffffffffffffffffffffffffffffffffffff16611e576112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490613b2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390614568565b60405180910390fd5b611f2581612923565b50565b611f306120ec565b73ffffffffffffffffffffffffffffffffffffffff16611f4e6112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b90613b2a565b60405180910390fd5b80600b8190555050565b611fb66120ec565b73ffffffffffffffffffffffffffffffffffffffff16611fd46112f7565b73ffffffffffffffffffffffffffffffffffffffff161461202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190613b2a565b60405180910390fd5b8060118190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816120a96121a6565b111580156120b8575060005482105b80156120e5575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006121b682612694565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612221576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166122426120ec565b73ffffffffffffffffffffffffffffffffffffffff16148061227157506122708561226b6120ec565b611d9d565b5b806122b6575061227f6120ec565b73ffffffffffffffffffffffffffffffffffffffff1661229e84610a13565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806122ef576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612355576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123628585856001612db3565b61236e600084876120f4565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036125ed5760005482146125ec57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126588585856001612db9565b5050505050565b60008261266c8584612dbf565b1490509392505050565b612690828260405180602001604052806000815250612e34565b5050565b61269c613227565b6000829050806126aa6121a6565b111580156126b9575060005481105b156128ec576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516128ea57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127ce57809250505061291e565b5b6001156128e957818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128e457809250505061291e565b6127cf565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081346129f79190613eaa565b90506000811115612a4a573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a48573d6000803e3d6000fd5b505b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a976120ec565b8786866040518563ffffffff1660e01b8152600401612ab994939291906145dd565b6020604051808303816000875af1925050508015612af557506040513d601f19601f82011682018060405250810190612af2919061463e565b60015b612b6e573d8060008114612b25576040519150601f19603f3d011682016040523d82523d6000602084013e612b2a565b606091505b506000815103612b66576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600e8054612bd090613aad565b80601f0160208091040260200160405190810160405280929190818152602001828054612bfc90613aad565b8015612c495780601f10612c1e57610100808354040283529160200191612c49565b820191906000526020600020905b815481529060010190602001808311612c2c57829003601f168201915b5050505050905090565b606060008203612c9a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dae565b600082905060005b60008214612ccc578080612cb59061466b565b915050600a82612cc591906146e2565b9150612ca2565b60008167ffffffffffffffff811115612ce857612ce7613687565b5b6040519080825280601f01601f191660200182016040528015612d1a5781602001600182028036833780820191505090505b5090505b60008514612da757600182612d339190613eaa565b9150600a85612d429190614713565b6030612d4e9190613ede565b60f81b818381518110612d6457612d63614744565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612da091906146e2565b9450612d1e565b8093505050505b919050565b50505050565b50505050565b60008082905060005b8451811015612e29576000858281518110612de657612de5614744565b5b60200260200101519050808311612e0857612e018382612e46565b9250612e15565b612e128184612e46565b92505b508080612e219061466b565b915050612dc8565b508091505092915050565b612e418383836001612e5d565b505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612ec9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403612f03576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f106000868387612db3565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156130da57506130d98773ffffffffffffffffffffffffffffffffffffffff16612a4e565b5b1561319f575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461314f6000888480600101955088612a71565b613185576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036130e057826000541461319a57600080fd5b61320a565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082036131a0575b8160008190555050506132206000868387612db9565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132b38161327e565b81146132be57600080fd5b50565b6000813590506132d0816132aa565b92915050565b6000602082840312156132ec576132eb613274565b5b60006132fa848285016132c1565b91505092915050565b60008115159050919050565b61331881613303565b82525050565b6000602082019050613333600083018461330f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613373578082015181840152602081019050613358565b83811115613382576000848401525b50505050565b6000601f19601f8301169050919050565b60006133a482613339565b6133ae8185613344565b93506133be818560208601613355565b6133c781613388565b840191505092915050565b600060208201905081810360008301526133ec8184613399565b905092915050565b6000819050919050565b613407816133f4565b811461341257600080fd5b50565b600081359050613424816133fe565b92915050565b6000602082840312156134405761343f613274565b5b600061344e84828501613415565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061348282613457565b9050919050565b61349281613477565b82525050565b60006020820190506134ad6000830184613489565b92915050565b6134bc81613477565b81146134c757600080fd5b50565b6000813590506134d9816134b3565b92915050565b600080604083850312156134f6576134f5613274565b5b6000613504858286016134ca565b925050602061351585828601613415565b9150509250929050565b613528816133f4565b82525050565b6000602082019050613543600083018461351f565b92915050565b60008060006060848603121561356257613561613274565b5b6000613570868287016134ca565b9350506020613581868287016134ca565b925050604061359286828701613415565b9150509250925092565b6000819050919050565b6135af8161359c565b82525050565b60006020820190506135ca60008301846135a6565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126135f5576135f46135d0565b5b8235905067ffffffffffffffff811115613612576136116135d5565b5b60208301915083602082028301111561362e5761362d6135da565b5b9250929050565b6000806020838503121561364c5761364b613274565b5b600083013567ffffffffffffffff81111561366a57613669613279565b5b613676858286016135df565b92509250509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136bf82613388565b810181811067ffffffffffffffff821117156136de576136dd613687565b5b80604052505050565b60006136f161326a565b90506136fd82826136b6565b919050565b600067ffffffffffffffff82111561371d5761371c613687565b5b61372682613388565b9050602081019050919050565b82818337600083830152505050565b600061375561375084613702565b6136e7565b90508281526020810184848401111561377157613770613682565b5b61377c848285613733565b509392505050565b600082601f830112613799576137986135d0565b5b81356137a9848260208601613742565b91505092915050565b6000602082840312156137c8576137c7613274565b5b600082013567ffffffffffffffff8111156137e6576137e5613279565b5b6137f284828501613784565b91505092915050565b60006020828403121561381157613810613274565b5b600061381f848285016134ca565b91505092915050565b61383181613303565b811461383c57600080fd5b50565b60008135905061384e81613828565b92915050565b6000806040838503121561386b5761386a613274565b5b6000613879858286016134ca565b925050602061388a8582860161383f565b9150509250929050565b6000602082840312156138aa576138a9613274565b5b60006138b88482850161383f565b91505092915050565b600067ffffffffffffffff8211156138dc576138db613687565b5b6138e582613388565b9050602081019050919050565b6000613905613900846138c1565b6136e7565b90508281526020810184848401111561392157613920613682565b5b61392c848285613733565b509392505050565b600082601f830112613949576139486135d0565b5b81356139598482602086016138f2565b91505092915050565b6000806000806080858703121561397c5761397b613274565b5b600061398a878288016134ca565b945050602061399b878288016134ca565b93505060406139ac87828801613415565b925050606085013567ffffffffffffffff8111156139cd576139cc613279565b5b6139d987828801613934565b91505092959194509250565b600080604083850312156139fc576139fb613274565b5b6000613a0a858286016134ca565b9250506020613a1b858286016134ca565b9150509250929050565b613a2e8161359c565b8114613a3957600080fd5b50565b600081359050613a4b81613a25565b92915050565b600060208284031215613a6757613a66613274565b5b6000613a7584828501613a3c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ac557607f821691505b602082108103613ad857613ad7613a7e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b14602083613344565b9150613b1f82613ade565b602082019050919050565b60006020820190508181036000830152613b4381613b07565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613b80601f83613344565b9150613b8b82613b4a565b602082019050919050565b60006020820190508181036000830152613baf81613b73565b9050919050565b600081905092915050565b50565b6000613bd1600083613bb6565b9150613bdc82613bc1565b600082019050919050565b6000613bf282613bc4565b9150819050919050565b7f5769746864726177204661696c65640000000000000000000000000000000000600082015250565b6000613c32600f83613344565b9150613c3d82613bfc565b602082019050919050565b60006020820190508181036000830152613c6181613c25565b9050919050565b7f4f6e6c7920757365720000000000000000000000000000000000000000000000600082015250565b6000613c9e600983613344565b9150613ca982613c68565b602082019050919050565b60006020820190508181036000830152613ccd81613c91565b9050919050565b7f556e617661696c61626c65000000000000000000000000000000000000000000600082015250565b6000613d0a600b83613344565b9150613d1582613cd4565b602082019050919050565b60006020820190508181036000830152613d3981613cfd565b9050919050565b60008160601b9050919050565b6000613d5882613d40565b9050919050565b6000613d6a82613d4d565b9050919050565b613d82613d7d82613477565b613d5f565b82525050565b6000613d948284613d71565b60148201915081905092915050565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b6000613dd9600d83613344565b9150613de482613da3565b602082019050919050565b60006020820190508181036000830152613e0881613dcc565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b6000613e45600f83613344565b9150613e5082613e0f565b602082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eb5826133f4565b9150613ec0836133f4565b925082821015613ed357613ed2613e7b565b5b828203905092915050565b6000613ee9826133f4565b9150613ef4836133f4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f2957613f28613e7b565b5b828201905092915050565b7f4578636565646564206d6178696d756d20737570706c79000000000000000000600082015250565b6000613f6a601783613344565b9150613f7582613f34565b602082019050919050565b60006020820190508181036000830152613f9981613f5d565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613fc5565b61400c8683613fc5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061404961404461403f846133f4565b614024565b6133f4565b9050919050565b6000819050919050565b6140638361402e565b61407761406f82614050565b848454613fd2565b825550505050565b600090565b61408c61407f565b61409781848461405a565b505050565b5b818110156140bb576140b0600082614084565b60018101905061409d565b5050565b601f821115614100576140d181613fa0565b6140da84613fb5565b810160208510156140e9578190505b6140fd6140f585613fb5565b83018261409c565b50505b505050565b600082821c905092915050565b600061412360001984600802614105565b1980831691505092915050565b600061413c8383614112565b9150826002028217905092915050565b61415582613339565b67ffffffffffffffff81111561416e5761416d613687565b5b6141788254613aad565b6141838282856140bf565b600060209050601f8311600181146141b657600084156141a4578287015190505b6141ae8582614130565b865550614216565b601f1984166141c486613fa0565b60005b828110156141ec578489015182556001820191506020850194506020810190506141c7565b868310156142095784890151614205601f891682614112565b8355505b6001600288020188555050505b505050505050565b6000614229826133f4565b9150614234836133f4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561426d5761426c613e7b565b5b828202905092915050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b60006142ae601283613344565b91506142b982614278565b602082019050919050565b600060208201905081810360008301526142dd816142a1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614340602f83613344565b915061434b826142e4565b604082019050919050565b6000602082019050818103600083015261436f81614333565b9050919050565b600081905092915050565b600061438c82613339565b6143968185614376565b93506143a6818560208601613355565b80840191505092915050565b60006143be8285614381565b91506143ca8284614381565b91508190509392505050565b600081546143e381613aad565b6143ed8186614376565b94506001821660008114614408576001811461441d57614450565b60ff1983168652811515820286019350614450565b61442685613fa0565b60005b8381101561444857815481890152600182019150602081019050614429565b838801955050505b50505092915050565b60006144658286614381565b91506144718285614381565b915061447d82846143d6565b9150819050949350505050565b7f4578636565646564206d6178696d756d2072657461696e000000000000000000600082015250565b60006144c0601783613344565b91506144cb8261448a565b602082019050919050565b600060208201905081810360008301526144ef816144b3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614552602683613344565b915061455d826144f6565b604082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006145af82614588565b6145b98185614593565b93506145c9818560208601613355565b6145d281613388565b840191505092915050565b60006080820190506145f26000830187613489565b6145ff6020830186613489565b61460c604083018561351f565b818103606083015261461e81846145a4565b905095945050505050565b600081519050614638816132aa565b92915050565b60006020828403121561465457614653613274565b5b600061466284828501614629565b91505092915050565b6000614676826133f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146a8576146a7613e7b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146ed826133f4565b91506146f8836133f4565b925082614708576147076146b3565b5b828204905092915050565b600061471e826133f4565b9150614729836133f4565b925082614739576147386146b3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220b5cd8099e8fde5043d3b36f5f1a985fd2d490def8b11eaa22d58acbe21a2befb64736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102255760003560e01c8063817cc12d11610123578063c87b56dd116100ab578063e68a7cd11161006f578063e68a7cd1146107be578063e985e9c5146107e7578063f2fde38b14610824578063f4a0a5281461084d578063f95df4141461087657610225565b8063c87b56dd146106db578063c8a86c7c14610718578063d2d515cc14610741578063d2d65ff51461076c578063da3ef23f1461079557610225565b8063a22cb465116100f2578063a22cb4651461060c578063ae46e25214610635578063b88d4fde1461065e578063bcb49d9e14610687578063c4ee0fd9146106b257610225565b8063817cc12d146105715780638da5cb5b1461059a57806395d89b41146105c5578063a0712d68146105f057610225565b80633ccfd60b116101b15780636352211e116101755780636352211e1461048a5780636817c76c146104c757806370a08231146104f2578063715018a61461052f57806373a8f6b31461054657610225565b80633ccfd60b146103cd57806342842e0e146103e4578063537924ef1461040d57806355f804b314610436578063564566a81461045f57610225565b806313ffc9d6116101f857806313ffc9d6146102f857806318160ddd1461032357806323b872dd1461034e578063293108e01461037757806332cb6b0c146103a257610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906132d6565b61089f565b60405161025e919061331e565b60405180910390f35b34801561027357600080fd5b5061027c610981565b60405161028991906133d2565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b4919061342a565b610a13565b6040516102c69190613498565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906134df565b610a8f565b005b34801561030457600080fd5b5061030d610b99565b60405161031a919061331e565b60405180910390f35b34801561032f57600080fd5b50610338610bac565b604051610345919061352e565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613549565b610bc3565b005b34801561038357600080fd5b5061038c610bd3565b60405161039991906135b5565b60405180910390f35b3480156103ae57600080fd5b506103b7610bd9565b6040516103c4919061352e565b60405180910390f35b3480156103d957600080fd5b506103e2610bdf565b005b3480156103f057600080fd5b5061040b60048036038101906104069190613549565b610d5f565b005b34801561041957600080fd5b50610434600480360381019061042f9190613635565b610d7f565b005b34801561044257600080fd5b5061045d600480360381019061045891906137b2565b611056565b005b34801561046b57600080fd5b506104746110e5565b604051610481919061331e565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac919061342a565b6110f8565b6040516104be9190613498565b60405180910390f35b3480156104d357600080fd5b506104dc61110e565b6040516104e9919061352e565b60405180910390f35b3480156104fe57600080fd5b50610519600480360381019061051491906137fb565b611114565b604051610526919061352e565b60405180910390f35b34801561053b57600080fd5b506105446111e3565b005b34801561055257600080fd5b5061055b61126b565b604051610568919061352e565b60405180910390f35b34801561057d57600080fd5b506105986004803603810190610593919061342a565b611271565b005b3480156105a657600080fd5b506105af6112f7565b6040516105bc9190613498565b60405180910390f35b3480156105d157600080fd5b506105da611321565b6040516105e791906133d2565b60405180910390f35b61060a6004803603810190610605919061342a565b6113b3565b005b34801561061857600080fd5b50610633600480360381019061062e9190613854565b61154d565b005b34801561064157600080fd5b5061065c60048036038101906106579190613894565b6116c4565b005b34801561066a57600080fd5b5061068560048036038101906106809190613962565b61175d565b005b34801561069357600080fd5b5061069c6117d9565b6040516106a9919061352e565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d491906137b2565b6117df565b005b3480156106e757600080fd5b5061070260048036038101906106fd919061342a565b61186e565b60405161070f91906133d2565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a919061342a565b611a8a565b005b34801561074d57600080fd5b50610756611bc9565b604051610763919061331e565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e9190613894565b611bdc565b005b3480156107a157600080fd5b506107bc60048036038101906107b791906137b2565b611c75565b005b3480156107ca57600080fd5b506107e560048036038101906107e09190613894565b611d04565b005b3480156107f357600080fd5b5061080e600480360381019061080991906139e5565b611d9d565b60405161081b919061331e565b60405180910390f35b34801561083057600080fd5b5061084b600480360381019061084691906137fb565b611e31565b005b34801561085957600080fd5b50610874600480360381019061086f919061342a565b611f28565b005b34801561088257600080fd5b5061089d60048036038101906108989190613a51565b611fae565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061097a575061097982612034565b5b9050919050565b60606002805461099090613aad565b80601f01602080910402602001604051908101604052809291908181526020018280546109bc90613aad565b8015610a095780601f106109de57610100808354040283529160200191610a09565b820191906000526020600020905b8154815290600101906020018083116109ec57829003601f168201915b5050505050905090565b6000610a1e8261209e565b610a54576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a9a826110f8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b01576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b206120ec565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b525750610b5081610b4b6120ec565b611d9d565b155b15610b89576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b948383836120f4565b505050565b600960149054906101000a900460ff1681565b6000610bb66121a6565b6001546000540303905090565b610bce8383836121ab565b505050565b60115481565b610d0581565b610be76120ec565b73ffffffffffffffffffffffffffffffffffffffff16610c056112f7565b73ffffffffffffffffffffffffffffffffffffffff1614610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5290613b2a565b60405180910390fd5b600260085403610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613b96565b60405180910390fd5b600260088190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610cce90613be7565b60006040518083038185875af1925050503d8060008114610d0b576040519150601f19603f3d011682016040523d82523d6000602084013e610d10565b606091505b5050905080610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90613c48565b60405180910390fd5b506001600881905550565b610d7a8383836040518060200160405280600081525061175d565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613cb4565b60405180910390fd5b600960169054906101000a900460ff16610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390613d20565b60405180910390fd5b600033604051602001610e4f9190613d88565b604051602081830303815290604052805190602001209050610eb5838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011548361265f565b610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb90613def565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890613e5b565b60405180910390fd5b6000610f8b610bac565b9050600a54610d05610f9d9190613eaa565b600c5482610fab9190613ede565b1115610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390613f80565b60405180910390fd5b610ff833600c54612676565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b61105e6120ec565b73ffffffffffffffffffffffffffffffffffffffff1661107c6112f7565b73ffffffffffffffffffffffffffffffffffffffff16146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990613b2a565b60405180910390fd5b80600e90816110e1919061414c565b5050565b600960159054906101000a900460ff1681565b600061110382612694565b600001519050919050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117b576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6111eb6120ec565b73ffffffffffffffffffffffffffffffffffffffff166112096112f7565b73ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613b2a565b60405180910390fd5b6112696000612923565b565b600a5481565b6112796120ec565b73ffffffffffffffffffffffffffffffffffffffff166112976112f7565b73ffffffffffffffffffffffffffffffffffffffff16146112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490613b2a565b60405180910390fd5b80600c8190555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461133090613aad565b80601f016020809104026020016040519081016040528092919081815260200182805461135c90613aad565b80156113a95780601f1061137e576101008083540402835291602001916113a9565b820191906000526020600020905b81548152906001019060200180831161138c57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613cb4565b60405180910390fd5b600960159054906101000a900460ff16611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790613d20565b60405180910390fd5b600061147a610bac565b9050600a54610d0561148c9190613eaa565b82826114989190613ede565b11156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090613f80565b60405180910390fd5b3482600b546114e8919061421e565b1115611529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611520906142c4565b60405180910390fd5b6115333383612676565b61154982600b54611544919061421e565b6129e9565b5050565b6115556120ec565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115b9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006115c66120ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116736120ec565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116b8919061331e565b60405180910390a35050565b6116cc6120ec565b73ffffffffffffffffffffffffffffffffffffffff166116ea6112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790613b2a565b60405180910390fd5b80600960166101000a81548160ff02191690831515021790555050565b6117688484846121ab565b6117878373ffffffffffffffffffffffffffffffffffffffff16612a4e565b801561179c575061179a84848484612a71565b155b156117d3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600c5481565b6117e76120ec565b73ffffffffffffffffffffffffffffffffffffffff166118056112f7565b73ffffffffffffffffffffffffffffffffffffffff161461185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290613b2a565b60405180910390fd5b80600d908161186a919061414c565b5050565b60606118798261209e565b6118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af90614356565b60405180910390fd5b600960149054906101000a900460ff161561195f57600d80546118da90613aad565b80601f016020809104026020016040519081016040528092919081815260200182805461190690613aad565b80156119535780601f1061192857610100808354040283529160200191611953565b820191906000526020600020905b81548152906001019060200180831161193657829003601f168201915b50505050509050611a85565b600060106000848152602001908152602001600020805461197f90613aad565b80601f01602080910402602001604051908101604052809291908181526020018280546119ab90613aad565b80156119f85780601f106119cd576101008083540402835291602001916119f8565b820191906000526020600020905b8154815290600101906020018083116119db57829003601f168201915b505050505090506000611a09612bc1565b90506000815103611a1e578192505050611a85565b600082511115611a53578082604051602001611a3b9291906143b2565b60405160208183030381529060405292505050611a85565b80611a5d85612c53565b600f604051602001611a7193929190614459565b604051602081830303815290604052925050505b919050565b611a926120ec565b73ffffffffffffffffffffffffffffffffffffffff16611ab06112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90613b2a565b60405180910390fd5b600a54811115611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906144d6565b60405180910390fd5b6000611b55610bac565b9050610d058282611b669190613ede565b1115611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e90613f80565b60405180910390fd5b611bb13383612676565b81600a54611bbf9190613eaa565b600a819055505050565b600960169054906101000a900460ff1681565b611be46120ec565b73ffffffffffffffffffffffffffffffffffffffff16611c026112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90613b2a565b60405180910390fd5b80600960156101000a81548160ff02191690831515021790555050565b611c7d6120ec565b73ffffffffffffffffffffffffffffffffffffffff16611c9b6112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce890613b2a565b60405180910390fd5b80600f9081611d00919061414c565b5050565b611d0c6120ec565b73ffffffffffffffffffffffffffffffffffffffff16611d2a6112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790613b2a565b60405180910390fd5b80600960146101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e396120ec565b73ffffffffffffffffffffffffffffffffffffffff16611e576112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490613b2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390614568565b60405180910390fd5b611f2581612923565b50565b611f306120ec565b73ffffffffffffffffffffffffffffffffffffffff16611f4e6112f7565b73ffffffffffffffffffffffffffffffffffffffff1614611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b90613b2a565b60405180910390fd5b80600b8190555050565b611fb66120ec565b73ffffffffffffffffffffffffffffffffffffffff16611fd46112f7565b73ffffffffffffffffffffffffffffffffffffffff161461202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202190613b2a565b60405180910390fd5b8060118190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816120a96121a6565b111580156120b8575060005482105b80156120e5575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006121b682612694565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612221576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166122426120ec565b73ffffffffffffffffffffffffffffffffffffffff16148061227157506122708561226b6120ec565b611d9d565b5b806122b6575061227f6120ec565b73ffffffffffffffffffffffffffffffffffffffff1661229e84610a13565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806122ef576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612355576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123628585856001612db3565b61236e600084876120f4565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036125ed5760005482146125ec57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126588585856001612db9565b5050505050565b60008261266c8584612dbf565b1490509392505050565b612690828260405180602001604052806000815250612e34565b5050565b61269c613227565b6000829050806126aa6121a6565b111580156126b9575060005481105b156128ec576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516128ea57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127ce57809250505061291e565b5b6001156128e957818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128e457809250505061291e565b6127cf565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081346129f79190613eaa565b90506000811115612a4a573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a48573d6000803e3d6000fd5b505b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a976120ec565b8786866040518563ffffffff1660e01b8152600401612ab994939291906145dd565b6020604051808303816000875af1925050508015612af557506040513d601f19601f82011682018060405250810190612af2919061463e565b60015b612b6e573d8060008114612b25576040519150601f19603f3d011682016040523d82523d6000602084013e612b2a565b606091505b506000815103612b66576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600e8054612bd090613aad565b80601f0160208091040260200160405190810160405280929190818152602001828054612bfc90613aad565b8015612c495780601f10612c1e57610100808354040283529160200191612c49565b820191906000526020600020905b815481529060010190602001808311612c2c57829003601f168201915b5050505050905090565b606060008203612c9a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dae565b600082905060005b60008214612ccc578080612cb59061466b565b915050600a82612cc591906146e2565b9150612ca2565b60008167ffffffffffffffff811115612ce857612ce7613687565b5b6040519080825280601f01601f191660200182016040528015612d1a5781602001600182028036833780820191505090505b5090505b60008514612da757600182612d339190613eaa565b9150600a85612d429190614713565b6030612d4e9190613ede565b60f81b818381518110612d6457612d63614744565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612da091906146e2565b9450612d1e565b8093505050505b919050565b50505050565b50505050565b60008082905060005b8451811015612e29576000858281518110612de657612de5614744565b5b60200260200101519050808311612e0857612e018382612e46565b9250612e15565b612e128184612e46565b92505b508080612e219061466b565b915050612dc8565b508091505092915050565b612e418383836001612e5d565b505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612ec9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403612f03576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f106000868387612db3565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156130da57506130d98773ffffffffffffffffffffffffffffffffffffffff16612a4e565b5b1561319f575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461314f6000888480600101955088612a71565b613185576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082036130e057826000541461319a57600080fd5b61320a565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082036131a0575b8160008190555050506132206000868387612db9565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6132b38161327e565b81146132be57600080fd5b50565b6000813590506132d0816132aa565b92915050565b6000602082840312156132ec576132eb613274565b5b60006132fa848285016132c1565b91505092915050565b60008115159050919050565b61331881613303565b82525050565b6000602082019050613333600083018461330f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613373578082015181840152602081019050613358565b83811115613382576000848401525b50505050565b6000601f19601f8301169050919050565b60006133a482613339565b6133ae8185613344565b93506133be818560208601613355565b6133c781613388565b840191505092915050565b600060208201905081810360008301526133ec8184613399565b905092915050565b6000819050919050565b613407816133f4565b811461341257600080fd5b50565b600081359050613424816133fe565b92915050565b6000602082840312156134405761343f613274565b5b600061344e84828501613415565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061348282613457565b9050919050565b61349281613477565b82525050565b60006020820190506134ad6000830184613489565b92915050565b6134bc81613477565b81146134c757600080fd5b50565b6000813590506134d9816134b3565b92915050565b600080604083850312156134f6576134f5613274565b5b6000613504858286016134ca565b925050602061351585828601613415565b9150509250929050565b613528816133f4565b82525050565b6000602082019050613543600083018461351f565b92915050565b60008060006060848603121561356257613561613274565b5b6000613570868287016134ca565b9350506020613581868287016134ca565b925050604061359286828701613415565b9150509250925092565b6000819050919050565b6135af8161359c565b82525050565b60006020820190506135ca60008301846135a6565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126135f5576135f46135d0565b5b8235905067ffffffffffffffff811115613612576136116135d5565b5b60208301915083602082028301111561362e5761362d6135da565b5b9250929050565b6000806020838503121561364c5761364b613274565b5b600083013567ffffffffffffffff81111561366a57613669613279565b5b613676858286016135df565b92509250509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136bf82613388565b810181811067ffffffffffffffff821117156136de576136dd613687565b5b80604052505050565b60006136f161326a565b90506136fd82826136b6565b919050565b600067ffffffffffffffff82111561371d5761371c613687565b5b61372682613388565b9050602081019050919050565b82818337600083830152505050565b600061375561375084613702565b6136e7565b90508281526020810184848401111561377157613770613682565b5b61377c848285613733565b509392505050565b600082601f830112613799576137986135d0565b5b81356137a9848260208601613742565b91505092915050565b6000602082840312156137c8576137c7613274565b5b600082013567ffffffffffffffff8111156137e6576137e5613279565b5b6137f284828501613784565b91505092915050565b60006020828403121561381157613810613274565b5b600061381f848285016134ca565b91505092915050565b61383181613303565b811461383c57600080fd5b50565b60008135905061384e81613828565b92915050565b6000806040838503121561386b5761386a613274565b5b6000613879858286016134ca565b925050602061388a8582860161383f565b9150509250929050565b6000602082840312156138aa576138a9613274565b5b60006138b88482850161383f565b91505092915050565b600067ffffffffffffffff8211156138dc576138db613687565b5b6138e582613388565b9050602081019050919050565b6000613905613900846138c1565b6136e7565b90508281526020810184848401111561392157613920613682565b5b61392c848285613733565b509392505050565b600082601f830112613949576139486135d0565b5b81356139598482602086016138f2565b91505092915050565b6000806000806080858703121561397c5761397b613274565b5b600061398a878288016134ca565b945050602061399b878288016134ca565b93505060406139ac87828801613415565b925050606085013567ffffffffffffffff8111156139cd576139cc613279565b5b6139d987828801613934565b91505092959194509250565b600080604083850312156139fc576139fb613274565b5b6000613a0a858286016134ca565b9250506020613a1b858286016134ca565b9150509250929050565b613a2e8161359c565b8114613a3957600080fd5b50565b600081359050613a4b81613a25565b92915050565b600060208284031215613a6757613a66613274565b5b6000613a7584828501613a3c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ac557607f821691505b602082108103613ad857613ad7613a7e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b14602083613344565b9150613b1f82613ade565b602082019050919050565b60006020820190508181036000830152613b4381613b07565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613b80601f83613344565b9150613b8b82613b4a565b602082019050919050565b60006020820190508181036000830152613baf81613b73565b9050919050565b600081905092915050565b50565b6000613bd1600083613bb6565b9150613bdc82613bc1565b600082019050919050565b6000613bf282613bc4565b9150819050919050565b7f5769746864726177204661696c65640000000000000000000000000000000000600082015250565b6000613c32600f83613344565b9150613c3d82613bfc565b602082019050919050565b60006020820190508181036000830152613c6181613c25565b9050919050565b7f4f6e6c7920757365720000000000000000000000000000000000000000000000600082015250565b6000613c9e600983613344565b9150613ca982613c68565b602082019050919050565b60006020820190508181036000830152613ccd81613c91565b9050919050565b7f556e617661696c61626c65000000000000000000000000000000000000000000600082015250565b6000613d0a600b83613344565b9150613d1582613cd4565b602082019050919050565b60006020820190508181036000830152613d3981613cfd565b9050919050565b60008160601b9050919050565b6000613d5882613d40565b9050919050565b6000613d6a82613d4d565b9050919050565b613d82613d7d82613477565b613d5f565b82525050565b6000613d948284613d71565b60148201915081905092915050565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b6000613dd9600d83613344565b9150613de482613da3565b602082019050919050565b60006020820190508181036000830152613e0881613dcc565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b6000613e45600f83613344565b9150613e5082613e0f565b602082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eb5826133f4565b9150613ec0836133f4565b925082821015613ed357613ed2613e7b565b5b828203905092915050565b6000613ee9826133f4565b9150613ef4836133f4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f2957613f28613e7b565b5b828201905092915050565b7f4578636565646564206d6178696d756d20737570706c79000000000000000000600082015250565b6000613f6a601783613344565b9150613f7582613f34565b602082019050919050565b60006020820190508181036000830152613f9981613f5d565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026140027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613fc5565b61400c8683613fc5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061404961404461403f846133f4565b614024565b6133f4565b9050919050565b6000819050919050565b6140638361402e565b61407761406f82614050565b848454613fd2565b825550505050565b600090565b61408c61407f565b61409781848461405a565b505050565b5b818110156140bb576140b0600082614084565b60018101905061409d565b5050565b601f821115614100576140d181613fa0565b6140da84613fb5565b810160208510156140e9578190505b6140fd6140f585613fb5565b83018261409c565b50505b505050565b600082821c905092915050565b600061412360001984600802614105565b1980831691505092915050565b600061413c8383614112565b9150826002028217905092915050565b61415582613339565b67ffffffffffffffff81111561416e5761416d613687565b5b6141788254613aad565b6141838282856140bf565b600060209050601f8311600181146141b657600084156141a4578287015190505b6141ae8582614130565b865550614216565b601f1984166141c486613fa0565b60005b828110156141ec578489015182556001820191506020850194506020810190506141c7565b868310156142095784890151614205601f891682614112565b8355505b6001600288020188555050505b505050505050565b6000614229826133f4565b9150614234836133f4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561426d5761426c613e7b565b5b828202905092915050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b60006142ae601283613344565b91506142b982614278565b602082019050919050565b600060208201905081810360008301526142dd816142a1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614340602f83613344565b915061434b826142e4565b604082019050919050565b6000602082019050818103600083015261436f81614333565b9050919050565b600081905092915050565b600061438c82613339565b6143968185614376565b93506143a6818560208601613355565b80840191505092915050565b60006143be8285614381565b91506143ca8284614381565b91508190509392505050565b600081546143e381613aad565b6143ed8186614376565b94506001821660008114614408576001811461441d57614450565b60ff1983168652811515820286019350614450565b61442685613fa0565b60005b8381101561444857815481890152600182019150602081019050614429565b838801955050505b50505092915050565b60006144658286614381565b91506144718285614381565b915061447d82846143d6565b9150819050949350505050565b7f4578636565646564206d6178696d756d2072657461696e000000000000000000600082015250565b60006144c0601783613344565b91506144cb8261448a565b602082019050919050565b600060208201905081810360008301526144ef816144b3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614552602683613344565b915061455d826144f6565b604082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006145af82614588565b6145b98185614593565b93506145c9818560208601613355565b6145d281613388565b840191505092915050565b60006080820190506145f26000830187613489565b6145ff6020830186613489565b61460c604083018561351f565b818103606083015261461e81846145a4565b905095945050505050565b600081519050614638816132aa565b92915050565b60006020828403121561465457614653613274565b5b600061466284828501614629565b91505092915050565b6000614676826133f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146a8576146a7613e7b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146ed826133f4565b91506146f8836133f4565b925082614708576147076146b3565b5b828204905092915050565b600061471e826133f4565b9150614729836133f4565b925082614739576147386146b3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220b5cd8099e8fde5043d3b36f5f1a985fd2d490def8b11eaa22d58acbe21a2befb64736f6c634300080f0033
Deployed Bytecode Sourcemap
50049:4776:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29590:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32703:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34206:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33769:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50147:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28839:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35071:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52218:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50270:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54637:185;;;;;;;;;;;;;:::i;:::-;;35312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52449:673;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53745:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50185:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32511:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50356:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29959:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49048:103;;;;;;;;;;;;;:::i;:::-;;50318:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54482:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48397:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32872:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51522:452;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34482:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54114:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35568:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50401:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53637:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50664:733;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53150:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50224:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54253:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53863:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53995:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34840:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49306:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54372:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52317:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29590:305;29692:4;29744:25;29729:40;;;:11;:40;;;;:105;;;;29801:33;29786:48;;;:11;:48;;;;29729:105;:158;;;;29851:36;29875:11;29851:23;:36::i;:::-;29729:158;29709:178;;29590:305;;;:::o;32703:100::-;32757:13;32790:5;32783:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32703:100;:::o;34206:204::-;34274:7;34299:16;34307:7;34299;:16::i;:::-;34294:64;;34324:34;;;;;;;;;;;;;;34294:64;34378:15;:24;34394:7;34378:24;;;;;;;;;;;;;;;;;;;;;34371:31;;34206:204;;;:::o;33769:371::-;33842:13;33858:24;33874:7;33858:15;:24::i;:::-;33842:40;;33903:5;33897:11;;:2;:11;;;33893:48;;33917:24;;;;;;;;;;;;;;33893:48;33974:5;33958:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;33984:37;34001:5;34008:12;:10;:12::i;:::-;33984:16;:37::i;:::-;33983:38;33958:63;33954:138;;;34045:35;;;;;;;;;;;;;;33954:138;34104:28;34113:2;34117:7;34126:5;34104:8;:28::i;:::-;33831:309;33769:371;;:::o;50147:31::-;;;;;;;;;;;;;:::o;28839:303::-;28883:7;29108:15;:13;:15::i;:::-;29093:12;;29077:13;;:28;:46;29070:53;;28839:303;:::o;35071:170::-;35205:28;35215:4;35221:2;35225:7;35205:9;:28::i;:::-;35071:170;;;:::o;52218:34::-;;;;:::o;50270:41::-;50307:4;50270:41;:::o;54637:185::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23480:1:::1;24078:7;;:19:::0;24070:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23480:1;24211:7;:18;;;;54701:12:::2;54719:10;:15;;54742:21;54719:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54700:68;;;54787:7;54779:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;54689:133;23436:1:::1;24390:7;:22;;;;54637:185::o:0;35312:::-;35450:39;35467:4;35473:2;35477:7;35450:39;;;;;;;;;;;;:16;:39::i;:::-;35312:185;;;:::o;52449:673::-;51457:10;51444:23;;:9;:23;;;51436:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;52541:17:::1;;;;;;;;;;;52533:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52585:12;52627:10;52610:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;52600:39;;;;;;52585:54;;52672:58;52691:11;;52672:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52704:19;;52725:4;52672:18;:58::i;:::-;52650:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;52791:16;:28;52808:10;52791:28;;;;;;;;;;;;;;;;;;;;;;;;;52790:29;52782:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;52850:14;52867:13;:11;:13::i;:::-;52850:30;;52955:10;;50307:4;52942:23;;;;:::i;:::-;52922:16;;52913:6;:25;;;;:::i;:::-;:52;;52891:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;53029:39;53039:10;53051:16;;53029:9;:39::i;:::-;53110:4;53079:16;:28;53096:10;53079:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;52522:600;;52449:673:::0;;:::o;53745:110::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53834:13:::1;53824:7;:23;;;;;;:::i;:::-;;53745:110:::0;:::o;50185:32::-;;;;;;;;;;;;;:::o;32511:125::-;32575:7;32602:21;32615:7;32602:12;:21::i;:::-;:26;;;32595:33;;32511:125;;;:::o;50356:38::-;;;;:::o;29959:206::-;30023:7;30064:1;30047:19;;:5;:19;;;30043:60;;30075:28;;;;;;;;;;;;;;30043:60;30129:12;:19;30142:5;30129:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30121:36;;30114:43;;29959:206;;;:::o;49048:103::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49113:30:::1;49140:1;49113:18;:30::i;:::-;49048:103::o:0;50318:31::-;;;;:::o;54482:130::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54587:17:::1;54568:16;:36;;;;54482:130:::0;:::o;48397:87::-;48443:7;48470:6;;;;;;;;;;;48463:13;;48397:87;:::o;32872:104::-;32928:13;32961:7;32954:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32872:104;:::o;51522:452::-;51457:10;51444:23;;:9;:23;;;51436:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;51599:12:::1;;;;;;;;;;;51591:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;51638:14;51655:13;:11;:13::i;:::-;51638:30;;51735:10;;50307:4;51722:23;;;;:::i;:::-;51710:8;51701:6;:17;;;;:::i;:::-;:44;;51679:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;51839:9;51827:8;51815:9;;:20;;;;:::i;:::-;:33;;51807:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;51892:31;51902:10;51914:8;51892:9;:31::i;:::-;51934:32;51957:8;51945:9;;:20;;;;:::i;:::-;51934:10;:32::i;:::-;51580:394;51522:452:::0;:::o;34482:287::-;34593:12;:10;:12::i;:::-;34581:24;;:8;:24;;;34577:54;;34614:17;;;;;;;;;;;;;;34577:54;34689:8;34644:18;:32;34663:12;:10;:12::i;:::-;34644:32;;;;;;;;;;;;;;;:42;34677:8;34644:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34742:8;34713:48;;34728:12;:10;:12::i;:::-;34713:48;;;34752:8;34713:48;;;;;;:::i;:::-;;;;;;;;34482:287;;:::o;54114:131::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54219:18:::1;54199:17;;:38;;;;;;;;;;;;;;;;;;54114:131:::0;:::o;35568:369::-;35735:28;35745:4;35751:2;35755:7;35735:9;:28::i;:::-;35778:15;:2;:13;;;:15::i;:::-;:76;;;;;35798:56;35829:4;35835:2;35839:7;35848:5;35798:30;:56::i;:::-;35797:57;35778:76;35774:156;;;35878:40;;;;;;;;;;;;;;35774:156;35568:369;;;;:::o;50401:35::-;;;;:::o;53637:100::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53721:8:::1;53711:7;:18;;;;;;:::i;:::-;;53637:100:::0;:::o;50664:733::-;50782:13;50835:16;50843:7;50835;:16::i;:::-;50813:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;50941:12;;;;;;;;;;;50937:59;;;50977:7;50970:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50937:59;51006:23;51032:10;:19;51043:7;51032:19;;;;;;;;;;;51006:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51062:18;51083:10;:8;:10::i;:::-;51062:31;;51130:1;51114:4;51108:18;:23;51104:72;;51155:9;51148:16;;;;;;51104:72;51216:1;51196:9;51190:23;:27;51186:108;;;51265:4;51271:9;51248:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51234:48;;;;;;51186:108;51348:4;51354:18;:7;:16;:18::i;:::-;51374:13;51331:57;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51304:85;;;;50664:733;;;;:::o;53150:342::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53238:10:::1;;53226:8;:22;;53218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;53287:14;53304:13;:11;:13::i;:::-;53287:30;;50307:4;53345:8;53336:6;:17;;;;:::i;:::-;:31;;53328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;53408:31;53418:10;53430:8;53408:9;:31::i;:::-;53476:8;53463:10;;:21;;;;:::i;:::-;53450:10;:34;;;;53207:285;53150:342:::0;:::o;50224:37::-;;;;;;;;;;;;;:::o;54253:111::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54343:13:::1;54328:12;;:28;;;;;;;;;;;;;;;;;;54253:111:::0;:::o;53863:124::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53965:14:::1;53949:13;:30;;;;;;:::i;:::-;;53863:124:::0;:::o;53995:111::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54085:13:::1;54070:12;;:28;;;;;;;;;;;;;;;;;;53995:111:::0;:::o;34840:164::-;34937:4;34961:18;:25;34980:5;34961:25;;;;;;;;;;;;;;;:35;34987:8;34961:35;;;;;;;;;;;;;;;;;;;;;;;;;34954:42;;34840:164;;;;:::o;49306:201::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49415:1:::1;49395:22;;:8;:22;;::::0;49387:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;49471:28;49490:8;49471:18;:28::i;:::-;49306:201:::0;:::o;54372:102::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54456:10:::1;54444:9;:22;;;;54372:102:::0;:::o;52317:124::-;48628:12;:10;:12::i;:::-;48617:23;;:7;:5;:7::i;:::-;:23;;;48609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52422:11:::1;52400:19;:33;;;;52317:124:::0;:::o;11316:157::-;11401:4;11440:25;11425:40;;;:11;:40;;;;11418:47;;11316:157;;;:::o;36192:174::-;36249:4;36292:7;36273:15;:13;:15::i;:::-;:26;;:53;;;;;36313:13;;36303:7;:23;36273:53;:85;;;;;36331:11;:20;36343:7;36331:20;;;;;;;;;;;:27;;;;;;;;;;;;36330:28;36273:85;36266:92;;36192:174;;;:::o;25106:98::-;25159:7;25186:10;25179:17;;25106:98;:::o;44349:196::-;44491:2;44464:15;:24;44480:7;44464:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44529:7;44525:2;44509:28;;44518:5;44509:28;;;;;;;;;;;;44349:196;;;:::o;28613:92::-;28669:7;28613:92;:::o;39292:2130::-;39407:35;39445:21;39458:7;39445:12;:21::i;:::-;39407:59;;39505:4;39483:26;;:13;:18;;;:26;;;39479:67;;39518:28;;;;;;;;;;;;;;39479:67;39559:22;39601:4;39585:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;39622:36;39639:4;39645:12;:10;:12::i;:::-;39622:16;:36::i;:::-;39585:73;:126;;;;39699:12;:10;:12::i;:::-;39675:36;;:20;39687:7;39675:11;:20::i;:::-;:36;;;39585:126;39559:153;;39730:17;39725:66;;39756:35;;;;;;;;;;;;;;39725:66;39820:1;39806:16;;:2;:16;;;39802:52;;39831:23;;;;;;;;;;;;;;39802:52;39867:43;39889:4;39895:2;39899:7;39908:1;39867:21;:43::i;:::-;39975:35;39992:1;39996:7;40005:4;39975:8;:35::i;:::-;40336:1;40306:12;:18;40319:4;40306:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40380:1;40352:12;:16;40365:2;40352:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40398:31;40432:11;:20;40444:7;40432:20;;;;;;;;;;;40398:54;;40483:2;40467:8;:13;;;:18;;;;;;;;;;;;;;;;;;40533:15;40500:8;:23;;;:49;;;;;;;;;;;;;;;;;;40801:19;40833:1;40823:7;:11;40801:33;;40849:31;40883:11;:24;40895:11;40883:24;;;;;;;;;;;40849:58;;40951:1;40926:27;;:8;:13;;;;;;;;;;;;:27;;;40922:384;;41136:13;;41121:11;:28;41117:174;;41190:4;41174:8;:13;;;:20;;;;;;;;;;;;;;;;;;41243:13;:28;;;41217:8;:23;;;:54;;;;;;;;;;;;;;;;;;41117:174;40922:384;40281:1036;;;41353:7;41349:2;41334:27;;41343:4;41334:27;;;;;;;;;;;;41372:42;41393:4;41399:2;41403:7;41412:1;41372:20;:42::i;:::-;39396:2026;;39292:2130;;;:::o;18078:190::-;18203:4;18256;18227:25;18240:5;18247:4;18227:12;:25::i;:::-;:33;18220:40;;18078:190;;;;;:::o;36374:104::-;36443:27;36453:2;36457:8;36443:27;;;;;;;;;;;;:9;:27::i;:::-;36374:104;;:::o;31340:1109::-;31402:21;;:::i;:::-;31436:12;31451:7;31436:22;;31519:4;31500:15;:13;:15::i;:::-;:23;;:47;;;;;31534:13;;31527:4;:20;31500:47;31496:886;;;31568:31;31602:11;:17;31614:4;31602:17;;;;;;;;;;;31568:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31643:9;:16;;;31638:729;;31714:1;31688:28;;:9;:14;;;:28;;;31684:101;;31752:9;31745:16;;;;;;31684:101;32087:261;32094:4;32087:261;;;32127:6;;;;;;;;32172:11;:17;32184:4;32172:17;;;;;;;;;;;32160:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32246:1;32220:28;;:9;:14;;;:28;;;32216:109;;32288:9;32281:16;;;;;;32216:109;32087:261;;;31638:729;31549:833;31496:886;32410:31;;;;;;;;;;;;;;31340:1109;;;;:::o;49667:191::-;49741:16;49760:6;;;;;;;;;;;49741:25;;49786:8;49777:6;;:17;;;;;;;;;;;;;;;;;;49841:8;49810:40;;49831:8;49810:40;;;;;;;;;;;;49730:128;49667:191;:::o;52002:185::-;52056:14;52085:5;52073:9;:17;;;;:::i;:::-;52056:34;;52114:1;52105:6;:10;52101:79;;;52140:10;52132:28;;:36;52161:6;52132:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52101:79;52045:142;52002:185;:::o;1233:326::-;1293:4;1550:1;1528:7;:19;;;:23;1521:30;;1233:326;;;:::o;45037:667::-;45200:4;45237:2;45221:36;;;45258:12;:10;:12::i;:::-;45272:4;45278:7;45287:5;45221:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45217:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45472:1;45455:6;:13;:18;45451:235;;45501:40;;;;;;;;;;;;;;45451:235;45644:6;45638:13;45629:6;45625:2;45621:15;45614:38;45217:480;45350:45;;;45340:55;;;:6;:55;;;;45333:62;;;45037:667;;;;;;:::o;53521:108::-;53581:13;53614:7;53607:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53521:108;:::o;19909:723::-;19965:13;20195:1;20186:5;:10;20182:53;;20213:10;;;;;;;;;;;;;;;;;;;;;20182:53;20245:12;20260:5;20245:20;;20276:14;20301:78;20316:1;20308:4;:9;20301:78;;20334:8;;;;;:::i;:::-;;;;20365:2;20357:10;;;;;:::i;:::-;;;20301:78;;;20389:19;20421:6;20411:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20389:39;;20439:154;20455:1;20446:5;:10;20439:154;;20483:1;20473:11;;;;;:::i;:::-;;;20550:2;20542:5;:10;;;;:::i;:::-;20529:2;:24;;;;:::i;:::-;20516:39;;20499:6;20506;20499:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;20579:2;20570:11;;;;;:::i;:::-;;;20439:154;;;20617:6;20603:21;;;;;19909:723;;;;:::o;46352:159::-;;;;;:::o;47170:158::-;;;;;:::o;18630:675::-;18713:7;18733:20;18756:4;18733:27;;18776:9;18771:497;18795:5;:12;18791:1;:16;18771:497;;;18829:20;18852:5;18858:1;18852:8;;;;;;;;:::i;:::-;;;;;;;;18829:31;;18895:12;18879;:28;18875:382;;19022:42;19037:12;19051;19022:14;:42::i;:::-;19007:57;;18875:382;;;19199:42;19214:12;19228;19199:14;:42::i;:::-;19184:57;;18875:382;18814:454;18809:3;;;;;:::i;:::-;;;;18771:497;;;;19285:12;19278:19;;;18630:675;;;;:::o;36841:163::-;36964:32;36970:2;36974:8;36984:5;36991:4;36964:5;:32::i;:::-;36841:163;;;:::o;19313:224::-;19381:13;19444:1;19438:4;19431:15;19473:1;19467:4;19460:15;19514:4;19508;19498:21;19489:30;;19313:224;;;;:::o;37263:1775::-;37402:20;37425:13;;37402:36;;37467:1;37453:16;;:2;:16;;;37449:48;;37478:19;;;;;;;;;;;;;;37449:48;37524:1;37512:8;:13;37508:44;;37534:18;;;;;;;;;;;;;;37508:44;37565:61;37595:1;37599:2;37603:12;37617:8;37565:21;:61::i;:::-;37938:8;37903:12;:16;37916:2;37903:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38002:8;37962:12;:16;37975:2;37962:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38061:2;38028:11;:25;38040:12;38028:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;38128:15;38078:11;:25;38090:12;38078:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;38161:20;38184:12;38161:35;;38211:11;38240:8;38225:12;:23;38211:37;;38269:4;:23;;;;;38277:15;:2;:13;;;:15::i;:::-;38269:23;38265:641;;;38313:314;38369:12;38365:2;38344:38;;38361:1;38344:38;;;;;;;;;;;;38410:69;38449:1;38453:2;38457:14;;;;;;38473:5;38410:30;:69::i;:::-;38405:174;;38515:40;;;;;;;;;;;;;;38405:174;38622:3;38606:12;:19;38313:314;;38708:12;38691:13;;:29;38687:43;;38722:8;;;38687:43;38265:641;;;38771:120;38827:14;;;;;;38823:2;38802:40;;38819:1;38802:40;;;;;;;;;;;;38886:3;38870:12;:19;38771:120;;38265:641;38936:12;38920:13;:28;;;;37878:1082;;38970:60;38999:1;39003:2;39007:12;39021:8;38970:20;:60::i;:::-;37391:1647;37263:1775;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:77::-;5952:7;5981:5;5970:16;;5915:77;;;:::o;5998:118::-;6085:24;6103:5;6085:24;:::i;:::-;6080:3;6073:37;5998:118;;:::o;6122:222::-;6215:4;6253:2;6242:9;6238:18;6230:26;;6266:71;6334:1;6323:9;6319:17;6310:6;6266:71;:::i;:::-;6122:222;;;;:::o;6350:117::-;6459:1;6456;6449:12;6473:117;6582:1;6579;6572:12;6596:117;6705:1;6702;6695:12;6736:568;6809:8;6819:6;6869:3;6862:4;6854:6;6850:17;6846:27;6836:122;;6877:79;;:::i;:::-;6836:122;6990:6;6977:20;6967:30;;7020:18;7012:6;7009:30;7006:117;;;7042:79;;:::i;:::-;7006:117;7156:4;7148:6;7144:17;7132:29;;7210:3;7202:4;7194:6;7190:17;7180:8;7176:32;7173:41;7170:128;;;7217:79;;:::i;:::-;7170:128;6736:568;;;;;:::o;7310:559::-;7396:6;7404;7453:2;7441:9;7432:7;7428:23;7424:32;7421:119;;;7459:79;;:::i;:::-;7421:119;7607:1;7596:9;7592:17;7579:31;7637:18;7629:6;7626:30;7623:117;;;7659:79;;:::i;:::-;7623:117;7772:80;7844:7;7835:6;7824:9;7820:22;7772:80;:::i;:::-;7754:98;;;;7550:312;7310:559;;;;;:::o;7875:117::-;7984:1;7981;7974:12;7998:180;8046:77;8043:1;8036:88;8143:4;8140:1;8133:15;8167:4;8164:1;8157:15;8184:281;8267:27;8289:4;8267:27;:::i;:::-;8259:6;8255:40;8397:6;8385:10;8382:22;8361:18;8349:10;8346:34;8343:62;8340:88;;;8408:18;;:::i;:::-;8340:88;8448:10;8444:2;8437:22;8227:238;8184:281;;:::o;8471:129::-;8505:6;8532:20;;:::i;:::-;8522:30;;8561:33;8589:4;8581:6;8561:33;:::i;:::-;8471:129;;;:::o;8606:308::-;8668:4;8758:18;8750:6;8747:30;8744:56;;;8780:18;;:::i;:::-;8744:56;8818:29;8840:6;8818:29;:::i;:::-;8810:37;;8902:4;8896;8892:15;8884:23;;8606:308;;;:::o;8920:154::-;9004:6;8999:3;8994;8981:30;9066:1;9057:6;9052:3;9048:16;9041:27;8920:154;;;:::o;9080:412::-;9158:5;9183:66;9199:49;9241:6;9199:49;:::i;:::-;9183:66;:::i;:::-;9174:75;;9272:6;9265:5;9258:21;9310:4;9303:5;9299:16;9348:3;9339:6;9334:3;9330:16;9327:25;9324:112;;;9355:79;;:::i;:::-;9324:112;9445:41;9479:6;9474:3;9469;9445:41;:::i;:::-;9164:328;9080:412;;;;;:::o;9512:340::-;9568:5;9617:3;9610:4;9602:6;9598:17;9594:27;9584:122;;9625:79;;:::i;:::-;9584:122;9742:6;9729:20;9767:79;9842:3;9834:6;9827:4;9819:6;9815:17;9767:79;:::i;:::-;9758:88;;9574:278;9512:340;;;;:::o;9858:509::-;9927:6;9976:2;9964:9;9955:7;9951:23;9947:32;9944:119;;;9982:79;;:::i;:::-;9944:119;10130:1;10119:9;10115:17;10102:31;10160:18;10152:6;10149:30;10146:117;;;10182:79;;:::i;:::-;10146:117;10287:63;10342:7;10333:6;10322:9;10318:22;10287:63;:::i;:::-;10277:73;;10073:287;9858:509;;;;:::o;10373:329::-;10432:6;10481:2;10469:9;10460:7;10456:23;10452:32;10449:119;;;10487:79;;:::i;:::-;10449:119;10607:1;10632:53;10677:7;10668:6;10657:9;10653:22;10632:53;:::i;:::-;10622:63;;10578:117;10373:329;;;;:::o;10708:116::-;10778:21;10793:5;10778:21;:::i;:::-;10771:5;10768:32;10758:60;;10814:1;10811;10804:12;10758:60;10708:116;:::o;10830:133::-;10873:5;10911:6;10898:20;10889:29;;10927:30;10951:5;10927:30;:::i;:::-;10830:133;;;;:::o;10969:468::-;11034:6;11042;11091:2;11079:9;11070:7;11066:23;11062:32;11059:119;;;11097:79;;:::i;:::-;11059:119;11217:1;11242:53;11287:7;11278:6;11267:9;11263:22;11242:53;:::i;:::-;11232:63;;11188:117;11344:2;11370:50;11412:7;11403:6;11392:9;11388:22;11370:50;:::i;:::-;11360:60;;11315:115;10969:468;;;;;:::o;11443:323::-;11499:6;11548:2;11536:9;11527:7;11523:23;11519:32;11516:119;;;11554:79;;:::i;:::-;11516:119;11674:1;11699:50;11741:7;11732:6;11721:9;11717:22;11699:50;:::i;:::-;11689:60;;11645:114;11443:323;;;;:::o;11772:307::-;11833:4;11923:18;11915:6;11912:30;11909:56;;;11945:18;;:::i;:::-;11909:56;11983:29;12005:6;11983:29;:::i;:::-;11975:37;;12067:4;12061;12057:15;12049:23;;11772:307;;;:::o;12085:410::-;12162:5;12187:65;12203:48;12244:6;12203:48;:::i;:::-;12187:65;:::i;:::-;12178:74;;12275:6;12268:5;12261:21;12313:4;12306:5;12302:16;12351:3;12342:6;12337:3;12333:16;12330:25;12327:112;;;12358:79;;:::i;:::-;12327:112;12448:41;12482:6;12477:3;12472;12448:41;:::i;:::-;12168:327;12085:410;;;;;:::o;12514:338::-;12569:5;12618:3;12611:4;12603:6;12599:17;12595:27;12585:122;;12626:79;;:::i;:::-;12585:122;12743:6;12730:20;12768:78;12842:3;12834:6;12827:4;12819:6;12815:17;12768:78;:::i;:::-;12759:87;;12575:277;12514:338;;;;:::o;12858:943::-;12953:6;12961;12969;12977;13026:3;13014:9;13005:7;13001:23;12997:33;12994:120;;;13033:79;;:::i;:::-;12994:120;13153:1;13178:53;13223:7;13214:6;13203:9;13199:22;13178:53;:::i;:::-;13168:63;;13124:117;13280:2;13306:53;13351:7;13342:6;13331:9;13327:22;13306:53;:::i;:::-;13296:63;;13251:118;13408:2;13434:53;13479:7;13470:6;13459:9;13455:22;13434:53;:::i;:::-;13424:63;;13379:118;13564:2;13553:9;13549:18;13536:32;13595:18;13587:6;13584:30;13581:117;;;13617:79;;:::i;:::-;13581:117;13722:62;13776:7;13767:6;13756:9;13752:22;13722:62;:::i;:::-;13712:72;;13507:287;12858:943;;;;;;;:::o;13807:474::-;13875:6;13883;13932:2;13920:9;13911:7;13907:23;13903:32;13900:119;;;13938:79;;:::i;:::-;13900:119;14058:1;14083:53;14128:7;14119:6;14108:9;14104:22;14083:53;:::i;:::-;14073:63;;14029:117;14185:2;14211:53;14256:7;14247:6;14236:9;14232:22;14211:53;:::i;:::-;14201:63;;14156:118;13807:474;;;;;:::o;14287:122::-;14360:24;14378:5;14360:24;:::i;:::-;14353:5;14350:35;14340:63;;14399:1;14396;14389:12;14340:63;14287:122;:::o;14415:139::-;14461:5;14499:6;14486:20;14477:29;;14515:33;14542:5;14515:33;:::i;:::-;14415:139;;;;:::o;14560:329::-;14619:6;14668:2;14656:9;14647:7;14643:23;14639:32;14636:119;;;14674:79;;:::i;:::-;14636:119;14794:1;14819:53;14864:7;14855:6;14844:9;14840:22;14819:53;:::i;:::-;14809:63;;14765:117;14560:329;;;;:::o;14895:180::-;14943:77;14940:1;14933:88;15040:4;15037:1;15030:15;15064:4;15061:1;15054:15;15081:320;15125:6;15162:1;15156:4;15152:12;15142:22;;15209:1;15203:4;15199:12;15230:18;15220:81;;15286:4;15278:6;15274:17;15264:27;;15220:81;15348:2;15340:6;15337:14;15317:18;15314:38;15311:84;;15367:18;;:::i;:::-;15311:84;15132:269;15081:320;;;:::o;15407:182::-;15547:34;15543:1;15535:6;15531:14;15524:58;15407:182;:::o;15595:366::-;15737:3;15758:67;15822:2;15817:3;15758:67;:::i;:::-;15751:74;;15834:93;15923:3;15834:93;:::i;:::-;15952:2;15947:3;15943:12;15936:19;;15595:366;;;:::o;15967:419::-;16133:4;16171:2;16160:9;16156:18;16148:26;;16220:9;16214:4;16210:20;16206:1;16195:9;16191:17;16184:47;16248:131;16374:4;16248:131;:::i;:::-;16240:139;;15967:419;;;:::o;16392:181::-;16532:33;16528:1;16520:6;16516:14;16509:57;16392:181;:::o;16579:366::-;16721:3;16742:67;16806:2;16801:3;16742:67;:::i;:::-;16735:74;;16818:93;16907:3;16818:93;:::i;:::-;16936:2;16931:3;16927:12;16920:19;;16579:366;;;:::o;16951:419::-;17117:4;17155:2;17144:9;17140:18;17132:26;;17204:9;17198:4;17194:20;17190:1;17179:9;17175:17;17168:47;17232:131;17358:4;17232:131;:::i;:::-;17224:139;;16951:419;;;:::o;17376:147::-;17477:11;17514:3;17499:18;;17376:147;;;;:::o;17529:114::-;;:::o;17649:398::-;17808:3;17829:83;17910:1;17905:3;17829:83;:::i;:::-;17822:90;;17921:93;18010:3;17921:93;:::i;:::-;18039:1;18034:3;18030:11;18023:18;;17649:398;;;:::o;18053:379::-;18237:3;18259:147;18402:3;18259:147;:::i;:::-;18252:154;;18423:3;18416:10;;18053:379;;;:::o;18438:165::-;18578:17;18574:1;18566:6;18562:14;18555:41;18438:165;:::o;18609:366::-;18751:3;18772:67;18836:2;18831:3;18772:67;:::i;:::-;18765:74;;18848:93;18937:3;18848:93;:::i;:::-;18966:2;18961:3;18957:12;18950:19;;18609:366;;;:::o;18981:419::-;19147:4;19185:2;19174:9;19170:18;19162:26;;19234:9;19228:4;19224:20;19220:1;19209:9;19205:17;19198:47;19262:131;19388:4;19262:131;:::i;:::-;19254:139;;18981:419;;;:::o;19406:159::-;19546:11;19542:1;19534:6;19530:14;19523:35;19406:159;:::o;19571:365::-;19713:3;19734:66;19798:1;19793:3;19734:66;:::i;:::-;19727:73;;19809:93;19898:3;19809:93;:::i;:::-;19927:2;19922:3;19918:12;19911:19;;19571:365;;;:::o;19942:419::-;20108:4;20146:2;20135:9;20131:18;20123:26;;20195:9;20189:4;20185:20;20181:1;20170:9;20166:17;20159:47;20223:131;20349:4;20223:131;:::i;:::-;20215:139;;19942:419;;;:::o;20367:161::-;20507:13;20503:1;20495:6;20491:14;20484:37;20367:161;:::o;20534:366::-;20676:3;20697:67;20761:2;20756:3;20697:67;:::i;:::-;20690:74;;20773:93;20862:3;20773:93;:::i;:::-;20891:2;20886:3;20882:12;20875:19;;20534:366;;;:::o;20906:419::-;21072:4;21110:2;21099:9;21095:18;21087:26;;21159:9;21153:4;21149:20;21145:1;21134:9;21130:17;21123:47;21187:131;21313:4;21187:131;:::i;:::-;21179:139;;20906:419;;;:::o;21331:94::-;21364:8;21412:5;21408:2;21404:14;21383:35;;21331:94;;;:::o;21431:::-;21470:7;21499:20;21513:5;21499:20;:::i;:::-;21488:31;;21431:94;;;:::o;21531:100::-;21570:7;21599:26;21619:5;21599:26;:::i;:::-;21588:37;;21531:100;;;:::o;21637:157::-;21742:45;21762:24;21780:5;21762:24;:::i;:::-;21742:45;:::i;:::-;21737:3;21730:58;21637:157;;:::o;21800:256::-;21912:3;21927:75;21998:3;21989:6;21927:75;:::i;:::-;22027:2;22022:3;22018:12;22011:19;;22047:3;22040:10;;21800:256;;;;:::o;22062:163::-;22202:15;22198:1;22190:6;22186:14;22179:39;22062:163;:::o;22231:366::-;22373:3;22394:67;22458:2;22453:3;22394:67;:::i;:::-;22387:74;;22470:93;22559:3;22470:93;:::i;:::-;22588:2;22583:3;22579:12;22572:19;;22231:366;;;:::o;22603:419::-;22769:4;22807:2;22796:9;22792:18;22784:26;;22856:9;22850:4;22846:20;22842:1;22831:9;22827:17;22820:47;22884:131;23010:4;22884:131;:::i;:::-;22876:139;;22603:419;;;:::o;23028:165::-;23168:17;23164:1;23156:6;23152:14;23145:41;23028:165;:::o;23199:366::-;23341:3;23362:67;23426:2;23421:3;23362:67;:::i;:::-;23355:74;;23438:93;23527:3;23438:93;:::i;:::-;23556:2;23551:3;23547:12;23540:19;;23199:366;;;:::o;23571:419::-;23737:4;23775:2;23764:9;23760:18;23752:26;;23824:9;23818:4;23814:20;23810:1;23799:9;23795:17;23788:47;23852:131;23978:4;23852:131;:::i;:::-;23844:139;;23571:419;;;:::o;23996:180::-;24044:77;24041:1;24034:88;24141:4;24138:1;24131:15;24165:4;24162:1;24155:15;24182:191;24222:4;24242:20;24260:1;24242:20;:::i;:::-;24237:25;;24276:20;24294:1;24276:20;:::i;:::-;24271:25;;24315:1;24312;24309:8;24306:34;;;24320:18;;:::i;:::-;24306:34;24365:1;24362;24358:9;24350:17;;24182:191;;;;:::o;24379:305::-;24419:3;24438:20;24456:1;24438:20;:::i;:::-;24433:25;;24472:20;24490:1;24472:20;:::i;:::-;24467:25;;24626:1;24558:66;24554:74;24551:1;24548:81;24545:107;;;24632:18;;:::i;:::-;24545:107;24676:1;24673;24669:9;24662:16;;24379:305;;;;:::o;24690:173::-;24830:25;24826:1;24818:6;24814:14;24807:49;24690:173;:::o;24869:366::-;25011:3;25032:67;25096:2;25091:3;25032:67;:::i;:::-;25025:74;;25108:93;25197:3;25108:93;:::i;:::-;25226:2;25221:3;25217:12;25210:19;;24869:366;;;:::o;25241:419::-;25407:4;25445:2;25434:9;25430:18;25422:26;;25494:9;25488:4;25484:20;25480:1;25469:9;25465:17;25458:47;25522:131;25648:4;25522:131;:::i;:::-;25514:139;;25241:419;;;:::o;25666:141::-;25715:4;25738:3;25730:11;;25761:3;25758:1;25751:14;25795:4;25792:1;25782:18;25774:26;;25666:141;;;:::o;25813:93::-;25850:6;25897:2;25892;25885:5;25881:14;25877:23;25867:33;;25813:93;;;:::o;25912:107::-;25956:8;26006:5;26000:4;25996:16;25975:37;;25912:107;;;;:::o;26025:393::-;26094:6;26144:1;26132:10;26128:18;26167:97;26197:66;26186:9;26167:97;:::i;:::-;26285:39;26315:8;26304:9;26285:39;:::i;:::-;26273:51;;26357:4;26353:9;26346:5;26342:21;26333:30;;26406:4;26396:8;26392:19;26385:5;26382:30;26372:40;;26101:317;;26025:393;;;;;:::o;26424:60::-;26452:3;26473:5;26466:12;;26424:60;;;:::o;26490:142::-;26540:9;26573:53;26591:34;26600:24;26618:5;26600:24;:::i;:::-;26591:34;:::i;:::-;26573:53;:::i;:::-;26560:66;;26490:142;;;:::o;26638:75::-;26681:3;26702:5;26695:12;;26638:75;;;:::o;26719:269::-;26829:39;26860:7;26829:39;:::i;:::-;26890:91;26939:41;26963:16;26939:41;:::i;:::-;26931:6;26924:4;26918:11;26890:91;:::i;:::-;26884:4;26877:105;26795:193;26719:269;;;:::o;26994:73::-;27039:3;26994:73;:::o;27073:189::-;27150:32;;:::i;:::-;27191:65;27249:6;27241;27235:4;27191:65;:::i;:::-;27126:136;27073:189;;:::o;27268:186::-;27328:120;27345:3;27338:5;27335:14;27328:120;;;27399:39;27436:1;27429:5;27399:39;:::i;:::-;27372:1;27365:5;27361:13;27352:22;;27328:120;;;27268:186;;:::o;27460:543::-;27561:2;27556:3;27553:11;27550:446;;;27595:38;27627:5;27595:38;:::i;:::-;27679:29;27697:10;27679:29;:::i;:::-;27669:8;27665:44;27862:2;27850:10;27847:18;27844:49;;;27883:8;27868:23;;27844:49;27906:80;27962:22;27980:3;27962:22;:::i;:::-;27952:8;27948:37;27935:11;27906:80;:::i;:::-;27565:431;;27550:446;27460:543;;;:::o;28009:117::-;28063:8;28113:5;28107:4;28103:16;28082:37;;28009:117;;;;:::o;28132:169::-;28176:6;28209:51;28257:1;28253:6;28245:5;28242:1;28238:13;28209:51;:::i;:::-;28205:56;28290:4;28284;28280:15;28270:25;;28183:118;28132:169;;;;:::o;28306:295::-;28382:4;28528:29;28553:3;28547:4;28528:29;:::i;:::-;28520:37;;28590:3;28587:1;28583:11;28577:4;28574:21;28566:29;;28306:295;;;;:::o;28606:1395::-;28723:37;28756:3;28723:37;:::i;:::-;28825:18;28817:6;28814:30;28811:56;;;28847:18;;:::i;:::-;28811:56;28891:38;28923:4;28917:11;28891:38;:::i;:::-;28976:67;29036:6;29028;29022:4;28976:67;:::i;:::-;29070:1;29094:4;29081:17;;29126:2;29118:6;29115:14;29143:1;29138:618;;;;29800:1;29817:6;29814:77;;;29866:9;29861:3;29857:19;29851:26;29842:35;;29814:77;29917:67;29977:6;29970:5;29917:67;:::i;:::-;29911:4;29904:81;29773:222;29108:887;;29138:618;29190:4;29186:9;29178:6;29174:22;29224:37;29256:4;29224:37;:::i;:::-;29283:1;29297:208;29311:7;29308:1;29305:14;29297:208;;;29390:9;29385:3;29381:19;29375:26;29367:6;29360:42;29441:1;29433:6;29429:14;29419:24;;29488:2;29477:9;29473:18;29460:31;;29334:4;29331:1;29327:12;29322:17;;29297:208;;;29533:6;29524:7;29521:19;29518:179;;;29591:9;29586:3;29582:19;29576:26;29634:48;29676:4;29668:6;29664:17;29653:9;29634:48;:::i;:::-;29626:6;29619:64;29541:156;29518:179;29743:1;29739;29731:6;29727:14;29723:22;29717:4;29710:36;29145:611;;;29108:887;;28698:1303;;;28606:1395;;:::o;30007:348::-;30047:7;30070:20;30088:1;30070:20;:::i;:::-;30065:25;;30104:20;30122:1;30104:20;:::i;:::-;30099:25;;30292:1;30224:66;30220:74;30217:1;30214:81;30209:1;30202:9;30195:17;30191:105;30188:131;;;30299:18;;:::i;:::-;30188:131;30347:1;30344;30340:9;30329:20;;30007:348;;;;:::o;30361:168::-;30501:20;30497:1;30489:6;30485:14;30478:44;30361:168;:::o;30535:366::-;30677:3;30698:67;30762:2;30757:3;30698:67;:::i;:::-;30691:74;;30774:93;30863:3;30774:93;:::i;:::-;30892:2;30887:3;30883:12;30876:19;;30535:366;;;:::o;30907:419::-;31073:4;31111:2;31100:9;31096:18;31088:26;;31160:9;31154:4;31150:20;31146:1;31135:9;31131:17;31124:47;31188:131;31314:4;31188:131;:::i;:::-;31180:139;;30907:419;;;:::o;31332:234::-;31472:34;31468:1;31460:6;31456:14;31449:58;31541:17;31536:2;31528:6;31524:15;31517:42;31332:234;:::o;31572:366::-;31714:3;31735:67;31799:2;31794:3;31735:67;:::i;:::-;31728:74;;31811:93;31900:3;31811:93;:::i;:::-;31929:2;31924:3;31920:12;31913:19;;31572:366;;;:::o;31944:419::-;32110:4;32148:2;32137:9;32133:18;32125:26;;32197:9;32191:4;32187:20;32183:1;32172:9;32168:17;32161:47;32225:131;32351:4;32225:131;:::i;:::-;32217:139;;31944:419;;;:::o;32369:148::-;32471:11;32508:3;32493:18;;32369:148;;;;:::o;32523:377::-;32629:3;32657:39;32690:5;32657:39;:::i;:::-;32712:89;32794:6;32789:3;32712:89;:::i;:::-;32705:96;;32810:52;32855:6;32850:3;32843:4;32836:5;32832:16;32810:52;:::i;:::-;32887:6;32882:3;32878:16;32871:23;;32633:267;32523:377;;;;:::o;32906:435::-;33086:3;33108:95;33199:3;33190:6;33108:95;:::i;:::-;33101:102;;33220:95;33311:3;33302:6;33220:95;:::i;:::-;33213:102;;33332:3;33325:10;;32906:435;;;;;:::o;33371:874::-;33474:3;33511:5;33505:12;33540:36;33566:9;33540:36;:::i;:::-;33592:89;33674:6;33669:3;33592:89;:::i;:::-;33585:96;;33712:1;33701:9;33697:17;33728:1;33723:166;;;;33903:1;33898:341;;;;33690:549;;33723:166;33807:4;33803:9;33792;33788:25;33783:3;33776:38;33869:6;33862:14;33855:22;33847:6;33843:35;33838:3;33834:45;33827:52;;33723:166;;33898:341;33965:38;33997:5;33965:38;:::i;:::-;34025:1;34039:154;34053:6;34050:1;34047:13;34039:154;;;34127:7;34121:14;34117:1;34112:3;34108:11;34101:35;34177:1;34168:7;34164:15;34153:26;;34075:4;34072:1;34068:12;34063:17;;34039:154;;;34222:6;34217:3;34213:16;34206:23;;33905:334;;33690:549;;33478:767;;33371:874;;;;:::o;34251:589::-;34476:3;34498:95;34589:3;34580:6;34498:95;:::i;:::-;34491:102;;34610:95;34701:3;34692:6;34610:95;:::i;:::-;34603:102;;34722:92;34810:3;34801:6;34722:92;:::i;:::-;34715:99;;34831:3;34824:10;;34251:589;;;;;;:::o;34846:173::-;34986:25;34982:1;34974:6;34970:14;34963:49;34846:173;:::o;35025:366::-;35167:3;35188:67;35252:2;35247:3;35188:67;:::i;:::-;35181:74;;35264:93;35353:3;35264:93;:::i;:::-;35382:2;35377:3;35373:12;35366:19;;35025:366;;;:::o;35397:419::-;35563:4;35601:2;35590:9;35586:18;35578:26;;35650:9;35644:4;35640:20;35636:1;35625:9;35621:17;35614:47;35678:131;35804:4;35678:131;:::i;:::-;35670:139;;35397:419;;;:::o;35822:225::-;35962:34;35958:1;35950:6;35946:14;35939:58;36031:8;36026:2;36018:6;36014:15;36007:33;35822:225;:::o;36053:366::-;36195:3;36216:67;36280:2;36275:3;36216:67;:::i;:::-;36209:74;;36292:93;36381:3;36292:93;:::i;:::-;36410:2;36405:3;36401:12;36394:19;;36053:366;;;:::o;36425:419::-;36591:4;36629:2;36618:9;36614:18;36606:26;;36678:9;36672:4;36668:20;36664:1;36653:9;36649:17;36642:47;36706:131;36832:4;36706:131;:::i;:::-;36698:139;;36425:419;;;:::o;36850:98::-;36901:6;36935:5;36929:12;36919:22;;36850:98;;;:::o;36954:168::-;37037:11;37071:6;37066:3;37059:19;37111:4;37106:3;37102:14;37087:29;;36954:168;;;;:::o;37128:360::-;37214:3;37242:38;37274:5;37242:38;:::i;:::-;37296:70;37359:6;37354:3;37296:70;:::i;:::-;37289:77;;37375:52;37420:6;37415:3;37408:4;37401:5;37397:16;37375:52;:::i;:::-;37452:29;37474:6;37452:29;:::i;:::-;37447:3;37443:39;37436:46;;37218:270;37128:360;;;;:::o;37494:640::-;37689:4;37727:3;37716:9;37712:19;37704:27;;37741:71;37809:1;37798:9;37794:17;37785:6;37741:71;:::i;:::-;37822:72;37890:2;37879:9;37875:18;37866:6;37822:72;:::i;:::-;37904;37972:2;37961:9;37957:18;37948:6;37904:72;:::i;:::-;38023:9;38017:4;38013:20;38008:2;37997:9;37993:18;37986:48;38051:76;38122:4;38113:6;38051:76;:::i;:::-;38043:84;;37494:640;;;;;;;:::o;38140:141::-;38196:5;38227:6;38221:13;38212:22;;38243:32;38269:5;38243:32;:::i;:::-;38140:141;;;;:::o;38287:349::-;38356:6;38405:2;38393:9;38384:7;38380:23;38376:32;38373:119;;;38411:79;;:::i;:::-;38373:119;38531:1;38556:63;38611:7;38602:6;38591:9;38587:22;38556:63;:::i;:::-;38546:73;;38502:127;38287:349;;;;:::o;38642:233::-;38681:3;38704:24;38722:5;38704:24;:::i;:::-;38695:33;;38750:66;38743:5;38740:77;38737:103;;38820:18;;:::i;:::-;38737:103;38867:1;38860:5;38856:13;38849:20;;38642:233;;;:::o;38881:180::-;38929:77;38926:1;38919:88;39026:4;39023:1;39016:15;39050:4;39047:1;39040:15;39067:185;39107:1;39124:20;39142:1;39124:20;:::i;:::-;39119:25;;39158:20;39176:1;39158:20;:::i;:::-;39153:25;;39197:1;39187:35;;39202:18;;:::i;:::-;39187:35;39244:1;39241;39237:9;39232:14;;39067:185;;;;:::o;39258:176::-;39290:1;39307:20;39325:1;39307:20;:::i;:::-;39302:25;;39341:20;39359:1;39341:20;:::i;:::-;39336:25;;39380:1;39370:35;;39385:18;;:::i;:::-;39370:35;39426:1;39423;39419:9;39414:14;;39258:176;;;;:::o;39440:180::-;39488:77;39485:1;39478:88;39585:4;39582:1;39575:15;39609:4;39606:1;39599:15
Swarm Source
ipfs://b5cd8099e8fde5043d3b36f5f1a985fd2d490def8b11eaa22d58acbe21a2befb
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.