Overview
TokenID
2694
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RisingStackers
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-28 */ // SPDX-License-Identifier: MIT /** * ..................... * ,dOOOOOOOOOOkkkkkkxxxl' .o0XXXXXXXXXXXXXXXXXXXKx' * '0MMMMMMMMMMMMMMMMMMMMMX; cWMMMMMMMMMMMMMMMMMMMMMMx. * .xWMMMMMMMMMMMMMMMMMMMMWc 'kNWMMMMMMWMMMMMMMMMMMMMk. * .;lloooookNMMMMMMMMMMMX; ';;;;;;;lKMMMMMMMMMMMWo * .xWMMMMMMMMMWd. :XMMMMMMMMMNx. * .c0WMMMMMW0c. 'd0NWWWX0x; * .,codoc,. .',;,.. * * * .cdoc;,'''''',;:coxOOd, * .xWMMMMWNNNNNWWMMMMMMMMx. * c0NMMMMMMMMMMMMMMWNX0x, * .,:looddddddollc;'.. * .','... ..,:cll, * ,kXWWNXK0Oxdlc;,'..... .....';:clodxOKXWMMMMNo. * .kMMMWMMMMMMMMMMWNXXK000OOkkkkxkkkkkkOOOOOO00KKXNWWMMMMMMMMMMMMMMWk. * .dWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNl * .kWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWk. * .xNWMMMMMMMMMMMMMN0OO0KKXNNNNWWMMMWNNXXK0Okxd0MMMMMMMMMMMMMMMW0' * .lXMMMMMMMMMMMMMK; ......'':0MMWx,'.... cWMMMMMMMMMMMMMWO' * ,kNMMMMMMMMMMMK; .:d0NMMMXko, :NMMMMMMMMMMMMNx. * ;kNMMMMMMMMMX; ;0WN0KWMMXXNO. ;XMMMMMMMMMMWO:. * ;xXMMMMMMMX; .kMWx'oWMMx''. ;XMMMMMMMMNO:. * 'o0WMMMMN: ;0WNKXWMMKc. ;XMMMMMNOo,. * .OMMMMWo .;ld0WMMMMXk; :NMMMMMd. * cNMMMMk. ,KMMXxOWNo. oWMMMMNc * '0MMMMX; .:;. 'OMMK,:NMO. .OMMMMM0' * .dWMMMWd. lNWKkkXMMNk0MNc :NMMMMWo * ,0MMMMX: ,lx0XWMMMWXk; .OMMMMM0' * :XMMMMK: .,OMMWx. .dWMMMMXc * :XMMMMNd' :O00; .oNMMMMNo * ,OWMMMMXd;. .. .;kNMMMMWd. * .c0WMMMMWXOxolllcclloxKWMMMMMXl. * .:kNMMMMMMMMMMMMMMMMMMMMMXd' * 'cx0NWMMMMMMMMMMMWN0xc. * ..,:llooooollc;'. * */ // 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 (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 overridden 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); 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: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {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 an {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 Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/RisingStackers_NFT.sol pragma solidity >=0.7.0 <0.9.0; contract RisingStackers is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public maxSupply = 5000; uint256 public maxMintAmountPerTx = 57; bool public paused = true; bool public revealed = false; address public bsAddress; constructor() ERC721("Rising $tackers", "R$") { setHiddenMetadataUri("ipfs://__CID__/hidden.json"); setbsAddress(0x311eB72906C65D1b11432e9Ec862A084a9B397D4); } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "The contract is paused!"); if(supply.current() + _mintAmount >= 2000){ require(paused = true); } _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setbsAddress(address _newAddress) public onlyOwner { bsAddress = _newAddress; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setbsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b9160089162000268565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a9160099162000268565b50611388600b556039600c55600d805461ffff191660011790553480156200007157600080fd5b50604080518082018252600f81526e526973696e6720247461636b65727360881b602080830191825283518085019094526002845261148960f21b908401528151919291620000c39160009162000268565b508051620000d990600190602084019062000268565b505050620000f6620000f06200015a60201b60201c565b6200015e565b60408051808201909152601a81527f697066733a2f2f5f5f4349445f5f2f68696464656e2e6a736f6e00000000000060208201526200013590620001b0565b6200015473311eb72906c65d1b11432e9ec862a084a9b397d4620001d3565b6200034b565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001ba62000207565b8051620001cf90600a90602084019062000268565b5050565b620001dd62000207565b600d80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6006546001600160a01b03163314620002665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b82805462000276906200030e565b90600052602060002090601f0160209004810192826200029a5760008555620002e5565b82601f10620002b557805160ff1916838001178555620002e5565b82800160010185558215620002e5579182015b82811115620002e5578251825591602001919060010190620002c8565b50620002f3929150620002f7565b5090565b5b80821115620002f35760008155600101620002f8565b600181811c908216806200032357607f821691505b602082108114156200034557634e487b7160e01b600052602260045260246000fd5b50919050565b6120ab806200035b6000396000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063adbfb851116100a0578063d5abeb011161006f578063d5abeb01146105d9578063e0a80853146105ef578063e985e9c51461060f578063efbd73f414610658578063f2fde38b1461067857600080fd5b8063adbfb85114610559578063b071401b14610579578063b88d4fde14610599578063c87b56dd146105b957600080fd5b806394354fd0116100e757806394354fd0146104e657806395d89b41146104fc578063a0712d6814610511578063a22cb46514610524578063a45ba8e71461054457600080fd5b806370a0823114610473578063715018a6146104935780637ec4a659146104a85780638da5cb5b146104c857600080fd5b80633ccfd60b1161019b578063518302271161016a57806351830227146103f05780635503a0e81461040f5780635c975abb1461042457806362b99ad41461043e5780636352211e1461045357600080fd5b80633ccfd60b1461036e57806342842e0e14610383578063438b6300146103a35780634fdd43cb146103d057600080fd5b8063095ea7b3116101e2578063095ea7b3146102c957806316ba10e0146102eb57806316c38b3c1461030b57806318160ddd1461032b57806323b872dd1461034e57600080fd5b8063013379241461021457806301ffc9a71461025757806306fdde0314610287578063081812fc146102a9575b600080fd5b34801561022057600080fd5b50600d5461023a906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561026357600080fd5b50610277610272366004611a4a565b610698565b604051901515815260200161024e565b34801561029357600080fd5b5061029c6106ea565b60405161024e9190611abf565b3480156102b557600080fd5b5061023a6102c4366004611ad2565b61077c565b3480156102d557600080fd5b506102e96102e4366004611b07565b6107a3565b005b3480156102f757600080fd5b506102e9610306366004611bbd565b6108be565b34801561031757600080fd5b506102e9610326366004611c16565b6108dd565b34801561033757600080fd5b506103406108f8565b60405190815260200161024e565b34801561035a57600080fd5b506102e9610369366004611c31565b610908565b34801561037a57600080fd5b506102e9610939565b34801561038f57600080fd5b506102e961039e366004611c31565b6109b5565b3480156103af57600080fd5b506103c36103be366004611c6d565b6109d0565b60405161024e9190611c88565b3480156103dc57600080fd5b506102e96103eb366004611bbd565b610ab1565b3480156103fc57600080fd5b50600d5461027790610100900460ff1681565b34801561041b57600080fd5b5061029c610acc565b34801561043057600080fd5b50600d546102779060ff1681565b34801561044a57600080fd5b5061029c610b5a565b34801561045f57600080fd5b5061023a61046e366004611ad2565b610b67565b34801561047f57600080fd5b5061034061048e366004611c6d565b610bc7565b34801561049f57600080fd5b506102e9610c4d565b3480156104b457600080fd5b506102e96104c3366004611bbd565b610c61565b3480156104d457600080fd5b506006546001600160a01b031661023a565b3480156104f257600080fd5b50610340600c5481565b34801561050857600080fd5b5061029c610c7c565b6102e961051f366004611ad2565b610c8b565b34801561053057600080fd5b506102e961053f366004611ccc565b610dc4565b34801561055057600080fd5b5061029c610dcf565b34801561056557600080fd5b506102e9610574366004611c6d565b610ddc565b34801561058557600080fd5b506102e9610594366004611ad2565b610e0e565b3480156105a557600080fd5b506102e96105b4366004611cff565b610e1b565b3480156105c557600080fd5b5061029c6105d4366004611ad2565b610e53565b3480156105e557600080fd5b50610340600b5481565b3480156105fb57600080fd5b506102e961060a366004611c16565b610fd2565b34801561061b57600080fd5b5061027761062a366004611d7b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561066457600080fd5b506102e9610673366004611da5565b610ff4565b34801561068457600080fd5b506102e9610693366004611c6d565b6110b8565b60006001600160e01b031982166380ac58cd60e01b14806106c957506001600160e01b03198216635b5e139f60e01b145b806106e457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546106f990611dc8565b80601f016020809104026020016040519081016040528092919081815260200182805461072590611dc8565b80156107725780601f1061074757610100808354040283529160200191610772565b820191906000526020600020905b81548152906001019060200180831161075557829003601f168201915b5050505050905090565b60006107878261112e565b506000908152600460205260409020546001600160a01b031690565b60006107ae82610b67565b9050806001600160a01b0316836001600160a01b031614156108215760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061083d575061083d813361062a565b6108af5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610818565b6108b9838361118d565b505050565b6108c66111fb565b80516108d990600990602084019061199b565b5050565b6108e56111fb565b600d805460ff1916911515919091179055565b600061090360075490565b905090565b6109123382611255565b61092e5760405162461bcd60e51b815260040161081890611e03565b6108b98383836112d4565b6109416111fb565b60006109556006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461099f576040519150601f19603f3d011682016040523d82523d6000602084013e6109a4565b606091505b50509050806109b257600080fd5b50565b6108b983838360405180602001604052806000815250610e1b565b606060006109dd83610bc7565b905060008167ffffffffffffffff8111156109fa576109fa611b31565b604051908082528060200260200182016040528015610a23578160200160208202803683370190505b509050600160005b8381108015610a3c5750600b548211155b15610aa7576000610a4c83610b67565b9050866001600160a01b0316816001600160a01b03161415610a945782848381518110610a7b57610a7b611e51565b602090810291909101015281610a9081611e7d565b9250505b82610a9e81611e7d565b93505050610a2b565b5090949350505050565b610ab96111fb565b80516108d990600a90602084019061199b565b60098054610ad990611dc8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0590611dc8565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b505050505081565b60088054610ad990611dc8565b6000818152600260205260408120546001600160a01b0316806106e45760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610818565b60006001600160a01b038216610c315760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610818565b506001600160a01b031660009081526003602052604090205490565b610c556111fb565b610c5f6000611470565b565b610c696111fb565b80516108d990600890602084019061199b565b6060600180546106f990611dc8565b80600081118015610c9e5750600c548111155b610ce15760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610818565b600b5481610cee60075490565b610cf89190611e98565b1115610d3d5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610818565b600d5460ff1615610d905760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610818565b6107d082610d9d60075490565b610da79190611e98565b10610dba57600d805460ff191660011790555b6108d933836114c2565b6108d93383836114ff565b600a8054610ad990611dc8565b610de46111fb565b600d80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b610e166111fb565b600c55565b610e253383611255565b610e415760405162461bcd60e51b815260040161081890611e03565b610e4d848484846115ce565b50505050565b6000818152600260205260409020546060906001600160a01b0316610ed25760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610818565b600d54610100900460ff16610f7357600a8054610eee90611dc8565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1a90611dc8565b8015610f675780601f10610f3c57610100808354040283529160200191610f67565b820191906000526020600020905b815481529060010190602001808311610f4a57829003601f168201915b50505050509050919050565b6000610f7d611601565b90506000815111610f9d5760405180602001604052806000815250610fcb565b80610fa784611610565b6009604051602001610fbb93929190611eb0565b6040516020818303038152906040525b9392505050565b610fda6111fb565b600d80549115156101000261ff0019909216919091179055565b816000811180156110075750600c548111155b61104a5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610818565b600b548161105760075490565b6110619190611e98565b11156110a65760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610818565b6110ae6111fb565b6108b982846114c2565b6110c06111fb565b6001600160a01b0381166111255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610818565b6109b281611470565b6000818152600260205260409020546001600160a01b03166109b25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610818565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906111c282610b67565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6006546001600160a01b03163314610c5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610818565b60008061126183610b67565b9050806001600160a01b0316846001600160a01b031614806112a857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806112cc5750836001600160a01b03166112c18461077c565b6001600160a01b0316145b949350505050565b826001600160a01b03166112e782610b67565b6001600160a01b03161461134b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610818565b6001600160a01b0382166113ad5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610818565b6113b860008261118d565b6001600160a01b03831660009081526003602052604081208054600192906113e1908490611f74565b90915550506001600160a01b038216600090815260036020526040812080546001929061140f908490611e98565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b818110156108b9576114db600780546001019055565b6114ed836114e860075490565b61170e565b806114f781611e7d565b9150506114c5565b816001600160a01b0316836001600160a01b031614156115615760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610818565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6115d98484846112d4565b6115e584848484611728565b610e4d5760405162461bcd60e51b815260040161081890611f8b565b6060600880546106f990611dc8565b6060816116345750506040805180820190915260018152600360fc1b602082015290565b8160005b811561165e578061164881611e7d565b91506116579050600a83611ff3565b9150611638565b60008167ffffffffffffffff81111561167957611679611b31565b6040519080825280601f01601f1916602001820160405280156116a3576020820181803683370190505b5090505b84156112cc576116b8600183611f74565b91506116c5600a86612007565b6116d0906030611e98565b60f81b8183815181106116e5576116e5611e51565b60200101906001600160f81b031916908160001a905350611707600a86611ff3565b94506116a7565b6108d9828260405180602001604052806000815250611826565b60006001600160a01b0384163b1561181b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061176c90339089908890889060040161201b565b6020604051808303816000875af19250505080156117a7575060408051601f3d908101601f191682019092526117a491810190612058565b60015b611801573d8080156117d5576040519150601f19603f3d011682016040523d82523d6000602084013e6117da565b606091505b5080516117f95760405162461bcd60e51b815260040161081890611f8b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112cc565b506001949350505050565b6118308383611859565b61183d6000848484611728565b6108b95760405162461bcd60e51b815260040161081890611f8b565b6001600160a01b0382166118af5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610818565b6000818152600260205260409020546001600160a01b0316156119145760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610818565b6001600160a01b038216600090815260036020526040812080546001929061193d908490611e98565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546119a790611dc8565b90600052602060002090601f0160209004810192826119c95760008555611a0f565b82601f106119e257805160ff1916838001178555611a0f565b82800160010185558215611a0f579182015b82811115611a0f5782518255916020019190600101906119f4565b50611a1b929150611a1f565b5090565b5b80821115611a1b5760008155600101611a20565b6001600160e01b0319811681146109b257600080fd5b600060208284031215611a5c57600080fd5b8135610fcb81611a34565b60005b83811015611a82578181015183820152602001611a6a565b83811115610e4d5750506000910152565b60008151808452611aab816020860160208601611a67565b601f01601f19169290920160200192915050565b602081526000610fcb6020830184611a93565b600060208284031215611ae457600080fd5b5035919050565b80356001600160a01b0381168114611b0257600080fd5b919050565b60008060408385031215611b1a57600080fd5b611b2383611aeb565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611b6257611b62611b31565b604051601f8501601f19908116603f01168101908282118183101715611b8a57611b8a611b31565b81604052809350858152868686011115611ba357600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611bcf57600080fd5b813567ffffffffffffffff811115611be657600080fd5b8201601f81018413611bf757600080fd5b6112cc84823560208401611b47565b80358015158114611b0257600080fd5b600060208284031215611c2857600080fd5b610fcb82611c06565b600080600060608486031215611c4657600080fd5b611c4f84611aeb565b9250611c5d60208501611aeb565b9150604084013590509250925092565b600060208284031215611c7f57600080fd5b610fcb82611aeb565b6020808252825182820181905260009190848201906040850190845b81811015611cc057835183529284019291840191600101611ca4565b50909695505050505050565b60008060408385031215611cdf57600080fd5b611ce883611aeb565b9150611cf660208401611c06565b90509250929050565b60008060008060808587031215611d1557600080fd5b611d1e85611aeb565b9350611d2c60208601611aeb565b925060408501359150606085013567ffffffffffffffff811115611d4f57600080fd5b8501601f81018713611d6057600080fd5b611d6f87823560208401611b47565b91505092959194509250565b60008060408385031215611d8e57600080fd5b611d9783611aeb565b9150611cf660208401611aeb565b60008060408385031215611db857600080fd5b82359150611cf660208401611aeb565b600181811c90821680611ddc57607f821691505b60208210811415611dfd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611e9157611e91611e67565b5060010190565b60008219821115611eab57611eab611e67565b500190565b600084516020611ec38285838a01611a67565b855191840191611ed68184848a01611a67565b8554920191600090600181811c9080831680611ef357607f831692505b858310811415611f1157634e487b7160e01b85526022600452602485fd5b808015611f255760018114611f3657611f63565b60ff19851688528388019550611f63565b60008b81526020902060005b85811015611f5b5781548a820152908401908801611f42565b505083880195505b50939b9a5050505050505050505050565b600082821015611f8657611f86611e67565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261200257612002611fdd565b500490565b60008261201657612016611fdd565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061204e90830184611a93565b9695505050505050565b60006020828403121561206a57600080fd5b8151610fcb81611a3456fea2646970667358221220307ef5f719a83f01a70a3f3ebd59faccd836d8ece8724450a0bcb91f10930bd964736f6c634300080b0033
Deployed Bytecode
0x60806040526004361061020f5760003560e01c806370a0823111610118578063adbfb851116100a0578063d5abeb011161006f578063d5abeb01146105d9578063e0a80853146105ef578063e985e9c51461060f578063efbd73f414610658578063f2fde38b1461067857600080fd5b8063adbfb85114610559578063b071401b14610579578063b88d4fde14610599578063c87b56dd146105b957600080fd5b806394354fd0116100e757806394354fd0146104e657806395d89b41146104fc578063a0712d6814610511578063a22cb46514610524578063a45ba8e71461054457600080fd5b806370a0823114610473578063715018a6146104935780637ec4a659146104a85780638da5cb5b146104c857600080fd5b80633ccfd60b1161019b578063518302271161016a57806351830227146103f05780635503a0e81461040f5780635c975abb1461042457806362b99ad41461043e5780636352211e1461045357600080fd5b80633ccfd60b1461036e57806342842e0e14610383578063438b6300146103a35780634fdd43cb146103d057600080fd5b8063095ea7b3116101e2578063095ea7b3146102c957806316ba10e0146102eb57806316c38b3c1461030b57806318160ddd1461032b57806323b872dd1461034e57600080fd5b8063013379241461021457806301ffc9a71461025757806306fdde0314610287578063081812fc146102a9575b600080fd5b34801561022057600080fd5b50600d5461023a906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561026357600080fd5b50610277610272366004611a4a565b610698565b604051901515815260200161024e565b34801561029357600080fd5b5061029c6106ea565b60405161024e9190611abf565b3480156102b557600080fd5b5061023a6102c4366004611ad2565b61077c565b3480156102d557600080fd5b506102e96102e4366004611b07565b6107a3565b005b3480156102f757600080fd5b506102e9610306366004611bbd565b6108be565b34801561031757600080fd5b506102e9610326366004611c16565b6108dd565b34801561033757600080fd5b506103406108f8565b60405190815260200161024e565b34801561035a57600080fd5b506102e9610369366004611c31565b610908565b34801561037a57600080fd5b506102e9610939565b34801561038f57600080fd5b506102e961039e366004611c31565b6109b5565b3480156103af57600080fd5b506103c36103be366004611c6d565b6109d0565b60405161024e9190611c88565b3480156103dc57600080fd5b506102e96103eb366004611bbd565b610ab1565b3480156103fc57600080fd5b50600d5461027790610100900460ff1681565b34801561041b57600080fd5b5061029c610acc565b34801561043057600080fd5b50600d546102779060ff1681565b34801561044a57600080fd5b5061029c610b5a565b34801561045f57600080fd5b5061023a61046e366004611ad2565b610b67565b34801561047f57600080fd5b5061034061048e366004611c6d565b610bc7565b34801561049f57600080fd5b506102e9610c4d565b3480156104b457600080fd5b506102e96104c3366004611bbd565b610c61565b3480156104d457600080fd5b506006546001600160a01b031661023a565b3480156104f257600080fd5b50610340600c5481565b34801561050857600080fd5b5061029c610c7c565b6102e961051f366004611ad2565b610c8b565b34801561053057600080fd5b506102e961053f366004611ccc565b610dc4565b34801561055057600080fd5b5061029c610dcf565b34801561056557600080fd5b506102e9610574366004611c6d565b610ddc565b34801561058557600080fd5b506102e9610594366004611ad2565b610e0e565b3480156105a557600080fd5b506102e96105b4366004611cff565b610e1b565b3480156105c557600080fd5b5061029c6105d4366004611ad2565b610e53565b3480156105e557600080fd5b50610340600b5481565b3480156105fb57600080fd5b506102e961060a366004611c16565b610fd2565b34801561061b57600080fd5b5061027761062a366004611d7b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561066457600080fd5b506102e9610673366004611da5565b610ff4565b34801561068457600080fd5b506102e9610693366004611c6d565b6110b8565b60006001600160e01b031982166380ac58cd60e01b14806106c957506001600160e01b03198216635b5e139f60e01b145b806106e457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546106f990611dc8565b80601f016020809104026020016040519081016040528092919081815260200182805461072590611dc8565b80156107725780601f1061074757610100808354040283529160200191610772565b820191906000526020600020905b81548152906001019060200180831161075557829003601f168201915b5050505050905090565b60006107878261112e565b506000908152600460205260409020546001600160a01b031690565b60006107ae82610b67565b9050806001600160a01b0316836001600160a01b031614156108215760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061083d575061083d813361062a565b6108af5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610818565b6108b9838361118d565b505050565b6108c66111fb565b80516108d990600990602084019061199b565b5050565b6108e56111fb565b600d805460ff1916911515919091179055565b600061090360075490565b905090565b6109123382611255565b61092e5760405162461bcd60e51b815260040161081890611e03565b6108b98383836112d4565b6109416111fb565b60006109556006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461099f576040519150601f19603f3d011682016040523d82523d6000602084013e6109a4565b606091505b50509050806109b257600080fd5b50565b6108b983838360405180602001604052806000815250610e1b565b606060006109dd83610bc7565b905060008167ffffffffffffffff8111156109fa576109fa611b31565b604051908082528060200260200182016040528015610a23578160200160208202803683370190505b509050600160005b8381108015610a3c5750600b548211155b15610aa7576000610a4c83610b67565b9050866001600160a01b0316816001600160a01b03161415610a945782848381518110610a7b57610a7b611e51565b602090810291909101015281610a9081611e7d565b9250505b82610a9e81611e7d565b93505050610a2b565b5090949350505050565b610ab96111fb565b80516108d990600a90602084019061199b565b60098054610ad990611dc8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0590611dc8565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b505050505081565b60088054610ad990611dc8565b6000818152600260205260408120546001600160a01b0316806106e45760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610818565b60006001600160a01b038216610c315760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610818565b506001600160a01b031660009081526003602052604090205490565b610c556111fb565b610c5f6000611470565b565b610c696111fb565b80516108d990600890602084019061199b565b6060600180546106f990611dc8565b80600081118015610c9e5750600c548111155b610ce15760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610818565b600b5481610cee60075490565b610cf89190611e98565b1115610d3d5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610818565b600d5460ff1615610d905760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610818565b6107d082610d9d60075490565b610da79190611e98565b10610dba57600d805460ff191660011790555b6108d933836114c2565b6108d93383836114ff565b600a8054610ad990611dc8565b610de46111fb565b600d80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b610e166111fb565b600c55565b610e253383611255565b610e415760405162461bcd60e51b815260040161081890611e03565b610e4d848484846115ce565b50505050565b6000818152600260205260409020546060906001600160a01b0316610ed25760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610818565b600d54610100900460ff16610f7357600a8054610eee90611dc8565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1a90611dc8565b8015610f675780601f10610f3c57610100808354040283529160200191610f67565b820191906000526020600020905b815481529060010190602001808311610f4a57829003601f168201915b50505050509050919050565b6000610f7d611601565b90506000815111610f9d5760405180602001604052806000815250610fcb565b80610fa784611610565b6009604051602001610fbb93929190611eb0565b6040516020818303038152906040525b9392505050565b610fda6111fb565b600d80549115156101000261ff0019909216919091179055565b816000811180156110075750600c548111155b61104a5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610818565b600b548161105760075490565b6110619190611e98565b11156110a65760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610818565b6110ae6111fb565b6108b982846114c2565b6110c06111fb565b6001600160a01b0381166111255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610818565b6109b281611470565b6000818152600260205260409020546001600160a01b03166109b25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610818565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906111c282610b67565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6006546001600160a01b03163314610c5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610818565b60008061126183610b67565b9050806001600160a01b0316846001600160a01b031614806112a857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806112cc5750836001600160a01b03166112c18461077c565b6001600160a01b0316145b949350505050565b826001600160a01b03166112e782610b67565b6001600160a01b03161461134b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610818565b6001600160a01b0382166113ad5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610818565b6113b860008261118d565b6001600160a01b03831660009081526003602052604081208054600192906113e1908490611f74565b90915550506001600160a01b038216600090815260036020526040812080546001929061140f908490611e98565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b818110156108b9576114db600780546001019055565b6114ed836114e860075490565b61170e565b806114f781611e7d565b9150506114c5565b816001600160a01b0316836001600160a01b031614156115615760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610818565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6115d98484846112d4565b6115e584848484611728565b610e4d5760405162461bcd60e51b815260040161081890611f8b565b6060600880546106f990611dc8565b6060816116345750506040805180820190915260018152600360fc1b602082015290565b8160005b811561165e578061164881611e7d565b91506116579050600a83611ff3565b9150611638565b60008167ffffffffffffffff81111561167957611679611b31565b6040519080825280601f01601f1916602001820160405280156116a3576020820181803683370190505b5090505b84156112cc576116b8600183611f74565b91506116c5600a86612007565b6116d0906030611e98565b60f81b8183815181106116e5576116e5611e51565b60200101906001600160f81b031916908160001a905350611707600a86611ff3565b94506116a7565b6108d9828260405180602001604052806000815250611826565b60006001600160a01b0384163b1561181b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061176c90339089908890889060040161201b565b6020604051808303816000875af19250505080156117a7575060408051601f3d908101601f191682019092526117a491810190612058565b60015b611801573d8080156117d5576040519150601f19603f3d011682016040523d82523d6000602084013e6117da565b606091505b5080516117f95760405162461bcd60e51b815260040161081890611f8b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112cc565b506001949350505050565b6118308383611859565b61183d6000848484611728565b6108b95760405162461bcd60e51b815260040161081890611f8b565b6001600160a01b0382166118af5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610818565b6000818152600260205260409020546001600160a01b0316156119145760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610818565b6001600160a01b038216600090815260036020526040812080546001929061193d908490611e98565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546119a790611dc8565b90600052602060002090601f0160209004810192826119c95760008555611a0f565b82601f106119e257805160ff1916838001178555611a0f565b82800160010185558215611a0f579182015b82811115611a0f5782518255916020019190600101906119f4565b50611a1b929150611a1f565b5090565b5b80821115611a1b5760008155600101611a20565b6001600160e01b0319811681146109b257600080fd5b600060208284031215611a5c57600080fd5b8135610fcb81611a34565b60005b83811015611a82578181015183820152602001611a6a565b83811115610e4d5750506000910152565b60008151808452611aab816020860160208601611a67565b601f01601f19169290920160200192915050565b602081526000610fcb6020830184611a93565b600060208284031215611ae457600080fd5b5035919050565b80356001600160a01b0381168114611b0257600080fd5b919050565b60008060408385031215611b1a57600080fd5b611b2383611aeb565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611b6257611b62611b31565b604051601f8501601f19908116603f01168101908282118183101715611b8a57611b8a611b31565b81604052809350858152868686011115611ba357600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611bcf57600080fd5b813567ffffffffffffffff811115611be657600080fd5b8201601f81018413611bf757600080fd5b6112cc84823560208401611b47565b80358015158114611b0257600080fd5b600060208284031215611c2857600080fd5b610fcb82611c06565b600080600060608486031215611c4657600080fd5b611c4f84611aeb565b9250611c5d60208501611aeb565b9150604084013590509250925092565b600060208284031215611c7f57600080fd5b610fcb82611aeb565b6020808252825182820181905260009190848201906040850190845b81811015611cc057835183529284019291840191600101611ca4565b50909695505050505050565b60008060408385031215611cdf57600080fd5b611ce883611aeb565b9150611cf660208401611c06565b90509250929050565b60008060008060808587031215611d1557600080fd5b611d1e85611aeb565b9350611d2c60208601611aeb565b925060408501359150606085013567ffffffffffffffff811115611d4f57600080fd5b8501601f81018713611d6057600080fd5b611d6f87823560208401611b47565b91505092959194509250565b60008060408385031215611d8e57600080fd5b611d9783611aeb565b9150611cf660208401611aeb565b60008060408385031215611db857600080fd5b82359150611cf660208401611aeb565b600181811c90821680611ddc57607f821691505b60208210811415611dfd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611e9157611e91611e67565b5060010190565b60008219821115611eab57611eab611e67565b500190565b600084516020611ec38285838a01611a67565b855191840191611ed68184848a01611a67565b8554920191600090600181811c9080831680611ef357607f831692505b858310811415611f1157634e487b7160e01b85526022600452602485fd5b808015611f255760018114611f3657611f63565b60ff19851688528388019550611f63565b60008b81526020902060005b85811015611f5b5781548a820152908401908801611f42565b505083880195505b50939b9a5050505050505050505050565b600082821015611f8657611f86611e67565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261200257612002611fdd565b500490565b60008261201657612016611fdd565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061204e90830184611a93565b9695505050505050565b60006020828403121561206a57600080fd5b8151610fcb81611a3456fea2646970667358221220307ef5f719a83f01a70a3f3ebd59faccd836d8ece8724450a0bcb91f10930bd964736f6c634300080b0033
Deployed Bytecode Sourcemap
42213:3846:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42628:24;;;;;;;;;;-1:-1:-1;42628:24:0;;;;;;;-1:-1:-1;;;;;42628:24:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;42628:24:0;;;;;;;;28941:305;;;;;;;;;;-1:-1:-1;28941:305:0;;;;;:::i;:::-;;:::i;:::-;;;773:14:1;;766:22;748:41;;736:2;721:18;28941:305:0;608:187:1;29868:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31381:171::-;;;;;;;;;;-1:-1:-1;31381:171:0;;;;;:::i;:::-;;:::i;30898:417::-;;;;;;;;;;-1:-1:-1;30898:417:0;;;;;:::i;:::-;;:::i;:::-;;45318:100;;;;;;;;;;-1:-1:-1;45318:100:0;;;;;:::i;:::-;;:::i;45424:77::-;;;;;;;;;;-1:-1:-1;45424:77:0;;;;;:::i;:::-;;:::i;43077:89::-;;;;;;;;;;;;;:::i;:::-;;;3894:25:1;;;3882:2;3867:18;43077:89:0;3748:177:1;32081:336:0;;;;;;;;;;-1:-1:-1;32081:336:0;;;;;:::i;:::-;;:::i;45507:229::-;;;;;;;;;;;;;:::i;32488:185::-;;;;;;;;;;-1:-1:-1;32488:185:0;;;;;:::i;:::-;;:::i;43605:635::-;;;;;;;;;;-1:-1:-1;43605:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45074:132::-;;;;;;;;;;-1:-1:-1;45074:132:0;;;;;:::i;:::-;;:::i;42593:28::-;;;;;;;;;;-1:-1:-1;42593:28:0;;;;;;;;;;;42404:33;;;;;;;;;;;;;:::i;42563:25::-;;;;;;;;;;-1:-1:-1;42563:25:0;;;;;;;;42371:28;;;;;;;;;;;;;:::i;29579:222::-;;;;;;;;;;-1:-1:-1;29579:222:0;;;;;:::i;:::-;;:::i;29310:207::-;;;;;;;;;;-1:-1:-1;29310:207:0;;;;;:::i;:::-;;:::i;9477:103::-;;;;;;;;;;;;;:::i;45212:100::-;;;;;;;;;;-1:-1:-1;45212:100:0;;;;;:::i;:::-;;:::i;8829:87::-;;;;;;;;;;-1:-1:-1;8902:6:0;;-1:-1:-1;;;;;8902:6:0;8829:87;;42518:38;;;;;;;;;;;;;;;;30037:104;;;;;;;;;;;;;:::i;43172:264::-;;;;;;:::i;:::-;;:::i;31624:155::-;;;;;;;;;;-1:-1:-1;31624:155:0;;;;;:::i;:::-;;:::i;42442:31::-;;;;;;;;;;;;;:::i;44834:96::-;;;;;;;;;;-1:-1:-1;44834:96:0;;;;;:::i;:::-;;:::i;44938:130::-;;;;;;;;;;-1:-1:-1;44938:130:0;;;;;:::i;:::-;;:::i;32744:323::-;;;;;;;;;;-1:-1:-1;32744:323:0;;;;;:::i;:::-;;:::i;44246:494::-;;;;;;;;;;-1:-1:-1;44246:494:0;;;;;:::i;:::-;;:::i;42482:31::-;;;;;;;;;;;;;;;;44746:81;;;;;;;;;;-1:-1:-1;44746:81:0;;;;;:::i;:::-;;:::i;31850:164::-;;;;;;;;;;-1:-1:-1;31850:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;31971:25:0;;;31947:4;31971:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31850:164;43444:155;;;;;;;;;;-1:-1:-1;43444:155:0;;;;;:::i;:::-;;:::i;9735:201::-;;;;;;;;;;-1:-1:-1;9735:201:0;;;;;:::i;:::-;;:::i;28941:305::-;29043:4;-1:-1:-1;;;;;;29080:40:0;;-1:-1:-1;;;29080:40:0;;:105;;-1:-1:-1;;;;;;;29137:48:0;;-1:-1:-1;;;29137:48:0;29080:105;:158;;;-1:-1:-1;;;;;;;;;;21792:40:0;;;29202:36;29060:178;28941:305;-1:-1:-1;;28941:305:0:o;29868:100::-;29922:13;29955:5;29948:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29868:100;:::o;31381:171::-;31457:7;31477:23;31492:7;31477:14;:23::i;:::-;-1:-1:-1;31520:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31520:24:0;;31381:171::o;30898:417::-;30979:13;30995:23;31010:7;30995:14;:23::i;:::-;30979:39;;31043:5;-1:-1:-1;;;;;31037:11:0;:2;-1:-1:-1;;;;;31037:11:0;;;31029:57;;;;-1:-1:-1;;;31029:57:0;;7133:2:1;31029:57:0;;;7115:21:1;7172:2;7152:18;;;7145:30;7211:34;7191:18;;;7184:62;-1:-1:-1;;;7262:18:1;;;7255:31;7303:19;;31029:57:0;;;;;;;;;7460:10;-1:-1:-1;;;;;31121:21:0;;;;:62;;-1:-1:-1;31146:37:0;31163:5;7460:10;31850:164;:::i;31146:37::-;31099:174;;;;-1:-1:-1;;;31099:174:0;;7535:2:1;31099:174:0;;;7517:21:1;7574:2;7554:18;;;7547:30;7613:34;7593:18;;;7586:62;7684:32;7664:18;;;7657:60;7734:19;;31099:174:0;7333:426:1;31099:174:0;31286:21;31295:2;31299:7;31286:8;:21::i;:::-;30968:347;30898:417;;:::o;45318:100::-;8715:13;:11;:13::i;:::-;45390:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;45318:100:::0;:::o;45424:77::-;8715:13;:11;:13::i;:::-;45480:6:::1;:15:::0;;-1:-1:-1;;45480:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45424:77::o;43077:89::-;43121:7;43144:16;:6;3703:14;;3611:114;43144:16;43137:23;;43077:89;:::o;32081:336::-;32276:41;7460:10;32309:7;32276:18;:41::i;:::-;32268:100;;;;-1:-1:-1;;;32268:100:0;;;;;;;:::i;:::-;32381:28;32391:4;32397:2;32401:7;32381:9;:28::i;45507:229::-;8715:13;:11;:13::i;:::-;45558:7:::1;45579;8902:6:::0;;-1:-1:-1;;;;;8902:6:0;;8829:87;45579:7:::1;-1:-1:-1::0;;;;;45571:21:0::1;45600;45571:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45557:69;;;45641:2;45633:11;;;::::0;::::1;;45544:192;45507:229::o:0;32488:185::-;32626:39;32643:4;32649:2;32653:7;32626:39;;;;;;;;;;;;:16;:39::i;43605:635::-;43680:16;43708:23;43734:17;43744:6;43734:9;:17::i;:::-;43708:43;;43758:30;43805:15;43791:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43791:30:0;-1:-1:-1;43758:63:0;-1:-1:-1;43853:1:0;43828:22;43897:309;43922:15;43904;:33;:64;;;;;43959:9;;43941:14;:27;;43904:64;43897:309;;;43979:25;44007:23;44015:14;44007:7;:23::i;:::-;43979:51;;44066:6;-1:-1:-1;;;;;44045:27:0;:17;-1:-1:-1;;;;;44045:27:0;;44041:131;;;44118:14;44085:13;44099:15;44085:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;44145:17;;;;:::i;:::-;;;;44041:131;44182:16;;;;:::i;:::-;;;;43970:236;43897:309;;;-1:-1:-1;44221:13:0;;43605:635;-1:-1:-1;;;;43605:635:0:o;45074:132::-;8715:13;:11;:13::i;:::-;45162:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;42404:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42371:28::-;;;;;;;:::i;29579:222::-;29651:7;29687:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29687:16:0;29722:19;29714:56;;;;-1:-1:-1;;;29714:56:0;;8995:2:1;29714:56:0;;;8977:21:1;9034:2;9014:18;;;9007:30;-1:-1:-1;;;9053:18:1;;;9046:54;9117:18;;29714:56:0;8793:348:1;29310:207:0;29382:7;-1:-1:-1;;;;;29410:19:0;;29402:73;;;;-1:-1:-1;;;29402:73:0;;9348:2:1;29402:73:0;;;9330:21:1;9387:2;9367:18;;;9360:30;9426:34;9406:18;;;9399:62;-1:-1:-1;;;9477:18:1;;;9470:39;9526:19;;29402:73:0;9146:405:1;29402:73:0;-1:-1:-1;;;;;;29493:16:0;;;;;:9;:16;;;;;;;29310:207::o;9477:103::-;8715:13;:11;:13::i;:::-;9542:30:::1;9569:1;9542:18;:30::i;:::-;9477:103::o:0;45212:100::-;8715:13;:11;:13::i;:::-;45284:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;30037:104::-:0;30093:13;30126:7;30119:14;;;;;:::i;43172:264::-;43237:11;42911:1;42897:11;:15;:52;;;;;42931:18;;42916:11;:33;;42897:52;42889:85;;;;-1:-1:-1;;;42889:85:0;;9758:2:1;42889:85:0;;;9740:21:1;9797:2;9777:18;;;9770:30;-1:-1:-1;;;9816:18:1;;;9809:50;9876:18;;42889:85:0;9556:344:1;42889:85:0;43023:9;;43008:11;42989:16;:6;3703:14;;3611:114;42989:16;:30;;;;:::i;:::-;:43;;42981:76;;;;-1:-1:-1;;;42981:76:0;;10240:2:1;42981:76:0;;;10222:21:1;10279:2;10259:18;;;10252:30;-1:-1:-1;;;10298:18:1;;;10291:50;10358:18;;42981:76:0;10038:344:1;42981:76:0;43266:6:::1;::::0;::::1;;43265:7;43257:43;;;::::0;-1:-1:-1;;;43257:43:0;;10589:2:1;43257:43:0::1;::::0;::::1;10571:21:1::0;10628:2;10608:18;;;10601:30;10667:25;10647:18;;;10640:53;10710:18;;43257:43:0::1;10387:347:1::0;43257:43:0::1;43344:4;43329:11;43310:16;:6;3703:14:::0;;3611:114;43310:16:::1;:30;;;;:::i;:::-;:38;43307:83;;43368:6;:13:::0;;-1:-1:-1;;43368:13:0::1;43377:4;43368:13;::::0;;43360:22:::1;43396:34;43406:10;43418:11;43396:9;:34::i;31624:155::-:0;31719:52;7460:10;31752:8;31762;31719:18;:52::i;42442:31::-;;;;;;;:::i;44834:96::-;8715:13;:11;:13::i;:::-;44901:9:::1;:23:::0;;-1:-1:-1;;;;;44901:23:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;44901:23:0;;::::1;::::0;;;::::1;::::0;;44834:96::o;44938:130::-;8715:13;:11;:13::i;:::-;45022:18:::1;:40:::0;44938:130::o;32744:323::-;32918:41;7460:10;32951:7;32918:18;:41::i;:::-;32910:100;;;;-1:-1:-1;;;32910:100:0;;;;;;;:::i;:::-;33021:38;33035:4;33041:2;33045:7;33054:4;33021:13;:38::i;:::-;32744:323;;;;:::o;44246:494::-;34639:4;34663:16;;;:7;:16;;;;;;44345:13;;-1:-1:-1;;;;;34663:16:0;44370:98;;;;-1:-1:-1;;;44370:98:0;;10941:2:1;44370:98:0;;;10923:21:1;10980:2;10960:18;;;10953:30;11019:34;10999:18;;;10992:62;-1:-1:-1;;;11070:18:1;;;11063:45;11125:19;;44370:98:0;10739:411:1;44370:98:0;44481:8;;;;;;;44477:64;;44516:17;44509:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44246:494;;;:::o;44477:64::-;44549:28;44580:10;:8;:10::i;:::-;44549:41;;44635:1;44610:14;44604:28;:32;:130;;;;;;;;;;;;;;;;;44672:14;44688:19;:8;:17;:19::i;:::-;44709:9;44655:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44604:130;44597:137;44246:494;-1:-1:-1;;;44246:494:0:o;44746:81::-;8715:13;:11;:13::i;:::-;44804:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;44804:17:0;;::::1;::::0;;;::::1;::::0;;44746:81::o;43444:155::-;43530:11;42911:1;42897:11;:15;:52;;;;;42931:18;;42916:11;:33;;42897:52;42889:85;;;;-1:-1:-1;;;42889:85:0;;9758:2:1;42889:85:0;;;9740:21:1;9797:2;9777:18;;;9770:30;-1:-1:-1;;;9816:18:1;;;9809:50;9876:18;;42889:85:0;9556:344:1;42889:85:0;43023:9;;43008:11;42989:16;:6;3703:14;;3611:114;42989:16;:30;;;;:::i;:::-;:43;;42981:76;;;;-1:-1:-1;;;42981:76:0;;10240:2:1;42981:76:0;;;10222:21:1;10279:2;10259:18;;;10252:30;-1:-1:-1;;;10298:18:1;;;10291:50;10358:18;;42981:76:0;10038:344:1;42981:76:0;8715:13:::1;:11;:13::i;:::-;43560:33:::2;43570:9;43581:11;43560:9;:33::i;9735:201::-:0;8715:13;:11;:13::i;:::-;-1:-1:-1;;;;;9824:22:0;::::1;9816:73;;;::::0;-1:-1:-1;;;9816:73:0;;13015:2:1;9816:73:0::1;::::0;::::1;12997:21:1::0;13054:2;13034:18;;;13027:30;13093:34;13073:18;;;13066:62;-1:-1:-1;;;13144:18:1;;;13137:36;13190:19;;9816:73:0::1;12813:402:1::0;9816:73:0::1;9900:28;9919:8;9900:18;:28::i;39356:135::-:0;34639:4;34663:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34663:16:0;39430:53;;;;-1:-1:-1;;;39430:53:0;;8995:2:1;39430:53:0;;;8977:21:1;9034:2;9014:18;;;9007:30;-1:-1:-1;;;9053:18:1;;;9046:54;9117:18;;39430:53:0;8793:348:1;38635:174:0;38710:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;38710:29:0;-1:-1:-1;;;;;38710:29:0;;;;;;;;:24;;38764:23;38710:24;38764:14;:23::i;:::-;-1:-1:-1;;;;;38755:46:0;;;;;;;;;;;38635:174;;:::o;8994:132::-;8902:6;;-1:-1:-1;;;;;8902:6:0;7460:10;9058:23;9050:68;;;;-1:-1:-1;;;9050:68:0;;13422:2:1;9050:68:0;;;13404:21:1;;;13441:18;;;13434:30;13500:34;13480:18;;;13473:62;13552:18;;9050:68:0;13220:356:1;34868:264:0;34961:4;34978:13;34994:23;35009:7;34994:14;:23::i;:::-;34978:39;;35047:5;-1:-1:-1;;;;;35036:16:0;:7;-1:-1:-1;;;;;35036:16:0;;:52;;;-1:-1:-1;;;;;;31971:25:0;;;31947:4;31971:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;35056:32;35036:87;;;;35116:7;-1:-1:-1;;;;;35092:31:0;:20;35104:7;35092:11;:20::i;:::-;-1:-1:-1;;;;;35092:31:0;;35036:87;35028:96;34868:264;-1:-1:-1;;;;34868:264:0:o;37891:625::-;38050:4;-1:-1:-1;;;;;38023:31:0;:23;38038:7;38023:14;:23::i;:::-;-1:-1:-1;;;;;38023:31:0;;38015:81;;;;-1:-1:-1;;;38015:81:0;;13783:2:1;38015:81:0;;;13765:21:1;13822:2;13802:18;;;13795:30;13861:34;13841:18;;;13834:62;-1:-1:-1;;;13912:18:1;;;13905:35;13957:19;;38015:81:0;13581:401:1;38015:81:0;-1:-1:-1;;;;;38115:16:0;;38107:65;;;;-1:-1:-1;;;38107:65:0;;14189:2:1;38107:65:0;;;14171:21:1;14228:2;14208:18;;;14201:30;14267:34;14247:18;;;14240:62;-1:-1:-1;;;14318:18:1;;;14311:34;14362:19;;38107:65:0;13987:400:1;38107:65:0;38289:29;38306:1;38310:7;38289:8;:29::i;:::-;-1:-1:-1;;;;;38331:15:0;;;;;;:9;:15;;;;;:20;;38350:1;;38331:15;:20;;38350:1;;38331:20;:::i;:::-;;;;-1:-1:-1;;;;;;;38362:13:0;;;;;;:9;:13;;;;;:18;;38379:1;;38362:13;:18;;38379:1;;38362:18;:::i;:::-;;;;-1:-1:-1;;38391:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;38391:21:0;-1:-1:-1;;;;;38391:21:0;;;;;;;;;38430:27;;38391:16;;38430:27;;;;;;;30968:347;30898:417;;:::o;10096:191::-;10189:6;;;-1:-1:-1;;;;;10206:17:0;;;-1:-1:-1;;;;;;10206:17:0;;;;;;;10239:40;;10189:6;;;10206:17;10189:6;;10239:40;;10170:16;;10239:40;10159:128;10096:191;:::o;45742:204::-;45822:9;45817:124;45841:11;45837:1;:15;45817:124;;;45868:18;:6;3822:19;;3840:1;3822:19;;;3733:127;45868:18;45895:38;45905:9;45916:16;:6;3703:14;;3611:114;45916:16;45895:9;:38::i;:::-;45854:3;;;;:::i;:::-;;;;45817:124;;38952:315;39107:8;-1:-1:-1;;;;;39098:17:0;:5;-1:-1:-1;;;;;39098:17:0;;;39090:55;;;;-1:-1:-1;;;39090:55:0;;14724:2:1;39090:55:0;;;14706:21:1;14763:2;14743:18;;;14736:30;14802:27;14782:18;;;14775:55;14847:18;;39090:55:0;14522:349:1;39090:55:0;-1:-1:-1;;;;;39156:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;39156:46:0;;;;;;;;;;39218:41;;748::1;;;39218::0;;721:18:1;39218:41:0;;;;;;;38952:315;;;:::o;33948:313::-;34104:28;34114:4;34120:2;34124:7;34104:9;:28::i;:::-;34151:47;34174:4;34180:2;34184:7;34193:4;34151:22;:47::i;:::-;34143:110;;;;-1:-1:-1;;;34143:110:0;;;;;;;:::i;45952:104::-;46012:13;46041:9;46034:16;;;;;:::i;4634:723::-;4690:13;4911:10;4907:53;;-1:-1:-1;;4938:10:0;;;;;;;;;;;;-1:-1:-1;;;4938:10:0;;;;;4634:723::o;4907:53::-;4985:5;4970:12;5026:78;5033:9;;5026:78;;5059:8;;;;:::i;:::-;;-1:-1:-1;5082:10:0;;-1:-1:-1;5090:2:0;5082:10;;:::i;:::-;;;5026:78;;;5114:19;5146:6;5136:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5136:17:0;;5114:39;;5164:154;5171:10;;5164:154;;5198:11;5208:1;5198:11;;:::i;:::-;;-1:-1:-1;5267:10:0;5275:2;5267:5;:10;:::i;:::-;5254:24;;:2;:24;:::i;:::-;5241:39;;5224:6;5231;5224:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5224:56:0;;;;;;;;-1:-1:-1;5295:11:0;5304:2;5295:11;;:::i;:::-;;;5164:154;;35474:110;35550:26;35560:2;35564:7;35550:26;;;;;;;;;;;;:9;:26::i;40055:853::-;40209:4;-1:-1:-1;;;;;40230:13:0;;11822:19;:23;40226:675;;40266:71;;-1:-1:-1;;;40266:71:0;;-1:-1:-1;;;;;40266:36:0;;;;;:71;;7460:10;;40317:4;;40323:7;;40332:4;;40266:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40266:71:0;;;;;;;;-1:-1:-1;;40266:71:0;;;;;;;;;;;;:::i;:::-;;;40262:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40507:13:0;;40503:328;;40550:60;;-1:-1:-1;;;40550:60:0;;;;;;;:::i;40503:328::-;40781:6;40775:13;40766:6;40762:2;40758:15;40751:38;40262:584;-1:-1:-1;;;;;;40388:51:0;-1:-1:-1;;;40388:51:0;;-1:-1:-1;40381:58:0;;40226:675;-1:-1:-1;40885:4:0;40055:853;;;;;;:::o;35811:319::-;35940:18;35946:2;35950:7;35940:5;:18::i;:::-;35991:53;36022:1;36026:2;36030:7;36039:4;35991:22;:53::i;:::-;35969:153;;;;-1:-1:-1;;;35969:153:0;;;;;;;:::i;36466:439::-;-1:-1:-1;;;;;36546:16:0;;36538:61;;;;-1:-1:-1;;;36538:61:0;;16619:2:1;36538:61:0;;;16601:21:1;;;16638:18;;;16631:30;16697:34;16677:18;;;16670:62;16749:18;;36538:61:0;16417:356:1;36538:61:0;34639:4;34663:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34663:16:0;:30;36610:58;;;;-1:-1:-1;;;36610:58:0;;16980:2:1;36610:58:0;;;16962:21:1;17019:2;16999:18;;;16992:30;17058;17038:18;;;17031:58;17106:18;;36610:58:0;16778:352:1;36610:58:0;-1:-1:-1;;;;;36739:13:0;;;;;;:9;:13;;;;;:18;;36756:1;;36739:13;:18;;36756:1;;36739:18;:::i;:::-;;;;-1:-1:-1;;36768:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;36768:21:0;-1:-1:-1;;;;;36768:21:0;;;;;;;;36807:33;;36768:16;;;36807:33;;36768:16;;36807:33;45390:22:::1;45318:100:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:131:1;-1:-1:-1;;;;;;296:32:1;;286:43;;276:71;;343:1;340;333:12;358:245;416:6;469:2;457:9;448:7;444:23;440:32;437:52;;;485:1;482;475:12;437:52;524:9;511:23;543:30;567:5;543:30;:::i;800:258::-;872:1;882:113;896:6;893:1;890:13;882:113;;;972:11;;;966:18;953:11;;;946:39;918:2;911:10;882:113;;;1013:6;1010:1;1007:13;1004:48;;;-1:-1:-1;;1048:1:1;1030:16;;1023:27;800:258::o;1063:::-;1105:3;1143:5;1137:12;1170:6;1165:3;1158:19;1186:63;1242:6;1235:4;1230:3;1226:14;1219:4;1212:5;1208:16;1186:63;:::i;:::-;1303:2;1282:15;-1:-1:-1;;1278:29:1;1269:39;;;;1310:4;1265:50;;1063:258;-1:-1:-1;;1063:258:1:o;1326:220::-;1475:2;1464:9;1457:21;1438:4;1495:45;1536:2;1525:9;1521:18;1513:6;1495:45;:::i;1551:180::-;1610:6;1663:2;1651:9;1642:7;1638:23;1634:32;1631:52;;;1679:1;1676;1669:12;1631:52;-1:-1:-1;1702:23:1;;1551:180;-1:-1:-1;1551:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2173:127::-;2234:10;2229:3;2225:20;2222:1;2215:31;2265:4;2262:1;2255:15;2289:4;2286:1;2279:15;2305:632;2370:5;2400:18;2441:2;2433:6;2430:14;2427:40;;;2447:18;;:::i;:::-;2522:2;2516:9;2490:2;2576:15;;-1:-1:-1;;2572:24:1;;;2598:2;2568:33;2564:42;2552:55;;;2622:18;;;2642:22;;;2619:46;2616:72;;;2668:18;;:::i;:::-;2708:10;2704:2;2697:22;2737:6;2728:15;;2767:6;2759;2752:22;2807:3;2798:6;2793:3;2789:16;2786:25;2783:45;;;2824:1;2821;2814:12;2783:45;2874:6;2869:3;2862:4;2854:6;2850:17;2837:44;2929:1;2922:4;2913:6;2905;2901:19;2897:30;2890:41;;;;2305:632;;;;;:::o;2942:451::-;3011:6;3064:2;3052:9;3043:7;3039:23;3035:32;3032:52;;;3080:1;3077;3070:12;3032:52;3120:9;3107:23;3153:18;3145:6;3142:30;3139:50;;;3185:1;3182;3175:12;3139:50;3208:22;;3261:4;3253:13;;3249:27;-1:-1:-1;3239:55:1;;3290:1;3287;3280:12;3239:55;3313:74;3379:7;3374:2;3361:16;3356:2;3352;3348:11;3313:74;:::i;3398:160::-;3463:20;;3519:13;;3512:21;3502:32;;3492:60;;3548:1;3545;3538:12;3563:180;3619:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:52;;;3688:1;3685;3678:12;3640:52;3711:26;3727:9;3711:26;:::i;3930:328::-;4007:6;4015;4023;4076:2;4064:9;4055:7;4051:23;4047:32;4044:52;;;4092:1;4089;4082:12;4044:52;4115:29;4134:9;4115:29;:::i;:::-;4105:39;;4163:38;4197:2;4186:9;4182:18;4163:38;:::i;:::-;4153:48;;4248:2;4237:9;4233:18;4220:32;4210:42;;3930:328;;;;;:::o;4263:186::-;4322:6;4375:2;4363:9;4354:7;4350:23;4346:32;4343:52;;;4391:1;4388;4381:12;4343:52;4414:29;4433:9;4414:29;:::i;4454:632::-;4625:2;4677:21;;;4747:13;;4650:18;;;4769:22;;;4596:4;;4625:2;4848:15;;;;4822:2;4807:18;;;4596:4;4891:169;4905:6;4902:1;4899:13;4891:169;;;4966:13;;4954:26;;5035:15;;;;5000:12;;;;4927:1;4920:9;4891:169;;;-1:-1:-1;5077:3:1;;4454:632;-1:-1:-1;;;;;;4454:632:1:o;5091:254::-;5156:6;5164;5217:2;5205:9;5196:7;5192:23;5188:32;5185:52;;;5233:1;5230;5223:12;5185:52;5256:29;5275:9;5256:29;:::i;:::-;5246:39;;5304:35;5335:2;5324:9;5320:18;5304:35;:::i;:::-;5294:45;;5091:254;;;;;:::o;5350:667::-;5445:6;5453;5461;5469;5522:3;5510:9;5501:7;5497:23;5493:33;5490:53;;;5539:1;5536;5529:12;5490:53;5562:29;5581:9;5562:29;:::i;:::-;5552:39;;5610:38;5644:2;5633:9;5629:18;5610:38;:::i;:::-;5600:48;;5695:2;5684:9;5680:18;5667:32;5657:42;;5750:2;5739:9;5735:18;5722:32;5777:18;5769:6;5766:30;5763:50;;;5809:1;5806;5799:12;5763:50;5832:22;;5885:4;5877:13;;5873:27;-1:-1:-1;5863:55:1;;5914:1;5911;5904:12;5863:55;5937:74;6003:7;5998:2;5985:16;5980:2;5976;5972:11;5937:74;:::i;:::-;5927:84;;;5350:667;;;;;;;:::o;6022:260::-;6090:6;6098;6151:2;6139:9;6130:7;6126:23;6122:32;6119:52;;;6167:1;6164;6157:12;6119:52;6190:29;6209:9;6190:29;:::i;:::-;6180:39;;6238:38;6272:2;6261:9;6257:18;6238:38;:::i;6287:254::-;6355:6;6363;6416:2;6404:9;6395:7;6391:23;6387:32;6384:52;;;6432:1;6429;6422:12;6384:52;6468:9;6455:23;6445:33;;6497:38;6531:2;6520:9;6516:18;6497:38;:::i;6546:380::-;6625:1;6621:12;;;;6668;;;6689:61;;6743:4;6735:6;6731:17;6721:27;;6689:61;6796:2;6788:6;6785:14;6765:18;6762:38;6759:161;;;6842:10;6837:3;6833:20;6830:1;6823:31;6877:4;6874:1;6867:15;6905:4;6902:1;6895:15;6759:161;;6546:380;;;:::o;7764:410::-;7966:2;7948:21;;;8005:2;7985:18;;;7978:30;8044:34;8039:2;8024:18;;8017:62;-1:-1:-1;;;8110:2:1;8095:18;;8088:44;8164:3;8149:19;;7764:410::o;8389:127::-;8450:10;8445:3;8441:20;8438:1;8431:31;8481:4;8478:1;8471:15;8505:4;8502:1;8495:15;8521:127;8582:10;8577:3;8573:20;8570:1;8563:31;8613:4;8610:1;8603:15;8637:4;8634:1;8627:15;8653:135;8692:3;-1:-1:-1;;8713:17:1;;8710:43;;;8733:18;;:::i;:::-;-1:-1:-1;8780:1:1;8769:13;;8653:135::o;9905:128::-;9945:3;9976:1;9972:6;9969:1;9966:13;9963:39;;;9982:18;;:::i;:::-;-1:-1:-1;10018:9:1;;9905:128::o;11281:1527::-;11505:3;11543:6;11537:13;11569:4;11582:51;11626:6;11621:3;11616:2;11608:6;11604:15;11582:51;:::i;:::-;11696:13;;11655:16;;;;11718:55;11696:13;11655:16;11740:15;;;11718:55;:::i;:::-;11862:13;;11795:20;;;11835:1;;11922;11944:18;;;;11997;;;;12024:93;;12102:4;12092:8;12088:19;12076:31;;12024:93;12165:2;12155:8;12152:16;12132:18;12129:40;12126:167;;;-1:-1:-1;;;12192:33:1;;12248:4;12245:1;12238:15;12278:4;12199:3;12266:17;12126:167;12309:18;12336:110;;;;12460:1;12455:328;;;;12302:481;;12336:110;-1:-1:-1;;12371:24:1;;12357:39;;12416:20;;;;-1:-1:-1;12336:110:1;;12455:328;11228:1;11221:14;;;11265:4;11252:18;;12550:1;12564:169;12578:8;12575:1;12572:15;12564:169;;;12660:14;;12645:13;;;12638:37;12703:16;;;;12595:10;;12564:169;;;12568:3;;12764:8;12757:5;12753:20;12746:27;;12302:481;-1:-1:-1;12799:3:1;;11281:1527;-1:-1:-1;;;;;;;;;;;11281:1527:1:o;14392:125::-;14432:4;14460:1;14457;14454:8;14451:34;;;14465:18;;:::i;:::-;-1:-1:-1;14502:9:1;;14392:125::o;14876:414::-;15078:2;15060:21;;;15117:2;15097:18;;;15090:30;15156:34;15151:2;15136:18;;15129:62;-1:-1:-1;;;15222:2:1;15207:18;;15200:48;15280:3;15265:19;;14876:414::o;15295:127::-;15356:10;15351:3;15347:20;15344:1;15337:31;15387:4;15384:1;15377:15;15411:4;15408:1;15401:15;15427:120;15467:1;15493;15483:35;;15498:18;;:::i;:::-;-1:-1:-1;15532:9:1;;15427:120::o;15552:112::-;15584:1;15610;15600:35;;15615:18;;:::i;:::-;-1:-1:-1;15649:9:1;;15552:112::o;15669:489::-;-1:-1:-1;;;;;15938:15:1;;;15920:34;;15990:15;;15985:2;15970:18;;15963:43;16037:2;16022:18;;16015:34;;;16085:3;16080:2;16065:18;;16058:31;;;15863:4;;16106:46;;16132:19;;16124:6;16106:46;:::i;:::-;16098:54;15669:489;-1:-1:-1;;;;;;15669:489:1:o;16163:249::-;16232:6;16285:2;16273:9;16264:7;16260:23;16256:32;16253:52;;;16301:1;16298;16291:12;16253:52;16333:9;16327:16;16352:30;16376:5;16352:30;:::i
Swarm Source
ipfs://307ef5f719a83f01a70a3f3ebd59faccd836d8ece8724450a0bcb91f10930bd9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.