More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14194905 | 1032 days ago | 3.9 ETH |
Loading...
Loading
Contract Name:
WACK
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-11 */ // SPDX-License-Identifier: MIT /* ██╗ ██╗ █████╗ ██████╗██╗ ██╗██╗ ██║ ██║██╔══██╗██╔════╝██║ ██╔╝██║ ██║ █╗ ██║███████║██║ █████╔╝ ██║ ██║███╗██║██╔══██║██║ ██╔═██╗ ╚═╝ ╚███╔███╔╝██║ ██║╚██████╗██║ ██╗██╗ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ By Devko.dev#7286 */ // 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 v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } } // File: @openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Holder.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } } // 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 v4.4.1 (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); } /** * @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); } /** * @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 of token that is not own"); 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); } /** * @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 {} } // File: contract.sol pragma solidity ^0.8.2; contract WACK is ERC721, ERC1155Holder, Ownable { using Counters for Counters.Counter; mapping(uint256 => uint256) public tokenIds; using Strings for uint256; string private _tokenBaseURI = "https://gateway.pinata.cloud/ipfs/QmbHhnkMmeZ3WPNnZoHr5YqAyHApPhPaAEJth4qqPdAQvk/"; uint256 public WACK_MAX = 26; uint256 public WACK_PRICE = 0.15 ether; mapping(address => bool) public WHITELIST; bool public mintLive; bool public mintWLLive; Counters.Counter public _tokensMinted; constructor() ERC721("WACK", "WACK") { WHITELIST[0xd12BF6b7D7F4D8F8BDe032CD6CDd06aF298A8F7f] = true; WHITELIST[0xF1c77f664a05ba2Cb11B00a9583Fec8b85a0d5c2] = true; WHITELIST[0x874fd599ea7b6c34FA5DAfd8d08Da89Da0A61B7f] = true; WHITELIST[0xA9263191b5cAfcc0BE2C8F72245124472F3C9082] = true; WHITELIST[0xc29e526E7F60C9941E8086197c05944f21d85Eb6] = true; WHITELIST[0x5C854cd12bf090A604d6f526FaA5Fe07F29Fdb29] = true; WHITELIST[0x84C885ceD0010564F6E729A2553A06153B18B917] = true; WHITELIST[0x3A8B8d1d156477BF6Fd20f248eF8b2f1d03fB251] = true; WHITELIST[0x700e1C20FbB2a273f7dec0Cec6333F99B9141ed3] = true; WHITELIST[0x8983ad6D63D7AB3701D74E1E72Fd9DaDF113F3F9] = true; WHITELIST[0xD1d6c35052f2c21d3B5652B2C1F50b075E51D842] = true; WHITELIST[0x54D031E6e03b4Dc8f8BB318FA5410c46aF063bfD] = true; WHITELIST[0xFC8723d8278D470Db2768455b5CB6a876Dd76755] = true; WHITELIST[0x76Fb3c5ABe51698f18eB8Cf34B0e6f079Aa273CF] = true; WHITELIST[0x5A6fE598c161923d355cb82B4323299894Fab15F] = true; WHITELIST[0x85C385dA631F7CF7436304480040d2F36B791336] = true; WHITELIST[0xf941F9b6A5ad002C1f40e09510d6a298B0880651] = true; WHITELIST[0x87a4Fa61CBF1BEB104a66e096da26229c636efb5] = true; WHITELIST[0x60dA1A6e343Ae0269e86395f7fccCd77F6824b67] = true; WHITELIST[0x08c3d4a4fE4e28F4ea0402fcCF35D5B81E8f1EC8] = true; WHITELIST[0xBAaEac4Dd925D0BA9CD608Dbe3C390e6E4fa2816] = true; WHITELIST[0xeA5BF3c40d34AA3397F5306FF7e9A34943cB61E6] = true; WHITELIST[0x85400bd71e1a94802E6C9eaD32a6F79b74B6D787] = true; WHITELIST[0xf958C5EB003C527488E887605aB55fD76B6B9e88] = true; WHITELIST[0xcd5F8Ab0C26639F8fAf89a0D373cD1e7AB18d6eE] = true; WHITELIST[0xa949697af62155768Cf95A074738930CB9Cd497C] = true; tokenIds[37113267255361574183604483851777514579287633297905833288271730518549422145537] = 174; tokenIds[37113267255361574183604483851777514579287633297905833288271730517449910517761] = 173; tokenIds[37113267255361574183604483851777514579287633297905833288271730516350398889985] = 172; tokenIds[37113267255361574183604483851777514579287633297905833288271730515250887262209] = 171; tokenIds[37113267255361574183604483851777514579287633297905833288271730514151375634433] = 170; tokenIds[37113267255361574183604483851777514579287633297905833288271730513051864006657] = 169; tokenIds[37113267255361574183604483851777514579287633297905833288271730511952352378881] = 168; tokenIds[37113267255361574183604483851777514579287633297905833288271730510852840751105] = 167; tokenIds[37113267255361574183604483851777514579287633297905833288271730509753329123329] = 166; tokenIds[37113267255361574183604483851777514579287633297905833288271730508653817495553] = 165; tokenIds[37113267255361574183604483851777514579287633297905833288271730507554305867777] = 164; tokenIds[37113267255361574183604483851777514579287633297905833288271730506454794240001] = 163; tokenIds[37113267255361574183604483851777514579287633297905833288271730505355282612225] = 162; tokenIds[37113267255361574183604483851777514579287633297905833288271730504255770984449] = 161; tokenIds[37113267255361574183604483851777514579287633297905833288271730503156259356673] = 160; tokenIds[37113267255361574183604483851777514579287633297905833288271730502056747728897] = 159; tokenIds[37113267255361574183604483851777514579287633297905833288271730500957236101121] = 158; tokenIds[37113267255361574183604483851777514579287633297905833288271730499857724473345] = 157; tokenIds[37113267255361574183604483851777514579287633297905833288271730498758212845569] = 156; tokenIds[37113267255361574183604483851777514579287633297905833288271730497658701217793] = 155; tokenIds[37113267255361574183604483851777514579287633297905833288271730496559189590017] = 154; tokenIds[37113267255361574183604483851777514579287633297905833288271730495459677962241] = 153; tokenIds[37113267255361574183604483851777514579287633297905833288271730494360166334465] = 152; tokenIds[37113267255361574183604483851777514579287633297905833288271730493260654706689] = 151; tokenIds[37113267255361574183604483851777514579287633297905833288271730492161143078913] = 150; tokenIds[37113267255361574183604483851777514579287633297905833288271730491061631451137] = 149; tokenIds[37113267255361574183604483851777514579287633297905833288271730489962119823361] = 148; tokenIds[37113267255361574183604483851777514579287633297905833288271730488862608195585] = 147; tokenIds[37113267255361574183604483851777514579287633297905833288271730487763096567809] = 146; tokenIds[37113267255361574183604483851777514579287633297905833288271730486663584940033] = 145; tokenIds[37113267255361574183604483851777514579287633297905833288271730485564073312257] = 144; tokenIds[37113267255361574183604483851777514579287633297905833288271730484464561684481] = 143; tokenIds[37113267255361574183604483851777514579287633297905833288271730483365050056705] = 142; tokenIds[37113267255361574183604483851777514579287633297905833288271730482265538428929] = 141; tokenIds[37113267255361574183604483851777514579287633297905833288271730481166026801153] = 140; tokenIds[37113267255361574183604483851777514579287633297905833288271730480066515173377] = 139; tokenIds[37113267255361574183604483851777514579287633297905833288271730478967003545601] = 138; tokenIds[37113267255361574183604483851777514579287633297905833288271730477867491917825] = 137; tokenIds[37113267255361574183604483851777514579287633297905833288271730476767980290049] = 136; tokenIds[37113267255361574183604483851777514579287633297905833288271730475668468662273] = 135; tokenIds[37113267255361574183604483851777514579287633297905833288271730474568957034497] = 134; tokenIds[37113267255361574183604483851777514579287633297905833288271730473469445406721] = 133; tokenIds[37113267255361574183604483851777514579287633297905833288271730472369933778945] = 132; tokenIds[37113267255361574183604483851777514579287633297905833288271730471270422151169] = 131; tokenIds[37113267255361574183604483851777514579287633297905833288271730470170910523393] = 130; tokenIds[37113267255361574183604483851777514579287633297905833288271730469071398895617] = 129; tokenIds[37113267255361574183604483851777514579287633297905833288271730467971887267841] = 128; tokenIds[37113267255361574183604483851777514579287633297905833288271730466872375640065] = 127; tokenIds[37113267255361574183604483851777514579287633297905833288271730465772864012289] = 126; tokenIds[37113267255361574183604483851777514579287633297905833288271730464673352384513] = 125; tokenIds[37113267255361574183604483851777514579287633297905833288271730463573840756737] = 124; tokenIds[37113267255361574183604483851777514579287633297905833288271730462474329128961] = 123; tokenIds[37113267255361574183604483851777514579287633297905833288271730461374817501185] = 122; tokenIds[37113267255361574183604483851777514579287633297905833288271730460275305873409] = 121; tokenIds[37113267255361574183604483851777514579287633297905833288271730459175794245633] = 120; tokenIds[37113267255361574183604483851777514579287633297905833288271730458076282617857] = 119; tokenIds[37113267255361574183604483851777514579287633297905833288271730456976770990081] = 118; tokenIds[37113267255361574183604483851777514579287633297905833288271730455877259362305] = 117; tokenIds[37113267255361574183604483851777514579287633297905833288271730454777747734529] = 116; tokenIds[37113267255361574183604483851777514579287633297905833288271730453678236106753] = 115; tokenIds[37113267255361574183604483851777514579287633297905833288271730452578724478977] = 114; tokenIds[37113267255361574183604483851777514579287633297905833288271730451479212851201] = 113; tokenIds[37113267255361574183604483851777514579287633297905833288271730450379701223425] = 112; tokenIds[37113267255361574183604483851777514579287633297905833288271730449280189595649] = 111; tokenIds[37113267255361574183604483851777514579287633297905833288271730448180677967873] = 110; tokenIds[37113267255361574183604483851777514579287633297905833288271730447081166340097] = 109; tokenIds[37113267255361574183604483851777514579287633297905833288271730445981654712321] = 108; tokenIds[37113267255361574183604483851777514579287633297905833288271730444882143084545] = 107; tokenIds[37113267255361574183604483851777514579287633297905833288271730443782631456769] = 106; tokenIds[37113267255361574183604483851777514579287633297905833288271730442683119828993] = 105; tokenIds[37113267255361574183604483851777514579287633297905833288271730441583608201217] = 104; tokenIds[37113267255361574183604483851777514579287633297905833288271730440484096573441] = 103; tokenIds[37113267255361574183604483851777514579287633297905833288271730439384584945665] = 102; tokenIds[37113267255361574183604483851777514579287633297905833288271730438285073317889] = 101; tokenIds[37113267255361574183604483851777514579287633297905833288271730437185561690113] = 100; tokenIds[37113267255361574183604483851777514579287633297905833288271730436086050062337] = 99; tokenIds[37113267255361574183604483851777514579287633297905833288271730434986538434561] = 98; tokenIds[37113267255361574183604483851777514579287633297905833288271730433887026806785] = 97; tokenIds[37113267255361574183604483851777514579287633297905833288271730432787515179009] = 96; tokenIds[37113267255361574183604483851777514579287633297905833288271730431688003551233] = 95; tokenIds[37113267255361574183604483851777514579287633297905833288271730430588491923457] = 94; tokenIds[37113267255361574183604483851777514579287633297905833288271730429488980295681] = 93; tokenIds[37113267255361574183604483851777514579287633297905833288271730428389468667905] = 92; tokenIds[37113267255361574183604483851777514579287633297905833288271730427289957040129] = 91; tokenIds[37113267255361574183604483851777514579287633297905833288271730426190445412353] = 90; tokenIds[37113267255361574183604483851777514579287633297905833288271730425090933784577] = 89; tokenIds[37113267255361574183604483851777514579287633297905833288271730423991422156801] = 88; tokenIds[37113267255361574183604483851777514579287633297905833288271730422891910529025] = 87; tokenIds[37113267255361574183604483851777514579287633297905833288271730421792398901249] = 86; tokenIds[37113267255361574183604483851777514579287633297905833288271730420692887273473] = 85; tokenIds[37113267255361574183604483851777514579287633297905833288271730419593375645697] = 84; tokenIds[37113267255361574183604483851777514579287633297905833288271730418493864017921] = 83; tokenIds[37113267255361574183604483851777514579287633297905833288271730417394352390145] = 82; tokenIds[37113267255361574183604483851777514579287633297905833288271730416294840762369] = 81; tokenIds[37113267255361574183604483851777514579287633297905833288271730415195329134593] = 80; tokenIds[37113267255361574183604483851777514579287633297905833288271730414095817506817] = 79; tokenIds[37113267255361574183604483851777514579287633297905833288271730412996305879041] = 78; tokenIds[37113267255361574183604483851777514579287633297905833288271730411896794251265] = 77; tokenIds[37113267255361574183604483851777514579287633297905833288271730410797282623489] = 76; tokenIds[37113267255361574183604483851777514579287633297905833288271730409697770995713] = 75; tokenIds[37113267255361574183604483851777514579287633297905833288271730408598259367937] = 74; tokenIds[37113267255361574183604483851777514579287633297905833288271730407498747740161] = 73; tokenIds[37113267255361574183604483851777514579287633297905833288271730406399236112385] = 72; tokenIds[37113267255361574183604483851777514579287633297905833288271730405299724484609] = 71; tokenIds[37113267255361574183604483851777514579287633297905833288271730404200212856833] = 70; tokenIds[37113267255361574183604483851777514579287633297905833288271730403100701229057] = 69; tokenIds[37113267255361574183604483851777514579287633297905833288271730402001189601281] = 68; tokenIds[37113267255361574183604483851777514579287633297905833288271730400901677973505] = 67; tokenIds[37113267255361574183604483851777514579287633297905833288271730399802166345729] = 66; tokenIds[37113267255361574183604483851777514579287633297905833288271730398702654717953] = 65; tokenIds[37113267255361574183604483851777514579287633297905833288271730397603143090177] = 64; tokenIds[37113267255361574183604483851777514579287633297905833288271730396503631462401] = 63; tokenIds[37113267255361574183604483851777514579287633297905833288271730395404119834625] = 62; tokenIds[37113267255361574183604483851777514579287633297905833288271730394304608206849] = 61; tokenIds[37113267255361574183604483851777514579287633297905833288271730393205096579073] = 60; tokenIds[37113267255361574183604483851777514579287633297905833288271730392105584951297] = 59; tokenIds[37113267255361574183604483851777514579287633297905833288271730382209980301313] = 58; tokenIds[37113267255361574183604483851777514579287633297905833288271730381110468673537] = 57; tokenIds[37113267255361574183604483851777514579287633297905833288271730380010957045761] = 56; tokenIds[37113267255361574183604483851777514579287633297905833288271730378911445417985] = 55; tokenIds[37113267255361574183604483851777514579287633297905833288271730377811933790209] = 54; tokenIds[37113267255361574183604483851777514579287633297905833288271730376712422162433] = 53; tokenIds[37113267255361574183604483851777514579287633297905833288271730375612910534657] = 52; tokenIds[37113267255361574183604483851777514579287633297905833288271730374513398906881] = 51; tokenIds[37113267255361574183604483851777514579287633297905833288271730373413887279105] = 50; tokenIds[37113267255361574183604483851777514579287633297905833288271730372314375651329] = 49; tokenIds[37113267255361574183604483851777514579287633297905833288271730371214864023553] = 48; tokenIds[37113267255361574183604483851777514579287633297905833288271730370115352395777] = 47; tokenIds[37113267255361574183604483851777514579287633297905833288271730369015840768001] = 46; tokenIds[37113267255361574183604483851777514579287633297905833288271730367916329140225] = 45; tokenIds[37113267255361574183604483851777514579287633297905833288271730366816817512449] = 44; tokenIds[37113267255361574183604483851777514579287633297905833288271730365717305884673] = 43; tokenIds[37113267255361574183604483851777514579287633297905833288271730364617794256897] = 42; tokenIds[37113267255361574183604483851777514579287633297905833288271730363518282629121] = 41; tokenIds[37113267255361574183604483851777514579287633297905833288271730362418771001345] = 40; tokenIds[37113267255361574183604483851777514579287633297905833288271730361319259373569] = 39; tokenIds[37113267255361574183604483851777514579287633297905833288271730360219747745793] = 38; tokenIds[37113267255361574183604483851777514579287633297905833288271730359120236118017] = 37; tokenIds[37113267255361574183604483851777514579287633297905833288271730358020724490241] = 36; tokenIds[37113267255361574183604483851777514579287633297905833288271730356921212862465] = 35; tokenIds[37113267255361574183604483851777514579287633297905833288271730355821701234689] = 34; tokenIds[37113267255361574183604483851777514579287633297905833288271730354722189606913] = 33; tokenIds[37113267255361574183604483851777514579287633297905833288271730353622677979137] = 32; tokenIds[37113267255361574183604483851777514579287633297905833288271730352523166351361] = 30; tokenIds[37113267255361574183604483851777514579287633297905833288271730351423654723585] = 31; tokenIds[37113267255361574183604483851777514579287633297905833288271730350324143095809] = 29; tokenIds[37113267255361574183604483851777514579287633297905833288271730349224631468033] = 28; tokenIds[37113267255361574183604483851777514579287633297905833288271730348125119840257] = 27; tokenIds[37113267255361574183604483851777514579287633297905833288271730347025608212481] = 26; tokenIds[37113267255361574183604483851777514579287633297905833288271730345926096584705] = 25; tokenIds[37113267255361574183604483851777514579287633297905833288271730344826584956929] = 24; tokenIds[37113267255361574183604483851777514579287633297905833288271730343727073329153] = 23; tokenIds[37113267255361574183604483851777514579287633297905833288271730342627561701377] = 22; tokenIds[37113267255361574183604483851777514579287633297905833288271730341528050073601] = 21; tokenIds[37113267255361574183604483851777514579287633297905833288271730340428538445825] = 20; tokenIds[37113267255361574183604483851777514579287633297905833288271730339329026818049] = 19; tokenIds[37113267255361574183604483851777514579287633297905833288271730338229515190273] = 18; tokenIds[37113267255361574183604483851777514579287633297905833288271730337130003562497] = 16; tokenIds[37113267255361574183604483851777514579287633297905833288271730334930980306945] = 17; tokenIds[37113267255361574183604483851777514579287633297905833288271730333831468679169] = 15; tokenIds[37113267255361574183604483851777514579287633297905833288271730332731957051393] = 14; tokenIds[37113267255361574183604483851777514579287633297905833288271730331632445423617] = 13; tokenIds[37113267255361574183604483851777514579287633297905833288271730330532933795841] = 12; tokenIds[37113267255361574183604483851777514579287633297905833288271730329433422168065] = 11; tokenIds[37113267255361574183604483851777514579287633297905833288271730328333910540289] = 10; tokenIds[37113267255361574183604483851777514579287633297905833288271730327234398912513] = 9; tokenIds[37113267255361574183604483851777514579287633297905833288271730326134887284737] = 8; tokenIds[37113267255361574183604483851777514579287633297905833288271730325035375656961] = 7; tokenIds[37113267255361574183604483851777514579287633297905833288271730323935864029185] = 6; tokenIds[37113267255361574183604483851777514579287633297905833288271730322836352401409] = 5; tokenIds[37113267255361574183604483851777514579287633297905833288271730321736840773633] = 4; tokenIds[37113267255361574183604483851777514579287633297905833288271730320637329145857] = 3; tokenIds[37113267255361574183604483851777514579287633297905833288271730319537817518081] = 2; tokenIds[37113267255361574183604483851777514579287633297905833288271730318438305890305] = 1; } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC1155Receiver) returns (bool) { return super.supportsInterface(interfaceId); } function changeId(uint256 oldId, uint256 newId) external onlyOwner { tokenIds[oldId] = newId; } function onERC1155Received(address, address from, uint256 id, uint256, bytes calldata) public override returns (bytes4) { require(msg.sender == 0x495f947276749Ce646f68AC8c248420045cb7b5e, "INVALID_NFT_CONTRACT"); require(tokenIds[id] > 0, "INVALID_NFT_ID"); _safeMint(from, tokenIds[id]); return this.onERC1155Received.selector; } function withdraw() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } function mint() external payable { require(mintLive, "MINT_CLOSED"); require(_tokensMinted.current() + 1 <= WACK_MAX, "EXCEED_MAX"); require(WACK_PRICE <= msg.value, "INSUFFICIENT_ETH"); _tokensMinted.increment(); _safeMint(msg.sender, _tokensMinted.current() + 174); } function mintWL() external payable { require(mintWLLive, "MINT_CLOSED"); require(_tokensMinted.current() + 1 <= WACK_MAX, "EXCEED_MAX"); require(WHITELIST[msg.sender], "NOT_WHITLISED"); require(WACK_PRICE <= msg.value, "INSUFFICIENT_ETH"); _tokensMinted.increment(); _safeMint(msg.sender, _tokensMinted.current() + 174); } function togglePublicMintStatus() external onlyOwner { mintLive = !mintLive; } function toggleWLMintStatus() external onlyOwner { mintWLLive = !mintWLLive; } function setPrice(uint256 newPrice) external onlyOwner { WACK_PRICE = newPrice; } function setBaseURI(string calldata URI) external onlyOwner { _tokenBaseURI = URI; } function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) { require(_exists(tokenId), "Cannot query non-existent token"); return string(abi.encodePacked(_tokenBaseURI, tokenId.toString())); } function totalSupply() public view returns (uint256) { return _tokensMinted.current(); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":[],"name":"WACK_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WACK_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"WHITELIST","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokensMinted","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"oldId","type":"uint256"},{"internalType":"uint256","name":"newId","type":"uint256"}],"name":"changeId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintWL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintWLLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":[],"name":"togglePublicMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWLMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
61010060405260516080818152906200402660a03980516200002a9160089160209091019062001de5565b50601a600955670214e8348c4f0000600a553480156200004957600080fd5b506040805180820182526004808252635741434b60e01b602080840182815285518087019096529285528401528151919291620000899160009162001de5565b5080516200009f90600190602084019062001de5565b505050620000bc620000b662001d8f60201b60201c565b62001d93565b7f195ec6021ade80101dadd27570348cbf6e16124d50ae7686c47d9e241c493e438054600160ff1991821681179092557f5e5492321319e2611bc22aca9d9001a580c9995730ab1a3fbdc9e3ffd4f1273780548216831790557f46f770465af9c8b375b7ad4393f67e3e5583f1688678c87067dd590d19f4935c80548216831790557f584550ebeffbcbd1cf2bf59ab6c82a34f529b37f2163b88c348615c1514e179780548216831790557fca16a0db3aa649a873c9a0f493028de76f5c18f9373b9fd5f0fe3da14be7a6cd80548216831790557fc6ed5ec69452abaa47bbb3333605d909e1cc8b0ef0401bb8f260f5f80298609980548216831790557f4fc56d8d3809ad4b10fc4177cd57d28a6b255ac29622c9e7c09bbafa41a42fe280548216831790557f78b1cfae859d111dadde11e4933f90d345e86efc3a33040e7bee5c018aa2b32180548216831790557f77b6e02e672b20640df418b3f627a9d35d4f7f254af4ef3c80894a45eacdc5a980548216831790557fd5a993fb16193ceb993c905c05fe79a7795e3caadd18356e765610354b0635c180548216831790557faa91ddade7cd4185389639431f90a7a74bab1596dcd39cbadc0da30bf9975d0a80548216831790557f680277f7ca96b2eda31d2a5a8e40c00b33390e350dffe096e04a8add3361e27480548216831790557f35c30ad03b2deeaeb9e6b4f49ef1c83c871f7366989b26eb5646ef34675a1cd680548216831790557e1e0d782786872c756904e1f48e2dd2398c30ede1b90b7b5e0f94a13c5e05b580548216831790557f1d61fee9bc3f721e6726b878d2b828d6facb50eddfec8fa9be99aadb9748c2bc80548216831790557fad715145581b285dbc4d776be02bd3a42ff6579ed45d5156d4eee93d06b614cb80548216831790557f2173f203e98e23f0aa369a9688854a4ac8690a7bc9b9fd174b2ebd6171d9320c80548216831790557f72355f0f4a7ce23c11ab9a3779e7fd343db6c0d18e8433059dfcce274e0a7c9180548216831790557f1b5606033a6b96176a97fed9ed40def363ae676995b3eb1855165eca5ef7526280548216831790557f50c33f9a0e0501aea51973fcf4a6d6b82d9451183c79840159e7b1038029a37380548216831790557f4d489f6b1a9f7284af82ad7b9dded0683340bfe87de166f8e4491b2dcb7a519a80548216831790557feb4b045df41bdd206980a553370be215b1aaf48f46b67b18c3944e8e2deec19b80548216831790557fdc28a64a8cd0dae8006d47a9e28512dfbe3dd1a6403910fcf20cb726c511569b80548216831790557f6d1771e6cff18c41ab5fe50161caf810f037770330a624db644a8b7410f97bf480548216831790557fbb5a2fc816acaebf97570f5b1f1f1599cb5c0a33245c4ffcb5bf7de5f60baf9580548216831790557f4a59b1560a069f09bbda9955476535d781ff56e09dba12fd141a02c86ab21ddc8054909116821790556007602081815260ae7f4f17cf3fed45015d9d41a223c2a1d1925edac0275bed512d7940f74637be37a05560ad7f6bd35b945e93764596dd79c140ff330f4e867a409418178a66ebd8861b7851925560ac7f7eccedf2c4058ed8e9e6855feb6e2c723b1bddb9d14b9ce12d9cbc7145e36b005560ab7fd6dd77a62fa8937b53f643f80e5ab35c9ecbc0f29b1276af83b790d9202bcef05560aa7f236dd1c74fd308f522874500e09930f1d90c49e84e32bb236eccf2fed862dc845560a97f9fa370374271650eb47ab927964937cb05987fb1b53164f0780ebec51a3d0e655560a87f5dc6579933d2a82e3a1c79753ee88a5a30ec2de82f5e79d44e148afbd2277f8e5560a77f9f639e7721665372b5cd85e5c7f2999f75fc5a8afdd429cedfddeef67f96be0f5560a67fcfc9551fec3c4809ab7b6d516f5f89bf4ab8631ce135b8d068b9c6c483fdbd735560a57f5a57213987818eee270ebc480a476aef0833805e696e9e3765945e33d1fe2eca5560a47f4ed7ea4f0ebd28103f61343f689e57f1b8d7c35531d825ec2228d0aa78917e345560a37f5a937cbed69398887dd7d00b82d1833c39a62e77343e52dc7ba55596ed4872a65560a27f913feb4ca0b06d776e86fb22428697d15023bbbb5caf05089a397c00960727165560a17fb38bb152eedd37eecd8db24879e610106db095d8de582163d6ef2d267fd386a75560a07f944eb6cec3aae1240154e94359141b7ca91adfa191d91aa88748fc7d142a59ce55609f7f9c579400d4fcf8964446b633411606286212335cb8e550bc1d6ba8143a8e714f55609e7f8551551fd94f6ef85099dbd381dc40a808dbc12a774cefde1c82ab57582c60e555609d7f5a0362d2531e8a16a5ece3f875d085957a4ae6b3edb4d0b1cea9d68470e5759055609c7f9dfb737de52f8a7ffbdf5512fa6dcb7316c0372ea916dbe2b0662ed432023a1855609b7fe8137f64f1091bdafee3cf37719ece7c56e6fceab3f3d1ef404c006ea439420d55609a7f08412976e625a9686b1dd979b5de6f79b2581b322d5d3c19942bece9b712db715560997ff85c05c6ac4ed9db30b8db5badb9b2a1dcefc3882a1f709e2835be7902483d4f5560987fbbc8ecef50c62f96b737f2be678bd002f70dcffcf29c49bf313c70549ee2634e5560977f0ac1a27e0ada0cd02c3eb08d709c952b671ccc6a4b0d6f91b71e13f05fbe6e1f5560967fd480de8ab7e6d56c58c2fe87db2f00a2ebb1ca8032e0f8addd016863f7f9708c5560957f33b9daba3fcc461b2e5d3bda81d64f4c4a91976bd44389aa91fda87599d2c67d5560947f7403e2ca57509544215d742182211506e58de25d6cf282486f88fe5e1f4fafc95560937fc9bdfc5b8483c6f6595dc098600957d4c6c5b1453cca877f1466f931bcae94245560927fd7c8103b59ef5d30bee5265bd3daa5c966b0027aa669bc29be99ba16989afd325560917f95599834ee548a76512741f776fdb5b23d45f8d14fcf578017cc1d7a6f8c08075560907f05a6920bc40c0d1b7d1fa187cfd1e4ad11f8e289457b0585f2b52d744ba521b955608f7ffa4859f37f93bf38d87c3573200269f8a4a19572dc6251682c666844ae57bb5555608e7f0129761ada89cece64556ba59fa6e76800b58a419199d6fcb3b7f45972b8601d55608d7fe51cf46f993412ab40d8f30976fdcc881977bdc282bf23b6e14c27d8a4de123155608c7fc76b8dc74ee61b36c0ddde6a6d74fcb562b7285eebd7635d2e1d1f5f52df630555608b7fab75ded308c15e78c46a1be469cb72f025514055a64495394aea53b03c7d10f355608a7f424cceaee77733112c2efed84a32be644a809d4084bc5b5e9460e70cc4a5ecb55560897f2a54dfd3288fef601d58ff9da9957d6e51b81d2cc762b58bf61ab760a2d31c975560887faa03d89397a816c7256e7258e420bce62f6ed6f58786617d58357c04ea3557065560877f5fc74fd63bca83edec597b55a02c2cd792df28e8f6aa7d6c6d041f14ee9f78a55560867fc75b4cb108f657002c9209a4c14e62e3ce39832a906674f42deb691f6ef4100e5560857fb51bb02c49874e132a745dcd12aaf8881d7a01e59df07e5513125d7d0ecdabf45560847fe7126ab3716f34c2f77bba288af73ddf17a4d5bee82d0ac1d2025c4726517ad45560837f992a012783a3091684191ac24a725799c5753c66e0277bc8fa993302e1d5410d5560827fca6b118262d65936dc2d79121340c05249ef2e7c4364bbeedbf4d34df338b7795560817fac5f3361644d72afc2ad559f57e3cc37a42f50fdc59ea19c51706c3256f291b25560807f6ddf86b5c4e364ab46a292177096fd33efb5472b72efa890ec2f0b9911954c4055607f7f1938d433d23d3c6fd80cb1c5109e80d01e065c06892cfca96e4fcacf108bef5b55607e7f86cee46259d81091c4bae5c95ff052e2473b868be09edcd8c8a2c4817dbdaf6755607d7f41537323db7cd559bb34eb317a5fff6b34d3df774b59bf011ee0f61e6f91d14755607c7f7efa211f92d9a3d2746fd0f6c7f200c507b86a61fea28939b7664e94e9160f8855607b7fd42ae61929bbb62e1429cc15d13e2e91670ae1b5f0b07e6f17c8f6858a1ee0ff55607a7f9b4e68b68328e8b12e835ad5c06bfcc8b23d76cdc6116c87f5b0f2f63821a5525560797fae07924bd74a062b98bc57febebcd4bd47888d78a87d26c7fcda159089d5ebb85560787f34b0c36ed67aabf21f2c4042275dd441998ae0f9ad9bbc7bf5c09fa085b5af775560777eefdc6f9cff164a38ff7df8280902790a4723917b64c3fde5457ae4aeed3c725560767fa3b265e6a4f73ed0ed0ac2a73fdf55aa60dfc81111afb1a83dc0088bd266ad305560757fb760a2e0f0834c6693798a06ff471f20253c4daaae6015064db04531fab6a1d15560747f54b29c0bb534becf2ec615b52389f6ddca5523cf4c3e8d233ff9e4807d6187ba5560737ff01171a72a5dfa46527cb51fa6ddc4a3c828c0ea7214be03e37a0d27dd63ceb65560727fd755bb170e51de95ac6f177d7c312de48ceee0f6fc88ae8e0780995976d438305560717fcd50c154eae27d9c84ac74a608a1265bbb08f84b6417dc2e8f8f6a4097990bac5560707f9baa7c8c01e13cbb2a2844af543237bf45a6ba8e9c871bed1bbf516e41a3daa355606f7f3bc319eb3c5733b00f49ee357a8eb2df023edf620607731daa17c49a12ddeb3155606e7f3f35fca0f172e5deb133c3f1f85bb5fdb69ad0d7f9f6bc7a2ebc3c5874ca370455606d7f664441d7a41dabaae9eeee751499fb736096976a60f2af3154487dfe2cbeaec055606c7f2172577fdc2a60d65b0ec3e53d012ff264838da856765b7d118d33e3c820c1df55606b7f7554cdc280162933657e915309c0c859f7379873457dccdae419c2ac659c983855606a7f64dcb653ee31b904b9b0f437cf139d5aeb544280f10c3ebb7a89102568c3da565560697f63d9f374bdf0d73662991199a45750d9a214eb5c2dfc51e4a2b68e6e7870d0335560687f3b73cc811f4d5126f0e0b77f20dfcc3a4568939fa4e3f5823641bb58f4b8d9af5560677f61b2e10fa1f661035cabbbed4d1763f6d33cd17de55222523db9bf78c6852df65560667f3609646efa1d8e32598d902dc1dc3b51433c12913b60b9c0fb14d07ba9be890e5560657f863ae60a9eead4a1fd22c438b6996c2bc5e294dca48b323dacae9de9a19759815560647fe4a264736ee7507aef61ac9d1bd277142272bf03f39662bb28e4ff1a5efc5f505560637f1e6b486fa2b8a25d73b51421a770e9f6d5083cc0699e7c7418da6f1d65b676f55560627fd69d4cebbaf48229983a2f41ef9de80812b9f953683a59ec9a1bf11c69b026fe5560617f9d57f804825690c86bf1545490383a3a20749805d074af19e8738c866537d33b5560607f04ef80483a50f6dd4ee7e82fcdfc8d7d0459b43b98a5b8e3faea407b926dbff455605f7f60bc1745a6adc42075b6aa519a67071f198793b02cc3ff129a5fb80346778e9255605e7fff6f3564941c1c673a6b468e852302107819cb2302fa6d80205d6ef15930847d55605d7f60a2e9d50fbda48ce6d004e0e46b8c7d63ee075734d45306e94d37507cf2dc9855605c7f3168daa161fdcc23b87907afd7c64319c6bfc25f5b5b138c610e1d7b5c2e7f6355605b7f5247f6c94413b7bbacbd843b63cd8f2836dc6b7d1872c68ff5c2886482770e2455605a7f8808b3fb4a9138dafce942f537b86ddd8ff7615b12e3b23f10eae21f4bad81d35560597ff85d1b61834cdb1e6a5c3dafaa4745fc7d6ebfe27ac85869cb57bdc7833f6b975560587f81c666fcd1498a8a419c1df747807dc7f92f956be91c4675bbbe53331d5d4fd45560577f033af4045cde243dd312eb0cd06ecee3552a68cbc4313dcdfc9403edac90c5cf5560567fcc5459fc5df82c2554be69fbefaf123e4bea2ba93329b47807e84334c6eaec935560557f35d7fa6230be674f3ac91f305989fab09e8af5ac486dbd117e954dff43a78b525560547f6fda0d4b1c572dd223b09c2e5cd8cdc65c7fbbccdccab5a35432fdf46eb918e05560537f55985636643e2b37e285ca7537333d62eaa21ad2a75732b5d2a52fc2623fab495560527f51c70099177d704b383b5092346b202041be97e5bdd9e7e7a0a685386e5893ed5560517f7caf220497e98598e57d971c3b441f0d3529e0fc4d9788e60e56e1cc6c8a86075560507f6304518c2ee27889ad4395543905720cc3a169ce5e3d2fffd03fd508a00f93dc55604f7f96710f33d32f0b22135eec91c1309f58e951fdb76a4bdcc506cc41f0385451e755604e7fcde241e2d8866f9fc65c260f4d914fed72c5f9235fcc8aa56db89e8259f035f055604d7f867a6ee4f440a1efd6ee9cf91ec01c7192617c5eaf990d5be4cf4df99d5a293d55604c7f65930c06368887d70b2d7b1de03f41de152e8584e0eac062e4105600263da75955604b7f8bed715a076e8d48bb298baa1b0ee4dc924609cf07f780afcf5607f21a5c336455604a7f016e278100e510eb3b3241abe87e007112ab4980dfa724f7d0a04a1bdfa56ee55560497fa360078b3dccb71bd4643e6af1a848df9f262a6dfb5bf67c480c1703abf55f085560487fa55fa10e24f09f992e582a22472c119976e7332c1fa87b1326bc3179ef52b3065560477f5e3c6b19b8b2fa6a474b61f33afbfdeb23c2bddeeca85bdd58be40bc30c829095560467fa146fd04b5d670c9641254a8a81a1bb9b43ad932c18a5c42dc0de5358ffcf18e5560457ff22e35d90cb158907f35a9247b0df1e6ddc1abf1c233777ccf8d75bfbebb37c15560447f1e2d6a5b0724797767a2cb44beee3e1177d2b3617e968f4dc52f46fe15458d1f5560437f0c688e1c0554c1981f6f494429454643d3dea01c64316bcf6e1e8ae20e5440525560427f3b8113b027045efe5fbb796b3ee23cfdf1f17b8316fc7cce50b29935940bc4495560417f77db839a5d46450346988a14ce5fbcb3eb62c0c7909efa8029f723c24e6db4285560407fc769a7997a04f5cc4a453d72e869919b4d3b2bd6f669810b6f258eb4e12cd80255603f7ff709d7af5a95972ad86900b28154157bd848141f7c853546b20012ff94795e3055603e7fc8e616760bd0d6b26fa19479df43ae379afe1fdfdbe2d300b823174e55784a6355603d7ff1ee3d2a02df45459941e12ca234e56a785db572271e0424ca084868f6446f4b55603c7f8bf2777a3711432035dc8087eab9d19f228fb71e4b541397302b6b3f112621f655603b7fbd29d55864f1b407fd7cb5d0b1008b5dfa513742f260248dbaa921250386e81255603a7f37c7f355fa556db96a226b95928cd4e6c4d086fd68dd98c4ac796ced1fd57abb5560397f60f485995e2a019fd57eebed9a6ae79ec1eb926f420f06c8e5379de0b20e3c1b5560387fb1eeb18c8ce0d3c41dc37c299390abb9c9c56c4aeb0ab372cd5a549fb5720a3e5560377ff69715b739c48d8d4088f2c1a43f3e8136fcbc3270e39c842255b3f380fe4ffa5560367f6b1f9d3e1a0f05d2b18254aa8c405c001256c81925dd8d1b1774c3e944db72725560357f3e2cb3c304d7c924ce929e159dafef1de0091560792f8932712730c071643d815560347f47f5cef00eda5b8ec4c564497ceaf45ef9a204192ca6681df6b9a6a0d34341375560337fce1f803621040c6c265e0d539a03046fb00ed502c1cd89f1beff8dcebdf7768a5560327f8f4908de3143556d371d40c83b1fc8ebb5028ae697313441a8eb695b4e9d61865560317fa06a490957c3ea4ea8e07881653285a49502d9406394382420ca74a208d9dfd45560307f7bf75687f09fac27dc1e0a44885c9e0ab095c0d4342fcf1b686df3df7e5e68c855602f7f57f6cc35562f6d49b545ecc1ac5d04ace733c2d845be57e7f1444dfe41d9822555602e7fac87a3e139fe3f5113131559f36f7fccfdd24a01cd4c30f6edb4aa05f4a2fd2255602d7f6b6da5648b70b946e0f913e72e028f739b931e61093cd698dba047b3af80879c55602c7f1e92b2af6c7130bdef40d11da913b0fc20afa5361a632116e40e9ab8ba16b77f55602b7f0ab4b5fa86630fe86fbf54100e7293a8a0c37ab6394adf548ca53f93442e04c955602a7f6b9f0c79ac3b19f6a6877279288564259abcf1f4c4ff52e8adf8aced52923aeb5560297fe025d74afe484ba17c9499715094ffa4f76ce32aae69aea7193f8871891dedb85560287f58eeee0f91d6b33e49ee79925ef760cad556f0810d29d9d5e3198793266babe15560277ffcf9449761af9a67e379d76740d6a9207abd6a3bff6722891cb925a99d5033a75560267febbd44ed1270df002116dba847c867110f186471908dba2bab3efc79ff5cd7d45560257f66dbc2775b3a6b5a3927bae4cbb072b1377a3a6cdf2061b8de247d8c7c6906c45560247f947d2f50d6f0c1cdb451ae137b265ffe14cabf6b6b7ea608f09feb466e3c5b275560237f392a0183a3df703331064553efa35b8555839144bc0a99df8023d734fe6b175e5560227fa69b65515ec305f7b616372baef93419855b7b51cc3814cc5a456874bfcbcbdf5560217f6903c1528bfd01d86646e9afa29a0e86cce72fdf79b1700a301b6674dda173f7557f3499d286126d2a58f3d069091b5988126b762fbb74feec06cabf8f6db92aaa7c55601e7f2b95ec20d5e84f75ff0f05d282aa3e503b5e1eb8c2a05893a392afa09d35536455601f7f2ff4ec404fc1d16f23ac78536f5709a6a202328133f72114ee704857c364641055601d7faf79e9f87ef19c78799576d190db6212e48a3f617b9271cfeec6fe094fecf0f855601c7f9cc59958b485d8ddcc72a8f60854428d92996ecd5a766e15296f9f346002c77655601b7f7feadfe3e3f74d93559de53acfdfb450b8506ff8a305c6a2efe7e0531288822a55601a7f3325bb12bbd86ee43b9664dde09fe32b30fd0c7335571b009ed3370a232250655560197f580ed90c111d133951ac2318632477286fc0736ec6361efbb9653839e571496a5560187fd7c1059edd6da8eb0b3204a033b7fbf9841481a5503fd7aa490dd592cb669ace5560177f29bbc00a6b2b5a2c8a2bf02e7a67c4c65347d4ec85fb0fc71ff83d0ea0fefe1a5560167fa0d5177b3a9f083dbb86243b0f109bce52dc47f68a28789706f9817e6c283e255560157f6b32f6ff2d6d46d01f30c6a51886962a132758e53eea446df7020358ca3056de5560147f8a018fc56f1aed7e398af0f5f2cf1162d92597ace8ac85dfe5df164f4eaed3515560137fabf7362918a7eab2282007cf8a12b7c2d0676081ca1c81bf68b4e1c5af58692c5560127fc2c2c72c1c57f4de3229626e415d1b4859667e3ec9211c7b65374e83292726795560107f7e8ea3e8063bd89d2be5a3fb0b1a1ded0a4461920c2c11aa4f9bc996d1e1ef495560117fa9dd401d2b0188ae7333eb24bdd92ffd42d0d1f92a3212b857bcb39bfd65948b55600f7f70043b4a22eadfeeed42fffd795622248e63e54b3a90069f351b6bf370412c3455600e7fd2c42ecd582a43d85ccf61bcf122d8c6019029dbe8e7b21d66c3046b5817d90155600d7f4e80faae28779339b51f60bea7ee6d396244ab2850d80979c83b4c4923347fd555600c7f956fa1a3d058c1e2a55a6bd380afba82d50d3cef06dd617e6ffb67110987da4e55600b7fa3c11d0b0eafb12e395aaf544ae61aa06ea657857ce6fbd0f06851d30cf7173755600a7fb7a9ea6e94dfa286743c7b20f59de28d03ab70011e020879e0a5a62d277f45455560097fd33b5febbfccd510147b8a7098901a1fd5f1e4495a0f0c0be656de6c9827847f5560087f6e744d0adee97f9592811ee593fb90c4b79072b8584a7884514bbc1713c210b1557fb0ce2281abfe3ca810553909a49a1f50d0007d5af420ade5cdd4eba829d0880f5560067f4664b307db2618f2ee2912587ee8e5ee477add5a7df0c09f9ddc035547f84dc65560057ff04d907c042781078a14942b728f17a49f1ad9b6a6e7aafdbbca9dd2cb8edef25560047f04c5faf3816eea014b8701fd76f73c7c4c3c7c027a16f763dbc0da5e3f38225b5560037f92983f8dfb38a831d518c859a2a1a345e5d554380982fad9bcc4adfc67e21b595560027fbe6f44bfcd4416a332efb343dc883a854e0532fcfc1d1eefe4e0a59905cee792557f520d5d67c1c64fdccede0fcbf7a3e4648dfd45940000000000002b00000000016000527f42d0582366b73b4588c8f4af5815efca2204b8678d093e0ec74f09553c5807f15562001ec8565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462001df39062001e8b565b90600052602060002090601f01602090048101928262001e17576000855562001e62565b82601f1062001e3257805160ff191683800117855562001e62565b8280016001018555821562001e62579182015b8281111562001e6257825182559160200191906001019062001e45565b5062001e7092915062001e74565b5090565b5b8082111562001e70576000815560010162001e75565b600181811c9082168062001ea057607f821691505b6020821081141562001ec257634e487b7160e01b600052602260045260246000fd5b50919050565b61214e8062001ed86000396000f3fe6080604052600436106101fd5760003560e01c806391b7f5ed1161010d578063bc197c81116100a0578063d58778d61161006f578063d58778d61461058b578063e8656fcc146105b8578063e985e9c5146105d2578063f23a6e611461061b578063f2fde38b1461063b57600080fd5b8063bc197c81146104ee578063bc1c864c14610533578063c87b56dd14610563578063cecd67001461058357600080fd5b8063a22cb465116100dc578063a22cb46514610483578063a819a68e146104a3578063b600ab22146104b9578063b88d4fde146104ce57600080fd5b806391b7f5ed1461042357806395d89b411461044357806397f5ec67146104585780639e4283be1461046d57600080fd5b806342842e0e116101905780636352211e1161015f5780636352211e1461039957806370a08231146103b9578063715018a6146103d95780638d6f5df6146103ee5780638da5cb5b1461040557600080fd5b806342842e0e1461031a5780634db1c7b21461033a5780634f2ca1bc1461035a57806355f804b31461037957600080fd5b80631249c58b116101cc5780631249c58b146102ba57806318160ddd146102c257806323b872dd146102e55780633ccfd60b1461030557600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc14610260578063095ea7b31461029857600080fd5b3661020457005b600080fd5b34801561021557600080fd5b50610229610224366004611cd2565b61065b565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025361066c565b6040516102359190611eb5565b34801561026c57600080fd5b5061028061027b366004611d4e565b6106fe565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004611ca8565b610798565b005b6102b86108ae565b3480156102ce57600080fd5b506102d76109ac565b604051908152602001610235565b3480156102f157600080fd5b506102b8610300366004611b50565b6109bc565b34801561031157600080fd5b506102b86109ed565b34801561032657600080fd5b506102b8610335366004611b50565b610a46565b34801561034657600080fd5b506102b8610355366004611d67565b610a61565b34801561036657600080fd5b50600c5461022990610100900460ff1681565b34801561038557600080fd5b506102b8610394366004611d0c565b610a9d565b3480156103a557600080fd5b506102806103b4366004611d4e565b610ad3565b3480156103c557600080fd5b506102d76103d4366004611a51565b610b4a565b3480156103e557600080fd5b506102b8610bd1565b3480156103fa57600080fd5b50600d546102d79081565b34801561041157600080fd5b506006546001600160a01b0316610280565b34801561042f57600080fd5b506102b861043e366004611d4e565b610c05565b34801561044f57600080fd5b50610253610c34565b34801561046457600080fd5b506102b8610c43565b34801561047957600080fd5b506102d7600a5481565b34801561048f57600080fd5b506102b861049e366004611c6c565b610c81565b3480156104af57600080fd5b506102d760095481565b3480156104c557600080fd5b506102b8610c90565b3480156104da57600080fd5b506102b86104e9366004611b8c565b610cd7565b3480156104fa57600080fd5b5061051a610509366004611aa6565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610235565b34801561053f57600080fd5b5061022961054e366004611a51565b600b6020526000908152604090205460ff1681565b34801561056f57600080fd5b5061025361057e366004611d4e565b610d0f565b6102b8610da8565b34801561059757600080fd5b506102d76105a6366004611d4e565b60076020526000908152604090205481565b3480156105c457600080fd5b50600c546102299060ff1681565b3480156105de57600080fd5b506102296105ed366004611a73565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561062757600080fd5b5061051a610636366004611bf4565b610e88565b34801561064757600080fd5b506102b8610656366004611a51565b610f5d565b600061066682610ff5565b92915050565b60606000805461067b90612040565b80601f01602080910402602001604051908101604052809291908181526020018280546106a790612040565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661077c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006107a382610ad3565b9050806001600160a01b0316836001600160a01b031614156108115760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610773565b336001600160a01b038216148061082d575061082d81336105ed565b61089f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610773565b6108a9838361101a565b505050565b600c5460ff166108ee5760405162461bcd60e51b815260206004820152600b60248201526a1352539517d0d313d4d15160aa1b6044820152606401610773565b600954600d546108ff906001611fd1565b111561093a5760405162461bcd60e51b815260206004820152600a60248201526908ab0868a8a88be9a82b60b31b6044820152606401610773565b34600a54111561097f5760405162461bcd60e51b815260206004820152601060248201526f0929ca6aa8c8c9286928a9ca8be8aa8960831b6044820152606401610773565b61098d600d80546001019055565b6109aa3361099a600d5490565b6109a59060ae611fd1565b611088565b565b60006109b7600d5490565b905090565b6109c633826110a2565b6109e25760405162461bcd60e51b815260040161077390611f4f565b6108a9838383611199565b6006546001600160a01b03163314610a175760405162461bcd60e51b815260040161077390611f1a565b60405133904780156108fc02916000818181858888f19350505050158015610a43573d6000803e3d6000fd5b50565b6108a983838360405180602001604052806000815250610cd7565b6006546001600160a01b03163314610a8b5760405162461bcd60e51b815260040161077390611f1a565b60009182526007602052604090912055565b6006546001600160a01b03163314610ac75760405162461bcd60e51b815260040161077390611f1a565b6108a96008838361185d565b6000818152600260205260408120546001600160a01b0316806106665760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610773565b60006001600160a01b038216610bb55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610773565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610bfb5760405162461bcd60e51b815260040161077390611f1a565b6109aa6000611339565b6006546001600160a01b03163314610c2f5760405162461bcd60e51b815260040161077390611f1a565b600a55565b60606001805461067b90612040565b6006546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161077390611f1a565b600c805460ff19811660ff90911615179055565b610c8c33838361138b565b5050565b6006546001600160a01b03163314610cba5760405162461bcd60e51b815260040161077390611f1a565b600c805461ff001981166101009182900460ff1615909102179055565b610ce133836110a2565b610cfd5760405162461bcd60e51b815260040161077390611f4f565b610d098484848461145a565b50505050565b6000818152600260205260409020546060906001600160a01b0316610d765760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e006044820152606401610773565b6008610d818361148d565b604051602001610d92929190611dd1565b6040516020818303038152906040529050919050565b600c54610100900460ff16610ded5760405162461bcd60e51b815260206004820152600b60248201526a1352539517d0d313d4d15160aa1b6044820152606401610773565b600954600d54610dfe906001611fd1565b1115610e395760405162461bcd60e51b815260206004820152600a60248201526908ab0868a8a88be9a82b60b31b6044820152606401610773565b336000908152600b602052604090205460ff1661093a5760405162461bcd60e51b815260206004820152600d60248201526c1393d517d5d21255131254d151609a1b6044820152606401610773565b600073495f947276749ce646f68ac8c248420045cb7b5e3314610ee45760405162461bcd60e51b81526020600482015260146024820152731253959053125117d3919517d0d3d395149050d560621b6044820152606401610773565b600085815260076020526040902054610f305760405162461bcd60e51b815260206004820152600e60248201526d1253959053125117d3919517d25160921b6044820152606401610773565b600085815260076020526040902054610f4a908790611088565b5063f23a6e6160e01b9695505050505050565b6006546001600160a01b03163314610f875760405162461bcd60e51b815260040161077390611f1a565b6001600160a01b038116610fec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610773565b610a4381611339565b60006001600160e01b03198216630271189760e51b148061066657506106668261158b565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061104f82610ad3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610c8c8282604051806020016040528060008152506115db565b6000818152600260205260408120546001600160a01b031661111b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610773565b600061112683610ad3565b9050806001600160a01b0316846001600160a01b031614806111615750836001600160a01b0316611156846106fe565b6001600160a01b0316145b8061119157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166111ac82610ad3565b6001600160a01b0316146112145760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610773565b6001600160a01b0382166112765760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610773565b61128160008261101a565b6001600160a01b03831660009081526003602052604081208054600192906112aa908490611ffd565b90915550506001600160a01b03821660009081526003602052604081208054600192906112d8908490611fd1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156113ed5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610773565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611465848484611199565b6114718484848461160e565b610d095760405162461bcd60e51b815260040161077390611ec8565b6060816114b15750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114db57806114c58161207b565b91506114d49050600a83611fe9565b91506114b5565b60008167ffffffffffffffff8111156114f6576114f66120ec565b6040519080825280601f01601f191660200182016040528015611520576020820181803683370190505b5090505b841561119157611535600183611ffd565b9150611542600a86612096565b61154d906030611fd1565b60f81b818381518110611562576115626120d6565b60200101906001600160f81b031916908160001a905350611584600a86611fe9565b9450611524565b60006001600160e01b031982166380ac58cd60e01b14806115bc57506001600160e01b03198216635b5e139f60e01b145b8061066657506301ffc9a760e01b6001600160e01b0319831614610666565b6115e5838361171b565b6115f2600084848461160e565b6108a95760405162461bcd60e51b815260040161077390611ec8565b60006001600160a01b0384163b1561171057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611652903390899088908890600401611e78565b602060405180830381600087803b15801561166c57600080fd5b505af192505050801561169c575060408051601f3d908101601f1916820190925261169991810190611cef565b60015b6116f6573d8080156116ca576040519150601f19603f3d011682016040523d82523d6000602084013e6116cf565b606091505b5080516116ee5760405162461bcd60e51b815260040161077390611ec8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611191565b506001949350505050565b6001600160a01b0382166117715760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610773565b6000818152600260205260409020546001600160a01b0316156117d65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610773565b6001600160a01b03821660009081526003602052604081208054600192906117ff908490611fd1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461186990612040565b90600052602060002090601f01602090048101928261188b57600085556118d1565b82601f106118a45782800160ff198235161785556118d1565b828001600101855582156118d1579182015b828111156118d15782358255916020019190600101906118b6565b506118dd9291506118e1565b5090565b5b808211156118dd57600081556001016118e2565b80356001600160a01b038116811461190d57600080fd5b919050565b600082601f83011261192357600080fd5b8135602067ffffffffffffffff82111561193f5761193f6120ec565b8160051b61194e828201611fa0565b83815282810190868401838801850189101561196957600080fd5b600093505b8584101561198c57803583526001939093019291840191840161196e565b50979650505050505050565b60008083601f8401126119aa57600080fd5b50813567ffffffffffffffff8111156119c257600080fd5b6020830191508360208285010111156119da57600080fd5b9250929050565b600082601f8301126119f257600080fd5b813567ffffffffffffffff811115611a0c57611a0c6120ec565b611a1f601f8201601f1916602001611fa0565b818152846020838601011115611a3457600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611a6357600080fd5b611a6c826118f6565b9392505050565b60008060408385031215611a8657600080fd5b611a8f836118f6565b9150611a9d602084016118f6565b90509250929050565b600080600080600060a08688031215611abe57600080fd5b611ac7866118f6565b9450611ad5602087016118f6565b9350604086013567ffffffffffffffff80821115611af257600080fd5b611afe89838a01611912565b94506060880135915080821115611b1457600080fd5b611b2089838a01611912565b93506080880135915080821115611b3657600080fd5b50611b43888289016119e1565b9150509295509295909350565b600080600060608486031215611b6557600080fd5b611b6e846118f6565b9250611b7c602085016118f6565b9150604084013590509250925092565b60008060008060808587031215611ba257600080fd5b611bab856118f6565b9350611bb9602086016118f6565b925060408501359150606085013567ffffffffffffffff811115611bdc57600080fd5b611be8878288016119e1565b91505092959194509250565b60008060008060008060a08789031215611c0d57600080fd5b611c16876118f6565b9550611c24602088016118f6565b94506040870135935060608701359250608087013567ffffffffffffffff811115611c4e57600080fd5b611c5a89828a01611998565b979a9699509497509295939492505050565b60008060408385031215611c7f57600080fd5b611c88836118f6565b915060208301358015158114611c9d57600080fd5b809150509250929050565b60008060408385031215611cbb57600080fd5b611cc4836118f6565b946020939093013593505050565b600060208284031215611ce457600080fd5b8135611a6c81612102565b600060208284031215611d0157600080fd5b8151611a6c81612102565b60008060208385031215611d1f57600080fd5b823567ffffffffffffffff811115611d3657600080fd5b611d4285828601611998565b90969095509350505050565b600060208284031215611d6057600080fd5b5035919050565b60008060408385031215611d7a57600080fd5b50508035926020909101359150565b60008151808452611da1816020860160208601612014565b601f01601f19169290920160200192915050565b60008151611dc7818560208601612014565b9290920192915050565b600080845481600182811c915080831680611ded57607f831692505b6020808410821415611e0d57634e487b7160e01b86526022600452602486fd5b818015611e215760018114611e3257611e5f565b60ff19861689528489019650611e5f565b60008b81526020902060005b86811015611e575781548b820152908501908301611e3e565b505084890196505b505050505050611e6f8185611db5565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611eab90830184611d89565b9695505050505050565b602081526000611a6c6020830184611d89565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715611fc957611fc96120ec565b604052919050565b60008219821115611fe457611fe46120aa565b500190565b600082611ff857611ff86120c0565b500490565b60008282101561200f5761200f6120aa565b500390565b60005b8381101561202f578181015183820152602001612017565b83811115610d095750506000910152565b600181811c9082168061205457607f821691505b6020821081141561207557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561208f5761208f6120aa565b5060010190565b6000826120a5576120a56120c0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610a4357600080fdfea2646970667358221220796dbf920db422f046f39db51ac736b249e48f3895cfadc7e611c291f014b4a564736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6248686e6b4d6d655a3357504e6e5a6f487235597141794841705068506141454a746834717150644151766b2f
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c806391b7f5ed1161010d578063bc197c81116100a0578063d58778d61161006f578063d58778d61461058b578063e8656fcc146105b8578063e985e9c5146105d2578063f23a6e611461061b578063f2fde38b1461063b57600080fd5b8063bc197c81146104ee578063bc1c864c14610533578063c87b56dd14610563578063cecd67001461058357600080fd5b8063a22cb465116100dc578063a22cb46514610483578063a819a68e146104a3578063b600ab22146104b9578063b88d4fde146104ce57600080fd5b806391b7f5ed1461042357806395d89b411461044357806397f5ec67146104585780639e4283be1461046d57600080fd5b806342842e0e116101905780636352211e1161015f5780636352211e1461039957806370a08231146103b9578063715018a6146103d95780638d6f5df6146103ee5780638da5cb5b1461040557600080fd5b806342842e0e1461031a5780634db1c7b21461033a5780634f2ca1bc1461035a57806355f804b31461037957600080fd5b80631249c58b116101cc5780631249c58b146102ba57806318160ddd146102c257806323b872dd146102e55780633ccfd60b1461030557600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc14610260578063095ea7b31461029857600080fd5b3661020457005b600080fd5b34801561021557600080fd5b50610229610224366004611cd2565b61065b565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025361066c565b6040516102359190611eb5565b34801561026c57600080fd5b5061028061027b366004611d4e565b6106fe565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004611ca8565b610798565b005b6102b86108ae565b3480156102ce57600080fd5b506102d76109ac565b604051908152602001610235565b3480156102f157600080fd5b506102b8610300366004611b50565b6109bc565b34801561031157600080fd5b506102b86109ed565b34801561032657600080fd5b506102b8610335366004611b50565b610a46565b34801561034657600080fd5b506102b8610355366004611d67565b610a61565b34801561036657600080fd5b50600c5461022990610100900460ff1681565b34801561038557600080fd5b506102b8610394366004611d0c565b610a9d565b3480156103a557600080fd5b506102806103b4366004611d4e565b610ad3565b3480156103c557600080fd5b506102d76103d4366004611a51565b610b4a565b3480156103e557600080fd5b506102b8610bd1565b3480156103fa57600080fd5b50600d546102d79081565b34801561041157600080fd5b506006546001600160a01b0316610280565b34801561042f57600080fd5b506102b861043e366004611d4e565b610c05565b34801561044f57600080fd5b50610253610c34565b34801561046457600080fd5b506102b8610c43565b34801561047957600080fd5b506102d7600a5481565b34801561048f57600080fd5b506102b861049e366004611c6c565b610c81565b3480156104af57600080fd5b506102d760095481565b3480156104c557600080fd5b506102b8610c90565b3480156104da57600080fd5b506102b86104e9366004611b8c565b610cd7565b3480156104fa57600080fd5b5061051a610509366004611aa6565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610235565b34801561053f57600080fd5b5061022961054e366004611a51565b600b6020526000908152604090205460ff1681565b34801561056f57600080fd5b5061025361057e366004611d4e565b610d0f565b6102b8610da8565b34801561059757600080fd5b506102d76105a6366004611d4e565b60076020526000908152604090205481565b3480156105c457600080fd5b50600c546102299060ff1681565b3480156105de57600080fd5b506102296105ed366004611a73565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561062757600080fd5b5061051a610636366004611bf4565b610e88565b34801561064757600080fd5b506102b8610656366004611a51565b610f5d565b600061066682610ff5565b92915050565b60606000805461067b90612040565b80601f01602080910402602001604051908101604052809291908181526020018280546106a790612040565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661077c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006107a382610ad3565b9050806001600160a01b0316836001600160a01b031614156108115760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610773565b336001600160a01b038216148061082d575061082d81336105ed565b61089f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610773565b6108a9838361101a565b505050565b600c5460ff166108ee5760405162461bcd60e51b815260206004820152600b60248201526a1352539517d0d313d4d15160aa1b6044820152606401610773565b600954600d546108ff906001611fd1565b111561093a5760405162461bcd60e51b815260206004820152600a60248201526908ab0868a8a88be9a82b60b31b6044820152606401610773565b34600a54111561097f5760405162461bcd60e51b815260206004820152601060248201526f0929ca6aa8c8c9286928a9ca8be8aa8960831b6044820152606401610773565b61098d600d80546001019055565b6109aa3361099a600d5490565b6109a59060ae611fd1565b611088565b565b60006109b7600d5490565b905090565b6109c633826110a2565b6109e25760405162461bcd60e51b815260040161077390611f4f565b6108a9838383611199565b6006546001600160a01b03163314610a175760405162461bcd60e51b815260040161077390611f1a565b60405133904780156108fc02916000818181858888f19350505050158015610a43573d6000803e3d6000fd5b50565b6108a983838360405180602001604052806000815250610cd7565b6006546001600160a01b03163314610a8b5760405162461bcd60e51b815260040161077390611f1a565b60009182526007602052604090912055565b6006546001600160a01b03163314610ac75760405162461bcd60e51b815260040161077390611f1a565b6108a96008838361185d565b6000818152600260205260408120546001600160a01b0316806106665760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610773565b60006001600160a01b038216610bb55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610773565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610bfb5760405162461bcd60e51b815260040161077390611f1a565b6109aa6000611339565b6006546001600160a01b03163314610c2f5760405162461bcd60e51b815260040161077390611f1a565b600a55565b60606001805461067b90612040565b6006546001600160a01b03163314610c6d5760405162461bcd60e51b815260040161077390611f1a565b600c805460ff19811660ff90911615179055565b610c8c33838361138b565b5050565b6006546001600160a01b03163314610cba5760405162461bcd60e51b815260040161077390611f1a565b600c805461ff001981166101009182900460ff1615909102179055565b610ce133836110a2565b610cfd5760405162461bcd60e51b815260040161077390611f4f565b610d098484848461145a565b50505050565b6000818152600260205260409020546060906001600160a01b0316610d765760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e006044820152606401610773565b6008610d818361148d565b604051602001610d92929190611dd1565b6040516020818303038152906040529050919050565b600c54610100900460ff16610ded5760405162461bcd60e51b815260206004820152600b60248201526a1352539517d0d313d4d15160aa1b6044820152606401610773565b600954600d54610dfe906001611fd1565b1115610e395760405162461bcd60e51b815260206004820152600a60248201526908ab0868a8a88be9a82b60b31b6044820152606401610773565b336000908152600b602052604090205460ff1661093a5760405162461bcd60e51b815260206004820152600d60248201526c1393d517d5d21255131254d151609a1b6044820152606401610773565b600073495f947276749ce646f68ac8c248420045cb7b5e3314610ee45760405162461bcd60e51b81526020600482015260146024820152731253959053125117d3919517d0d3d395149050d560621b6044820152606401610773565b600085815260076020526040902054610f305760405162461bcd60e51b815260206004820152600e60248201526d1253959053125117d3919517d25160921b6044820152606401610773565b600085815260076020526040902054610f4a908790611088565b5063f23a6e6160e01b9695505050505050565b6006546001600160a01b03163314610f875760405162461bcd60e51b815260040161077390611f1a565b6001600160a01b038116610fec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610773565b610a4381611339565b60006001600160e01b03198216630271189760e51b148061066657506106668261158b565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061104f82610ad3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610c8c8282604051806020016040528060008152506115db565b6000818152600260205260408120546001600160a01b031661111b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610773565b600061112683610ad3565b9050806001600160a01b0316846001600160a01b031614806111615750836001600160a01b0316611156846106fe565b6001600160a01b0316145b8061119157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166111ac82610ad3565b6001600160a01b0316146112145760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610773565b6001600160a01b0382166112765760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610773565b61128160008261101a565b6001600160a01b03831660009081526003602052604081208054600192906112aa908490611ffd565b90915550506001600160a01b03821660009081526003602052604081208054600192906112d8908490611fd1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156113ed5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610773565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611465848484611199565b6114718484848461160e565b610d095760405162461bcd60e51b815260040161077390611ec8565b6060816114b15750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114db57806114c58161207b565b91506114d49050600a83611fe9565b91506114b5565b60008167ffffffffffffffff8111156114f6576114f66120ec565b6040519080825280601f01601f191660200182016040528015611520576020820181803683370190505b5090505b841561119157611535600183611ffd565b9150611542600a86612096565b61154d906030611fd1565b60f81b818381518110611562576115626120d6565b60200101906001600160f81b031916908160001a905350611584600a86611fe9565b9450611524565b60006001600160e01b031982166380ac58cd60e01b14806115bc57506001600160e01b03198216635b5e139f60e01b145b8061066657506301ffc9a760e01b6001600160e01b0319831614610666565b6115e5838361171b565b6115f2600084848461160e565b6108a95760405162461bcd60e51b815260040161077390611ec8565b60006001600160a01b0384163b1561171057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611652903390899088908890600401611e78565b602060405180830381600087803b15801561166c57600080fd5b505af192505050801561169c575060408051601f3d908101601f1916820190925261169991810190611cef565b60015b6116f6573d8080156116ca576040519150601f19603f3d011682016040523d82523d6000602084013e6116cf565b606091505b5080516116ee5760405162461bcd60e51b815260040161077390611ec8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611191565b506001949350505050565b6001600160a01b0382166117715760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610773565b6000818152600260205260409020546001600160a01b0316156117d65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610773565b6001600160a01b03821660009081526003602052604081208054600192906117ff908490611fd1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461186990612040565b90600052602060002090601f01602090048101928261188b57600085556118d1565b82601f106118a45782800160ff198235161785556118d1565b828001600101855582156118d1579182015b828111156118d15782358255916020019190600101906118b6565b506118dd9291506118e1565b5090565b5b808211156118dd57600081556001016118e2565b80356001600160a01b038116811461190d57600080fd5b919050565b600082601f83011261192357600080fd5b8135602067ffffffffffffffff82111561193f5761193f6120ec565b8160051b61194e828201611fa0565b83815282810190868401838801850189101561196957600080fd5b600093505b8584101561198c57803583526001939093019291840191840161196e565b50979650505050505050565b60008083601f8401126119aa57600080fd5b50813567ffffffffffffffff8111156119c257600080fd5b6020830191508360208285010111156119da57600080fd5b9250929050565b600082601f8301126119f257600080fd5b813567ffffffffffffffff811115611a0c57611a0c6120ec565b611a1f601f8201601f1916602001611fa0565b818152846020838601011115611a3457600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611a6357600080fd5b611a6c826118f6565b9392505050565b60008060408385031215611a8657600080fd5b611a8f836118f6565b9150611a9d602084016118f6565b90509250929050565b600080600080600060a08688031215611abe57600080fd5b611ac7866118f6565b9450611ad5602087016118f6565b9350604086013567ffffffffffffffff80821115611af257600080fd5b611afe89838a01611912565b94506060880135915080821115611b1457600080fd5b611b2089838a01611912565b93506080880135915080821115611b3657600080fd5b50611b43888289016119e1565b9150509295509295909350565b600080600060608486031215611b6557600080fd5b611b6e846118f6565b9250611b7c602085016118f6565b9150604084013590509250925092565b60008060008060808587031215611ba257600080fd5b611bab856118f6565b9350611bb9602086016118f6565b925060408501359150606085013567ffffffffffffffff811115611bdc57600080fd5b611be8878288016119e1565b91505092959194509250565b60008060008060008060a08789031215611c0d57600080fd5b611c16876118f6565b9550611c24602088016118f6565b94506040870135935060608701359250608087013567ffffffffffffffff811115611c4e57600080fd5b611c5a89828a01611998565b979a9699509497509295939492505050565b60008060408385031215611c7f57600080fd5b611c88836118f6565b915060208301358015158114611c9d57600080fd5b809150509250929050565b60008060408385031215611cbb57600080fd5b611cc4836118f6565b946020939093013593505050565b600060208284031215611ce457600080fd5b8135611a6c81612102565b600060208284031215611d0157600080fd5b8151611a6c81612102565b60008060208385031215611d1f57600080fd5b823567ffffffffffffffff811115611d3657600080fd5b611d4285828601611998565b90969095509350505050565b600060208284031215611d6057600080fd5b5035919050565b60008060408385031215611d7a57600080fd5b50508035926020909101359150565b60008151808452611da1816020860160208601612014565b601f01601f19169290920160200192915050565b60008151611dc7818560208601612014565b9290920192915050565b600080845481600182811c915080831680611ded57607f831692505b6020808410821415611e0d57634e487b7160e01b86526022600452602486fd5b818015611e215760018114611e3257611e5f565b60ff19861689528489019650611e5f565b60008b81526020902060005b86811015611e575781548b820152908501908301611e3e565b505084890196505b505050505050611e6f8185611db5565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611eab90830184611d89565b9695505050505050565b602081526000611a6c6020830184611d89565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715611fc957611fc96120ec565b604052919050565b60008219821115611fe457611fe46120aa565b500190565b600082611ff857611ff86120c0565b500490565b60008282101561200f5761200f6120aa565b500390565b60005b8381101561202f578181015183820152602001612017565b83811115610d095750506000910152565b600181811c9082168061205457607f821691505b6020821081141561207557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561208f5761208f6120aa565b5060010190565b6000826120a5576120a56120c0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610a4357600080fdfea2646970667358221220796dbf920db422f046f39db51ac736b249e48f3895cfadc7e611c291f014b4a564736f6c63430008070033
Deployed Bytecode Sourcemap
42262:22733:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62681:170;;;;;;;;;;-1:-1:-1;62681:170:0;;;;;:::i;:::-;;:::i;:::-;;;9251:14:1;;9244:22;9226:41;;9214:2;9199:18;62681:170:0;;;;;;;;30711:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32270:221::-;;;;;;;;;;-1:-1:-1;32270:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8549:32:1;;;8531:51;;8519:2;8504:18;32270:221:0;8385:203:1;31793:411:0;;;;;;;;;;-1:-1:-1;31793:411:0;;;;;:::i;:::-;;:::i;:::-;;63476:319;;;:::i;64853:102::-;;;;;;;;;;;;;:::i;:::-;;;18239:25:1;;;18227:2;18212:18;64853:102:0;18093:177:1;33020:339:0;;;;;;;;;;-1:-1:-1;33020:339:0;;;;;:::i;:::-;;:::i;63359:109::-;;;;;;;;;;;;;:::i;33430:185::-;;;;;;;;;;-1:-1:-1;33430:185:0;;;;;:::i;:::-;;:::i;62859:113::-;;;;;;;;;;-1:-1:-1;62859:113:0;;;;;:::i;:::-;;:::i;42717:22::-;;;;;;;;;;-1:-1:-1;42717:22:0;;;;;;;;;;;64495:98;;;;;;;;;;-1:-1:-1;64495:98:0;;;;;:::i;:::-;;:::i;30405:239::-;;;;;;;;;;-1:-1:-1;30405:239:0;;;;;:::i;:::-;;:::i;30135:208::-;;;;;;;;;;-1:-1:-1;30135:208:0;;;;;:::i;:::-;;:::i;6885:103::-;;;;;;;;;;;;;:::i;42746:37::-;;;;;;;;;;-1:-1:-1;42746:37:0;;;;;;6234:87;;;;;;;;;;-1:-1:-1;6307:6:0;;-1:-1:-1;;;;;6307:6:0;6234:87;;64392:95;;;;;;;;;;-1:-1:-1;64392:95:0;;;;;:::i;:::-;;:::i;30880:104::-;;;;;;;;;;;;;:::i;64192:92::-;;;;;;;;;;;;;:::i;42597:38::-;;;;;;;;;;;;;;;;32563:155;;;;;;;;;;-1:-1:-1;32563:155:0;;;;;:::i;:::-;;:::i;42562:28::-;;;;;;;;;;;;;;;;64292:92;;;;;;;;;;;;;:::i;33686:328::-;;;;;;;;;;-1:-1:-1;33686:328:0;;;;;:::i;:::-;;:::i;22437:255::-;;;;;;;;;;-1:-1:-1;22437:255:0;;;;;:::i;:::-;-1:-1:-1;;;22437:255:0;;;;;;;;;;;-1:-1:-1;;;;;;9440:33:1;;;9422:52;;9410:2;9395:18;22437:255:0;9278:202:1;42642:41:0;;;;;;;;;;-1:-1:-1;42642:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;64601:244;;;;;;;;;;-1:-1:-1;64601:244:0;;;;;:::i;:::-;;:::i;63803:381::-;;;:::i;42359:43::-;;;;;;;;;;-1:-1:-1;42359:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;42690:20;;;;;;;;;;-1:-1:-1;42690:20:0;;;;;;;;32789:164;;;;;;;;;;-1:-1:-1;32789:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32910:25:0;;;32886:4;32910:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32789:164;62980:371;;;;;;;;;;-1:-1:-1;62980:371:0;;;;;:::i;:::-;;:::i;7143:201::-;;;;;;;;;;-1:-1:-1;7143:201:0;;;;;:::i;:::-;;:::i;62681:170::-;62783:4;62807:36;62831:11;62807:23;:36::i;:::-;62800:43;62681:170;-1:-1:-1;;62681:170:0:o;30711:100::-;30765:13;30798:5;30791:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30711:100;:::o;32270:221::-;32346:7;35613:16;;;:7;:16;;;;;;-1:-1:-1;;;;;35613:16:0;32366:73;;;;-1:-1:-1;;;32366:73:0;;15247:2:1;32366:73:0;;;15229:21:1;15286:2;15266:18;;;15259:30;15325:34;15305:18;;;15298:62;-1:-1:-1;;;15376:18:1;;;15369:42;15428:19;;32366:73:0;;;;;;;;;-1:-1:-1;32459:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;32459:24:0;;32270:221::o;31793:411::-;31874:13;31890:23;31905:7;31890:14;:23::i;:::-;31874:39;;31938:5;-1:-1:-1;;;;;31932:11:0;:2;-1:-1:-1;;;;;31932:11:0;;;31924:57;;;;-1:-1:-1;;;31924:57:0;;16791:2:1;31924:57:0;;;16773:21:1;16830:2;16810:18;;;16803:30;16869:34;16849:18;;;16842:62;-1:-1:-1;;;16920:18:1;;;16913:31;16961:19;;31924:57:0;16589:397:1;31924:57:0;5038:10;-1:-1:-1;;;;;32016:21:0;;;;:62;;-1:-1:-1;32041:37:0;32058:5;5038:10;32789:164;:::i;32041:37::-;31994:168;;;;-1:-1:-1;;;31994:168:0;;13640:2:1;31994:168:0;;;13622:21:1;13679:2;13659:18;;;13652:30;13718:34;13698:18;;;13691:62;13789:26;13769:18;;;13762:54;13833:19;;31994:168:0;13438:420:1;31994:168:0;32175:21;32184:2;32188:7;32175:8;:21::i;:::-;31863:341;31793:411;;:::o;63476:319::-;63528:8;;;;63520:32;;;;-1:-1:-1;;;63520:32:0;;11443:2:1;63520:32:0;;;11425:21:1;11482:2;11462:18;;;11455:30;-1:-1:-1;;;11501:18:1;;;11494:41;11552:18;;63520:32:0;11241:335:1;63520:32:0;63602:8;;63571:13;1654:14;63571:27;;63597:1;63571:27;:::i;:::-;:39;;63563:62;;;;-1:-1:-1;;;63563:62:0;;17193:2:1;63563:62:0;;;17175:21:1;17232:2;17212:18;;;17205:30;-1:-1:-1;;;17251:18:1;;;17244:40;17301:18;;63563:62:0;16991:334:1;63563:62:0;63658:9;63644:10;;:23;;63636:52;;;;-1:-1:-1;;;63636:52:0;;17950:2:1;63636:52:0;;;17932:21:1;17989:2;17969:18;;;17962:30;-1:-1:-1;;;18008:18:1;;;18001:46;18064:18;;63636:52:0;17748:340:1;63636:52:0;63699:25;:13;1773:19;;1791:1;1773:19;;;1684:127;63699:25;63735:52;63745:10;63757:23;:13;1654:14;;1562:114;63757:23;:29;;63783:3;63757:29;:::i;:::-;63735:9;:52::i;:::-;63476:319::o;64853:102::-;64897:7;64924:23;:13;1654:14;;1562:114;64924:23;64917:30;;64853:102;:::o;33020:339::-;33215:41;5038:10;33248:7;33215:18;:41::i;:::-;33207:103;;;;-1:-1:-1;;;33207:103:0;;;;;;;:::i;:::-;33323:28;33333:4;33339:2;33343:7;33323:9;:28::i;63359:109::-;6307:6;;-1:-1:-1;;;;;6307:6:0;5038:10;6454:23;6446:68;;;;-1:-1:-1;;;6446:68:0;;;;;;;:::i;:::-;63409:51:::1;::::0;63417:10:::1;::::0;63438:21:::1;63409:51:::0;::::1;;;::::0;::::1;::::0;;;63438:21;63417:10;63409:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;63359:109::o:0;33430:185::-;33568:39;33585:4;33591:2;33595:7;33568:39;;;;;;;;;;;;:16;:39::i;62859:113::-;6307:6;;-1:-1:-1;;;;;6307:6:0;5038:10;6454:23;6446:68;;;;-1:-1:-1;;;6446:68:0;;;;;;;:::i;:::-;62941:15:::1;::::0;;;:8:::1;:15;::::0;;;;;:23;62859:113::o;64495:98::-;6307:6;;-1:-1:-1;;;;;6307:6:0;5038:10;6454:23;6446:68;;;;-1:-1:-1;;;6446:68:0;;;;;;;:::i;:::-;64566:19:::1;:13;64582:3:::0;;64566:19:::1;:::i;30405:239::-:0;30477:7;30513:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30513:16:0;30548:19;30540:73;;;;-1:-1:-1;;;30540:73:0;;14476:2:1;30540:73:0;;;14458:21:1;14515:2;14495:18;;;14488:30;14554:34;14534:18;;;14527:62;-1:-1:-1;;;14605:18:1;;;14598:39;14654:19;;30540:73:0;14274:405:1;30135:208:0;30207:7;-1:-1:-1;;;;;30235:19:0;;30227:74;;;;-1:-1:-1;;;30227:74:0;;14065:2:1;30227:74:0;;;14047:21:1;14104:2;14084:18;;;14077:30;14143:34;14123:18;;;14116:62;-1:-1:-1;;;14194:18:1;;;14187:40;14244:19;;30227:74:0;13863:406:1;30227:74:0;-1:-1:-1;;;;;;30319:16:0;;;;;:9;:16;;;;;;;30135:208::o;6885:103::-;6307:6;;-1:-1:-1;;;;;6307:6:0;5038:10;6454:23;6446:68;;;;-1:-1:-1;;;6446:68:0;;;;;;;:::i;:::-;6950:30:::1;6977:1;6950:18;:30::i;64392:95::-:0;6307:6;;-1:-1:-1;;;;;6307:6:0;5038:10;6454:23;6446:68;;;;-1:-1:-1;;;6446:68:0;;;;;;;:::i;:::-;64458:10:::1;:21:::0;64392:95::o;30880:104::-;30936:13;30969:7;30962:14;;;;;:::i;64192:92::-;6307:6;;-1:-1:-1;;;;;6307:6:0;5038:10;6454:23;6446:68;;;;-1:-1:-1;;;6446:68:0;;;;;;;:::i;:::-;64268:8:::1;::::0;;-1:-1:-1;;64256:20:0;::::1;64268:8;::::0;;::::1;64267:9;64256:20;::::0;;64192:92::o;32563:155::-;32658:52;5038:10;32691:8;32701;32658:18;:52::i;:::-;32563:155;;:::o;64292:92::-;6307:6;;-1:-1:-1;;;;;6307:6:0;5038:10;6454:23;6446:68;;;;-1:-1:-1;;;6446:68:0;;;;;;;:::i;:::-;64366:10:::1;::::0;;-1:-1:-1;;64352:24:0;::::1;64366:10;::::0;;;::::1;;;64365:11;64352:24:::0;;::::1;;::::0;;64292:92::o;33686:328::-;33861:41;5038:10;33894:7;33861:18;:41::i;:::-;33853:103;;;;-1:-1:-1;;;33853:103:0;;;;;;;:::i;:::-;33967:39;33981:4;33987:2;33991:7;34000:5;33967:13;:39::i;:::-;33686:328;;;;:::o;64601:244::-;35589:4;35613:16;;;:7;:16;;;;;;64674:13;;-1:-1:-1;;;;;35613:16:0;64700:60;;;;-1:-1:-1;;;64700:60:0;;16431:2:1;64700:60:0;;;16413:21:1;16470:2;16450:18;;;16443:30;16509:33;16489:18;;;16482:61;16560:18;;64700:60:0;16229:355:1;64700:60:0;64802:13;64817:18;:7;:16;:18::i;:::-;64785:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;64771:66;;64601:244;;;:::o;63803:381::-;63857:10;;;;;;;63849:34;;;;-1:-1:-1;;;63849:34:0;;11443:2:1;63849:34:0;;;11425:21:1;11482:2;11462:18;;;11455:30;-1:-1:-1;;;11501:18:1;;;11494:41;11552:18;;63849:34:0;11241:335:1;63849:34:0;63933:8;;63902:13;1654:14;63902:27;;63928:1;63902:27;:::i;:::-;:39;;63894:62;;;;-1:-1:-1;;;63894:62:0;;17193:2:1;63894:62:0;;;17175:21:1;17232:2;17212:18;;;17205:30;-1:-1:-1;;;17251:18:1;;;17244:40;17301:18;;63894:62:0;16991:334:1;63894:62:0;63985:10;63975:21;;;;:9;:21;;;;;;;;63967:47;;;;-1:-1:-1;;;63967:47:0;;12955:2:1;63967:47:0;;;12937:21:1;12994:2;12974:18;;;12967:30;-1:-1:-1;;;13013:18:1;;;13006:43;13066:18;;63967:47:0;12753:337:1;62980:371:0;63092:6;63133:42;63119:10;:56;63111:89;;;;-1:-1:-1;;;63111:89:0;;10330:2:1;63111:89:0;;;10312:21:1;10369:2;10349:18;;;10342:30;-1:-1:-1;;;10388:18:1;;;10381:50;10448:18;;63111:89:0;10128:344:1;63111:89:0;63234:1;63219:12;;;:8;:12;;;;;;63211:43;;;;-1:-1:-1;;;63211:43:0;;13297:2:1;63211:43:0;;;13279:21:1;13336:2;13316:18;;;13309:30;-1:-1:-1;;;13355:18:1;;;13348:44;13409:18;;63211:43:0;13095:338:1;63211:43:0;63281:12;;;;:8;:12;;;;;;63265:29;;63275:4;;63265:9;:29::i;:::-;-1:-1:-1;;;;62980:371:0;;;;;;;;:::o;7143:201::-;6307:6;;-1:-1:-1;;;;;6307:6:0;5038:10;6454:23;6446:68;;;;-1:-1:-1;;;6446:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7232:22:0;::::1;7224:73;;;::::0;-1:-1:-1;;;7224:73:0;;10679:2:1;7224:73:0::1;::::0;::::1;10661:21:1::0;10718:2;10698:18;;;10691:30;10757:34;10737:18;;;10730:62;-1:-1:-1;;;10808:18:1;;;10801:36;10854:19;;7224:73:0::1;10477:402:1::0;7224:73:0::1;7308:28;7327:8;7308:18;:28::i;21699:223::-:0;21801:4;-1:-1:-1;;;;;;21825:49:0;;-1:-1:-1;;;21825:49:0;;:89;;;21878:36;21902:11;21878:23;:36::i;39506:174::-;39581:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;39581:29:0;-1:-1:-1;;;;;39581:29:0;;;;;;;;:24;;39635:23;39581:24;39635:14;:23::i;:::-;-1:-1:-1;;;;;39626:46:0;;;;;;;;;;;39506:174;;:::o;36508:110::-;36584:26;36594:2;36598:7;36584:26;;;;;;;;;;;;:9;:26::i;35818:348::-;35911:4;35613:16;;;:7;:16;;;;;;-1:-1:-1;;;;;35613:16:0;35928:73;;;;-1:-1:-1;;;35928:73:0;;12542:2:1;35928:73:0;;;12524:21:1;12581:2;12561:18;;;12554:30;12620:34;12600:18;;;12593:62;-1:-1:-1;;;12671:18:1;;;12664:42;12723:19;;35928:73:0;12340:408:1;35928:73:0;36012:13;36028:23;36043:7;36028:14;:23::i;:::-;36012:39;;36081:5;-1:-1:-1;;;;;36070:16:0;:7;-1:-1:-1;;;;;36070:16:0;;:51;;;;36114:7;-1:-1:-1;;;;;36090:31:0;:20;36102:7;36090:11;:20::i;:::-;-1:-1:-1;;;;;36090:31:0;;36070:51;:87;;;-1:-1:-1;;;;;;32910:25:0;;;32886:4;32910:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;36125:32;36062:96;35818:348;-1:-1:-1;;;;35818:348:0:o;38810:578::-;38969:4;-1:-1:-1;;;;;38942:31:0;:23;38957:7;38942:14;:23::i;:::-;-1:-1:-1;;;;;38942:31:0;;38934:85;;;;-1:-1:-1;;;38934:85:0;;16021:2:1;38934:85:0;;;16003:21:1;16060:2;16040:18;;;16033:30;16099:34;16079:18;;;16072:62;-1:-1:-1;;;16150:18:1;;;16143:39;16199:19;;38934:85:0;15819:405:1;38934:85:0;-1:-1:-1;;;;;39038:16:0;;39030:65;;;;-1:-1:-1;;;39030:65:0;;11783:2:1;39030:65:0;;;11765:21:1;11822:2;11802:18;;;11795:30;11861:34;11841:18;;;11834:62;-1:-1:-1;;;11912:18:1;;;11905:34;11956:19;;39030:65:0;11581:400:1;39030:65:0;39212:29;39229:1;39233:7;39212:8;:29::i;:::-;-1:-1:-1;;;;;39254:15:0;;;;;;:9;:15;;;;;:20;;39273:1;;39254:15;:20;;39273:1;;39254:20;:::i;:::-;;;;-1:-1:-1;;;;;;;39285:13:0;;;;;;:9;:13;;;;;:18;;39302:1;;39285:13;:18;;39302:1;;39285:18;:::i;:::-;;;;-1:-1:-1;;39314:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;39314:21:0;-1:-1:-1;;;;;39314:21:0;;;;;;;;;39353:27;;39314:16;;39353:27;;;;;;;38810:578;;;:::o;7504:191::-;7597:6;;;-1:-1:-1;;;;;7614:17:0;;;-1:-1:-1;;;;;;7614:17:0;;;;;;;7647:40;;7597:6;;;7614:17;7597:6;;7647:40;;7578:16;;7647:40;7567:128;7504:191;:::o;39822:315::-;39977:8;-1:-1:-1;;;;;39968:17:0;:5;-1:-1:-1;;;;;39968:17:0;;;39960:55;;;;-1:-1:-1;;;39960:55:0;;12188:2:1;39960:55:0;;;12170:21:1;12227:2;12207:18;;;12200:30;12266:27;12246:18;;;12239:55;12311:18;;39960:55:0;11986:349:1;39960:55:0;-1:-1:-1;;;;;40026:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;40026:46:0;;;;;;;;;;40088:41;;9226::1;;;40088::0;;9199:18:1;40088:41:0;;;;;;;39822:315;;;:::o;34896:::-;35053:28;35063:4;35069:2;35073:7;35053:9;:28::i;:::-;35100:48;35123:4;35129:2;35133:7;35142:5;35100:22;:48::i;:::-;35092:111;;;;-1:-1:-1;;;35092:111:0;;;;;;;:::i;2520:723::-;2576:13;2797:10;2793:53;;-1:-1:-1;;2824:10:0;;;;;;;;;;;;-1:-1:-1;;;2824:10:0;;;;;2520:723::o;2793:53::-;2871:5;2856:12;2912:78;2919:9;;2912:78;;2945:8;;;;:::i;:::-;;-1:-1:-1;2968:10:0;;-1:-1:-1;2976:2:0;2968:10;;:::i;:::-;;;2912:78;;;3000:19;3032:6;3022:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3022:17:0;;3000:39;;3050:154;3057:10;;3050:154;;3084:11;3094:1;3084:11;;:::i;:::-;;-1:-1:-1;3153:10:0;3161:2;3153:5;:10;:::i;:::-;3140:24;;:2;:24;:::i;:::-;3127:39;;3110:6;3117;3110:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3110:56:0;;;;;;;;-1:-1:-1;3181:11:0;3190:2;3181:11;;:::i;:::-;;;3050:154;;29766:305;29868:4;-1:-1:-1;;;;;;29905:40:0;;-1:-1:-1;;;29905:40:0;;:105;;-1:-1:-1;;;;;;;29962:48:0;;-1:-1:-1;;;29962:48:0;29905:105;:158;;;-1:-1:-1;;;;;;;;;;21281:40:0;;;30027:36;21172:157;36845:321;36975:18;36981:2;36985:7;36975:5;:18::i;:::-;37026:54;37057:1;37061:2;37065:7;37074:5;37026:22;:54::i;:::-;37004:154;;;;-1:-1:-1;;;37004:154:0;;;;;;;:::i;40702:799::-;40857:4;-1:-1:-1;;;;;40878:13:0;;8845:20;8893:8;40874:620;;40914:72;;-1:-1:-1;;;40914:72:0;;-1:-1:-1;;;;;40914:36:0;;;;;:72;;5038:10;;40965:4;;40971:7;;40980:5;;40914:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40914:72:0;;;;;;;;-1:-1:-1;;40914:72:0;;;;;;;;;;;;:::i;:::-;;;40910:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41156:13:0;;41152:272;;41199:60;;-1:-1:-1;;;41199:60:0;;;;;;;:::i;41152:272::-;41374:6;41368:13;41359:6;41355:2;41351:15;41344:38;40910:529;-1:-1:-1;;;;;;41037:51:0;-1:-1:-1;;;41037:51:0;;-1:-1:-1;41030:58:0;;40874:620;-1:-1:-1;41478:4:0;40702:799;;;;;;:::o;37502:382::-;-1:-1:-1;;;;;37582:16:0;;37574:61;;;;-1:-1:-1;;;37574:61:0;;14886:2:1;37574:61:0;;;14868:21:1;;;14905:18;;;14898:30;14964:34;14944:18;;;14937:62;15016:18;;37574:61:0;14684:356:1;37574:61:0;35589:4;35613:16;;;:7;:16;;;;;;-1:-1:-1;;;;;35613:16:0;:30;37646:58;;;;-1:-1:-1;;;37646:58:0;;11086:2:1;37646:58:0;;;11068:21:1;11125:2;11105:18;;;11098:30;11164;11144:18;;;11137:58;11212:18;;37646:58:0;10884:352:1;37646:58:0;-1:-1:-1;;;;;37775:13:0;;;;;;:9;:13;;;;;:18;;37792:1;;37775:13;:18;;37792:1;;37775:18;:::i;:::-;;;;-1:-1:-1;;37804:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;37804:21:0;-1:-1:-1;;;;;37804:21:0;;;;;;;;37843:33;;37804:16;;;37843:33;;37804:16;;37843:33;37502:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:723::-;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;402:18;398:2;395:26;392:52;;;424:18;;:::i;:::-;470:2;467:1;463:10;493:28;517:2;513;509:11;493:28;:::i;:::-;555:15;;;586:12;;;;618:15;;;652;;;648:24;;645:33;-1:-1:-1;642:53:1;;;691:1;688;681:12;642:53;713:1;704:10;;723:163;737:2;734:1;731:9;723:163;;;794:17;;782:30;;755:1;748:9;;;;;832:12;;;;864;;723:163;;;-1:-1:-1;904:5:1;192:723;-1:-1:-1;;;;;;;192:723:1:o;920:347::-;971:8;981:6;1035:3;1028:4;1020:6;1016:17;1012:27;1002:55;;1053:1;1050;1043:12;1002:55;-1:-1:-1;1076:20:1;;1119:18;1108:30;;1105:50;;;1151:1;1148;1141:12;1105:50;1188:4;1180:6;1176:17;1164:29;;1240:3;1233:4;1224:6;1216;1212:19;1208:30;1205:39;1202:59;;;1257:1;1254;1247:12;1202:59;920:347;;;;;:::o;1272:530::-;1314:5;1367:3;1360:4;1352:6;1348:17;1344:27;1334:55;;1385:1;1382;1375:12;1334:55;1421:6;1408:20;1447:18;1443:2;1440:26;1437:52;;;1469:18;;:::i;:::-;1513:55;1556:2;1537:13;;-1:-1:-1;;1533:27:1;1562:4;1529:38;1513:55;:::i;:::-;1593:2;1584:7;1577:19;1639:3;1632:4;1627:2;1619:6;1615:15;1611:26;1608:35;1605:55;;;1656:1;1653;1646:12;1605:55;1721:2;1714:4;1706:6;1702:17;1695:4;1686:7;1682:18;1669:55;1769:1;1744:16;;;1762:4;1740:27;1733:38;;;;1748:7;1272:530;-1:-1:-1;;;1272:530:1:o;1807:186::-;1866:6;1919:2;1907:9;1898:7;1894:23;1890:32;1887:52;;;1935:1;1932;1925:12;1887:52;1958:29;1977:9;1958:29;:::i;:::-;1948:39;1807:186;-1:-1:-1;;;1807:186:1:o;1998:260::-;2066:6;2074;2127:2;2115:9;2106:7;2102:23;2098:32;2095:52;;;2143:1;2140;2133:12;2095:52;2166:29;2185:9;2166:29;:::i;:::-;2156:39;;2214:38;2248:2;2237:9;2233:18;2214:38;:::i;:::-;2204:48;;1998:260;;;;;:::o;2263:943::-;2417:6;2425;2433;2441;2449;2502:3;2490:9;2481:7;2477:23;2473:33;2470:53;;;2519:1;2516;2509:12;2470:53;2542:29;2561:9;2542:29;:::i;:::-;2532:39;;2590:38;2624:2;2613:9;2609:18;2590:38;:::i;:::-;2580:48;;2679:2;2668:9;2664:18;2651:32;2702:18;2743:2;2735:6;2732:14;2729:34;;;2759:1;2756;2749:12;2729:34;2782:61;2835:7;2826:6;2815:9;2811:22;2782:61;:::i;:::-;2772:71;;2896:2;2885:9;2881:18;2868:32;2852:48;;2925:2;2915:8;2912:16;2909:36;;;2941:1;2938;2931:12;2909:36;2964:63;3019:7;3008:8;2997:9;2993:24;2964:63;:::i;:::-;2954:73;;3080:3;3069:9;3065:19;3052:33;3036:49;;3110:2;3100:8;3097:16;3094:36;;;3126:1;3123;3116:12;3094:36;;3149:51;3192:7;3181:8;3170:9;3166:24;3149:51;:::i;:::-;3139:61;;;2263:943;;;;;;;;:::o;3211:328::-;3288:6;3296;3304;3357:2;3345:9;3336:7;3332:23;3328:32;3325:52;;;3373:1;3370;3363:12;3325:52;3396:29;3415:9;3396:29;:::i;:::-;3386:39;;3444:38;3478:2;3467:9;3463:18;3444:38;:::i;:::-;3434:48;;3529:2;3518:9;3514:18;3501:32;3491:42;;3211:328;;;;;:::o;3544:537::-;3639:6;3647;3655;3663;3716:3;3704:9;3695:7;3691:23;3687:33;3684:53;;;3733:1;3730;3723:12;3684:53;3756:29;3775:9;3756:29;:::i;:::-;3746:39;;3804:38;3838:2;3827:9;3823:18;3804:38;:::i;:::-;3794:48;;3889:2;3878:9;3874:18;3861:32;3851:42;;3944:2;3933:9;3929:18;3916:32;3971:18;3963:6;3960:30;3957:50;;;4003:1;4000;3993:12;3957:50;4026:49;4067:7;4058:6;4047:9;4043:22;4026:49;:::i;:::-;4016:59;;;3544:537;;;;;;;:::o;4086:695::-;4192:6;4200;4208;4216;4224;4232;4285:3;4273:9;4264:7;4260:23;4256:33;4253:53;;;4302:1;4299;4292:12;4253:53;4325:29;4344:9;4325:29;:::i;:::-;4315:39;;4373:38;4407:2;4396:9;4392:18;4373:38;:::i;:::-;4363:48;;4458:2;4447:9;4443:18;4430:32;4420:42;;4509:2;4498:9;4494:18;4481:32;4471:42;;4564:3;4553:9;4549:19;4536:33;4592:18;4584:6;4581:30;4578:50;;;4624:1;4621;4614:12;4578:50;4663:58;4713:7;4704:6;4693:9;4689:22;4663:58;:::i;:::-;4086:695;;;;-1:-1:-1;4086:695:1;;-1:-1:-1;4086:695:1;;4740:8;;4086:695;-1:-1:-1;;;4086:695:1:o;4786:347::-;4851:6;4859;4912:2;4900:9;4891:7;4887:23;4883:32;4880:52;;;4928:1;4925;4918:12;4880:52;4951:29;4970:9;4951:29;:::i;:::-;4941:39;;5030:2;5019:9;5015:18;5002:32;5077:5;5070:13;5063:21;5056:5;5053:32;5043:60;;5099:1;5096;5089:12;5043:60;5122:5;5112:15;;;4786:347;;;;;:::o;5138:254::-;5206:6;5214;5267:2;5255:9;5246:7;5242:23;5238:32;5235:52;;;5283:1;5280;5273:12;5235:52;5306:29;5325:9;5306:29;:::i;:::-;5296:39;5382:2;5367:18;;;;5354:32;;-1:-1:-1;;;5138:254:1:o;5397:245::-;5455:6;5508:2;5496:9;5487:7;5483:23;5479:32;5476:52;;;5524:1;5521;5514:12;5476:52;5563:9;5550:23;5582:30;5606:5;5582:30;:::i;5647:249::-;5716:6;5769:2;5757:9;5748:7;5744:23;5740:32;5737:52;;;5785:1;5782;5775:12;5737:52;5817:9;5811:16;5836:30;5860:5;5836:30;:::i;5901:410::-;5972:6;5980;6033:2;6021:9;6012:7;6008:23;6004:32;6001:52;;;6049:1;6046;6039:12;6001:52;6089:9;6076:23;6122:18;6114:6;6111:30;6108:50;;;6154:1;6151;6144:12;6108:50;6193:58;6243:7;6234:6;6223:9;6219:22;6193:58;:::i;:::-;6270:8;;6167:84;;-1:-1:-1;5901:410:1;-1:-1:-1;;;;5901:410:1:o;6316:180::-;6375:6;6428:2;6416:9;6407:7;6403:23;6399:32;6396:52;;;6444:1;6441;6434:12;6396:52;-1:-1:-1;6467:23:1;;6316:180;-1:-1:-1;6316:180:1:o;6501:248::-;6569:6;6577;6630:2;6618:9;6609:7;6605:23;6601:32;6598:52;;;6646:1;6643;6636:12;6598:52;-1:-1:-1;;6669:23:1;;;6739:2;6724:18;;;6711:32;;-1:-1:-1;6501:248:1:o;6754:257::-;6795:3;6833:5;6827:12;6860:6;6855:3;6848:19;6876:63;6932:6;6925:4;6920:3;6916:14;6909:4;6902:5;6898:16;6876:63;:::i;:::-;6993:2;6972:15;-1:-1:-1;;6968:29:1;6959:39;;;;7000:4;6955:50;;6754:257;-1:-1:-1;;6754:257:1:o;7016:185::-;7058:3;7096:5;7090:12;7111:52;7156:6;7151:3;7144:4;7137:5;7133:16;7111:52;:::i;:::-;7179:16;;;;;7016:185;-1:-1:-1;;7016:185:1:o;7206:1174::-;7382:3;7411:1;7444:6;7438:13;7474:3;7496:1;7524:9;7520:2;7516:18;7506:28;;7584:2;7573:9;7569:18;7606;7596:61;;7650:4;7642:6;7638:17;7628:27;;7596:61;7676:2;7724;7716:6;7713:14;7693:18;7690:38;7687:165;;;-1:-1:-1;;;7751:33:1;;7807:4;7804:1;7797:15;7837:4;7758:3;7825:17;7687:165;7868:18;7895:104;;;;8013:1;8008:320;;;;7861:467;;7895:104;-1:-1:-1;;7928:24:1;;7916:37;;7973:16;;;;-1:-1:-1;7895:104:1;;8008:320;18628:1;18621:14;;;18665:4;18652:18;;8103:1;8117:165;8131:6;8128:1;8125:13;8117:165;;;8209:14;;8196:11;;;8189:35;8252:16;;;;8146:10;;8117:165;;;8121:3;;8311:6;8306:3;8302:16;8295:23;;7861:467;;;;;;;8344:30;8370:3;8362:6;8344:30;:::i;:::-;8337:37;7206:1174;-1:-1:-1;;;;;7206:1174:1:o;8593:488::-;-1:-1:-1;;;;;8862:15:1;;;8844:34;;8914:15;;8909:2;8894:18;;8887:43;8961:2;8946:18;;8939:34;;;9009:3;9004:2;8989:18;;8982:31;;;8787:4;;9030:45;;9055:19;;9047:6;9030:45;:::i;:::-;9022:53;8593:488;-1:-1:-1;;;;;;8593:488:1:o;9485:219::-;9634:2;9623:9;9616:21;9597:4;9654:44;9694:2;9683:9;9679:18;9671:6;9654:44;:::i;9709:414::-;9911:2;9893:21;;;9950:2;9930:18;;;9923:30;9989:34;9984:2;9969:18;;9962:62;-1:-1:-1;;;10055:2:1;10040:18;;10033:48;10113:3;10098:19;;9709:414::o;15458:356::-;15660:2;15642:21;;;15679:18;;;15672:30;15738:34;15733:2;15718:18;;15711:62;15805:2;15790:18;;15458:356::o;17330:413::-;17532:2;17514:21;;;17571:2;17551:18;;;17544:30;17610:34;17605:2;17590:18;;17583:62;-1:-1:-1;;;17676:2:1;17661:18;;17654:47;17733:3;17718:19;;17330:413::o;18275:275::-;18346:2;18340:9;18411:2;18392:13;;-1:-1:-1;;18388:27:1;18376:40;;18446:18;18431:34;;18467:22;;;18428:62;18425:88;;;18493:18;;:::i;:::-;18529:2;18522:22;18275:275;;-1:-1:-1;18275:275:1:o;18681:128::-;18721:3;18752:1;18748:6;18745:1;18742:13;18739:39;;;18758:18;;:::i;:::-;-1:-1:-1;18794:9:1;;18681:128::o;18814:120::-;18854:1;18880;18870:35;;18885:18;;:::i;:::-;-1:-1:-1;18919:9:1;;18814:120::o;18939:125::-;18979:4;19007:1;19004;19001:8;18998:34;;;19012:18;;:::i;:::-;-1:-1:-1;19049:9:1;;18939:125::o;19069:258::-;19141:1;19151:113;19165:6;19162:1;19159:13;19151:113;;;19241:11;;;19235:18;19222:11;;;19215:39;19187:2;19180:10;19151:113;;;19282:6;19279:1;19276:13;19273:48;;;-1:-1:-1;;19317:1:1;19299:16;;19292:27;19069:258::o;19332:380::-;19411:1;19407:12;;;;19454;;;19475:61;;19529:4;19521:6;19517:17;19507:27;;19475:61;19582:2;19574:6;19571:14;19551:18;19548:38;19545:161;;;19628:10;19623:3;19619:20;19616:1;19609:31;19663:4;19660:1;19653:15;19691:4;19688:1;19681:15;19545:161;;19332:380;;;:::o;19717:135::-;19756:3;-1:-1:-1;;19777:17:1;;19774:43;;;19797:18;;:::i;:::-;-1:-1:-1;19844:1:1;19833:13;;19717:135::o;19857:112::-;19889:1;19915;19905:35;;19920:18;;:::i;:::-;-1:-1:-1;19954:9:1;;19857:112::o;19974:127::-;20035:10;20030:3;20026:20;20023:1;20016:31;20066:4;20063:1;20056:15;20090:4;20087:1;20080:15;20106:127;20167:10;20162:3;20158:20;20155:1;20148:31;20198:4;20195:1;20188:15;20222:4;20219:1;20212:15;20238:127;20299:10;20294:3;20290:20;20287:1;20280:31;20330:4;20327:1;20320:15;20354:4;20351:1;20344:15;20370:127;20431:10;20426:3;20422:20;20419:1;20412:31;20462:4;20459:1;20452:15;20486:4;20483:1;20476:15;20502:131;-1:-1:-1;;;;;;20576:32:1;;20566:43;;20556:71;;20623:1;20620;20613:12
Swarm Source
ipfs://796dbf920db422f046f39db51ac736b249e48f3895cfadc7e611c291f014b4a5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.