ERC-721
Source Code
Overview
Max Total Supply
1,250 PC
Holders
491
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 PCLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PrideCats
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Arbiscan.io on 2022-06-10
*/
// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.7
;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: erc721a/contracts/ERC721A.sol
// Creator: Chiru Labs
pragma solidity ^0.8.4;
error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension. Built to optimize for lower gas during batch mints.
*
* Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
*
* Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
*
* Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
*/
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Compiler will pack this into a single 256bit word.
struct TokenOwnership {
// The address of the owner.
address addr;
// Keeps track of the start time of ownership with minimal overhead for tokenomics.
uint64 startTimestamp;
// Whether the token has been burned.
bool burned;
}
// Compiler will pack this into a single 256bit word.
struct AddressData {
// Realistically, 2**64-1 is more than enough.
uint64 balance;
// Keeps track of mint count with minimal overhead for tokenomics.
uint64 numberMinted;
// Keeps track of burn count with minimal overhead for tokenomics.
uint64 numberBurned;
// For miscellaneous variable(s) pertaining to the address
// (e.g. number of whitelist mint slots used).
// If there are multiple variables, please pack them into a uint64.
uint64 aux;
}
// The tokenId of the next token to be minted.
uint256 internal _currentIndex;
// The number of tokens burned.
uint256 internal _burnCounter;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to ownership details
// An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
mapping(uint256 => TokenOwnership) internal _ownerships;
// Mapping owner address to address data
mapping(address => AddressData) private _addressData;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
_currentIndex = _startTokenId();
}
/**
* To change the starting tokenId, please override this function.
*/
function _startTokenId() internal view virtual returns (uint256) {
return 0;
}
/**
* @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
*/
function totalSupply() public view returns (uint256) {
// Counter underflow is impossible as _burnCounter cannot be incremented
// more than _currentIndex - _startTokenId() times
unchecked {
return _currentIndex - _burnCounter - _startTokenId();
}
}
/**
* Returns the total amount of tokens minted in the contract.
*/
function _totalMinted() internal view returns (uint256) {
// Counter underflow is impossible as _currentIndex does not decrement,
// and it is initialized to _startTokenId()
unchecked {
return _currentIndex - _startTokenId();
}
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view override returns (uint256) {
if (owner == address(0)) revert BalanceQueryForZeroAddress();
return uint256(_addressData[owner].balance);
}
/**
* Returns the number of tokens minted by `owner`.
*/
function _numberMinted(address owner) internal view returns (uint256) {
return uint256(_addressData[owner].numberMinted);
}
/**
* Returns the number of tokens burned by or on behalf of `owner`.
*/
function _numberBurned(address owner) internal view returns (uint256) {
return uint256(_addressData[owner].numberBurned);
}
/**
* Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
*/
function _getAux(address owner) internal view returns (uint64) {
return _addressData[owner].aux;
}
/**
* Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
* If there are multiple variables, please pack them into a uint64.
*/
function _setAux(address owner, uint64 aux) internal {
_addressData[owner].aux = aux;
}
/**
* Gas spent here starts off proportional to the maximum mint batch size.
* It gradually moves to O(1) as tokens get transferred around in the collection over time.
*/
function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
uint256 curr = tokenId;
unchecked {
if (_startTokenId() <= curr && curr < _currentIndex) {
TokenOwnership memory ownership = _ownerships[curr];
if (!ownership.burned) {
if (ownership.addr != address(0)) {
return ownership;
}
// Invariant:
// There will always be an ownership that has an address and is not burned
// before an ownership that does not have an address and is not burned.
// Hence, curr will not underflow.
while (true) {
curr--;
ownership = _ownerships[curr];
if (ownership.addr != address(0)) {
return ownership;
}
}
}
}
}
revert OwnerQueryForNonexistentToken();
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view override returns (address) {
return _ownershipOf(tokenId).addr;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
if (!_exists(tokenId)) revert URIQueryForNonexistentToken();
string memory baseURI = _baseURI();
return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return '';
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public override {
address owner = ERC721A.ownerOf(tokenId);
if (to == owner) revert ApprovalToCurrentOwner();
if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
revert ApprovalCallerNotOwnerNorApproved();
}
_approve(to, tokenId, owner);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view override returns (address) {
if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
if (operator == _msgSender()) revert ApproveToCaller();
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, '');
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
_transfer(from, to, tokenId);
if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
revert TransferToNonERC721ReceiverImplementer();
}
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
*/
function _exists(uint256 tokenId) internal view returns (bool) {
return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
}
function _safeMint(address to, uint256 quantity) internal {
_safeMint(to, quantity, '');
}
/**
* @dev Safely mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
* - `quantity` must be greater than 0.
*
* Emits a {Transfer} event.
*/
function _safeMint(
address to,
uint256 quantity,
bytes memory _data
) internal {
_mint(to, quantity, _data, true);
}
/**
* @dev Mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `quantity` must be greater than 0.
*
* Emits a {Transfer} event.
*/
function _mint(
address to,
uint256 quantity,
bytes memory _data,
bool safe
) internal {
uint256 startTokenId = _currentIndex;
if (to == address(0)) revert MintToZeroAddress();
if (quantity == 0) revert MintZeroQuantity();
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
// Overflows are incredibly unrealistic.
// balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
// updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
unchecked {
_addressData[to].balance += uint64(quantity);
_addressData[to].numberMinted += uint64(quantity);
_ownerships[startTokenId].addr = to;
_ownerships[startTokenId].startTimestamp = uint64(block.timestamp);
uint256 updatedIndex = startTokenId;
uint256 end = updatedIndex + quantity;
if (safe && to.isContract()) {
do {
emit Transfer(address(0), to, updatedIndex);
if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
revert TransferToNonERC721ReceiverImplementer();
}
} while (updatedIndex != end);
// Reentrancy protection
if (_currentIndex != startTokenId) revert();
} else {
do {
emit Transfer(address(0), to, updatedIndex++);
} while (updatedIndex != end);
}
_currentIndex = updatedIndex;
}
_afterTokenTransfers(address(0), to, startTokenId, quantity);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) private {
TokenOwnership memory prevOwnership = _ownershipOf(tokenId);
if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
bool isApprovedOrOwner = (_msgSender() == from ||
isApprovedForAll(from, _msgSender()) ||
getApproved(tokenId) == _msgSender());
if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
if (to == address(0)) revert TransferToZeroAddress();
_beforeTokenTransfers(from, to, tokenId, 1);
// Clear approvals from the previous owner
_approve(address(0), tokenId, from);
// Underflow of the sender's balance is impossible because we check for
// ownership above and the recipient's balance can't realistically overflow.
// Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
unchecked {
_addressData[from].balance -= 1;
_addressData[to].balance += 1;
TokenOwnership storage currSlot = _ownerships[tokenId];
currSlot.addr = to;
currSlot.startTimestamp = uint64(block.timestamp);
// If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
// Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
uint256 nextTokenId = tokenId + 1;
TokenOwnership storage nextSlot = _ownerships[nextTokenId];
if (nextSlot.addr == address(0)) {
// This will suffice for checking _exists(nextTokenId),
// as a burned slot cannot contain the zero address.
if (nextTokenId != _currentIndex) {
nextSlot.addr = from;
nextSlot.startTimestamp = prevOwnership.startTimestamp;
}
}
}
emit Transfer(from, to, tokenId);
_afterTokenTransfers(from, to, tokenId, 1);
}
/**
* @dev This is equivalent to _burn(tokenId, false)
*/
function _burn(uint256 tokenId) internal virtual {
_burn(tokenId, false);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
TokenOwnership memory prevOwnership = _ownershipOf(tokenId);
address from = prevOwnership.addr;
if (approvalCheck) {
bool isApprovedOrOwner = (_msgSender() == from ||
isApprovedForAll(from, _msgSender()) ||
getApproved(tokenId) == _msgSender());
if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
}
_beforeTokenTransfers(from, address(0), tokenId, 1);
// Clear approvals from the previous owner
_approve(address(0), tokenId, from);
// Underflow of the sender's balance is impossible because we check for
// ownership above and the recipient's balance can't realistically overflow.
// Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
unchecked {
AddressData storage addressData = _addressData[from];
addressData.balance -= 1;
addressData.numberBurned += 1;
// Keep track of who burned the token, and the timestamp of burning.
TokenOwnership storage currSlot = _ownerships[tokenId];
currSlot.addr = from;
currSlot.startTimestamp = uint64(block.timestamp);
currSlot.burned = true;
// If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
// Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
uint256 nextTokenId = tokenId + 1;
TokenOwnership storage nextSlot = _ownerships[nextTokenId];
if (nextSlot.addr == address(0)) {
// This will suffice for checking _exists(nextTokenId),
// as a burned slot cannot contain the zero address.
if (nextTokenId != _currentIndex) {
nextSlot.addr = from;
nextSlot.startTimestamp = prevOwnership.startTimestamp;
}
}
}
emit Transfer(from, address(0), tokenId);
_afterTokenTransfers(from, address(0), tokenId, 1);
// Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
unchecked {
_burnCounter++;
}
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(
address to,
uint256 tokenId,
address owner
) private {
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkContractOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert TransferToNonERC721ReceiverImplementer();
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
}
/**
* @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
* And also called before burning one token.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, `tokenId` will be burned by `from`.
* - `from` and `to` are never both zero.
*/
function _beforeTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
/**
* @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
* minting.
* And also called after one token has been burned.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
* transferred to `to`.
* - When `from` is zero, `tokenId` has been minted for `to`.
* - When `to` is zero, `tokenId` has been burned by `from`.
* - `from` and `to` are never both zero.
*/
function _afterTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
}
// File: contracts/no.sol
pragma solidity >=0.8.7
<0.9.0;
// Smart contract for Test
contract PrideCats is ERC721A, Ownable, ReentrancyGuard {
using Strings for uint256;
string public uriPrefix = 'ipfs://QmU6ZGBGf3bWC82Aei9WhWJXzxFXk3fsPo8frTdx7JUC7Z/';
string public uriSuffix = '.json';
string public hiddenMetadataUri;
uint256 public cost;
uint256 public price = 0 ether;
uint256 public maxSupply = 1250;
uint256 public maxPerWallet = 10;
uint256 public totalFree = 1250;
uint256 public maxMintAmountPerTx = 5;
uint256 public maxPerFree = 10;
uint256 public maxPerFreeWallet = 10;
bool public paused = true;
constructor() ERC721A("Pride Cats", "PC") {
}
modifier mintCompliance(uint256 _mintAmount) {
require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, 'Invalid mint amount!');
require(totalSupply() + _mintAmount <= maxSupply, 'Max supply exceeded!');
_;
}
modifier mintPriceCompliance(uint256 _mintAmount) {
require(msg.value >= cost * _mintAmount, 'Insufficient funds!');
_;
}
function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
require(!paused);
cost = price;
if(totalSupply() + _mintAmount < totalFree + 1) {
cost = 0;
require(_mintAmount <= maxPerFree && cost == 0, "Too many Free mints!");
require(numberMinted(msg.sender) + _mintAmount <= maxPerFreeWallet,"Free mint limit has been reached!");
}
require(numberMinted(msg.sender) + _mintAmount <= maxPerWallet,"Too many per wallet!");
_safeMint(_msgSender(), _mintAmount);
}
function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
_safeMint(_receiver, _mintAmount);
}
function walletOfOwner(address _owner) public view returns (uint256[] memory) {
uint256 ownerTokenCount = balanceOf(_owner);
uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
uint256 currentTokenId = _startTokenId();
uint256 ownedTokenIndex = 0;
address latestOwnerAddress;
while (ownedTokenIndex < ownerTokenCount && currentTokenId < _currentIndex) {
TokenOwnership memory ownership = _ownerships[currentTokenId];
if (!ownership.burned) {
if (ownership.addr != address(0)) {
latestOwnerAddress = ownership.addr;
}
if (latestOwnerAddress == _owner) {
ownedTokenIds[ownedTokenIndex] = currentTokenId;
ownedTokenIndex++;
}
}
currentTokenId++;
}
return ownedTokenIds;
}
function _startTokenId() internal view virtual override returns (uint256) {
return 1;
}
function numberMinted(address owner) public view returns (uint256) {
return _numberMinted(owner);
}
function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
require(_exists(_tokenId), 'ERC721Metadata: URI query for nonexistent token');
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
: '';
}
function pause(bool _state) public onlyOwner {
paused = _state;
}
function setCost(uint256 _cost) public onlyOwner {
price = _cost;
}
function setMaxPerFree(uint256 _maxPerFree) public onlyOwner {
maxPerFree = _maxPerFree;
}
function setMaxPerWallet(uint256 _maxPerWallet) public onlyOwner {
maxPerWallet = _maxPerWallet;
}
function setTotalFree(uint256 _totalFree) public onlyOwner {
totalFree = _totalFree;
}
function setMaxPerFreeWallet(uint256 _maxPerFreeWallet) public onlyOwner {
maxPerFreeWallet = _maxPerFreeWallet;
}
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 withdraw() public onlyOwner nonReentrant {
(bool os, ) = payable(owner()).call{value: address(this).balance}('');
require(os);
}
function _baseURI() internal view virtual override returns (string memory) {
return uriPrefix;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"maxPerFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerFreeWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","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":"uint256","name":"_maxPerFree","type":"uint256"}],"name":"setMaxPerFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerFreeWallet","type":"uint256"}],"name":"setMaxPerFreeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerWallet","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalFree","type":"uint256"}],"name":"setTotalFree","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":"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":"totalFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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
60e060405260366080818152906200263e60a03980516200002991600a9160209091019062000177565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200005891600b9162000177565b506000600e556104e2600f819055600a6010819055601191909155600560125560138190556014556015805460ff191660011790553480156200009a57600080fd5b506040518060400160405280600a8152602001695072696465204361747360b01b81525060405180604001604052806002815260200161504360f01b8152508160029080519060200190620000f192919062000177565b5080516200010790600390602084019062000177565b50506001600055506200011a3362000125565b60016009556200025a565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000185906200021d565b90600052602060002090601f016020900481019282620001a95760008555620001f4565b82601f10620001c457805160ff1916838001178555620001f4565b82800160010185558215620001f4579182015b82811115620001f4578251825591602001919060010190620001d7565b506200020292915062000206565b5090565b5b8082111562000202576000815560010162000207565b600181811c908216806200023257607f821691505b602082108114156200025457634e487b7160e01b600052602260045260246000fd5b50919050565b6123d4806200026a6000396000f3fe6080604052600436106102675760003560e01c806370a0823111610144578063b071401b116100b6578063dc33e6811161007a578063dc33e681146106cf578063e268e4d3146106ef578063e945971c1461070f578063e985e9c51461072f578063efbd73f414610778578063f2fde38b1461079857600080fd5b8063b071401b14610643578063b88d4fde14610663578063c7c39ffc14610683578063c87b56dd14610699578063d5abeb01146106b957600080fd5b806395d89b411161010857806395d89b41146105ba578063a035b1fe146105cf578063a0712d68146105e5578063a09fa941146105f8578063a22cb4651461060e578063a45ba8e71461062e57600080fd5b806370a0823114610531578063715018a6146105515780637ec4a659146105665780638da5cb5b1461058657806394354fd0146105a457600080fd5b806342842e0e116101dd5780635503a0e8116101a15780635503a0e81461048d578063563aaf11146104a25780635c975abb146104c25780635e85d3a3146104dc57806362b99ad4146104fc5780636352211e1461051157600080fd5b806342842e0e146103ea578063438b63001461040a57806344a0d68a14610437578063453c2310146104575780634fdd43cb1461046d57600080fd5b806313faede61161022f57806313faede61461033d57806316ba10e01461036157806318160ddd1461038157806323b872dd1461039f578063333e44e6146103bf5780633ccfd60b146103d557600080fd5b806301ffc9a71461026c57806302329a29146102a157806306fdde03146102c3578063081812fc146102e5578063095ea7b31461031d575b600080fd5b34801561027857600080fd5b5061028c610287366004611fc1565b6107b8565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc366004611fa6565b61080a565b005b3480156102cf57600080fd5b506102d8610850565b60405161029891906121f0565b3480156102f157600080fd5b50610305610300366004612043565b6108e2565b6040516001600160a01b039091168152602001610298565b34801561032957600080fd5b506102c1610338366004611f7c565b610926565b34801561034957600080fd5b50610353600d5481565b604051908152602001610298565b34801561036d57600080fd5b506102c161037c366004611ffb565b6109b4565b34801561038d57600080fd5b50610353600154600054036000190190565b3480156103ab57600080fd5b506102c16103ba366004611e9b565b6109f5565b3480156103cb57600080fd5b5061035360115481565b3480156103e157600080fd5b506102c1610a00565b3480156103f657600080fd5b506102c1610405366004611e9b565b610afb565b34801561041657600080fd5b5061042a610425366004611e4d565b610b16565b60405161029891906121ac565b34801561044357600080fd5b506102c1610452366004612043565b610c56565b34801561046357600080fd5b5061035360105481565b34801561047957600080fd5b506102c1610488366004611ffb565b610c85565b34801561049957600080fd5b506102d8610cc2565b3480156104ae57600080fd5b506102c16104bd366004612043565b610d50565b3480156104ce57600080fd5b5060155461028c9060ff1681565b3480156104e857600080fd5b506102c16104f7366004612043565b610d7f565b34801561050857600080fd5b506102d8610dae565b34801561051d57600080fd5b5061030561052c366004612043565b610dbb565b34801561053d57600080fd5b5061035361054c366004611e4d565b610dcd565b34801561055d57600080fd5b506102c1610e1b565b34801561057257600080fd5b506102c1610581366004611ffb565b610e51565b34801561059257600080fd5b506008546001600160a01b0316610305565b3480156105b057600080fd5b5061035360125481565b3480156105c657600080fd5b506102d8610e8e565b3480156105db57600080fd5b50610353600e5481565b6102c16105f3366004612043565b610e9d565b34801561060457600080fd5b5061035360145481565b34801561061a57600080fd5b506102c1610629366004611f52565b611120565b34801561063a57600080fd5b506102d86111b6565b34801561064f57600080fd5b506102c161065e366004612043565b6111c3565b34801561066f57600080fd5b506102c161067e366004611ed7565b6111f2565b34801561068f57600080fd5b5061035360135481565b3480156106a557600080fd5b506102d86106b4366004612043565b611243565b3480156106c557600080fd5b50610353600f5481565b3480156106db57600080fd5b506103536106ea366004611e4d565b611311565b3480156106fb57600080fd5b506102c161070a366004612043565b61133f565b34801561071b57600080fd5b506102c161072a366004612043565b61136e565b34801561073b57600080fd5b5061028c61074a366004611e68565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561078457600080fd5b506102c161079336600461205c565b61139d565b3480156107a457600080fd5b506102c16107b3366004611e4d565b61148b565b60006001600160e01b031982166380ac58cd60e01b14806107e957506001600160e01b03198216635b5e139f60e01b145b8061080457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b0316331461083d5760405162461bcd60e51b815260040161083490612203565b60405180910390fd5b6015805460ff1916911515919091179055565b60606002805461085f906122c6565b80601f016020809104026020016040519081016040528092919081815260200182805461088b906122c6565b80156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050905090565b60006108ed82611526565b61090a576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061093182610dbb565b9050806001600160a01b0316836001600160a01b031614156109665760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906109865750610984813361074a565b155b156109a4576040516367d9dca160e11b815260040160405180910390fd5b6109af83838361155f565b505050565b6008546001600160a01b031633146109de5760405162461bcd60e51b815260040161083490612203565b80516109f190600b906020840190611d13565b5050565b6109af8383836115bb565b6008546001600160a01b03163314610a2a5760405162461bcd60e51b815260040161083490612203565b60026009541415610a7d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610834565b60026009556000610a966008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ae0576040519150601f19603f3d011682016040523d82523d6000602084013e610ae5565b606091505b5050905080610af357600080fd5b506001600955565b6109af838383604051806020016040528060008152506111f2565b60606000610b2383610dcd565b90506000816001600160401b03811115610b3f57610b3f612372565b604051908082528060200260200182016040528015610b68578160200160208202803683370190505b50905060016000805b8482108015610b81575060005483105b15610c4b57600083815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290610c385780516001600160a01b031615610bf257805191505b876001600160a01b0316826001600160a01b03161415610c385783858481518110610c1f57610c1f61235c565b602090810291909101015282610c3481612301565b9350505b83610c4281612301565b94505050610b71565b509195945050505050565b6008546001600160a01b03163314610c805760405162461bcd60e51b815260040161083490612203565b600e55565b6008546001600160a01b03163314610caf5760405162461bcd60e51b815260040161083490612203565b80516109f190600c906020840190611d13565b600b8054610ccf906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfb906122c6565b8015610d485780601f10610d1d57610100808354040283529160200191610d48565b820191906000526020600020905b815481529060010190602001808311610d2b57829003601f168201915b505050505081565b6008546001600160a01b03163314610d7a5760405162461bcd60e51b815260040161083490612203565b601155565b6008546001600160a01b03163314610da95760405162461bcd60e51b815260040161083490612203565b601455565b600a8054610ccf906122c6565b6000610dc6826117a9565b5192915050565b60006001600160a01b038216610df6576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b03163314610e455760405162461bcd60e51b815260040161083490612203565b610e4f60006118d0565b565b6008546001600160a01b03163314610e7b5760405162461bcd60e51b815260040161083490612203565b80516109f190600a906020840190611d13565b60606003805461085f906122c6565b80600081118015610eb057506012548111155b610ef35760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610834565b600f5481610f08600154600054036000190190565b610f129190612238565b1115610f575760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610834565b8180600d54610f669190612264565b341015610fab5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610834565b60155460ff1615610fbb57600080fd5b600e54600d55601154610fcf906001612238565b83610fe1600154600054036000190190565b610feb9190612238565b10156110ba576000600d5560135483118015906110085750600d54155b61104b5760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e792046726565206d696e74732160601b6044820152606401610834565b6014548361105833611311565b6110629190612238565b11156110ba5760405162461bcd60e51b815260206004820152602160248201527f46726565206d696e74206c696d697420686173206265656e20726561636865646044820152602160f81b6064820152608401610834565b601054836110c733611311565b6110d19190612238565b11156111165760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e79207065722077616c6c65742160601b6044820152606401610834565b6109af3384611922565b6001600160a01b03821633141561114a5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600c8054610ccf906122c6565b6008546001600160a01b031633146111ed5760405162461bcd60e51b815260040161083490612203565b601255565b6111fd8484846115bb565b6001600160a01b0383163b1515801561121f575061121d8484848461193c565b155b1561123d576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b606061124e82611526565b6112b25760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610834565b60006112bc611a34565b905060008151116112dc576040518060200160405280600081525061130a565b806112e684611a43565b600b6040516020016112fa939291906120ab565b6040516020818303038152906040525b9392505050565b6001600160a01b038116600090815260056020526040812054600160401b90046001600160401b0316610804565b6008546001600160a01b031633146113695760405162461bcd60e51b815260040161083490612203565b601055565b6008546001600160a01b031633146113985760405162461bcd60e51b815260040161083490612203565b601355565b816000811180156113b057506012548111155b6113f35760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610834565b600f5481611408600154600054036000190190565b6114129190612238565b11156114575760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610834565b6008546001600160a01b031633146114815760405162461bcd60e51b815260040161083490612203565b6109af8284611922565b6008546001600160a01b031633146114b55760405162461bcd60e51b815260040161083490612203565b6001600160a01b03811661151a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610834565b611523816118d0565b50565b60008160011115801561153a575060005482105b8015610804575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006115c6826117a9565b9050836001600160a01b031681600001516001600160a01b0316146115fd5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061161b575061161b853361074a565b8061163657503361162b846108e2565b6001600160a01b0316145b90508061165657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661167d57604051633a954ecd60e21b815260040160405180910390fd5b6116896000848761155f565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b4290921691909102178355870180845292208054919390911661175d57600054821461175d57805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b604080516060810182526000808252602082018190529181019190915281806001111580156117d9575060005481105b156118b757600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906118b55780516001600160a01b03161561184c579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff16151592810192909252156118b0579392505050565b61184c565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6109f1828260405180602001604052806000815250611b40565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061197190339089908890889060040161216f565b602060405180830381600087803b15801561198b57600080fd5b505af19250505080156119bb575060408051601f3d908101601f191682019092526119b891810190611fde565b60015b611a16573d8080156119e9576040519150601f19603f3d011682016040523d82523d6000602084013e6119ee565b606091505b508051611a0e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a805461085f906122c6565b606081611a675750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a915780611a7b81612301565b9150611a8a9050600a83612250565b9150611a6b565b6000816001600160401b03811115611aab57611aab612372565b6040519080825280601f01601f191660200182016040528015611ad5576020820181803683370190505b5090505b8415611a2c57611aea600183612283565b9150611af7600a8661231c565b611b02906030612238565b60f81b818381518110611b1757611b1761235c565b60200101906001600160f81b031916908160001a905350611b39600a86612250565b9450611ad9565b6109af83838360016000546001600160a01b038516611b7157604051622e076360e81b815260040160405180910390fd5b83611b8f5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b429092169190910217905580808501838015611c3b57506001600160a01b0387163b15155b15611cc4575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611c8c600088848060010195508861193c565b611ca9576040516368d2bf6b60e11b815260040160405180910390fd5b80821415611c41578260005414611cbf57600080fd5b611d0a565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415611cc5575b506000556117a2565b828054611d1f906122c6565b90600052602060002090601f016020900481019282611d415760008555611d87565b82601f10611d5a57805160ff1916838001178555611d87565b82800160010185558215611d87579182015b82811115611d87578251825591602001919060010190611d6c565b50611d93929150611d97565b5090565b5b80821115611d935760008155600101611d98565b60006001600160401b0380841115611dc657611dc6612372565b604051601f8501601f19908116603f01168101908282118183101715611dee57611dee612372565b81604052809350858152868686011115611e0757600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611e3857600080fd5b919050565b80358015158114611e3857600080fd5b600060208284031215611e5f57600080fd5b61130a82611e21565b60008060408385031215611e7b57600080fd5b611e8483611e21565b9150611e9260208401611e21565b90509250929050565b600080600060608486031215611eb057600080fd5b611eb984611e21565b9250611ec760208501611e21565b9150604084013590509250925092565b60008060008060808587031215611eed57600080fd5b611ef685611e21565b9350611f0460208601611e21565b92506040850135915060608501356001600160401b03811115611f2657600080fd5b8501601f81018713611f3757600080fd5b611f4687823560208401611dac565b91505092959194509250565b60008060408385031215611f6557600080fd5b611f6e83611e21565b9150611e9260208401611e3d565b60008060408385031215611f8f57600080fd5b611f9883611e21565b946020939093013593505050565b600060208284031215611fb857600080fd5b61130a82611e3d565b600060208284031215611fd357600080fd5b813561130a81612388565b600060208284031215611ff057600080fd5b815161130a81612388565b60006020828403121561200d57600080fd5b81356001600160401b0381111561202357600080fd5b8201601f8101841361203457600080fd5b611a2c84823560208401611dac565b60006020828403121561205557600080fd5b5035919050565b6000806040838503121561206f57600080fd5b82359150611e9260208401611e21565b6000815180845261209781602086016020860161229a565b601f01601f19169290920160200192915050565b6000845160206120be8285838a0161229a565b8551918401916120d18184848a0161229a565b8554920191600090600181811c90808316806120ee57607f831692505b85831081141561210c57634e487b7160e01b85526022600452602485fd5b80801561212057600181146121315761215e565b60ff1985168852838801955061215e565b60008b81526020902060005b858110156121565781548a82015290840190880161213d565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906121a29083018461207f565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156121e4578351835292840192918401916001016121c8565b50909695505050505050565b60208152600061130a602083018461207f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561224b5761224b612330565b500190565b60008261225f5761225f612346565b500490565b600081600019048311821515161561227e5761227e612330565b500290565b60008282101561229557612295612330565b500390565b60005b838110156122b557818101518382015260200161229d565b8381111561123d5750506000910152565b600181811c908216806122da57607f821691505b602082108114156122fb57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561231557612315612330565b5060010190565b60008261232b5761232b612346565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461152357600080fdfea2646970667358221220d66540da0c25f247c786c7b7ae81260eba329d65826f80122348e2bd090d975664736f6c63430008070033697066733a2f2f516d55365a47424766336257433832416569395768574a587a7846586b336673506f386672546478374a5543375a2f
Deployed Bytecode
0x6080604052600436106102675760003560e01c806370a0823111610144578063b071401b116100b6578063dc33e6811161007a578063dc33e681146106cf578063e268e4d3146106ef578063e945971c1461070f578063e985e9c51461072f578063efbd73f414610778578063f2fde38b1461079857600080fd5b8063b071401b14610643578063b88d4fde14610663578063c7c39ffc14610683578063c87b56dd14610699578063d5abeb01146106b957600080fd5b806395d89b411161010857806395d89b41146105ba578063a035b1fe146105cf578063a0712d68146105e5578063a09fa941146105f8578063a22cb4651461060e578063a45ba8e71461062e57600080fd5b806370a0823114610531578063715018a6146105515780637ec4a659146105665780638da5cb5b1461058657806394354fd0146105a457600080fd5b806342842e0e116101dd5780635503a0e8116101a15780635503a0e81461048d578063563aaf11146104a25780635c975abb146104c25780635e85d3a3146104dc57806362b99ad4146104fc5780636352211e1461051157600080fd5b806342842e0e146103ea578063438b63001461040a57806344a0d68a14610437578063453c2310146104575780634fdd43cb1461046d57600080fd5b806313faede61161022f57806313faede61461033d57806316ba10e01461036157806318160ddd1461038157806323b872dd1461039f578063333e44e6146103bf5780633ccfd60b146103d557600080fd5b806301ffc9a71461026c57806302329a29146102a157806306fdde03146102c3578063081812fc146102e5578063095ea7b31461031d575b600080fd5b34801561027857600080fd5b5061028c610287366004611fc1565b6107b8565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc366004611fa6565b61080a565b005b3480156102cf57600080fd5b506102d8610850565b60405161029891906121f0565b3480156102f157600080fd5b50610305610300366004612043565b6108e2565b6040516001600160a01b039091168152602001610298565b34801561032957600080fd5b506102c1610338366004611f7c565b610926565b34801561034957600080fd5b50610353600d5481565b604051908152602001610298565b34801561036d57600080fd5b506102c161037c366004611ffb565b6109b4565b34801561038d57600080fd5b50610353600154600054036000190190565b3480156103ab57600080fd5b506102c16103ba366004611e9b565b6109f5565b3480156103cb57600080fd5b5061035360115481565b3480156103e157600080fd5b506102c1610a00565b3480156103f657600080fd5b506102c1610405366004611e9b565b610afb565b34801561041657600080fd5b5061042a610425366004611e4d565b610b16565b60405161029891906121ac565b34801561044357600080fd5b506102c1610452366004612043565b610c56565b34801561046357600080fd5b5061035360105481565b34801561047957600080fd5b506102c1610488366004611ffb565b610c85565b34801561049957600080fd5b506102d8610cc2565b3480156104ae57600080fd5b506102c16104bd366004612043565b610d50565b3480156104ce57600080fd5b5060155461028c9060ff1681565b3480156104e857600080fd5b506102c16104f7366004612043565b610d7f565b34801561050857600080fd5b506102d8610dae565b34801561051d57600080fd5b5061030561052c366004612043565b610dbb565b34801561053d57600080fd5b5061035361054c366004611e4d565b610dcd565b34801561055d57600080fd5b506102c1610e1b565b34801561057257600080fd5b506102c1610581366004611ffb565b610e51565b34801561059257600080fd5b506008546001600160a01b0316610305565b3480156105b057600080fd5b5061035360125481565b3480156105c657600080fd5b506102d8610e8e565b3480156105db57600080fd5b50610353600e5481565b6102c16105f3366004612043565b610e9d565b34801561060457600080fd5b5061035360145481565b34801561061a57600080fd5b506102c1610629366004611f52565b611120565b34801561063a57600080fd5b506102d86111b6565b34801561064f57600080fd5b506102c161065e366004612043565b6111c3565b34801561066f57600080fd5b506102c161067e366004611ed7565b6111f2565b34801561068f57600080fd5b5061035360135481565b3480156106a557600080fd5b506102d86106b4366004612043565b611243565b3480156106c557600080fd5b50610353600f5481565b3480156106db57600080fd5b506103536106ea366004611e4d565b611311565b3480156106fb57600080fd5b506102c161070a366004612043565b61133f565b34801561071b57600080fd5b506102c161072a366004612043565b61136e565b34801561073b57600080fd5b5061028c61074a366004611e68565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561078457600080fd5b506102c161079336600461205c565b61139d565b3480156107a457600080fd5b506102c16107b3366004611e4d565b61148b565b60006001600160e01b031982166380ac58cd60e01b14806107e957506001600160e01b03198216635b5e139f60e01b145b8061080457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b0316331461083d5760405162461bcd60e51b815260040161083490612203565b60405180910390fd5b6015805460ff1916911515919091179055565b60606002805461085f906122c6565b80601f016020809104026020016040519081016040528092919081815260200182805461088b906122c6565b80156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050905090565b60006108ed82611526565b61090a576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061093182610dbb565b9050806001600160a01b0316836001600160a01b031614156109665760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906109865750610984813361074a565b155b156109a4576040516367d9dca160e11b815260040160405180910390fd5b6109af83838361155f565b505050565b6008546001600160a01b031633146109de5760405162461bcd60e51b815260040161083490612203565b80516109f190600b906020840190611d13565b5050565b6109af8383836115bb565b6008546001600160a01b03163314610a2a5760405162461bcd60e51b815260040161083490612203565b60026009541415610a7d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610834565b60026009556000610a966008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ae0576040519150601f19603f3d011682016040523d82523d6000602084013e610ae5565b606091505b5050905080610af357600080fd5b506001600955565b6109af838383604051806020016040528060008152506111f2565b60606000610b2383610dcd565b90506000816001600160401b03811115610b3f57610b3f612372565b604051908082528060200260200182016040528015610b68578160200160208202803683370190505b50905060016000805b8482108015610b81575060005483105b15610c4b57600083815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290610c385780516001600160a01b031615610bf257805191505b876001600160a01b0316826001600160a01b03161415610c385783858481518110610c1f57610c1f61235c565b602090810291909101015282610c3481612301565b9350505b83610c4281612301565b94505050610b71565b509195945050505050565b6008546001600160a01b03163314610c805760405162461bcd60e51b815260040161083490612203565b600e55565b6008546001600160a01b03163314610caf5760405162461bcd60e51b815260040161083490612203565b80516109f190600c906020840190611d13565b600b8054610ccf906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfb906122c6565b8015610d485780601f10610d1d57610100808354040283529160200191610d48565b820191906000526020600020905b815481529060010190602001808311610d2b57829003601f168201915b505050505081565b6008546001600160a01b03163314610d7a5760405162461bcd60e51b815260040161083490612203565b601155565b6008546001600160a01b03163314610da95760405162461bcd60e51b815260040161083490612203565b601455565b600a8054610ccf906122c6565b6000610dc6826117a9565b5192915050565b60006001600160a01b038216610df6576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b03163314610e455760405162461bcd60e51b815260040161083490612203565b610e4f60006118d0565b565b6008546001600160a01b03163314610e7b5760405162461bcd60e51b815260040161083490612203565b80516109f190600a906020840190611d13565b60606003805461085f906122c6565b80600081118015610eb057506012548111155b610ef35760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610834565b600f5481610f08600154600054036000190190565b610f129190612238565b1115610f575760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610834565b8180600d54610f669190612264565b341015610fab5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610834565b60155460ff1615610fbb57600080fd5b600e54600d55601154610fcf906001612238565b83610fe1600154600054036000190190565b610feb9190612238565b10156110ba576000600d5560135483118015906110085750600d54155b61104b5760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e792046726565206d696e74732160601b6044820152606401610834565b6014548361105833611311565b6110629190612238565b11156110ba5760405162461bcd60e51b815260206004820152602160248201527f46726565206d696e74206c696d697420686173206265656e20726561636865646044820152602160f81b6064820152608401610834565b601054836110c733611311565b6110d19190612238565b11156111165760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e79207065722077616c6c65742160601b6044820152606401610834565b6109af3384611922565b6001600160a01b03821633141561114a5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600c8054610ccf906122c6565b6008546001600160a01b031633146111ed5760405162461bcd60e51b815260040161083490612203565b601255565b6111fd8484846115bb565b6001600160a01b0383163b1515801561121f575061121d8484848461193c565b155b1561123d576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b606061124e82611526565b6112b25760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610834565b60006112bc611a34565b905060008151116112dc576040518060200160405280600081525061130a565b806112e684611a43565b600b6040516020016112fa939291906120ab565b6040516020818303038152906040525b9392505050565b6001600160a01b038116600090815260056020526040812054600160401b90046001600160401b0316610804565b6008546001600160a01b031633146113695760405162461bcd60e51b815260040161083490612203565b601055565b6008546001600160a01b031633146113985760405162461bcd60e51b815260040161083490612203565b601355565b816000811180156113b057506012548111155b6113f35760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610834565b600f5481611408600154600054036000190190565b6114129190612238565b11156114575760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610834565b6008546001600160a01b031633146114815760405162461bcd60e51b815260040161083490612203565b6109af8284611922565b6008546001600160a01b031633146114b55760405162461bcd60e51b815260040161083490612203565b6001600160a01b03811661151a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610834565b611523816118d0565b50565b60008160011115801561153a575060005482105b8015610804575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006115c6826117a9565b9050836001600160a01b031681600001516001600160a01b0316146115fd5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061161b575061161b853361074a565b8061163657503361162b846108e2565b6001600160a01b0316145b90508061165657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661167d57604051633a954ecd60e21b815260040160405180910390fd5b6116896000848761155f565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b4290921691909102178355870180845292208054919390911661175d57600054821461175d57805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b604080516060810182526000808252602082018190529181019190915281806001111580156117d9575060005481105b156118b757600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906118b55780516001600160a01b03161561184c579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff16151592810192909252156118b0579392505050565b61184c565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6109f1828260405180602001604052806000815250611b40565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061197190339089908890889060040161216f565b602060405180830381600087803b15801561198b57600080fd5b505af19250505080156119bb575060408051601f3d908101601f191682019092526119b891810190611fde565b60015b611a16573d8080156119e9576040519150601f19603f3d011682016040523d82523d6000602084013e6119ee565b606091505b508051611a0e576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a805461085f906122c6565b606081611a675750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a915780611a7b81612301565b9150611a8a9050600a83612250565b9150611a6b565b6000816001600160401b03811115611aab57611aab612372565b6040519080825280601f01601f191660200182016040528015611ad5576020820181803683370190505b5090505b8415611a2c57611aea600183612283565b9150611af7600a8661231c565b611b02906030612238565b60f81b818381518110611b1757611b1761235c565b60200101906001600160f81b031916908160001a905350611b39600a86612250565b9450611ad9565b6109af83838360016000546001600160a01b038516611b7157604051622e076360e81b815260040160405180910390fd5b83611b8f5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b429092169190910217905580808501838015611c3b57506001600160a01b0387163b15155b15611cc4575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611c8c600088848060010195508861193c565b611ca9576040516368d2bf6b60e11b815260040160405180910390fd5b80821415611c41578260005414611cbf57600080fd5b611d0a565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415611cc5575b506000556117a2565b828054611d1f906122c6565b90600052602060002090601f016020900481019282611d415760008555611d87565b82601f10611d5a57805160ff1916838001178555611d87565b82800160010185558215611d87579182015b82811115611d87578251825591602001919060010190611d6c565b50611d93929150611d97565b5090565b5b80821115611d935760008155600101611d98565b60006001600160401b0380841115611dc657611dc6612372565b604051601f8501601f19908116603f01168101908282118183101715611dee57611dee612372565b81604052809350858152868686011115611e0757600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611e3857600080fd5b919050565b80358015158114611e3857600080fd5b600060208284031215611e5f57600080fd5b61130a82611e21565b60008060408385031215611e7b57600080fd5b611e8483611e21565b9150611e9260208401611e21565b90509250929050565b600080600060608486031215611eb057600080fd5b611eb984611e21565b9250611ec760208501611e21565b9150604084013590509250925092565b60008060008060808587031215611eed57600080fd5b611ef685611e21565b9350611f0460208601611e21565b92506040850135915060608501356001600160401b03811115611f2657600080fd5b8501601f81018713611f3757600080fd5b611f4687823560208401611dac565b91505092959194509250565b60008060408385031215611f6557600080fd5b611f6e83611e21565b9150611e9260208401611e3d565b60008060408385031215611f8f57600080fd5b611f9883611e21565b946020939093013593505050565b600060208284031215611fb857600080fd5b61130a82611e3d565b600060208284031215611fd357600080fd5b813561130a81612388565b600060208284031215611ff057600080fd5b815161130a81612388565b60006020828403121561200d57600080fd5b81356001600160401b0381111561202357600080fd5b8201601f8101841361203457600080fd5b611a2c84823560208401611dac565b60006020828403121561205557600080fd5b5035919050565b6000806040838503121561206f57600080fd5b82359150611e9260208401611e21565b6000815180845261209781602086016020860161229a565b601f01601f19169290920160200192915050565b6000845160206120be8285838a0161229a565b8551918401916120d18184848a0161229a565b8554920191600090600181811c90808316806120ee57607f831692505b85831081141561210c57634e487b7160e01b85526022600452602485fd5b80801561212057600181146121315761215e565b60ff1985168852838801955061215e565b60008b81526020902060005b858110156121565781548a82015290840190880161213d565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906121a29083018461207f565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156121e4578351835292840192918401916001016121c8565b50909695505050505050565b60208152600061130a602083018461207f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561224b5761224b612330565b500190565b60008261225f5761225f612346565b500490565b600081600019048311821515161561227e5761227e612330565b500290565b60008282101561229557612295612330565b500390565b60005b838110156122b557818101518382015260200161229d565b8381111561123d5750506000910152565b600181811c908216806122da57607f821691505b602082108114156122fb57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561231557612315612330565b5060010190565b60008261232b5761232b612346565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461152357600080fdfea2646970667358221220d66540da0c25f247c786c7b7ae81260eba329d65826f80122348e2bd090d975664736f6c63430008070033
Deployed Bytecode Sourcemap
47618:4532:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29768:305;;;;;;;;;;-1:-1:-1;29768:305:0;;;;;:::i;:::-;;:::i;:::-;;;8066:14:1;;8059:22;8041:41;;8029:2;8014:18;29768:305:0;;;;;;;;50795:73;;;;;;;;;;-1:-1:-1;50795:73:0;;;;;:::i;:::-;;:::i;:::-;;32881:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34384:204::-;;;;;;;;;;-1:-1:-1;34384:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6727:32:1;;;6709:51;;6697:2;6682:18;34384:204:0;6563:203:1;33947:371:0;;;;;;;;;;-1:-1:-1;33947:371:0;;;;;:::i;:::-;;:::i;47878:19::-;;;;;;;;;;;;;;;;;;;12153:25:1;;;12141:2;12126:18;47878:19:0;12007:177:1;51781:100:0;;;;;;;;;;-1:-1:-1;51781:100:0;;;;;:::i;:::-;;:::i;29017:303::-;;;;;;;;;;;;50288:1;29271:12;29061:7;29255:13;:28;-1:-1:-1;;29255:46:0;;29017:303;35249:170;;;;;;;;;;-1:-1:-1;35249:170:0;;;;;:::i;:::-;;:::i;48011:31::-;;;;;;;;;;;;;;;;51887:150;;;;;;;;;;;;;:::i;35490:185::-;;;;;;;;;;-1:-1:-1;35490:185:0;;;;;:::i;:::-;;:::i;49363:831::-;;;;;;;;;;-1:-1:-1;49363:831:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;50876:75::-;;;;;;;;;;-1:-1:-1;50876:75:0;;;;;:::i;:::-;;:::i;47973:33::-;;;;;;;;;;;;;;;;51537:132;;;;;;;;;;-1:-1:-1;51537:132:0;;;;;:::i;:::-;;:::i;47800:33::-;;;;;;;;;;;;;:::i;51173:94::-;;;;;;;;;;-1:-1:-1;51173:94:0;;;;;:::i;:::-;;:::i;48165:25::-;;;;;;;;;;-1:-1:-1;48165:25:0;;;;;;;;51273:122;;;;;;;;;;-1:-1:-1;51273:122:0;;;;;:::i;:::-;;:::i;47713:82::-;;;;;;;;;;;;;:::i;32689:125::-;;;;;;;;;;-1:-1:-1;32689:125:0;;;;;:::i;:::-;;:::i;30137:206::-;;;;;;;;;;-1:-1:-1;30137:206:0;;;;;:::i;:::-;;:::i;7526:103::-;;;;;;;;;;;;;:::i;51675:100::-;;;;;;;;;;-1:-1:-1;51675:100:0;;;;;:::i;:::-;;:::i;6875:87::-;;;;;;;;;;-1:-1:-1;6948:6:0;;-1:-1:-1;;;;;6948:6:0;6875:87;;48047:37;;;;;;;;;;;;;;;;33050:104;;;;;;;;;;;;;:::i;47902:30::-;;;;;;;;;;;;;;;;48628:568;;;;;;:::i;:::-;;:::i;48124:36::-;;;;;;;;;;;;;;;;34660:287;;;;;;;;;;-1:-1:-1;34660:287:0;;;;;:::i;:::-;;:::i;47838:31::-;;;;;;;;;;;;;:::i;51401:130::-;;;;;;;;;;-1:-1:-1;51401:130:0;;;;;:::i;:::-;;:::i;35746:369::-;;;;;;;;;;-1:-1:-1;35746:369:0;;;;;:::i;:::-;;:::i;48089:30::-;;;;;;;;;;;;;;;;50416:373;;;;;;;;;;-1:-1:-1;50416:373:0;;;;;:::i;:::-;;:::i;47937:31::-;;;;;;;;;;;;;;;;50301:107;;;;;;;;;;-1:-1:-1;50301:107:0;;;;;:::i;:::-;;:::i;51061:106::-;;;;;;;;;;-1:-1:-1;51061:106:0;;;;;:::i;:::-;;:::i;50957:98::-;;;;;;;;;;-1:-1:-1;50957:98:0;;;;;:::i;:::-;;:::i;35018:164::-;;;;;;;;;;-1:-1:-1;35018:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;35139:25:0;;;35115:4;35139:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;35018:164;49202:155;;;;;;;;;;-1:-1:-1;49202:155:0;;;;;:::i;:::-;;:::i;7784:201::-;;;;;;;;;;-1:-1:-1;7784:201:0;;;;;:::i;:::-;;:::i;29768:305::-;29870:4;-1:-1:-1;;;;;;29907:40:0;;-1:-1:-1;;;29907:40:0;;:105;;-1:-1:-1;;;;;;;29964:48:0;;-1:-1:-1;;;29964:48:0;29907:105;:158;;;-1:-1:-1;;;;;;;;;;19768:40:0;;;30029:36;29887:178;29768:305;-1:-1:-1;;29768:305:0:o;50795:73::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;;;;;;;;;50847:6:::1;:15:::0;;-1:-1:-1;;50847:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50795:73::o;32881:100::-;32935:13;32968:5;32961:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32881:100;:::o;34384:204::-;34452:7;34477:16;34485:7;34477;:16::i;:::-;34472:64;;34502:34;;-1:-1:-1;;;34502:34:0;;;;;;;;;;;34472:64;-1:-1:-1;34556:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;34556:24:0;;34384:204::o;33947:371::-;34020:13;34036:24;34052:7;34036:15;:24::i;:::-;34020:40;;34081:5;-1:-1:-1;;;;;34075:11:0;:2;-1:-1:-1;;;;;34075:11:0;;34071:48;;;34095:24;;-1:-1:-1;;;34095:24:0;;;;;;;;;;;34071:48;5679:10;-1:-1:-1;;;;;34136:21:0;;;;;;:63;;-1:-1:-1;34162:37:0;34179:5;5679:10;35018:164;:::i;34162:37::-;34161:38;34136:63;34132:138;;;34223:35;;-1:-1:-1;;;34223:35:0;;;;;;;;;;;34132:138;34282:28;34291:2;34295:7;34304:5;34282:8;:28::i;:::-;34009:309;33947:371;;:::o;51781:100::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;51853:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;51781:100:::0;:::o;35249:170::-;35383:28;35393:4;35399:2;35403:7;35383:9;:28::i;51887:150::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;1849:1:::1;2447:7;;:19;;2439:63;;;::::0;-1:-1:-1;;;2439:63:0;;11501:2:1;2439:63:0::1;::::0;::::1;11483:21:1::0;11540:2;11520:18;;;11513:30;11579:33;11559:18;;;11552:61;11630:18;;2439:63:0::1;11299:355:1::0;2439:63:0::1;1849:1;2580:7;:18:::0;51945:7:::2;51966;6948:6:::0;;-1:-1:-1;;;;;6948:6:0;;6875:87;51966:7:::2;-1:-1:-1::0;;;;;51958:21:0::2;51987;51958:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51944:69;;;52028:2;52020:11;;;::::0;::::2;;-1:-1:-1::0;1805:1:0::1;2759:7;:22:::0;51887:150::o;35490:185::-;35628:39;35645:4;35651:2;35655:7;35628:39;;;;;;;;;;;;:16;:39::i;49363:831::-;49423:16;49448:23;49474:17;49484:6;49474:9;:17::i;:::-;49448:43;;49498:30;49545:15;-1:-1:-1;;;;;49531:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49531:30:0;-1:-1:-1;49498:63:0;-1:-1:-1;50288:1:0;49568:22;;49684:478;49709:15;49691;:33;:67;;;;;49745:13;;49728:14;:30;49691:67;49684:478;;;49769:31;49803:27;;;:11;:27;;;;;;;;;49769:61;;;;;;;;;-1:-1:-1;;;;;49769:61:0;;;;-1:-1:-1;;;49769:61:0;;-1:-1:-1;;;;;49769:61:0;;;;;;;;-1:-1:-1;;;49769:61:0;;;;;;;;;;;;;;49841:287;;49879:14;;-1:-1:-1;;;;;49879:28:0;;49875:94;;49943:14;;;-1:-1:-1;49875:94:0;50007:6;-1:-1:-1;;;;;49985:28:0;:18;-1:-1:-1;;;;;49985:28:0;;49981:138;;;50061:14;50028:13;50042:15;50028:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;50090:17;;;;:::i;:::-;;;;49981:138;50138:16;;;;:::i;:::-;;;;49760:402;49684:478;;;-1:-1:-1;50175:13:0;;49363:831;-1:-1:-1;;;;;49363:831:0:o;50876:75::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;50932:5:::1;:13:::0;50876:75::o;51537:132::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;51625:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;47800:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51173:94::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;51239:9:::1;:22:::0;51173:94::o;51273:122::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;51353:16:::1;:36:::0;51273:122::o;47713:82::-;;;;;;;:::i;32689:125::-;32753:7;32780:21;32793:7;32780:12;:21::i;:::-;:26;;32689:125;-1:-1:-1;;32689:125:0:o;30137:206::-;30201:7;-1:-1:-1;;;;;30225:19:0;;30221:60;;30253:28;;-1:-1:-1;;;30253:28:0;;;;;;;;;;;30221:60;-1:-1:-1;;;;;;30307:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;30307:27:0;;30137:206::o;7526:103::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;7591:30:::1;7618:1;7591:18;:30::i;:::-;7526:103::o:0;51675:100::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;51747:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;33050:104::-:0;33106:13;33139:7;33132:14;;;;;:::i;48628:568::-;48693:11;48325:1;48311:11;:15;:52;;;;;48345:18;;48330:11;:33;;48311:52;48303:85;;;;-1:-1:-1;;;48303:85:0;;8926:2:1;48303:85:0;;;8908:21:1;8965:2;8945:18;;;8938:30;-1:-1:-1;;;8984:18:1;;;8977:50;9044:18;;48303:85:0;8724:344:1;48303:85:0;48434:9;;48419:11;48403:13;50288:1;29271:12;29061:7;29255:13;:28;-1:-1:-1;;29255:46:0;;29017:303;48403:13;:27;;;;:::i;:::-;:40;;48395:73;;;;-1:-1:-1;;;48395:73:0;;11152:2:1;48395:73:0;;;11134:21:1;11191:2;11171:18;;;11164:30;-1:-1:-1;;;11210:18:1;;;11203:50;11270:18;;48395:73:0;10950:344:1;48395:73:0;48726:11:::1;48573;48566:4;;:18;;;;:::i;:::-;48553:9;:31;;48545:63;;;::::0;-1:-1:-1;;;48545:63:0;;11861:2:1;48545:63:0::1;::::0;::::1;11843:21:1::0;11900:2;11880:18;;;11873:30;-1:-1:-1;;;11919:18:1;;;11912:49;11978:18;;48545:63:0::1;11659:343:1::0;48545:63:0::1;48757:6:::2;::::0;::::2;;48756:7;48748:16;;;::::0;::::2;;48778:5;::::0;48771:4:::2;:12:::0;48823:9:::2;::::0;:13:::2;::::0;-1:-1:-1;48823:13:0::2;:::i;:::-;48809:11;48793:13;50288:1:::0;29271:12;29061:7;29255:13;:28;-1:-1:-1;;29255:46:0;;29017:303;48793:13:::2;:27;;;;:::i;:::-;:43;48790:265;;;48854:1;48847:4;:8:::0;48887:10:::2;::::0;48872:25;::::2;::::0;::::2;::::0;:38:::2;;-1:-1:-1::0;48901:4:0::2;::::0;:9;48872:38:::2;48864:71;;;::::0;-1:-1:-1;;;48864:71:0;;10401:2:1;48864:71:0::2;::::0;::::2;10383:21:1::0;10440:2;10420:18;;;10413:30;-1:-1:-1;;;10459:18:1;;;10452:50;10519:18;;48864:71:0::2;10199:344:1::0;48864:71:0::2;48994:16;;48979:11;48952:24;48965:10;48952:12;:24::i;:::-;:38;;;;:::i;:::-;:58;;48944:103;;;::::0;-1:-1:-1;;;48944:103:0;;10750:2:1;48944:103:0::2;::::0;::::2;10732:21:1::0;10789:2;10769:18;;;10762:30;10828:34;10808:18;;;10801:62;-1:-1:-1;;;10879:18:1;;;10872:31;10920:19;;48944:103:0::2;10548:397:1::0;48944:103:0::2;49111:12;;49096:11;49069:24;49082:10;49069:12;:24::i;:::-;:38;;;;:::i;:::-;:54;;49061:86;;;::::0;-1:-1:-1;;;49061:86:0;;9275:2:1;49061:86:0::2;::::0;::::2;9257:21:1::0;9314:2;9294:18;;;9287:30;-1:-1:-1;;;9333:18:1;;;9326:50;9393:18;;49061:86:0::2;9073:344:1::0;49061:86:0::2;49154:36;5679:10:::0;49178:11:::2;49154:9;:36::i;34660:287::-:0;-1:-1:-1;;;;;34759:24:0;;5679:10;34759:24;34755:54;;;34792:17;;-1:-1:-1;;;34792:17:0;;;;;;;;;;;34755:54;5679:10;34822:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;34822:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;34822:53:0;;;;;;;;;;34891:48;;8041:41:1;;;34822:42:0;;5679:10;34891:48;;8014:18:1;34891:48:0;;;;;;;34660:287;;:::o;47838:31::-;;;;;;;:::i;51401:130::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;51485:18:::1;:40:::0;51401:130::o;35746:369::-;35913:28;35923:4;35929:2;35933:7;35913:9;:28::i;:::-;-1:-1:-1;;;;;35956:13:0;;9871:19;:23;;35956:76;;;;;35976:56;36007:4;36013:2;36017:7;36026:5;35976:30;:56::i;:::-;35975:57;35956:76;35952:156;;;36056:40;;-1:-1:-1;;;36056:40:0;;;;;;;;;;;35952:156;35746:369;;;;:::o;50416:373::-;50490:13;50520:17;50528:8;50520:7;:17::i;:::-;50512:77;;;;-1:-1:-1;;;50512:77:0;;9985:2:1;50512:77:0;;;9967:21:1;10024:2;10004:18;;;9997:30;10063:34;10043:18;;;10036:62;-1:-1:-1;;;10114:18:1;;;10107:45;10169:19;;50512:77:0;9783:411:1;50512:77:0;50598:28;50629:10;:8;:10::i;:::-;50598:41;;50684:1;50659:14;50653:28;:32;:130;;;;;;;;;;;;;;;;;50721:14;50737:19;:8;:17;:19::i;:::-;50758:9;50704:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50653:130;50646:137;50416:373;-1:-1:-1;;;50416:373:0:o;50301:107::-;-1:-1:-1;;;;;30521:19:0;;50359:7;30521:19;;;:12;:19;;;;;:32;-1:-1:-1;;;30521:32:0;;-1:-1:-1;;;;;30521:32:0;50382:20;30425:137;51061:106;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;51133:12:::1;:28:::0;51061:106::o;50957:98::-;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;51025:10:::1;:24:::0;50957:98::o;49202:155::-;49288:11;48325:1;48311:11;:15;:52;;;;;48345:18;;48330:11;:33;;48311:52;48303:85;;;;-1:-1:-1;;;48303:85:0;;8926:2:1;48303:85:0;;;8908:21:1;8965:2;8945:18;;;8938:30;-1:-1:-1;;;8984:18:1;;;8977:50;9044:18;;48303:85:0;8724:344:1;48303:85:0;48434:9;;48419:11;48403:13;50288:1;29271:12;29061:7;29255:13;:28;-1:-1:-1;;29255:46:0;;29017:303;48403:13;:27;;;;:::i;:::-;:40;;48395:73;;;;-1:-1:-1;;;48395:73:0;;11152:2:1;48395:73:0;;;11134:21:1;11191:2;11171:18;;;11164:30;-1:-1:-1;;;11210:18:1;;;11203:50;11270:18;;48395:73:0;10950:344:1;48395:73:0;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23:::1;7087:68;;;;-1:-1:-1::0;;;7087:68:0::1;;;;;;;:::i;:::-;49318:33:::2;49328:9;49339:11;49318:9;:33::i;7784:201::-:0;6948:6;;-1:-1:-1;;;;;6948:6:0;5679:10;7095:23;7087:68;;;;-1:-1:-1;;;7087:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7873:22:0;::::1;7865:73;;;::::0;-1:-1:-1;;;7865:73:0;;8519:2:1;7865:73:0::1;::::0;::::1;8501:21:1::0;8558:2;8538:18;;;8531:30;8597:34;8577:18;;;8570:62;-1:-1:-1;;;8648:18:1;;;8641:36;8694:19;;7865:73:0::1;8317:402:1::0;7865:73:0::1;7949:28;7968:8;7949:18;:28::i;:::-;7784:201:::0;:::o;36370:174::-;36427:4;36470:7;50288:1;36451:26;;:53;;;;;36491:13;;36481:7;:23;36451:53;:85;;;;-1:-1:-1;;36509:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;36509:27:0;;;;36508:28;;36370:174::o;44527:196::-;44642:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;44642:29:0;-1:-1:-1;;;;;44642:29:0;;;;;;;;;44687:28;;44642:24;;44687:28;;;;;;;44527:196;;;:::o;39470:2130::-;39585:35;39623:21;39636:7;39623:12;:21::i;:::-;39585:59;;39683:4;-1:-1:-1;;;;;39661:26:0;:13;:18;;;-1:-1:-1;;;;;39661:26:0;;39657:67;;39696:28;;-1:-1:-1;;;39696:28:0;;;;;;;;;;;39657:67;39737:22;5679:10;-1:-1:-1;;;;;39763:20:0;;;;:73;;-1:-1:-1;39800:36:0;39817:4;5679:10;35018:164;:::i;39800:36::-;39763:126;;;-1:-1:-1;5679:10:0;39853:20;39865:7;39853:11;:20::i;:::-;-1:-1:-1;;;;;39853:36:0;;39763:126;39737:153;;39908:17;39903:66;;39934:35;;-1:-1:-1;;;39934:35:0;;;;;;;;;;;39903:66;-1:-1:-1;;;;;39984:16:0;;39980:52;;40009:23;;-1:-1:-1;;;40009:23:0;;;;;;;;;;;39980:52;40153:35;40170:1;40174:7;40183:4;40153:8;:35::i;:::-;-1:-1:-1;;;;;40484:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;40484:31:0;;;-1:-1:-1;;;;;40484:31:0;;;-1:-1:-1;;40484:31:0;;;;;;;40530:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;40530:29:0;;;;;;;;;;;40610:20;;;:11;:20;;;;;;40645:18;;-1:-1:-1;;;;;;40678:49:0;;;;-1:-1:-1;;;40711:15:0;40678:49;;;;;;;;;;41001:11;;41061:24;;;;;41104:13;;40610:20;;41061:24;;41104:13;41100:384;;41314:13;;41299:11;:28;41295:174;;41352:20;;41421:28;;;;-1:-1:-1;;;;;41395:54:0;-1:-1:-1;;;41395:54:0;-1:-1:-1;;;;;;41395:54:0;;;-1:-1:-1;;;;;41352:20:0;;41395:54;;;;41295:174;40459:1036;;;41531:7;41527:2;-1:-1:-1;;;;;41512:27:0;41521:4;-1:-1:-1;;;;;41512:27:0;;;;;;;;;;;41550:42;39574:2026;;39470:2130;;;:::o;31518:1109::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;31629:7:0;;50288:1;31678:23;;:47;;;;;31712:13;;31705:4;:20;31678:47;31674:886;;;31746:31;31780:17;;;:11;:17;;;;;;;;;31746:51;;;;;;;;;-1:-1:-1;;;;;31746:51:0;;;;-1:-1:-1;;;31746:51:0;;-1:-1:-1;;;;;31746:51:0;;;;;;;;-1:-1:-1;;;31746:51:0;;;;;;;;;;;;;;31816:729;;31866:14;;-1:-1:-1;;;;;31866:28:0;;31862:101;;31930:9;31518:1109;-1:-1:-1;;;31518:1109:0:o;31862:101::-;-1:-1:-1;;;32305:6:0;32350:17;;;;:11;:17;;;;;;;;;32338:29;;;;;;;;;-1:-1:-1;;;;;32338:29:0;;;;;-1:-1:-1;;;32338:29:0;;-1:-1:-1;;;;;32338:29:0;;;;;;;;-1:-1:-1;;;32338:29:0;;;;;;;;;;;;;32398:28;32394:109;;32466:9;31518:1109;-1:-1:-1;;;31518:1109:0:o;32394:109::-;32265:261;;;31727:833;31674:886;32588:31;;-1:-1:-1;;;32588:31:0;;;;;;;;;;;8145:191;8238:6;;;-1:-1:-1;;;;;8255:17:0;;;-1:-1:-1;;;;;;8255:17:0;;;;;;;8288:40;;8238:6;;;8255:17;8238:6;;8288:40;;8219:16;;8288:40;8208:128;8145:191;:::o;36552:104::-;36621:27;36631:2;36635:8;36621:27;;;;;;;;;;;;:9;:27::i;45215:667::-;45399:72;;-1:-1:-1;;;45399:72:0;;45378:4;;-1:-1:-1;;;;;45399:36:0;;;;;:72;;5679:10;;45450:4;;45456:7;;45465:5;;45399:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45399:72:0;;;;;;;;-1:-1:-1;;45399:72:0;;;;;;;;;;;;:::i;:::-;;;45395:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45633:13:0;;45629:235;;45679:40;;-1:-1:-1;;;45679:40:0;;;;;;;;;;;45629:235;45822:6;45816:13;45807:6;45803:2;45799:15;45792:38;45395:480;-1:-1:-1;;;;;;45518:55:0;-1:-1:-1;;;45518:55:0;;-1:-1:-1;45395:480:0;45215:667;;;;;;:::o;52043:104::-;52103:13;52132:9;52125:16;;;;;:::i;3161:723::-;3217:13;3438:10;3434:53;;-1:-1:-1;;3465:10:0;;;;;;;;;;;;-1:-1:-1;;;3465:10:0;;;;;3161:723::o;3434:53::-;3512:5;3497:12;3553:78;3560:9;;3553:78;;3586:8;;;;:::i;:::-;;-1:-1:-1;3609:10:0;;-1:-1:-1;3617:2:0;3609:10;;:::i;:::-;;;3553:78;;;3641:19;3673:6;-1:-1:-1;;;;;3663:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3663:17:0;;3641:39;;3691:154;3698:10;;3691:154;;3725:11;3735:1;3725:11;;:::i;:::-;;-1:-1:-1;3794:10:0;3802:2;3794:5;:10;:::i;:::-;3781:24;;:2;:24;:::i;:::-;3768:39;;3751:6;3758;3751:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3751:56:0;;;;;;;;-1:-1:-1;3822:11:0;3831:2;3822:11;;:::i;:::-;;;3691:154;;37019:163;37142:32;37148:2;37152:8;37162:5;37169:4;37580:20;37603:13;-1:-1:-1;;;;;37631:16:0;;37627:48;;37656:19;;-1:-1:-1;;;37656:19:0;;;;;;;;;;;37627:48;37690:13;37686:44;;37712:18;;-1:-1:-1;;;37712:18:0;;;;;;;;;;;37686:44;-1:-1:-1;;;;;38081:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;38140:49:0;;-1:-1:-1;;;;;38081:44:0;;;;;;;38140:49;;;-1:-1:-1;;;;;38081:44:0;;;;;;38140:49;;;;;;;;;;;;;;;;38206:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;38256:66:0;;;;-1:-1:-1;;;38306:15:0;38256:66;;;;;;;;;;38206:25;38403:23;;;38447:4;:23;;;;-1:-1:-1;;;;;;38455:13:0;;9871:19;:23;;38455:15;38443:641;;;38491:314;38522:38;;38547:12;;-1:-1:-1;;;;;38522:38:0;;;38539:1;;38522:38;;38539:1;;38522:38;38588:69;38627:1;38631:2;38635:14;;;;;;38651:5;38588:30;:69::i;:::-;38583:174;;38693:40;;-1:-1:-1;;;38693:40:0;;;;;;;;;;;38583:174;38800:3;38784:12;:19;;38491:314;;38886:12;38869:13;;:29;38865:43;;38900:8;;;38865:43;38443:641;;;38949:120;38980:40;;39005:14;;;;;-1:-1:-1;;;;;38980:40:0;;;38997:1;;38980:40;;38997:1;;38980:40;39064:3;39048:12;:19;;38949:120;;38443:641;-1:-1:-1;39098:13:0;:28;39148:60;35746:369;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;-1:-1:-1;;;;;149:2:1;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:186;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:328::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1634:29;1653:9;1634:29;:::i;:::-;1624:39;;1682:38;1716:2;1705:9;1701:18;1682:38;:::i;:::-;1672:48;;1767:2;1756:9;1752:18;1739:32;1729:42;;1449:328;;;;;:::o;1782:666::-;1877:6;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;1994:29;2013:9;1994:29;:::i;:::-;1984:39;;2042:38;2076:2;2065:9;2061:18;2042:38;:::i;:::-;2032:48;;2127:2;2116:9;2112:18;2099:32;2089:42;;2182:2;2171:9;2167:18;2154:32;-1:-1:-1;;;;;2201:6:1;2198:30;2195:50;;;2241:1;2238;2231:12;2195:50;2264:22;;2317:4;2309:13;;2305:27;-1:-1:-1;2295:55:1;;2346:1;2343;2336:12;2295:55;2369:73;2434:7;2429:2;2416:16;2411:2;2407;2403:11;2369:73;:::i;:::-;2359:83;;;1782:666;;;;;;;:::o;2453:254::-;2518:6;2526;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2618:29;2637:9;2618:29;:::i;:::-;2608:39;;2666:35;2697:2;2686:9;2682:18;2666:35;:::i;2712:254::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2880:29;2899:9;2880:29;:::i;:::-;2870:39;2956:2;2941:18;;;;2928:32;;-1:-1:-1;;;2712:254:1:o;2971:180::-;3027:6;3080:2;3068:9;3059:7;3055:23;3051:32;3048:52;;;3096:1;3093;3086:12;3048:52;3119:26;3135:9;3119:26;:::i;3156:245::-;3214:6;3267:2;3255:9;3246:7;3242:23;3238:32;3235:52;;;3283:1;3280;3273:12;3235:52;3322:9;3309:23;3341:30;3365:5;3341:30;:::i;3406:249::-;3475:6;3528:2;3516:9;3507:7;3503:23;3499:32;3496:52;;;3544:1;3541;3534:12;3496:52;3576:9;3570:16;3595:30;3619:5;3595:30;:::i;3660:450::-;3729:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:52;;;3798:1;3795;3788:12;3750:52;3838:9;3825:23;-1:-1:-1;;;;;3863:6:1;3860:30;3857:50;;;3903:1;3900;3893:12;3857:50;3926:22;;3979:4;3971:13;;3967:27;-1:-1:-1;3957:55:1;;4008:1;4005;3998:12;3957:55;4031:73;4096:7;4091:2;4078:16;4073:2;4069;4065:11;4031:73;:::i;4115:180::-;4174:6;4227:2;4215:9;4206:7;4202:23;4198:32;4195:52;;;4243:1;4240;4233:12;4195:52;-1:-1:-1;4266:23:1;;4115:180;-1:-1:-1;4115:180:1:o;4300:254::-;4368:6;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4481:9;4468:23;4458:33;;4510:38;4544:2;4533:9;4529:18;4510:38;:::i;4559:257::-;4600:3;4638:5;4632:12;4665:6;4660:3;4653:19;4681:63;4737:6;4730:4;4725:3;4721:14;4714:4;4707:5;4703:16;4681:63;:::i;:::-;4798:2;4777:15;-1:-1:-1;;4773:29:1;4764:39;;;;4805:4;4760:50;;4559:257;-1:-1:-1;;4559:257:1:o;4821:1527::-;5045:3;5083:6;5077:13;5109:4;5122:51;5166:6;5161:3;5156:2;5148:6;5144:15;5122:51;:::i;:::-;5236:13;;5195:16;;;;5258:55;5236:13;5195:16;5280:15;;;5258:55;:::i;:::-;5402:13;;5335:20;;;5375:1;;5462;5484:18;;;;5537;;;;5564:93;;5642:4;5632:8;5628:19;5616:31;;5564:93;5705:2;5695:8;5692:16;5672:18;5669:40;5666:167;;;-1:-1:-1;;;5732:33:1;;5788:4;5785:1;5778:15;5818:4;5739:3;5806:17;5666:167;5849:18;5876:110;;;;6000:1;5995:328;;;;5842:481;;5876:110;-1:-1:-1;;5911:24:1;;5897:39;;5956:20;;;;-1:-1:-1;5876:110:1;;5995:328;12262:1;12255:14;;;12299:4;12286:18;;6090:1;6104:169;6118:8;6115:1;6112:15;6104:169;;;6200:14;;6185:13;;;6178:37;6243:16;;;;6135:10;;6104:169;;;6108:3;;6304:8;6297:5;6293:20;6286:27;;5842:481;-1:-1:-1;6339:3:1;;4821:1527;-1:-1:-1;;;;;;;;;;;4821:1527:1:o;6771:488::-;-1:-1:-1;;;;;7040:15:1;;;7022:34;;7092:15;;7087:2;7072:18;;7065:43;7139:2;7124:18;;7117:34;;;7187:3;7182:2;7167:18;;7160:31;;;6965:4;;7208:45;;7233:19;;7225:6;7208:45;:::i;:::-;7200:53;6771:488;-1:-1:-1;;;;;;6771:488:1:o;7264:632::-;7435:2;7487:21;;;7557:13;;7460:18;;;7579:22;;;7406:4;;7435:2;7658:15;;;;7632:2;7617:18;;;7406:4;7701:169;7715:6;7712:1;7709:13;7701:169;;;7776:13;;7764:26;;7845:15;;;;7810:12;;;;7737:1;7730:9;7701:169;;;-1:-1:-1;7887:3:1;;7264:632;-1:-1:-1;;;;;;7264:632:1:o;8093:219::-;8242:2;8231:9;8224:21;8205:4;8262:44;8302:2;8291:9;8287:18;8279:6;8262:44;:::i;9422:356::-;9624:2;9606:21;;;9643:18;;;9636:30;9702:34;9697:2;9682:18;;9675:62;9769:2;9754:18;;9422:356::o;12315:128::-;12355:3;12386:1;12382:6;12379:1;12376:13;12373:39;;;12392:18;;:::i;:::-;-1:-1:-1;12428:9:1;;12315:128::o;12448:120::-;12488:1;12514;12504:35;;12519:18;;:::i;:::-;-1:-1:-1;12553:9:1;;12448:120::o;12573:168::-;12613:7;12679:1;12675;12671:6;12667:14;12664:1;12661:21;12656:1;12649:9;12642:17;12638:45;12635:71;;;12686:18;;:::i;:::-;-1:-1:-1;12726:9:1;;12573:168::o;12746:125::-;12786:4;12814:1;12811;12808:8;12805:34;;;12819:18;;:::i;:::-;-1:-1:-1;12856:9:1;;12746:125::o;12876:258::-;12948:1;12958:113;12972:6;12969:1;12966:13;12958:113;;;13048:11;;;13042:18;13029:11;;;13022:39;12994:2;12987:10;12958:113;;;13089:6;13086:1;13083:13;13080:48;;;-1:-1:-1;;13124:1:1;13106:16;;13099:27;12876:258::o;13139:380::-;13218:1;13214:12;;;;13261;;;13282:61;;13336:4;13328:6;13324:17;13314:27;;13282:61;13389:2;13381:6;13378:14;13358:18;13355:38;13352:161;;;13435:10;13430:3;13426:20;13423:1;13416:31;13470:4;13467:1;13460:15;13498:4;13495:1;13488:15;13352:161;;13139:380;;;:::o;13524:135::-;13563:3;-1:-1:-1;;13584:17:1;;13581:43;;;13604:18;;:::i;:::-;-1:-1:-1;13651:1:1;13640:13;;13524:135::o;13664:112::-;13696:1;13722;13712:35;;13727:18;;:::i;:::-;-1:-1:-1;13761:9:1;;13664:112::o;13781:127::-;13842:10;13837:3;13833:20;13830:1;13823:31;13873:4;13870:1;13863:15;13897:4;13894:1;13887:15;13913:127;13974:10;13969:3;13965:20;13962:1;13955:31;14005:4;14002:1;13995:15;14029:4;14026:1;14019:15;14045:127;14106:10;14101:3;14097:20;14094:1;14087:31;14137:4;14134:1;14127:15;14161:4;14158:1;14151:15;14177:127;14238:10;14233:3;14229:20;14226:1;14219:31;14269:4;14266:1;14259:15;14293:4;14290:1;14283:15;14309:131;-1:-1:-1;;;;;;14383:32:1;;14373:43;;14363:71;;14430:1;14427;14420:12
Swarm Source
ipfs://d66540da0c25f247c786c7b7ae81260eba329d65826f80122348e2bd090d9756
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.