Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 10 from a total of 10 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 14528732 | 722 days ago | IN | 0 ETH | 0.00292178 | ||||
Withdraw | 14471292 | 731 days ago | IN | 0 ETH | 0.00130217 | ||||
Set Approval For... | 14380248 | 746 days ago | IN | 0 ETH | 0.0013741 | ||||
Set Reveal | 14348715 | 751 days ago | IN | 0 ETH | 0.00291573 | ||||
Transfer From | 14342300 | 752 days ago | IN | 0 ETH | 0.00228891 | ||||
Safe Mint | 14307385 | 757 days ago | IN | 0.08 ETH | 0.00256259 | ||||
Safe Mint | 14281347 | 761 days ago | IN | 0.32 ETH | 0.00538045 | ||||
Safe Mint | 14258150 | 765 days ago | IN | 0.08 ETH | 0.00806546 | ||||
Safe Mint | 14250130 | 766 days ago | IN | 0.16 ETH | 0.01623094 | ||||
0x60806040 | 14247352 | 766 days ago | IN | Create: CybershinuNFT | 0 ETH | 0.25701934 |
Latest 1 internal transaction
Advanced mode:
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
14471292 | 731 days ago | 0.64 ETH |
Loading...
Loading
Contract Name:
CybershinuNFT
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-21 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @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 virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: CybershinuNFT.sol pragma solidity ^0.8.2; contract CybershinuNFT is ERC721, ERC721URIStorage, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; string baseURI; string prerevealURI; string public baseExtension = ".json"; uint256 public maxTokens = 10000; uint256 public fee; bool public paused = false; bool public reveal; //Mapping to store URI data for delayed reveal //mapping(uint256 => string) public tokenIdToURI; constructor(string memory myBaseURI, string memory myRevealURI) ERC721("Cybershinu", "CYSHI") { _tokenIdCounter.increment(); setBaseURI(myBaseURI); setPrerevealURI(myRevealURI); fee = 80000000000000000; reveal = false; } function setCost(uint256 _newCost) public onlyOwner { fee = _newCost; } function setMaxTokens(uint256 _newMax) public onlyOwner { maxTokens = _newMax; } function setReveal(bool _newReveal) public onlyOwner { reveal = _newReveal; } function setPrerevealURI(string memory _newRevealURI) public onlyOwner { prerevealURI = _newRevealURI; } function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len; while (_i != 0) { k = k - 1; uint8 temp = (48 + uint8(_i - (_i / 10) * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } //Mint Function function safeMint(uint256 numberOfTokens) public payable { require(!paused); if (msg.sender == owner()) { require( maxTokens >= _tokenIdCounter.current() + numberOfTokens - 1, "Not enough tokens left to buy." ); for (uint256 i = 0; i < numberOfTokens; i++) { _safeMint(msg.sender, _tokenIdCounter.current()); _tokenIdCounter.increment(); } } else { require( maxTokens >= _tokenIdCounter.current() + numberOfTokens - 1, "Not enough tokens left to buy." ); require( msg.value >= fee * numberOfTokens, "Amount of ether sent not correct." ); for (uint256 i = 0; i < numberOfTokens; i++) { _safeMint(msg.sender, _tokenIdCounter.current()); _tokenIdCounter.increment(); } } } // The following functions are overrides required by Solidity. function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view virtual override(ERC721, ERC721URIStorage) returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (reveal) { string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, uint2str(tokenId), baseExtension ) ) : ""; } else { return prerevealURI; } } // Return current counter value function getCounter() public view returns (uint256) { return _tokenIdCounter.current(); } // Withdraw control function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success, "Transfer failed."); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"myBaseURI","type":"string"},{"internalType":"string","name":"myRevealURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","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":"getCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokens","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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"safeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"setMaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newRevealURI","type":"string"}],"name":"setPrerevealURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newReveal","type":"bool"}],"name":"setReveal","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":[{"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":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200005192919062000435565b50612710600c556000600e60006101000a81548160ff0219169083151502179055503480156200008057600080fd5b50604051620044b1380380620044b18339818101604052810190620000a6919062000682565b6040518060400160405280600a81526020017f43796265727368696e75000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f435953484900000000000000000000000000000000000000000000000000000081525081600090805190602001906200012a92919062000435565b5080600190805190602001906200014392919062000435565b505050620001666200015a620001d160201b60201c565b620001d960201b60201c565b6200017d60086200029f60201b620018a11760201c565b6200018e82620002b560201b60201c565b6200019f816200036060201b60201c565b67011c37937e080000600d819055506000600e60016101000a81548160ff0219169083151502179055505050620007ef565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b620002c5620001d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002eb6200040b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000344576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200033b9062000768565b60405180910390fd5b80600990805190602001906200035c92919062000435565b5050565b62000370620001d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003966200040b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e69062000768565b60405180910390fd5b80600a90805190602001906200040792919062000435565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200044390620007b9565b90600052602060002090601f016020900481019282620004675760008555620004b3565b82601f106200048257805160ff1916838001178555620004b3565b82800160010185558215620004b3579182015b82811115620004b257825182559160200191906001019062000495565b5b509050620004c29190620004c6565b5090565b5b80821115620004e1576000816000905550600101620004c7565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200054e8262000503565b810181811067ffffffffffffffff8211171562000570576200056f62000514565b5b80604052505050565b600062000585620004e5565b905062000593828262000543565b919050565b600067ffffffffffffffff821115620005b657620005b562000514565b5b620005c18262000503565b9050602081019050919050565b60005b83811015620005ee578082015181840152602081019050620005d1565b83811115620005fe576000848401525b50505050565b60006200061b620006158462000598565b62000579565b9050828152602081018484840111156200063a5762000639620004fe565b5b62000647848285620005ce565b509392505050565b600082601f830112620006675762000666620004f9565b5b81516200067984826020860162000604565b91505092915050565b600080604083850312156200069c576200069b620004ef565b5b600083015167ffffffffffffffff811115620006bd57620006bc620004f4565b5b620006cb858286016200064f565b925050602083015167ffffffffffffffff811115620006ef57620006ee620004f4565b5b620006fd858286016200064f565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200075060208362000707565b91506200075d8262000718565b602082019050919050565b60006020820190508181036000830152620007838162000741565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007d257607f821691505b60208210811415620007e957620007e86200078a565b5b50919050565b613cb280620007ff6000396000f3fe6080604052600436106101d85760003560e01c80636352211e11610102578063b88d4fde11610095578063ddca3f4311610064578063ddca3f4314610664578063e83157421461068f578063e985e9c5146106ba578063f2fde38b146106f7576101d8565b8063b88d4fde146105aa578063c6682862146105d3578063c87b56dd146105fe578063da3ef23f1461063b576101d8565b80638da5cb5b116100d15780638da5cb5b1461050057806395d89b411461052b578063a22cb46514610556578063a475b5dd1461057f576101d8565b80636352211e1461044457806370a0823114610481578063715018a6146104be5780638ada066e146104d5576101d8565b806323b872dd1161017a57806342842e0e1161014957806342842e0e1461039e57806344a0d68a146103c757806355f804b3146103f05780635c975abb14610419576101d8565b806323b872dd146103265780632a3f300c1461034f57806331c864e8146103785780633ccfd60b14610394576101d8565b8063078eef28116101b6578063078eef281461026e578063081812fc14610297578063095ea7b3146102d457806311e776fe146102fd576101d8565b806301ffc9a7146101dd57806302329a291461021a57806306fdde0314610243575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612762565b610720565b60405161021191906127aa565b60405180910390f35b34801561022657600080fd5b50610241600480360381019061023c91906127f1565b610802565b005b34801561024f57600080fd5b5061025861089b565b60405161026591906128b7565b60405180910390f35b34801561027a57600080fd5b5061029560048036038101906102909190612a0e565b61092d565b005b3480156102a357600080fd5b506102be60048036038101906102b99190612a8d565b6109c3565b6040516102cb9190612afb565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190612b42565b610a48565b005b34801561030957600080fd5b50610324600480360381019061031f9190612a8d565b610b60565b005b34801561033257600080fd5b5061034d60048036038101906103489190612b82565b610be6565b005b34801561035b57600080fd5b50610376600480360381019061037191906127f1565b610c46565b005b610392600480360381019061038d9190612a8d565b610cdf565b005b61039c610ecf565b005b3480156103aa57600080fd5b506103c560048036038101906103c09190612b82565b610ffa565b005b3480156103d357600080fd5b506103ee60048036038101906103e99190612a8d565b61101a565b005b3480156103fc57600080fd5b5061041760048036038101906104129190612a0e565b6110a0565b005b34801561042557600080fd5b5061042e611136565b60405161043b91906127aa565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190612a8d565b611149565b6040516104789190612afb565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190612bd5565b6111fb565b6040516104b59190612c11565b60405180910390f35b3480156104ca57600080fd5b506104d36112b3565b005b3480156104e157600080fd5b506104ea61133b565b6040516104f79190612c11565b60405180910390f35b34801561050c57600080fd5b5061051561134c565b6040516105229190612afb565b60405180910390f35b34801561053757600080fd5b50610540611376565b60405161054d91906128b7565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190612c2c565b611408565b005b34801561058b57600080fd5b5061059461141e565b6040516105a191906127aa565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190612d0d565b611431565b005b3480156105df57600080fd5b506105e8611493565b6040516105f591906128b7565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190612a8d565b611521565b60405161063291906128b7565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190612a0e565b611673565b005b34801561067057600080fd5b50610679611709565b6040516106869190612c11565b60405180910390f35b34801561069b57600080fd5b506106a461170f565b6040516106b19190612c11565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190612d90565b611715565b6040516106ee91906127aa565b60405180910390f35b34801561070357600080fd5b5061071e60048036038101906107199190612bd5565b6117a9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107eb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107fb57506107fa826118b7565b5b9050919050565b61080a611921565b73ffffffffffffffffffffffffffffffffffffffff1661082861134c565b73ffffffffffffffffffffffffffffffffffffffff161461087e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087590612e1c565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546108aa90612e6b565b80601f01602080910402602001604051908101604052809291908181526020018280546108d690612e6b565b80156109235780601f106108f857610100808354040283529160200191610923565b820191906000526020600020905b81548152906001019060200180831161090657829003601f168201915b5050505050905090565b610935611921565b73ffffffffffffffffffffffffffffffffffffffff1661095361134c565b73ffffffffffffffffffffffffffffffffffffffff16146109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a090612e1c565b60405180910390fd5b80600a90805190602001906109bf929190612653565b5050565b60006109ce82611929565b610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0490612f0f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a5382611149565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90612fa1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ae3611921565b73ffffffffffffffffffffffffffffffffffffffff161480610b125750610b1181610b0c611921565b611715565b5b610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4890613033565b60405180910390fd5b610b5b8383611995565b505050565b610b68611921565b73ffffffffffffffffffffffffffffffffffffffff16610b8661134c565b73ffffffffffffffffffffffffffffffffffffffff1614610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390612e1c565b60405180910390fd5b80600c8190555050565b610bf7610bf1611921565b82611a4e565b610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d906130c5565b60405180910390fd5b610c41838383611b2c565b505050565b610c4e611921565b73ffffffffffffffffffffffffffffffffffffffff16610c6c61134c565b73ffffffffffffffffffffffffffffffffffffffff1614610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb990612e1c565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b600e60009054906101000a900460ff1615610cf957600080fd5b610d0161134c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610dda57600181610d416008611d93565b610d4b9190613114565b610d55919061316a565b600c541015610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d90906131ea565b60405180910390fd5b60005b81811015610dd457610db733610db26008611d93565b611da1565b610dc160086118a1565b8080610dcc9061320a565b915050610d9c565b50610ecc565b600181610de76008611d93565b610df19190613114565b610dfb919061316a565b600c541015610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e36906131ea565b60405180910390fd5b80600d54610e4d9190613253565b341015610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061331f565b60405180910390fd5b60005b81811015610eca57610ead33610ea86008611d93565b611da1565b610eb760086118a1565b8080610ec29061320a565b915050610e92565b505b50565b610ed7611921565b73ffffffffffffffffffffffffffffffffffffffff16610ef561134c565b73ffffffffffffffffffffffffffffffffffffffff1614610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290612e1c565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610f7190613370565b60006040518083038185875af1925050503d8060008114610fae576040519150601f19603f3d011682016040523d82523d6000602084013e610fb3565b606091505b5050905080610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee906133d1565b60405180910390fd5b50565b61101583838360405180602001604052806000815250611431565b505050565b611022611921565b73ffffffffffffffffffffffffffffffffffffffff1661104061134c565b73ffffffffffffffffffffffffffffffffffffffff1614611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d90612e1c565b60405180910390fd5b80600d8190555050565b6110a8611921565b73ffffffffffffffffffffffffffffffffffffffff166110c661134c565b73ffffffffffffffffffffffffffffffffffffffff161461111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111390612e1c565b60405180910390fd5b8060099080519060200190611132929190612653565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e990613463565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611263906134f5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112bb611921565b73ffffffffffffffffffffffffffffffffffffffff166112d961134c565b73ffffffffffffffffffffffffffffffffffffffff161461132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690612e1c565b60405180910390fd5b6113396000611dbf565b565b60006113476008611d93565b905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461138590612e6b565b80601f01602080910402602001604051908101604052809291908181526020018280546113b190612e6b565b80156113fe5780601f106113d3576101008083540402835291602001916113fe565b820191906000526020600020905b8154815290600101906020018083116113e157829003601f168201915b5050505050905090565b61141a611413611921565b8383611e85565b5050565b600e60019054906101000a900460ff1681565b61144261143c611921565b83611a4e565b611481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611478906130c5565b60405180910390fd5b61148d84848484611ff2565b50505050565b600b80546114a090612e6b565b80601f01602080910402602001604051908101604052809291908181526020018280546114cc90612e6b565b80156115195780601f106114ee57610100808354040283529160200191611519565b820191906000526020600020905b8154815290600101906020018083116114fc57829003601f168201915b505050505081565b606061152c82611929565b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613587565b60405180910390fd5b600e60019054906101000a900460ff16156115e057600061158a61204e565b905060008151116115aa57604051806020016040528060008152506115d8565b806115b4846120e0565b600b6040516020016115c893929190613677565b6040516020818303038152906040525b91505061166e565b600a80546115ed90612e6b565b80601f016020809104026020016040519081016040528092919081815260200182805461161990612e6b565b80156116665780601f1061163b57610100808354040283529160200191611666565b820191906000526020600020905b81548152906001019060200180831161164957829003601f168201915b505050505090505b919050565b61167b611921565b73ffffffffffffffffffffffffffffffffffffffff1661169961134c565b73ffffffffffffffffffffffffffffffffffffffff16146116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e690612e1c565b60405180910390fd5b80600b9080519060200190611705929190612653565b5050565b600d5481565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117b1611921565b73ffffffffffffffffffffffffffffffffffffffff166117cf61134c565b73ffffffffffffffffffffffffffffffffffffffff1614611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c90612e1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c9061371a565b60405180910390fd5b61189e81611dbf565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a0883611149565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a5982611929565b611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f906137ac565b60405180910390fd5b6000611aa383611149565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b1257508373ffffffffffffffffffffffffffffffffffffffff16611afa846109c3565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b235750611b228185611715565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b4c82611149565b73ffffffffffffffffffffffffffffffffffffffff1614611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b999061383e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c09906138d0565b60405180910390fd5b611c1d838383612269565b611c28600082611995565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c78919061316a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ccf9190613114565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d8e83838361226e565b505050565b600081600001549050919050565b611dbb828260405180602001604052806000815250612273565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb9061393c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fe591906127aa565b60405180910390a3505050565b611ffd848484611b2c565b612009848484846122ce565b612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f906139ce565b60405180910390fd5b50505050565b60606009805461205d90612e6b565b80601f016020809104026020016040519081016040528092919081815260200182805461208990612e6b565b80156120d65780601f106120ab576101008083540402835291602001916120d6565b820191906000526020600020905b8154815290600101906020018083116120b957829003601f168201915b5050505050905090565b60606000821415612128576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612264565b600082905060005b6000821461215a5780806121439061320a565b915050600a826121539190613a1d565b9150612130565b60008167ffffffffffffffff811115612176576121756128e3565b5b6040519080825280601f01601f1916602001820160405280156121a85781602001600182028036833780820191505090505b50905060008290505b6000861461225c576001816121c6919061316a565b90506000600a80886121d89190613a1d565b6121e29190613253565b876121ed919061316a565b60306121f99190613a5b565b905060008160f81b90508084848151811061221757612216613a92565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886122539190613a1d565b975050506121b1565b819450505050505b919050565b505050565b505050565b61227d8383612456565b61228a60008484846122ce565b6122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c0906139ce565b60405180910390fd5b505050565b60006122ef8473ffffffffffffffffffffffffffffffffffffffff16612630565b15612449578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612318611921565b8786866040518563ffffffff1660e01b815260040161233a9493929190613b16565b6020604051808303816000875af192505050801561237657506040513d601f19601f820116820180604052508101906123739190613b77565b60015b6123f9573d80600081146123a6576040519150601f19603f3d011682016040523d82523d6000602084013e6123ab565b606091505b506000815114156123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e8906139ce565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061244e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd90613bf0565b60405180910390fd5b6124cf81611929565b1561250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250690613c5c565b60405180910390fd5b61251b60008383612269565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256b9190613114565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461262c6000838361226e565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461265f90612e6b565b90600052602060002090601f01602090048101928261268157600085556126c8565b82601f1061269a57805160ff19168380011785556126c8565b828001600101855582156126c8579182015b828111156126c75782518255916020019190600101906126ac565b5b5090506126d591906126d9565b5090565b5b808211156126f25760008160009055506001016126da565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61273f8161270a565b811461274a57600080fd5b50565b60008135905061275c81612736565b92915050565b60006020828403121561277857612777612700565b5b60006127868482850161274d565b91505092915050565b60008115159050919050565b6127a48161278f565b82525050565b60006020820190506127bf600083018461279b565b92915050565b6127ce8161278f565b81146127d957600080fd5b50565b6000813590506127eb816127c5565b92915050565b60006020828403121561280757612806612700565b5b6000612815848285016127dc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561285857808201518184015260208101905061283d565b83811115612867576000848401525b50505050565b6000601f19601f8301169050919050565b60006128898261281e565b6128938185612829565b93506128a381856020860161283a565b6128ac8161286d565b840191505092915050565b600060208201905081810360008301526128d1818461287e565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61291b8261286d565b810181811067ffffffffffffffff8211171561293a576129396128e3565b5b80604052505050565b600061294d6126f6565b90506129598282612912565b919050565b600067ffffffffffffffff821115612979576129786128e3565b5b6129828261286d565b9050602081019050919050565b82818337600083830152505050565b60006129b16129ac8461295e565b612943565b9050828152602081018484840111156129cd576129cc6128de565b5b6129d884828561298f565b509392505050565b600082601f8301126129f5576129f46128d9565b5b8135612a0584826020860161299e565b91505092915050565b600060208284031215612a2457612a23612700565b5b600082013567ffffffffffffffff811115612a4257612a41612705565b5b612a4e848285016129e0565b91505092915050565b6000819050919050565b612a6a81612a57565b8114612a7557600080fd5b50565b600081359050612a8781612a61565b92915050565b600060208284031215612aa357612aa2612700565b5b6000612ab184828501612a78565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ae582612aba565b9050919050565b612af581612ada565b82525050565b6000602082019050612b106000830184612aec565b92915050565b612b1f81612ada565b8114612b2a57600080fd5b50565b600081359050612b3c81612b16565b92915050565b60008060408385031215612b5957612b58612700565b5b6000612b6785828601612b2d565b9250506020612b7885828601612a78565b9150509250929050565b600080600060608486031215612b9b57612b9a612700565b5b6000612ba986828701612b2d565b9350506020612bba86828701612b2d565b9250506040612bcb86828701612a78565b9150509250925092565b600060208284031215612beb57612bea612700565b5b6000612bf984828501612b2d565b91505092915050565b612c0b81612a57565b82525050565b6000602082019050612c266000830184612c02565b92915050565b60008060408385031215612c4357612c42612700565b5b6000612c5185828601612b2d565b9250506020612c62858286016127dc565b9150509250929050565b600067ffffffffffffffff821115612c8757612c866128e3565b5b612c908261286d565b9050602081019050919050565b6000612cb0612cab84612c6c565b612943565b905082815260208101848484011115612ccc57612ccb6128de565b5b612cd784828561298f565b509392505050565b600082601f830112612cf457612cf36128d9565b5b8135612d04848260208601612c9d565b91505092915050565b60008060008060808587031215612d2757612d26612700565b5b6000612d3587828801612b2d565b9450506020612d4687828801612b2d565b9350506040612d5787828801612a78565b925050606085013567ffffffffffffffff811115612d7857612d77612705565b5b612d8487828801612cdf565b91505092959194509250565b60008060408385031215612da757612da6612700565b5b6000612db585828601612b2d565b9250506020612dc685828601612b2d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e06602083612829565b9150612e1182612dd0565b602082019050919050565b60006020820190508181036000830152612e3581612df9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e8357607f821691505b60208210811415612e9757612e96612e3c565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612ef9602c83612829565b9150612f0482612e9d565b604082019050919050565b60006020820190508181036000830152612f2881612eec565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f8b602183612829565b9150612f9682612f2f565b604082019050919050565b60006020820190508181036000830152612fba81612f7e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061301d603883612829565b915061302882612fc1565b604082019050919050565b6000602082019050818103600083015261304c81613010565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006130af603183612829565b91506130ba82613053565b604082019050919050565b600060208201905081810360008301526130de816130a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061311f82612a57565b915061312a83612a57565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561315f5761315e6130e5565b5b828201905092915050565b600061317582612a57565b915061318083612a57565b925082821015613193576131926130e5565b5b828203905092915050565b7f4e6f7420656e6f75676820746f6b656e73206c65667420746f206275792e0000600082015250565b60006131d4601e83612829565b91506131df8261319e565b602082019050919050565b60006020820190508181036000830152613203816131c7565b9050919050565b600061321582612a57565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613248576132476130e5565b5b600182019050919050565b600061325e82612a57565b915061326983612a57565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132a2576132a16130e5565b5b828202905092915050565b7f416d6f756e74206f662065746865722073656e74206e6f7420636f727265637460008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613309602183612829565b9150613314826132ad565b604082019050919050565b60006020820190508181036000830152613338816132fc565b9050919050565b600081905092915050565b50565b600061335a60008361333f565b91506133658261334a565b600082019050919050565b600061337b8261334d565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006133bb601083612829565b91506133c682613385565b602082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061344d602983612829565b9150613458826133f1565b604082019050919050565b6000602082019050818103600083015261347c81613440565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006134df602a83612829565b91506134ea82613483565b604082019050919050565b6000602082019050818103600083015261350e816134d2565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613571602f83612829565b915061357c82613515565b604082019050919050565b600060208201905081810360008301526135a081613564565b9050919050565b600081905092915050565b60006135bd8261281e565b6135c781856135a7565b93506135d781856020860161283a565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461360581612e6b565b61360f81866135a7565b9450600182166000811461362a576001811461363b5761366e565b60ff1983168652818601935061366e565b613644856135e3565b60005b8381101561366657815481890152600182019150602081019050613647565b838801955050505b50505092915050565b600061368382866135b2565b915061368f82856135b2565b915061369b82846135f8565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613704602683612829565b915061370f826136a8565b604082019050919050565b60006020820190508181036000830152613733816136f7565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613796602c83612829565b91506137a18261373a565b604082019050919050565b600060208201905081810360008301526137c581613789565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613828602583612829565b9150613833826137cc565b604082019050919050565b600060208201905081810360008301526138578161381b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138ba602483612829565b91506138c58261385e565b604082019050919050565b600060208201905081810360008301526138e9816138ad565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613926601983612829565b9150613931826138f0565b602082019050919050565b6000602082019050818103600083015261395581613919565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006139b8603283612829565b91506139c38261395c565b604082019050919050565b600060208201905081810360008301526139e7816139ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a2882612a57565b9150613a3383612a57565b925082613a4357613a426139ee565b5b828204905092915050565b600060ff82169050919050565b6000613a6682613a4e565b9150613a7183613a4e565b92508260ff03821115613a8757613a866130e5565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613ae882613ac1565b613af28185613acc565b9350613b0281856020860161283a565b613b0b8161286d565b840191505092915050565b6000608082019050613b2b6000830187612aec565b613b386020830186612aec565b613b456040830185612c02565b8181036060830152613b578184613add565b905095945050505050565b600081519050613b7181612736565b92915050565b600060208284031215613b8d57613b8c612700565b5b6000613b9b84828501613b62565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613bda602083612829565b9150613be582613ba4565b602082019050919050565b60006020820190508181036000830152613c0981613bcd565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613c46601c83612829565b9150613c5182613c10565b602082019050919050565b60006020820190508181036000830152613c7581613c39565b905091905056fea26469706673582212203043528c1dcd90c6314bedf55c5ce0862898222f31a069d245dba023b48c910e64736f6c634300080c0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5167747062684679726442365158765434556148626148724845646f566d55416e7248504c776a4d34474d342f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d57466a484b41556a595a36434765777556467873446f37397032345a336946536933647865696f454d5631452f000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80636352211e11610102578063b88d4fde11610095578063ddca3f4311610064578063ddca3f4314610664578063e83157421461068f578063e985e9c5146106ba578063f2fde38b146106f7576101d8565b8063b88d4fde146105aa578063c6682862146105d3578063c87b56dd146105fe578063da3ef23f1461063b576101d8565b80638da5cb5b116100d15780638da5cb5b1461050057806395d89b411461052b578063a22cb46514610556578063a475b5dd1461057f576101d8565b80636352211e1461044457806370a0823114610481578063715018a6146104be5780638ada066e146104d5576101d8565b806323b872dd1161017a57806342842e0e1161014957806342842e0e1461039e57806344a0d68a146103c757806355f804b3146103f05780635c975abb14610419576101d8565b806323b872dd146103265780632a3f300c1461034f57806331c864e8146103785780633ccfd60b14610394576101d8565b8063078eef28116101b6578063078eef281461026e578063081812fc14610297578063095ea7b3146102d457806311e776fe146102fd576101d8565b806301ffc9a7146101dd57806302329a291461021a57806306fdde0314610243575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612762565b610720565b60405161021191906127aa565b60405180910390f35b34801561022657600080fd5b50610241600480360381019061023c91906127f1565b610802565b005b34801561024f57600080fd5b5061025861089b565b60405161026591906128b7565b60405180910390f35b34801561027a57600080fd5b5061029560048036038101906102909190612a0e565b61092d565b005b3480156102a357600080fd5b506102be60048036038101906102b99190612a8d565b6109c3565b6040516102cb9190612afb565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190612b42565b610a48565b005b34801561030957600080fd5b50610324600480360381019061031f9190612a8d565b610b60565b005b34801561033257600080fd5b5061034d60048036038101906103489190612b82565b610be6565b005b34801561035b57600080fd5b50610376600480360381019061037191906127f1565b610c46565b005b610392600480360381019061038d9190612a8d565b610cdf565b005b61039c610ecf565b005b3480156103aa57600080fd5b506103c560048036038101906103c09190612b82565b610ffa565b005b3480156103d357600080fd5b506103ee60048036038101906103e99190612a8d565b61101a565b005b3480156103fc57600080fd5b5061041760048036038101906104129190612a0e565b6110a0565b005b34801561042557600080fd5b5061042e611136565b60405161043b91906127aa565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190612a8d565b611149565b6040516104789190612afb565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190612bd5565b6111fb565b6040516104b59190612c11565b60405180910390f35b3480156104ca57600080fd5b506104d36112b3565b005b3480156104e157600080fd5b506104ea61133b565b6040516104f79190612c11565b60405180910390f35b34801561050c57600080fd5b5061051561134c565b6040516105229190612afb565b60405180910390f35b34801561053757600080fd5b50610540611376565b60405161054d91906128b7565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190612c2c565b611408565b005b34801561058b57600080fd5b5061059461141e565b6040516105a191906127aa565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190612d0d565b611431565b005b3480156105df57600080fd5b506105e8611493565b6040516105f591906128b7565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190612a8d565b611521565b60405161063291906128b7565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190612a0e565b611673565b005b34801561067057600080fd5b50610679611709565b6040516106869190612c11565b60405180910390f35b34801561069b57600080fd5b506106a461170f565b6040516106b19190612c11565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190612d90565b611715565b6040516106ee91906127aa565b60405180910390f35b34801561070357600080fd5b5061071e60048036038101906107199190612bd5565b6117a9565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107eb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107fb57506107fa826118b7565b5b9050919050565b61080a611921565b73ffffffffffffffffffffffffffffffffffffffff1661082861134c565b73ffffffffffffffffffffffffffffffffffffffff161461087e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087590612e1c565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546108aa90612e6b565b80601f01602080910402602001604051908101604052809291908181526020018280546108d690612e6b565b80156109235780601f106108f857610100808354040283529160200191610923565b820191906000526020600020905b81548152906001019060200180831161090657829003601f168201915b5050505050905090565b610935611921565b73ffffffffffffffffffffffffffffffffffffffff1661095361134c565b73ffffffffffffffffffffffffffffffffffffffff16146109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a090612e1c565b60405180910390fd5b80600a90805190602001906109bf929190612653565b5050565b60006109ce82611929565b610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0490612f0f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a5382611149565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90612fa1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ae3611921565b73ffffffffffffffffffffffffffffffffffffffff161480610b125750610b1181610b0c611921565b611715565b5b610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4890613033565b60405180910390fd5b610b5b8383611995565b505050565b610b68611921565b73ffffffffffffffffffffffffffffffffffffffff16610b8661134c565b73ffffffffffffffffffffffffffffffffffffffff1614610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390612e1c565b60405180910390fd5b80600c8190555050565b610bf7610bf1611921565b82611a4e565b610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d906130c5565b60405180910390fd5b610c41838383611b2c565b505050565b610c4e611921565b73ffffffffffffffffffffffffffffffffffffffff16610c6c61134c565b73ffffffffffffffffffffffffffffffffffffffff1614610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb990612e1c565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b600e60009054906101000a900460ff1615610cf957600080fd5b610d0161134c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610dda57600181610d416008611d93565b610d4b9190613114565b610d55919061316a565b600c541015610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d90906131ea565b60405180910390fd5b60005b81811015610dd457610db733610db26008611d93565b611da1565b610dc160086118a1565b8080610dcc9061320a565b915050610d9c565b50610ecc565b600181610de76008611d93565b610df19190613114565b610dfb919061316a565b600c541015610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e36906131ea565b60405180910390fd5b80600d54610e4d9190613253565b341015610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061331f565b60405180910390fd5b60005b81811015610eca57610ead33610ea86008611d93565b611da1565b610eb760086118a1565b8080610ec29061320a565b915050610e92565b505b50565b610ed7611921565b73ffffffffffffffffffffffffffffffffffffffff16610ef561134c565b73ffffffffffffffffffffffffffffffffffffffff1614610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290612e1c565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610f7190613370565b60006040518083038185875af1925050503d8060008114610fae576040519150601f19603f3d011682016040523d82523d6000602084013e610fb3565b606091505b5050905080610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee906133d1565b60405180910390fd5b50565b61101583838360405180602001604052806000815250611431565b505050565b611022611921565b73ffffffffffffffffffffffffffffffffffffffff1661104061134c565b73ffffffffffffffffffffffffffffffffffffffff1614611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d90612e1c565b60405180910390fd5b80600d8190555050565b6110a8611921565b73ffffffffffffffffffffffffffffffffffffffff166110c661134c565b73ffffffffffffffffffffffffffffffffffffffff161461111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111390612e1c565b60405180910390fd5b8060099080519060200190611132929190612653565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e990613463565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611263906134f5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112bb611921565b73ffffffffffffffffffffffffffffffffffffffff166112d961134c565b73ffffffffffffffffffffffffffffffffffffffff161461132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690612e1c565b60405180910390fd5b6113396000611dbf565b565b60006113476008611d93565b905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461138590612e6b565b80601f01602080910402602001604051908101604052809291908181526020018280546113b190612e6b565b80156113fe5780601f106113d3576101008083540402835291602001916113fe565b820191906000526020600020905b8154815290600101906020018083116113e157829003601f168201915b5050505050905090565b61141a611413611921565b8383611e85565b5050565b600e60019054906101000a900460ff1681565b61144261143c611921565b83611a4e565b611481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611478906130c5565b60405180910390fd5b61148d84848484611ff2565b50505050565b600b80546114a090612e6b565b80601f01602080910402602001604051908101604052809291908181526020018280546114cc90612e6b565b80156115195780601f106114ee57610100808354040283529160200191611519565b820191906000526020600020905b8154815290600101906020018083116114fc57829003601f168201915b505050505081565b606061152c82611929565b61156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290613587565b60405180910390fd5b600e60019054906101000a900460ff16156115e057600061158a61204e565b905060008151116115aa57604051806020016040528060008152506115d8565b806115b4846120e0565b600b6040516020016115c893929190613677565b6040516020818303038152906040525b91505061166e565b600a80546115ed90612e6b565b80601f016020809104026020016040519081016040528092919081815260200182805461161990612e6b565b80156116665780601f1061163b57610100808354040283529160200191611666565b820191906000526020600020905b81548152906001019060200180831161164957829003601f168201915b505050505090505b919050565b61167b611921565b73ffffffffffffffffffffffffffffffffffffffff1661169961134c565b73ffffffffffffffffffffffffffffffffffffffff16146116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e690612e1c565b60405180910390fd5b80600b9080519060200190611705929190612653565b5050565b600d5481565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117b1611921565b73ffffffffffffffffffffffffffffffffffffffff166117cf61134c565b73ffffffffffffffffffffffffffffffffffffffff1614611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c90612e1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c9061371a565b60405180910390fd5b61189e81611dbf565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a0883611149565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a5982611929565b611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f906137ac565b60405180910390fd5b6000611aa383611149565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b1257508373ffffffffffffffffffffffffffffffffffffffff16611afa846109c3565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b235750611b228185611715565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b4c82611149565b73ffffffffffffffffffffffffffffffffffffffff1614611ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b999061383e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c09906138d0565b60405180910390fd5b611c1d838383612269565b611c28600082611995565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c78919061316a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ccf9190613114565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d8e83838361226e565b505050565b600081600001549050919050565b611dbb828260405180602001604052806000815250612273565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eeb9061393c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fe591906127aa565b60405180910390a3505050565b611ffd848484611b2c565b612009848484846122ce565b612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f906139ce565b60405180910390fd5b50505050565b60606009805461205d90612e6b565b80601f016020809104026020016040519081016040528092919081815260200182805461208990612e6b565b80156120d65780601f106120ab576101008083540402835291602001916120d6565b820191906000526020600020905b8154815290600101906020018083116120b957829003601f168201915b5050505050905090565b60606000821415612128576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612264565b600082905060005b6000821461215a5780806121439061320a565b915050600a826121539190613a1d565b9150612130565b60008167ffffffffffffffff811115612176576121756128e3565b5b6040519080825280601f01601f1916602001820160405280156121a85781602001600182028036833780820191505090505b50905060008290505b6000861461225c576001816121c6919061316a565b90506000600a80886121d89190613a1d565b6121e29190613253565b876121ed919061316a565b60306121f99190613a5b565b905060008160f81b90508084848151811061221757612216613a92565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a886122539190613a1d565b975050506121b1565b819450505050505b919050565b505050565b505050565b61227d8383612456565b61228a60008484846122ce565b6122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c0906139ce565b60405180910390fd5b505050565b60006122ef8473ffffffffffffffffffffffffffffffffffffffff16612630565b15612449578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612318611921565b8786866040518563ffffffff1660e01b815260040161233a9493929190613b16565b6020604051808303816000875af192505050801561237657506040513d601f19601f820116820180604052508101906123739190613b77565b60015b6123f9573d80600081146123a6576040519150601f19603f3d011682016040523d82523d6000602084013e6123ab565b606091505b506000815114156123f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e8906139ce565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061244e565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd90613bf0565b60405180910390fd5b6124cf81611929565b1561250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250690613c5c565b60405180910390fd5b61251b60008383612269565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256b9190613114565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461262c6000838361226e565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461265f90612e6b565b90600052602060002090601f01602090048101928261268157600085556126c8565b82601f1061269a57805160ff19168380011785556126c8565b828001600101855582156126c8579182015b828111156126c75782518255916020019190600101906126ac565b5b5090506126d591906126d9565b5090565b5b808211156126f25760008160009055506001016126da565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61273f8161270a565b811461274a57600080fd5b50565b60008135905061275c81612736565b92915050565b60006020828403121561277857612777612700565b5b60006127868482850161274d565b91505092915050565b60008115159050919050565b6127a48161278f565b82525050565b60006020820190506127bf600083018461279b565b92915050565b6127ce8161278f565b81146127d957600080fd5b50565b6000813590506127eb816127c5565b92915050565b60006020828403121561280757612806612700565b5b6000612815848285016127dc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561285857808201518184015260208101905061283d565b83811115612867576000848401525b50505050565b6000601f19601f8301169050919050565b60006128898261281e565b6128938185612829565b93506128a381856020860161283a565b6128ac8161286d565b840191505092915050565b600060208201905081810360008301526128d1818461287e565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61291b8261286d565b810181811067ffffffffffffffff8211171561293a576129396128e3565b5b80604052505050565b600061294d6126f6565b90506129598282612912565b919050565b600067ffffffffffffffff821115612979576129786128e3565b5b6129828261286d565b9050602081019050919050565b82818337600083830152505050565b60006129b16129ac8461295e565b612943565b9050828152602081018484840111156129cd576129cc6128de565b5b6129d884828561298f565b509392505050565b600082601f8301126129f5576129f46128d9565b5b8135612a0584826020860161299e565b91505092915050565b600060208284031215612a2457612a23612700565b5b600082013567ffffffffffffffff811115612a4257612a41612705565b5b612a4e848285016129e0565b91505092915050565b6000819050919050565b612a6a81612a57565b8114612a7557600080fd5b50565b600081359050612a8781612a61565b92915050565b600060208284031215612aa357612aa2612700565b5b6000612ab184828501612a78565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ae582612aba565b9050919050565b612af581612ada565b82525050565b6000602082019050612b106000830184612aec565b92915050565b612b1f81612ada565b8114612b2a57600080fd5b50565b600081359050612b3c81612b16565b92915050565b60008060408385031215612b5957612b58612700565b5b6000612b6785828601612b2d565b9250506020612b7885828601612a78565b9150509250929050565b600080600060608486031215612b9b57612b9a612700565b5b6000612ba986828701612b2d565b9350506020612bba86828701612b2d565b9250506040612bcb86828701612a78565b9150509250925092565b600060208284031215612beb57612bea612700565b5b6000612bf984828501612b2d565b91505092915050565b612c0b81612a57565b82525050565b6000602082019050612c266000830184612c02565b92915050565b60008060408385031215612c4357612c42612700565b5b6000612c5185828601612b2d565b9250506020612c62858286016127dc565b9150509250929050565b600067ffffffffffffffff821115612c8757612c866128e3565b5b612c908261286d565b9050602081019050919050565b6000612cb0612cab84612c6c565b612943565b905082815260208101848484011115612ccc57612ccb6128de565b5b612cd784828561298f565b509392505050565b600082601f830112612cf457612cf36128d9565b5b8135612d04848260208601612c9d565b91505092915050565b60008060008060808587031215612d2757612d26612700565b5b6000612d3587828801612b2d565b9450506020612d4687828801612b2d565b9350506040612d5787828801612a78565b925050606085013567ffffffffffffffff811115612d7857612d77612705565b5b612d8487828801612cdf565b91505092959194509250565b60008060408385031215612da757612da6612700565b5b6000612db585828601612b2d565b9250506020612dc685828601612b2d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e06602083612829565b9150612e1182612dd0565b602082019050919050565b60006020820190508181036000830152612e3581612df9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e8357607f821691505b60208210811415612e9757612e96612e3c565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612ef9602c83612829565b9150612f0482612e9d565b604082019050919050565b60006020820190508181036000830152612f2881612eec565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f8b602183612829565b9150612f9682612f2f565b604082019050919050565b60006020820190508181036000830152612fba81612f7e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061301d603883612829565b915061302882612fc1565b604082019050919050565b6000602082019050818103600083015261304c81613010565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006130af603183612829565b91506130ba82613053565b604082019050919050565b600060208201905081810360008301526130de816130a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061311f82612a57565b915061312a83612a57565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561315f5761315e6130e5565b5b828201905092915050565b600061317582612a57565b915061318083612a57565b925082821015613193576131926130e5565b5b828203905092915050565b7f4e6f7420656e6f75676820746f6b656e73206c65667420746f206275792e0000600082015250565b60006131d4601e83612829565b91506131df8261319e565b602082019050919050565b60006020820190508181036000830152613203816131c7565b9050919050565b600061321582612a57565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613248576132476130e5565b5b600182019050919050565b600061325e82612a57565b915061326983612a57565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132a2576132a16130e5565b5b828202905092915050565b7f416d6f756e74206f662065746865722073656e74206e6f7420636f727265637460008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613309602183612829565b9150613314826132ad565b604082019050919050565b60006020820190508181036000830152613338816132fc565b9050919050565b600081905092915050565b50565b600061335a60008361333f565b91506133658261334a565b600082019050919050565b600061337b8261334d565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006133bb601083612829565b91506133c682613385565b602082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061344d602983612829565b9150613458826133f1565b604082019050919050565b6000602082019050818103600083015261347c81613440565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006134df602a83612829565b91506134ea82613483565b604082019050919050565b6000602082019050818103600083015261350e816134d2565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613571602f83612829565b915061357c82613515565b604082019050919050565b600060208201905081810360008301526135a081613564565b9050919050565b600081905092915050565b60006135bd8261281e565b6135c781856135a7565b93506135d781856020860161283a565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461360581612e6b565b61360f81866135a7565b9450600182166000811461362a576001811461363b5761366e565b60ff1983168652818601935061366e565b613644856135e3565b60005b8381101561366657815481890152600182019150602081019050613647565b838801955050505b50505092915050565b600061368382866135b2565b915061368f82856135b2565b915061369b82846135f8565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613704602683612829565b915061370f826136a8565b604082019050919050565b60006020820190508181036000830152613733816136f7565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613796602c83612829565b91506137a18261373a565b604082019050919050565b600060208201905081810360008301526137c581613789565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613828602583612829565b9150613833826137cc565b604082019050919050565b600060208201905081810360008301526138578161381b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006138ba602483612829565b91506138c58261385e565b604082019050919050565b600060208201905081810360008301526138e9816138ad565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613926601983612829565b9150613931826138f0565b602082019050919050565b6000602082019050818103600083015261395581613919565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006139b8603283612829565b91506139c38261395c565b604082019050919050565b600060208201905081810360008301526139e7816139ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a2882612a57565b9150613a3383612a57565b925082613a4357613a426139ee565b5b828204905092915050565b600060ff82169050919050565b6000613a6682613a4e565b9150613a7183613a4e565b92508260ff03821115613a8757613a866130e5565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613ae882613ac1565b613af28185613acc565b9350613b0281856020860161283a565b613b0b8161286d565b840191505092915050565b6000608082019050613b2b6000830187612aec565b613b386020830186612aec565b613b456040830185612c02565b8181036060830152613b578184613add565b905095945050505050565b600081519050613b7181612736565b92915050565b600060208284031215613b8d57613b8c612700565b5b6000613b9b84828501613b62565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613bda602083612829565b9150613be582613ba4565b602082019050919050565b60006020820190508181036000830152613c0981613bcd565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613c46601c83612829565b9150613c5182613c10565b602082019050919050565b60006020820190508181036000830152613c7581613c39565b905091905056fea26469706673582212203043528c1dcd90c6314bedf55c5ce0862898222f31a069d245dba023b48c910e64736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5167747062684679726442365158765434556148626148724845646f566d55416e7248504c776a4d34474d342f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d57466a484b41556a595a36434765777556467873446f37397032345a336946536933647865696f454d5631452f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : myBaseURI (string): https://gateway.pinata.cloud/ipfs/QmQgtpbhFyrdB6QXvT4UaHbaHrHEdoVmUAnrHPLwjM4GM4/
Arg [1] : myRevealURI (string): https://gateway.pinata.cloud/ipfs/QmWFjHKAUjYZ6CGewuVFxsDo79p24Z3iFSi3dxeioEMV1E/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [3] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [4] : 732f516d5167747062684679726442365158765434556148626148724845646f
Arg [5] : 566d55416e7248504c776a4d34474d342f000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [7] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [8] : 732f516d57466a484b41556a595a36434765777556467873446f37397032345a
Arg [9] : 336946536933647865696f454d5631452f000000000000000000000000000000
Deployed Bytecode Sourcemap
40760:4768:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25574:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42991:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26519:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41832:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28078:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27601:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41631:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28828:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41733:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43099:1014;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45313:212;;;:::i;:::-;;29238:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41538:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42720:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41075:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26213:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25943:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;45177;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26688:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28371:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41108:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29494:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40965:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44337:795;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42832:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41048:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41009:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28597:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25574:305;25676:4;25728:25;25713:40;;;:11;:40;;;;:105;;;;25785:33;25770:48;;;:11;:48;;;;25713:105;:158;;;;25835:36;25859:11;25835:23;:36::i;:::-;25713:158;25693:178;;25574:305;;;:::o;42991:79::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43056:6:::1;43047;;:15;;;;;;;;;;;;;;;;;;42991:79:::0;:::o;26519:100::-;26573:13;26606:5;26599:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26519:100;:::o;41832:118::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41929:13:::1;41914:12;:28;;;;;;;;;;;;:::i;:::-;;41832:118:::0;:::o;28078:221::-;28154:7;28182:16;28190:7;28182;:16::i;:::-;28174:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28267:15;:24;28283:7;28267:24;;;;;;;;;;;;;;;;;;;;;28260:31;;28078:221;;;:::o;27601:411::-;27682:13;27698:23;27713:7;27698:14;:23::i;:::-;27682:39;;27746:5;27740:11;;:2;:11;;;;27732:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:5;27824:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27849:37;27866:5;27873:12;:10;:12::i;:::-;27849:16;:37::i;:::-;27824:62;27802:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:21;27992:2;27996:7;27983:8;:21::i;:::-;27671:341;27601:411;;:::o;41631:94::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41710:7:::1;41698:9;:19;;;;41631:94:::0;:::o;28828:339::-;29023:41;29042:12;:10;:12::i;:::-;29056:7;29023:18;:41::i;:::-;29015:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29131:28;29141:4;29147:2;29151:7;29131:9;:28::i;:::-;28828:339;;;:::o;41733:91::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41806:10:::1;41797:6;;:19;;;;;;;;;;;;;;;;;;41733:91:::0;:::o;43099:1014::-;43176:6;;;;;;;;;;;43175:7;43167:16;;;;;;43214:7;:5;:7::i;:::-;43200:21;;:10;:21;;;43196:910;;;43322:1;43305:14;43277:25;:15;:23;:25::i;:::-;:42;;;;:::i;:::-;:46;;;;:::i;:::-;43264:9;;:59;;43238:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;43409:9;43404:174;43428:14;43424:1;:18;43404:174;;;43468:48;43478:10;43490:25;:15;:23;:25::i;:::-;43468:9;:48::i;:::-;43535:27;:15;:25;:27::i;:::-;43444:3;;;;;:::i;:::-;;;;43404:174;;;;43196:910;;;43694:1;43677:14;43649:25;:15;:23;:25::i;:::-;:42;;;;:::i;:::-;:46;;;;:::i;:::-;43636:9;;:59;;43610:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;43821:14;43815:3;;:20;;;;:::i;:::-;43802:9;:33;;43776:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;43926:9;43921:174;43945:14;43941:1;:18;43921:174;;;43985:48;43995:10;44007:25;:15;:23;:25::i;:::-;43985:9;:48::i;:::-;44052:27;:15;:25;:27::i;:::-;43961:3;;;;;:::i;:::-;;;;43921:174;;;;43196:910;43099:1014;:::o;45313:212::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45370:12:::1;45396:10;45388:24;;45434:21;45388:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45369:101;;;45489:7;45481:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;45358:167;45313:212::o:0;29238:185::-;29376:39;29393:4;29399:2;29403:7;29376:39;;;;;;;;;;;;:16;:39::i;:::-;29238:185;;;:::o;41538:85::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41607:8:::1;41601:3;:14;;;;41538:85:::0;:::o;42720:104::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42805:11:::1;42795:7;:21;;;;;;;;;;;;:::i;:::-;;42720:104:::0;:::o;41075:26::-;;;;;;;;;;;;;:::o;26213:239::-;26285:7;26305:13;26321:7;:16;26329:7;26321:16;;;;;;;;;;;;;;;;;;;;;26305:32;;26373:1;26356:19;;:5;:19;;;;26348:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26439:5;26432:12;;;26213:239;;;:::o;25943:208::-;26015:7;26060:1;26043:19;;:5;:19;;;;26035:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26127:9;:16;26137:5;26127:16;;;;;;;;;;;;;;;;26120:23;;25943:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;45177:::-;45220:7;45247:25;:15;:23;:25::i;:::-;45240:32;;45177:103;:::o;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;26688:104::-;26744:13;26777:7;26770:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26688:104;:::o;28371:155::-;28466:52;28485:12;:10;:12::i;:::-;28499:8;28509;28466:18;:52::i;:::-;28371:155;;:::o;41108:18::-;;;;;;;;;;;;;:::o;29494:328::-;29669:41;29688:12;:10;:12::i;:::-;29702:7;29669:18;:41::i;:::-;29661:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29775:39;29789:4;29795:2;29799:7;29808:5;29775:13;:39::i;:::-;29494:328;;;;:::o;40965:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44337:795::-;44481:13;44534:16;44542:7;44534;:16::i;:::-;44512:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;44640:6;;;;;;;;;;;44636:489;;;44663:28;44694:10;:8;:10::i;:::-;44663:41;;44774:1;44749:14;44743:28;:32;:318;;;;;;;;;;;;;;;;;44879:14;44924:17;44933:7;44924:8;:17::i;:::-;44972:13;44832:180;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44743:318;44719:342;;;;;44636:489;45101:12;45094:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44337:795;;;;:::o;42832:151::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42958:17:::1;42942:13;:33;;;;;;;;;;;;:::i;:::-;;42832:151:::0;:::o;41048:18::-;;;;:::o;41009:32::-;;;;:::o;28597:164::-;28694:4;28718:18;:25;28737:5;28718:25;;;;;;;;;;;;;;;:35;28744:8;28718:35;;;;;;;;;;;;;;;;;;;;;;;;;28711:42;;28597:164;;;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;18328:157::-;18413:4;18452:25;18437:40;;;:11;:40;;;;18430:47;;18328:157;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;31332:127::-;31397:4;31449:1;31421:30;;:7;:16;31429:7;31421:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31414:37;;31332:127;;;:::o;35478:174::-;35580:2;35553:15;:24;35569:7;35553:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35636:7;35632:2;35598:46;;35607:23;35622:7;35607:14;:23::i;:::-;35598:46;;;;;;;;;;;;35478:174;;:::o;31626:348::-;31719:4;31744:16;31752:7;31744;:16::i;:::-;31736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31820:13;31836:23;31851:7;31836:14;:23::i;:::-;31820:39;;31889:5;31878:16;;:7;:16;;;:51;;;;31922:7;31898:31;;:20;31910:7;31898:11;:20::i;:::-;:31;;;31878:51;:87;;;;31933:32;31950:5;31957:7;31933:16;:32::i;:::-;31878:87;31870:96;;;31626:348;;;;:::o;34735:625::-;34894:4;34867:31;;:23;34882:7;34867:14;:23::i;:::-;:31;;;34859:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:1;34959:16;;:2;:16;;;;34951:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35029:39;35050:4;35056:2;35060:7;35029:20;:39::i;:::-;35133:29;35150:1;35154:7;35133:8;:29::i;:::-;35194:1;35175:9;:15;35185:4;35175:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35223:1;35206:9;:13;35216:2;35206:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35254:2;35235:7;:16;35243:7;35235:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35293:7;35289:2;35274:27;;35283:4;35274:27;;;;;;;;;;;;35314:38;35334:4;35340:2;35344:7;35314:19;:38::i;:::-;34735:625;;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;32316:110::-;32392:26;32402:2;32406:7;32392:26;;;;;;;;;;;;:9;:26::i;:::-;32316:110;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;35794:315::-;35949:8;35940:17;;:5;:17;;;;35932:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36036:8;35998:18;:25;36017:5;35998:25;;;;;;;;;;;;;;;:35;36024:8;35998:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36082:8;36060:41;;36075:5;36060:41;;;36092:8;36060:41;;;;;;:::i;:::-;;;;;;;;35794:315;;;:::o;30704:::-;30861:28;30871:4;30877:2;30881:7;30861:9;:28::i;:::-;30908:48;30931:4;30937:2;30941:7;30950:5;30908:22;:48::i;:::-;30900:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:315;;;;:::o;42604:108::-;42664:13;42697:7;42690:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42604:108;:::o;41958:621::-;42038:27;42093:1;42087:2;:7;42083:50;;;42111:10;;;;;;;;;;;;;;;;;;;;;42083:50;42143:9;42155:2;42143:14;;42168:11;42190:69;42202:1;42197;:6;42190:69;;42220:5;;;;;:::i;:::-;;;;42245:2;42240:7;;;;;:::i;:::-;;;42190:69;;;42269:17;42299:3;42289:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42269:34;;42314:9;42326:3;42314:15;;42340:202;42353:1;42347:2;:7;42340:202;;42379:1;42375;:5;;;;:::i;:::-;42371:9;;42395:10;42437:2;42431;42426;:7;;;;:::i;:::-;42425:14;;;;:::i;:::-;42420:2;:19;;;;:::i;:::-;42409:2;:31;;;;:::i;:::-;42395:46;;42456:9;42475:4;42468:12;;42456:24;;42505:2;42495:4;42500:1;42495:7;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;42528:2;42522:8;;;;;:::i;:::-;;;42356:186;;42340:202;;;42566:4;42552:19;;;;;;41958:621;;;;:::o;38045:126::-;;;;:::o;38556:125::-;;;;:::o;32653:321::-;32783:18;32789:2;32793:7;32783:5;:18::i;:::-;32834:54;32865:1;32869:2;32873:7;32882:5;32834:22;:54::i;:::-;32812:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32653:321;;;:::o;36674:799::-;36829:4;36850:15;:2;:13;;;:15::i;:::-;36846:620;;;36902:2;36886:36;;;36923:12;:10;:12::i;:::-;36937:4;36943:7;36952:5;36886:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36882:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37145:1;37128:6;:13;:18;37124:272;;;37171:60;;;;;;;;;;:::i;:::-;;;;;;;;37124:272;37346:6;37340:13;37331:6;37327:2;37323:15;37316:38;36882:529;37019:41;;;37009:51;;;:6;:51;;;;37002:58;;;;;36846:620;37450:4;37443:11;;36674:799;;;;;;;:::o;33310:439::-;33404:1;33390:16;;:2;:16;;;;33382:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33463:16;33471:7;33463;:16::i;:::-;33462:17;33454:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33525:45;33554:1;33558:2;33562:7;33525:20;:45::i;:::-;33600:1;33583:9;:13;33593:2;33583:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33631:2;33612:7;:16;33620:7;33612:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33676:7;33672:2;33651:33;;33668:1;33651:33;;;;;;;;;;;;33697:44;33725:1;33729:2;33733:7;33697:19;:44::i;:::-;33310:439;;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334: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:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:117::-;3607:1;3604;3597:12;3621:117;3730:1;3727;3720:12;3744:180;3792:77;3789:1;3782:88;3889:4;3886:1;3879:15;3913:4;3910:1;3903:15;3930:281;4013:27;4035:4;4013:27;:::i;:::-;4005:6;4001:40;4143:6;4131:10;4128:22;4107:18;4095:10;4092:34;4089:62;4086:88;;;4154:18;;:::i;:::-;4086:88;4194:10;4190:2;4183:22;3973:238;3930:281;;:::o;4217:129::-;4251:6;4278:20;;:::i;:::-;4268:30;;4307:33;4335:4;4327:6;4307:33;:::i;:::-;4217:129;;;:::o;4352:308::-;4414:4;4504:18;4496:6;4493:30;4490:56;;;4526:18;;:::i;:::-;4490:56;4564:29;4586:6;4564:29;:::i;:::-;4556:37;;4648:4;4642;4638:15;4630:23;;4352:308;;;:::o;4666:154::-;4750:6;4745:3;4740;4727:30;4812:1;4803:6;4798:3;4794:16;4787:27;4666:154;;;:::o;4826:412::-;4904:5;4929:66;4945:49;4987:6;4945:49;:::i;:::-;4929:66;:::i;:::-;4920:75;;5018:6;5011:5;5004:21;5056:4;5049:5;5045:16;5094:3;5085:6;5080:3;5076:16;5073:25;5070:112;;;5101:79;;:::i;:::-;5070:112;5191:41;5225:6;5220:3;5215;5191:41;:::i;:::-;4910:328;4826:412;;;;;:::o;5258:340::-;5314:5;5363:3;5356:4;5348:6;5344:17;5340:27;5330:122;;5371:79;;:::i;:::-;5330:122;5488:6;5475:20;5513:79;5588:3;5580:6;5573:4;5565:6;5561:17;5513:79;:::i;:::-;5504:88;;5320:278;5258:340;;;;:::o;5604:509::-;5673:6;5722:2;5710:9;5701:7;5697:23;5693:32;5690:119;;;5728:79;;:::i;:::-;5690:119;5876:1;5865:9;5861:17;5848:31;5906:18;5898:6;5895:30;5892:117;;;5928:79;;:::i;:::-;5892:117;6033:63;6088:7;6079:6;6068:9;6064:22;6033:63;:::i;:::-;6023:73;;5819:287;5604:509;;;;:::o;6119:77::-;6156:7;6185:5;6174:16;;6119:77;;;:::o;6202:122::-;6275:24;6293:5;6275:24;:::i;:::-;6268:5;6265:35;6255:63;;6314:1;6311;6304:12;6255:63;6202:122;:::o;6330:139::-;6376:5;6414:6;6401:20;6392:29;;6430:33;6457:5;6430:33;:::i;:::-;6330:139;;;;:::o;6475:329::-;6534:6;6583:2;6571:9;6562:7;6558:23;6554:32;6551:119;;;6589:79;;:::i;:::-;6551:119;6709:1;6734:53;6779:7;6770:6;6759:9;6755:22;6734:53;:::i;:::-;6724:63;;6680:117;6475:329;;;;:::o;6810:126::-;6847:7;6887:42;6880:5;6876:54;6865:65;;6810:126;;;:::o;6942:96::-;6979:7;7008:24;7026:5;7008:24;:::i;:::-;6997:35;;6942:96;;;:::o;7044:118::-;7131:24;7149:5;7131:24;:::i;:::-;7126:3;7119:37;7044:118;;:::o;7168:222::-;7261:4;7299:2;7288:9;7284:18;7276:26;;7312:71;7380:1;7369:9;7365:17;7356:6;7312:71;:::i;:::-;7168:222;;;;:::o;7396:122::-;7469:24;7487:5;7469:24;:::i;:::-;7462:5;7459:35;7449:63;;7508:1;7505;7498:12;7449:63;7396:122;:::o;7524:139::-;7570:5;7608:6;7595:20;7586:29;;7624:33;7651:5;7624:33;:::i;:::-;7524:139;;;;:::o;7669:474::-;7737:6;7745;7794:2;7782:9;7773:7;7769:23;7765:32;7762:119;;;7800:79;;:::i;:::-;7762:119;7920:1;7945:53;7990:7;7981:6;7970:9;7966:22;7945:53;:::i;:::-;7935:63;;7891:117;8047:2;8073:53;8118:7;8109:6;8098:9;8094:22;8073:53;:::i;:::-;8063:63;;8018:118;7669:474;;;;;:::o;8149:619::-;8226:6;8234;8242;8291:2;8279:9;8270:7;8266:23;8262:32;8259:119;;;8297:79;;:::i;:::-;8259:119;8417:1;8442:53;8487:7;8478:6;8467:9;8463:22;8442:53;:::i;:::-;8432:63;;8388:117;8544:2;8570:53;8615:7;8606:6;8595:9;8591:22;8570:53;:::i;:::-;8560:63;;8515:118;8672:2;8698:53;8743:7;8734:6;8723:9;8719:22;8698:53;:::i;:::-;8688:63;;8643:118;8149:619;;;;;:::o;8774:329::-;8833:6;8882:2;8870:9;8861:7;8857:23;8853:32;8850:119;;;8888:79;;:::i;:::-;8850:119;9008:1;9033:53;9078:7;9069:6;9058:9;9054:22;9033:53;:::i;:::-;9023:63;;8979:117;8774:329;;;;:::o;9109:118::-;9196:24;9214:5;9196:24;:::i;:::-;9191:3;9184:37;9109:118;;:::o;9233:222::-;9326:4;9364:2;9353:9;9349:18;9341:26;;9377:71;9445:1;9434:9;9430:17;9421:6;9377:71;:::i;:::-;9233:222;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:307::-;9996:4;10086:18;10078:6;10075:30;10072:56;;;10108:18;;:::i;:::-;10072:56;10146:29;10168:6;10146:29;:::i;:::-;10138:37;;10230:4;10224;10220:15;10212:23;;9935:307;;;:::o;10248:410::-;10325:5;10350:65;10366:48;10407:6;10366:48;:::i;:::-;10350:65;:::i;:::-;10341:74;;10438:6;10431:5;10424:21;10476:4;10469:5;10465:16;10514:3;10505:6;10500:3;10496:16;10493:25;10490:112;;;10521:79;;:::i;:::-;10490:112;10611:41;10645:6;10640:3;10635;10611:41;:::i;:::-;10331:327;10248:410;;;;;:::o;10677:338::-;10732:5;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10906:6;10893:20;10931:78;11005:3;10997:6;10990:4;10982:6;10978:17;10931:78;:::i;:::-;10922:87;;10738:277;10677:338;;;;:::o;11021:943::-;11116:6;11124;11132;11140;11189:3;11177:9;11168:7;11164:23;11160:33;11157:120;;;11196:79;;:::i;:::-;11157:120;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11727:2;11716:9;11712:18;11699:32;11758:18;11750:6;11747:30;11744:117;;;11780:79;;:::i;:::-;11744:117;11885:62;11939:7;11930:6;11919:9;11915:22;11885:62;:::i;:::-;11875:72;;11670:287;11021:943;;;;;;;:::o;11970:474::-;12038:6;12046;12095:2;12083:9;12074:7;12070:23;12066:32;12063:119;;;12101:79;;:::i;:::-;12063:119;12221:1;12246:53;12291:7;12282:6;12271:9;12267:22;12246:53;:::i;:::-;12236:63;;12192:117;12348:2;12374:53;12419:7;12410:6;12399:9;12395:22;12374:53;:::i;:::-;12364:63;;12319:118;11970:474;;;;;:::o;12450:182::-;12590:34;12586:1;12578:6;12574:14;12567:58;12450:182;:::o;12638:366::-;12780:3;12801:67;12865:2;12860:3;12801:67;:::i;:::-;12794:74;;12877:93;12966:3;12877:93;:::i;:::-;12995:2;12990:3;12986:12;12979:19;;12638:366;;;:::o;13010:419::-;13176:4;13214:2;13203:9;13199:18;13191:26;;13263:9;13257:4;13253:20;13249:1;13238:9;13234:17;13227:47;13291:131;13417:4;13291:131;:::i;:::-;13283:139;;13010:419;;;:::o;13435:180::-;13483:77;13480:1;13473:88;13580:4;13577:1;13570:15;13604:4;13601:1;13594:15;13621:320;13665:6;13702:1;13696:4;13692:12;13682:22;;13749:1;13743:4;13739:12;13770:18;13760:81;;13826:4;13818:6;13814:17;13804:27;;13760:81;13888:2;13880:6;13877:14;13857:18;13854:38;13851:84;;;13907:18;;:::i;:::-;13851:84;13672:269;13621:320;;;:::o;13947:231::-;14087:34;14083:1;14075:6;14071:14;14064:58;14156:14;14151:2;14143:6;14139:15;14132:39;13947:231;:::o;14184:366::-;14326:3;14347:67;14411:2;14406:3;14347:67;:::i;:::-;14340:74;;14423:93;14512:3;14423:93;:::i;:::-;14541:2;14536:3;14532:12;14525:19;;14184:366;;;:::o;14556:419::-;14722:4;14760:2;14749:9;14745:18;14737:26;;14809:9;14803:4;14799:20;14795:1;14784:9;14780:17;14773:47;14837:131;14963:4;14837:131;:::i;:::-;14829:139;;14556:419;;;:::o;14981:220::-;15121:34;15117:1;15109:6;15105:14;15098:58;15190:3;15185:2;15177:6;15173:15;15166:28;14981:220;:::o;15207:366::-;15349:3;15370:67;15434:2;15429:3;15370:67;:::i;:::-;15363:74;;15446:93;15535:3;15446:93;:::i;:::-;15564:2;15559:3;15555:12;15548:19;;15207:366;;;:::o;15579:419::-;15745:4;15783:2;15772:9;15768:18;15760:26;;15832:9;15826:4;15822:20;15818:1;15807:9;15803:17;15796:47;15860:131;15986:4;15860:131;:::i;:::-;15852:139;;15579:419;;;:::o;16004:243::-;16144:34;16140:1;16132:6;16128:14;16121:58;16213:26;16208:2;16200:6;16196:15;16189:51;16004:243;:::o;16253:366::-;16395:3;16416:67;16480:2;16475:3;16416:67;:::i;:::-;16409:74;;16492:93;16581:3;16492:93;:::i;:::-;16610:2;16605:3;16601:12;16594:19;;16253:366;;;:::o;16625:419::-;16791:4;16829:2;16818:9;16814:18;16806:26;;16878:9;16872:4;16868:20;16864:1;16853:9;16849:17;16842:47;16906:131;17032:4;16906:131;:::i;:::-;16898:139;;16625:419;;;:::o;17050:236::-;17190:34;17186:1;17178:6;17174:14;17167:58;17259:19;17254:2;17246:6;17242:15;17235:44;17050:236;:::o;17292:366::-;17434:3;17455:67;17519:2;17514:3;17455:67;:::i;:::-;17448:74;;17531:93;17620:3;17531:93;:::i;:::-;17649:2;17644:3;17640:12;17633:19;;17292:366;;;:::o;17664:419::-;17830:4;17868:2;17857:9;17853:18;17845:26;;17917:9;17911:4;17907:20;17903:1;17892:9;17888:17;17881:47;17945:131;18071:4;17945:131;:::i;:::-;17937:139;;17664:419;;;:::o;18089:180::-;18137:77;18134:1;18127:88;18234:4;18231:1;18224:15;18258:4;18255:1;18248:15;18275:305;18315:3;18334:20;18352:1;18334:20;:::i;:::-;18329:25;;18368:20;18386:1;18368:20;:::i;:::-;18363:25;;18522:1;18454:66;18450:74;18447:1;18444:81;18441:107;;;18528:18;;:::i;:::-;18441:107;18572:1;18569;18565:9;18558:16;;18275:305;;;;:::o;18586:191::-;18626:4;18646:20;18664:1;18646:20;:::i;:::-;18641:25;;18680:20;18698:1;18680:20;:::i;:::-;18675:25;;18719:1;18716;18713:8;18710:34;;;18724:18;;:::i;:::-;18710:34;18769:1;18766;18762:9;18754:17;;18586:191;;;;:::o;18783:180::-;18923:32;18919:1;18911:6;18907:14;18900:56;18783:180;:::o;18969:366::-;19111:3;19132:67;19196:2;19191:3;19132:67;:::i;:::-;19125:74;;19208:93;19297:3;19208:93;:::i;:::-;19326:2;19321:3;19317:12;19310:19;;18969:366;;;:::o;19341:419::-;19507:4;19545:2;19534:9;19530:18;19522:26;;19594:9;19588:4;19584:20;19580:1;19569:9;19565:17;19558:47;19622:131;19748:4;19622:131;:::i;:::-;19614:139;;19341:419;;;:::o;19766:233::-;19805:3;19828:24;19846:5;19828:24;:::i;:::-;19819:33;;19874:66;19867:5;19864:77;19861:103;;;19944:18;;:::i;:::-;19861:103;19991:1;19984:5;19980:13;19973:20;;19766:233;;;:::o;20005:348::-;20045:7;20068:20;20086:1;20068:20;:::i;:::-;20063:25;;20102:20;20120:1;20102:20;:::i;:::-;20097:25;;20290:1;20222:66;20218:74;20215:1;20212:81;20207:1;20200:9;20193:17;20189:105;20186:131;;;20297:18;;:::i;:::-;20186:131;20345:1;20342;20338:9;20327:20;;20005:348;;;;:::o;20359:220::-;20499:34;20495:1;20487:6;20483:14;20476:58;20568:3;20563:2;20555:6;20551:15;20544:28;20359:220;:::o;20585:366::-;20727:3;20748:67;20812:2;20807:3;20748:67;:::i;:::-;20741:74;;20824:93;20913:3;20824:93;:::i;:::-;20942:2;20937:3;20933:12;20926:19;;20585:366;;;:::o;20957:419::-;21123:4;21161:2;21150:9;21146:18;21138:26;;21210:9;21204:4;21200:20;21196:1;21185:9;21181:17;21174:47;21238:131;21364:4;21238:131;:::i;:::-;21230:139;;20957:419;;;:::o;21382:147::-;21483:11;21520:3;21505:18;;21382:147;;;;:::o;21535:114::-;;:::o;21655:398::-;21814:3;21835:83;21916:1;21911:3;21835:83;:::i;:::-;21828:90;;21927:93;22016:3;21927:93;:::i;:::-;22045:1;22040:3;22036:11;22029:18;;21655:398;;;:::o;22059:379::-;22243:3;22265:147;22408:3;22265:147;:::i;:::-;22258:154;;22429:3;22422:10;;22059:379;;;:::o;22444:166::-;22584:18;22580:1;22572:6;22568:14;22561:42;22444:166;:::o;22616:366::-;22758:3;22779:67;22843:2;22838:3;22779:67;:::i;:::-;22772:74;;22855:93;22944:3;22855:93;:::i;:::-;22973:2;22968:3;22964:12;22957:19;;22616:366;;;:::o;22988:419::-;23154:4;23192:2;23181:9;23177:18;23169:26;;23241:9;23235:4;23231:20;23227:1;23216:9;23212:17;23205:47;23269:131;23395:4;23269:131;:::i;:::-;23261:139;;22988:419;;;:::o;23413:228::-;23553:34;23549:1;23541:6;23537:14;23530:58;23622:11;23617:2;23609:6;23605:15;23598:36;23413:228;:::o;23647:366::-;23789:3;23810:67;23874:2;23869:3;23810:67;:::i;:::-;23803:74;;23886:93;23975:3;23886:93;:::i;:::-;24004:2;23999:3;23995:12;23988:19;;23647:366;;;:::o;24019:419::-;24185:4;24223:2;24212:9;24208:18;24200:26;;24272:9;24266:4;24262:20;24258:1;24247:9;24243:17;24236:47;24300:131;24426:4;24300:131;:::i;:::-;24292:139;;24019:419;;;:::o;24444:229::-;24584:34;24580:1;24572:6;24568:14;24561:58;24653:12;24648:2;24640:6;24636:15;24629:37;24444:229;:::o;24679:366::-;24821:3;24842:67;24906:2;24901:3;24842:67;:::i;:::-;24835:74;;24918:93;25007:3;24918:93;:::i;:::-;25036:2;25031:3;25027:12;25020:19;;24679:366;;;:::o;25051:419::-;25217:4;25255:2;25244:9;25240:18;25232:26;;25304:9;25298:4;25294:20;25290:1;25279:9;25275:17;25268:47;25332:131;25458:4;25332:131;:::i;:::-;25324:139;;25051:419;;;:::o;25476:234::-;25616:34;25612:1;25604:6;25600:14;25593:58;25685:17;25680:2;25672:6;25668:15;25661:42;25476:234;:::o;25716:366::-;25858:3;25879:67;25943:2;25938:3;25879:67;:::i;:::-;25872:74;;25955:93;26044:3;25955:93;:::i;:::-;26073:2;26068:3;26064:12;26057:19;;25716:366;;;:::o;26088:419::-;26254:4;26292:2;26281:9;26277:18;26269:26;;26341:9;26335:4;26331:20;26327:1;26316:9;26312:17;26305:47;26369:131;26495:4;26369:131;:::i;:::-;26361:139;;26088:419;;;:::o;26513:148::-;26615:11;26652:3;26637:18;;26513:148;;;;:::o;26667:377::-;26773:3;26801:39;26834:5;26801:39;:::i;:::-;26856:89;26938:6;26933:3;26856:89;:::i;:::-;26849:96;;26954:52;26999:6;26994:3;26987:4;26980:5;26976:16;26954:52;:::i;:::-;27031:6;27026:3;27022:16;27015:23;;26777:267;26667:377;;;;:::o;27050:141::-;27099:4;27122:3;27114:11;;27145:3;27142:1;27135:14;27179:4;27176:1;27166:18;27158:26;;27050:141;;;:::o;27221:845::-;27324:3;27361:5;27355:12;27390:36;27416:9;27390:36;:::i;:::-;27442:89;27524:6;27519:3;27442:89;:::i;:::-;27435:96;;27562:1;27551:9;27547:17;27578:1;27573:137;;;;27724:1;27719:341;;;;27540:520;;27573:137;27657:4;27653:9;27642;27638:25;27633:3;27626:38;27693:6;27688:3;27684:16;27677:23;;27573:137;;27719:341;27786:38;27818:5;27786:38;:::i;:::-;27846:1;27860:154;27874:6;27871:1;27868:13;27860:154;;;27948:7;27942:14;27938:1;27933:3;27929:11;27922:35;27998:1;27989:7;27985:15;27974:26;;27896:4;27893:1;27889:12;27884:17;;27860:154;;;28043:6;28038:3;28034:16;28027:23;;27726:334;;27540:520;;27328:738;;27221:845;;;;:::o;28072:589::-;28297:3;28319:95;28410:3;28401:6;28319:95;:::i;:::-;28312:102;;28431:95;28522:3;28513:6;28431:95;:::i;:::-;28424:102;;28543:92;28631:3;28622:6;28543:92;:::i;:::-;28536:99;;28652:3;28645:10;;28072:589;;;;;;:::o;28667:225::-;28807:34;28803:1;28795:6;28791:14;28784:58;28876:8;28871:2;28863:6;28859:15;28852:33;28667:225;:::o;28898:366::-;29040:3;29061:67;29125:2;29120:3;29061:67;:::i;:::-;29054:74;;29137:93;29226:3;29137:93;:::i;:::-;29255:2;29250:3;29246:12;29239:19;;28898:366;;;:::o;29270:419::-;29436:4;29474:2;29463:9;29459:18;29451:26;;29523:9;29517:4;29513:20;29509:1;29498:9;29494:17;29487:47;29551:131;29677:4;29551:131;:::i;:::-;29543:139;;29270:419;;;:::o;29695:231::-;29835:34;29831:1;29823:6;29819:14;29812:58;29904:14;29899:2;29891:6;29887:15;29880:39;29695:231;:::o;29932:366::-;30074:3;30095:67;30159:2;30154:3;30095:67;:::i;:::-;30088:74;;30171:93;30260:3;30171:93;:::i;:::-;30289:2;30284:3;30280:12;30273:19;;29932:366;;;:::o;30304:419::-;30470:4;30508:2;30497:9;30493:18;30485:26;;30557:9;30551:4;30547:20;30543:1;30532:9;30528:17;30521:47;30585:131;30711:4;30585:131;:::i;:::-;30577:139;;30304:419;;;:::o;30729:224::-;30869:34;30865:1;30857:6;30853:14;30846:58;30938:7;30933:2;30925:6;30921:15;30914:32;30729:224;:::o;30959:366::-;31101:3;31122:67;31186:2;31181:3;31122:67;:::i;:::-;31115:74;;31198:93;31287:3;31198:93;:::i;:::-;31316:2;31311:3;31307:12;31300:19;;30959:366;;;:::o;31331:419::-;31497:4;31535:2;31524:9;31520:18;31512:26;;31584:9;31578:4;31574:20;31570:1;31559:9;31555:17;31548:47;31612:131;31738:4;31612:131;:::i;:::-;31604:139;;31331:419;;;:::o;31756:223::-;31896:34;31892:1;31884:6;31880:14;31873:58;31965:6;31960:2;31952:6;31948:15;31941:31;31756:223;:::o;31985:366::-;32127:3;32148:67;32212:2;32207:3;32148:67;:::i;:::-;32141:74;;32224:93;32313:3;32224:93;:::i;:::-;32342:2;32337:3;32333:12;32326:19;;31985:366;;;:::o;32357:419::-;32523:4;32561:2;32550:9;32546:18;32538:26;;32610:9;32604:4;32600:20;32596:1;32585:9;32581:17;32574:47;32638:131;32764:4;32638:131;:::i;:::-;32630:139;;32357:419;;;:::o;32782:175::-;32922:27;32918:1;32910:6;32906:14;32899:51;32782:175;:::o;32963:366::-;33105:3;33126:67;33190:2;33185:3;33126:67;:::i;:::-;33119:74;;33202:93;33291:3;33202:93;:::i;:::-;33320:2;33315:3;33311:12;33304:19;;32963:366;;;:::o;33335:419::-;33501:4;33539:2;33528:9;33524:18;33516:26;;33588:9;33582:4;33578:20;33574:1;33563:9;33559:17;33552:47;33616:131;33742:4;33616:131;:::i;:::-;33608:139;;33335:419;;;:::o;33760:237::-;33900:34;33896:1;33888:6;33884:14;33877:58;33969:20;33964:2;33956:6;33952:15;33945:45;33760:237;:::o;34003:366::-;34145:3;34166:67;34230:2;34225:3;34166:67;:::i;:::-;34159:74;;34242:93;34331:3;34242:93;:::i;:::-;34360:2;34355:3;34351:12;34344:19;;34003:366;;;:::o;34375:419::-;34541:4;34579:2;34568:9;34564:18;34556:26;;34628:9;34622:4;34618:20;34614:1;34603:9;34599:17;34592:47;34656:131;34782:4;34656:131;:::i;:::-;34648:139;;34375:419;;;:::o;34800:180::-;34848:77;34845:1;34838:88;34945:4;34942:1;34935:15;34969:4;34966:1;34959:15;34986:185;35026:1;35043:20;35061:1;35043:20;:::i;:::-;35038:25;;35077:20;35095:1;35077:20;:::i;:::-;35072:25;;35116:1;35106:35;;35121:18;;:::i;:::-;35106:35;35163:1;35160;35156:9;35151:14;;34986:185;;;;:::o;35177:86::-;35212:7;35252:4;35245:5;35241:16;35230:27;;35177:86;;;:::o;35269:237::-;35307:3;35326:18;35342:1;35326:18;:::i;:::-;35321:23;;35358:18;35374:1;35358:18;:::i;:::-;35353:23;;35448:1;35442:4;35438:12;35435:1;35432:19;35429:45;;;35454:18;;:::i;:::-;35429:45;35498:1;35495;35491:9;35484:16;;35269:237;;;;:::o;35512:180::-;35560:77;35557:1;35550:88;35657:4;35654:1;35647:15;35681:4;35678:1;35671:15;35698:98;35749:6;35783:5;35777:12;35767:22;;35698:98;;;:::o;35802:168::-;35885:11;35919:6;35914:3;35907:19;35959:4;35954:3;35950:14;35935:29;;35802:168;;;;:::o;35976:360::-;36062:3;36090:38;36122:5;36090:38;:::i;:::-;36144:70;36207:6;36202:3;36144:70;:::i;:::-;36137:77;;36223:52;36268:6;36263:3;36256:4;36249:5;36245:16;36223:52;:::i;:::-;36300:29;36322:6;36300:29;:::i;:::-;36295:3;36291:39;36284:46;;36066:270;35976:360;;;;:::o;36342:640::-;36537:4;36575:3;36564:9;36560:19;36552:27;;36589:71;36657:1;36646:9;36642:17;36633:6;36589:71;:::i;:::-;36670:72;36738:2;36727:9;36723:18;36714:6;36670:72;:::i;:::-;36752;36820:2;36809:9;36805:18;36796:6;36752:72;:::i;:::-;36871:9;36865:4;36861:20;36856:2;36845:9;36841:18;36834:48;36899:76;36970:4;36961:6;36899:76;:::i;:::-;36891:84;;36342:640;;;;;;;:::o;36988:141::-;37044:5;37075:6;37069:13;37060:22;;37091:32;37117:5;37091:32;:::i;:::-;36988:141;;;;:::o;37135:349::-;37204:6;37253:2;37241:9;37232:7;37228:23;37224:32;37221:119;;;37259:79;;:::i;:::-;37221:119;37379:1;37404:63;37459:7;37450:6;37439:9;37435:22;37404:63;:::i;:::-;37394:73;;37350:127;37135:349;;;;:::o;37490:182::-;37630:34;37626:1;37618:6;37614:14;37607:58;37490:182;:::o;37678:366::-;37820:3;37841:67;37905:2;37900:3;37841:67;:::i;:::-;37834:74;;37917:93;38006:3;37917:93;:::i;:::-;38035:2;38030:3;38026:12;38019:19;;37678:366;;;:::o;38050:419::-;38216:4;38254:2;38243:9;38239:18;38231:26;;38303:9;38297:4;38293:20;38289:1;38278:9;38274:17;38267:47;38331:131;38457:4;38331:131;:::i;:::-;38323:139;;38050:419;;;:::o;38475:178::-;38615:30;38611:1;38603:6;38599:14;38592:54;38475:178;:::o;38659:366::-;38801:3;38822:67;38886:2;38881:3;38822:67;:::i;:::-;38815:74;;38898:93;38987:3;38898:93;:::i;:::-;39016:2;39011:3;39007:12;39000:19;;38659:366;;;:::o;39031:419::-;39197:4;39235:2;39224:9;39220:18;39212:26;;39284:9;39278:4;39274:20;39270:1;39259:9;39255:17;39248:47;39312:131;39438:4;39312:131;:::i;:::-;39304:139;;39031:419;;;:::o
Swarm Source
ipfs://3043528c1dcd90c6314bedf55c5ce0862898222f31a069d245dba023b48c910e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 24 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.