BEP-721
Source Code
Overview
Max Total Supply
20,021Cyberpunk Pi
Holders
2,437
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 Cyberpunk PiLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
CyberpunkPi
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/**
*Submitted for verification at BscScan.com on 2022-09-20
*/
// SPDX-License-Identifier: MIT
// 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/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File @openzeppelin/contracts/utils/introspection/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File @openzeppelin/contracts/token/ERC721/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File @openzeppelin/contracts/token/ERC721/[email protected]
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}
// File @openzeppelin/contracts/utils/introspection/[email protected]
// 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/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: address zero is not a valid owner");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: invalid token ID");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
_requireMinted(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not token owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
_requireMinted(tokenId);
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
_safeTransfer(from, to, tokenId, data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(
address to,
uint256 tokenId,
bytes memory data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits an {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` has not been minted yet.
*/
function _requireMinted(uint256 tokenId) internal view virtual {
require(_exists(tokenId), "ERC721: invalid token ID");
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File @openzeppelin/contracts/security/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// File contracts/nfts/series/AutoIncrement.sol
pragma solidity ^0.8.0;
contract CyberpunkPi is Ownable, ERC721Enumerable, Pausable {
using Counters for Counters.Counter;
using Strings for uint256;
string private baseTokenURI;
uint256 TOTAL_TOKEN = 31415;
Counters.Counter private _tokenIdTracker;
mapping(address => bool) public miners;
mapping(address => uint256) public currentIndex;
constructor(
string memory _name,
string memory _symbol,
string memory _baseTokenURI
) ERC721(_name, _symbol) {
baseTokenURI = _baseTokenURI;
}
function setBaseURI(string memory _uri) external onlyOwner {
baseTokenURI = _uri;
}
function _baseURI() internal view virtual override returns (string memory) {
return baseTokenURI;
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : "";
}
modifier tokenSupplyLimit(uint256 i) {
require(totalSupply() + i <= TOTAL_TOKEN, "Token supply exceeded");
_;
}
modifier onlyMiners() {
require(miners[msg.sender] || msg.sender == owner(), "Permission denied");
_;
}
function addMiner(address user) external onlyOwner {
require(user != address(0), "Is zero address");
miners[user] = true;
}
function removeMinder(address user) external onlyOwner{
require(user != address(0), "Is zero address");
miners[user] = false;
}
function mint(address to) public onlyMiners whenNotPaused tokenSupplyLimit(1) {
// We cannot just use balanceOf to create the new tokenId because tokens
// can be burned (destroyed), so we need a separate counter.
_tokenIdTracker.increment();
uint256 tokenId = _tokenIdTracker.current();
_mint(to, tokenId);
}
function pause() external onlyOwner {
_pause();
}
function unpause() external onlyOwner {
_unpause();
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override(ERC721Enumerable) {
super._beforeTokenTransfer(from, to, tokenId);
require(!paused(), "ERC721: token transfer while paused");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_baseTokenURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"addMiner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"currentIndex","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":[{"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":[{"internalType":"address","name":"","type":"address"}],"name":"miners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeMinder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052617ab7600d553480156200001757600080fd5b506040516200415c3803806200415c83398181016040528101906200003d9190620002be565b82826200005f62000053620000d060201b60201c565b620000d860201b60201c565b8160019080519060200190620000779291906200019c565b508060029080519060200190620000909291906200019c565b5050506000600b60006101000a81548160ff02191690831515021790555080600c9080519060200190620000c69291906200019c565b50505050620004cf565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001aa90620003f4565b90600052602060002090601f016020900481019282620001ce57600085556200021a565b82601f10620001e957805160ff19168380011785556200021a565b828001600101855582156200021a579182015b8281111562000219578251825591602001919060010190620001fc565b5b5090506200022991906200022d565b5090565b5b80821115620002485760008160009055506001016200022e565b5090565b6000620002636200025d8462000388565b6200035f565b9050828152602081018484840111156200027c57600080fd5b62000289848285620003be565b509392505050565b600082601f830112620002a357600080fd5b8151620002b58482602086016200024c565b91505092915050565b600080600060608486031215620002d457600080fd5b600084015167ffffffffffffffff811115620002ef57600080fd5b620002fd8682870162000291565b935050602084015167ffffffffffffffff8111156200031b57600080fd5b620003298682870162000291565b925050604084015167ffffffffffffffff8111156200034757600080fd5b620003558682870162000291565b9150509250925092565b60006200036b6200037e565b90506200037982826200042a565b919050565b6000604051905090565b600067ffffffffffffffff821115620003a657620003a56200048f565b5b620003b182620004be565b9050602081019050919050565b60005b83811015620003de578082015181840152602081019050620003c1565b83811115620003ee576000848401525b50505050565b600060028204905060018216806200040d57607f821691505b6020821081141562000424576200042362000460565b5b50919050565b6200043582620004be565b810181811067ffffffffffffffff821117156200045757620004566200048f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613c7d80620004df6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f957806395d89b4111610097578063c87b56dd11610071578063c87b56dd146104dd578063e985e9c51461050d578063f2fde38b1461053d578063f3982e5e14610559576101c4565b806395d89b4114610487578063a22cb465146104a5578063b88d4fde146104c1576101c4565b806370a08231116100d357806370a0823114610425578063715018a6146104555780638456cb591461045f5780638da5cb5b14610469576101c4565b80636352211e146103a9578063648ec7b9146103d95780636a62784214610409576101c4565b80633b9418fd116101665780634f6ccce7116101405780634f6ccce7146103235780635046df991461035357806355f804b31461036f5780635c975abb1461038b576101c4565b80633b9418fd146102cd5780633f4ba83a146102fd57806342842e0e14610307576101c4565b8063095ea7b3116101a2578063095ea7b31461024757806318160ddd1461026357806323b872dd146102815780632f745c591461029d576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de9190612a30565b610575565b6040516101f09190612f77565b60405180910390f35b6102016105ef565b60405161020e9190612f92565b60405180910390f35b610231600480360381019061022c9190612ac3565b610681565b60405161023e9190612f10565b60405180910390f35b610261600480360381019061025c91906129f4565b6106c7565b005b61026b6107df565b6040516102789190613274565b60405180910390f35b61029b600480360381019061029691906128ee565b6107ec565b005b6102b760048036038101906102b291906129f4565b61084c565b6040516102c49190613274565b60405180910390f35b6102e760048036038101906102e29190612889565b6108f1565b6040516102f49190613274565b60405180910390f35b610305610909565b005b610321600480360381019061031c91906128ee565b61091b565b005b61033d60048036038101906103389190612ac3565b61093b565b60405161034a9190613274565b60405180910390f35b61036d60048036038101906103689190612889565b6109d2565b005b61038960048036038101906103849190612a82565b610aa5565b005b610393610ac7565b6040516103a09190612f77565b60405180910390f35b6103c360048036038101906103be9190612ac3565b610ade565b6040516103d09190612f10565b60405180910390f35b6103f360048036038101906103ee9190612889565b610b90565b6040516104009190612f77565b60405180910390f35b610423600480360381019061041e9190612889565b610bb0565b005b61043f600480360381019061043a9190612889565b610d01565b60405161044c9190613274565b60405180910390f35b61045d610db9565b005b610467610dcd565b005b610471610ddf565b60405161047e9190612f10565b60405180910390f35b61048f610e08565b60405161049c9190612f92565b60405180910390f35b6104bf60048036038101906104ba91906129b8565b610e9a565b005b6104db60048036038101906104d6919061293d565b610eb0565b005b6104f760048036038101906104f29190612ac3565b610f12565b6040516105049190612f92565b60405180910390f35b610527600480360381019061052291906128b2565b610fb9565b6040516105349190612f77565b60405180910390f35b61055760048036038101906105529190612889565b61104d565b005b610573600480360381019061056e9190612889565b6110d1565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105e857506105e7826111a4565b5b9050919050565b6060600180546105fe906134ca565b80601f016020809104026020016040519081016040528092919081815260200182805461062a906134ca565b80156106775780601f1061064c57610100808354040283529160200191610677565b820191906000526020600020905b81548152906001019060200180831161065a57829003601f168201915b5050505050905090565b600061068c82611286565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106d282610ade565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073a906131f4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107626112d1565b73ffffffffffffffffffffffffffffffffffffffff16148061079157506107908161078b6112d1565b610fb9565b5b6107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c790613154565b60405180910390fd5b6107da83836112d9565b505050565b6000600980549050905090565b6107fd6107f76112d1565b82611392565b61083c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083390613254565b60405180910390fd5b610847838383611427565b505050565b600061085783610d01565b8210610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f90612fd4565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60106020528060005260406000206000915090505481565b61091161168e565b61091961170c565b565b61093683838360405180602001604052806000815250610eb0565b505050565b60006109456107df565b8210610986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097d90613234565b60405180910390fd5b600982815481106109c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6109da61168e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190613134565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610aad61168e565b80600c9080519060200190610ac39291906126ad565b5050565b6000600b60009054906101000a900460ff16905090565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e906131d4565b60405180910390fd5b80915050919050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610c3a5750610c0b610ddf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c70906130d4565b60405180910390fd5b610c8161176f565b6001600d5481610c8f6107df565b610c999190613359565b1115610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613214565b60405180910390fd5b610ce4600e6117b9565b6000610cf0600e6117cf565b9050610cfc83826117dd565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613114565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dc161168e565b610dcb60006119b7565b565b610dd561168e565b610ddd611a7b565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610e17906134ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610e43906134ca565b8015610e905780601f10610e6557610100808354040283529160200191610e90565b820191906000526020600020905b815481529060010190602001808311610e7357829003601f168201915b5050505050905090565b610eac610ea56112d1565b8383611ade565b5050565b610ec1610ebb6112d1565b83611392565b610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613254565b60405180910390fd5b610f0c84848484611c4b565b50505050565b6060610f1d82611ca7565b610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f53906131b4565b60405180910390fd5b6000610f66611d13565b90506000815111610f865760405180602001604052806000815250610fb1565b80610f9084611da5565b604051602001610fa1929190612ee1565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61105561168e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90613014565b60405180910390fd5b6110ce816119b7565b50565b6110d961168e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090613134565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061126f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061127f575061127e82611f52565b5b9050919050565b61128f81611ca7565b6112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c5906131d4565b60405180910390fd5b50565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661134c83610ade565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061139e83610ade565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806113e057506113df8185610fb9565b5b8061141e57508373ffffffffffffffffffffffffffffffffffffffff1661140684610681565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661144782610ade565b73ffffffffffffffffffffffffffffffffffffffff161461149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490613034565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490613094565b60405180910390fd5b611518838383611fbc565b6115236000826112d9565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461157391906133e0565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115ca9190613359565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611689838383612014565b505050565b6116966112d1565b73ffffffffffffffffffffffffffffffffffffffff166116b4610ddf565b73ffffffffffffffffffffffffffffffffffffffff161461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190613194565b60405180910390fd5b565b611714612019565b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6117586112d1565b6040516117659190612f10565b60405180910390a1565b611777610ac7565b156117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae906130f4565b60405180910390fd5b565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490613174565b60405180910390fd5b61185681611ca7565b15611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90613054565b60405180910390fd5b6118a260008383611fbc565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f29190613359565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119b360008383612014565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a8361176f565b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ac76112d1565b604051611ad49190612f10565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b44906130b4565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c3e9190612f77565b60405180910390a3505050565b611c56848484611427565b611c6284848484612062565b611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890612ff4565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600c8054611d22906134ca565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4e906134ca565b8015611d9b5780601f10611d7057610100808354040283529160200191611d9b565b820191906000526020600020905b815481529060010190602001808311611d7e57829003601f168201915b5050505050905090565b60606000821415611ded576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f4d565b600082905060005b60008214611e1f578080611e089061352d565b915050600a82611e1891906133af565b9150611df5565b60008167ffffffffffffffff811115611e61577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611e935781602001600182028036833780820191505090505b5090505b60008514611f4657600182611eac91906133e0565b9150600a85611ebb9190613576565b6030611ec79190613359565b60f81b818381518110611f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f3f91906133af565b9450611e97565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611fc78383836121f9565b611fcf610ac7565b1561200f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200690613074565b60405180910390fd5b505050565b505050565b612021610ac7565b612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790612fb4565b60405180910390fd5b565b60006120838473ffffffffffffffffffffffffffffffffffffffff1661230d565b156121ec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120ac6112d1565b8786866040518563ffffffff1660e01b81526004016120ce9493929190612f2b565b602060405180830381600087803b1580156120e857600080fd5b505af192505050801561211957506040513d601f19601f820116820180604052508101906121169190612a59565b60015b61219c573d8060008114612149576040519150601f19603f3d011682016040523d82523d6000602084013e61214e565b606091505b50600081511415612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218b90612ff4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121f1565b600190505b949350505050565b612204838383612330565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122475761224281612335565b612286565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461228557612284838261237e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c9576122c4816124eb565b612308565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461230757612306828261262e565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161238b84610d01565b61239591906133e0565b905060006008600084815260200190815260200160002054905081811461247a576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506124ff91906133e0565b90506000600a6000848152602001908152602001600020549050600060098381548110612555577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806009838154811061259d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612612577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061263983610d01565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b8280546126b9906134ca565b90600052602060002090601f0160209004810192826126db5760008555612722565b82601f106126f457805160ff1916838001178555612722565b82800160010185558215612722579182015b82811115612721578251825591602001919060010190612706565b5b50905061272f9190612733565b5090565b5b8082111561274c576000816000905550600101612734565b5090565b600061276361275e846132b4565b61328f565b90508281526020810184848401111561277b57600080fd5b612786848285613488565b509392505050565b60006127a161279c846132e5565b61328f565b9050828152602081018484840111156127b957600080fd5b6127c4848285613488565b509392505050565b6000813590506127db81613beb565b92915050565b6000813590506127f081613c02565b92915050565b60008135905061280581613c19565b92915050565b60008151905061281a81613c19565b92915050565b600082601f83011261283157600080fd5b8135612841848260208601612750565b91505092915050565b600082601f83011261285b57600080fd5b813561286b84826020860161278e565b91505092915050565b60008135905061288381613c30565b92915050565b60006020828403121561289b57600080fd5b60006128a9848285016127cc565b91505092915050565b600080604083850312156128c557600080fd5b60006128d3858286016127cc565b92505060206128e4858286016127cc565b9150509250929050565b60008060006060848603121561290357600080fd5b6000612911868287016127cc565b9350506020612922868287016127cc565b925050604061293386828701612874565b9150509250925092565b6000806000806080858703121561295357600080fd5b6000612961878288016127cc565b9450506020612972878288016127cc565b935050604061298387828801612874565b925050606085013567ffffffffffffffff8111156129a057600080fd5b6129ac87828801612820565b91505092959194509250565b600080604083850312156129cb57600080fd5b60006129d9858286016127cc565b92505060206129ea858286016127e1565b9150509250929050565b60008060408385031215612a0757600080fd5b6000612a15858286016127cc565b9250506020612a2685828601612874565b9150509250929050565b600060208284031215612a4257600080fd5b6000612a50848285016127f6565b91505092915050565b600060208284031215612a6b57600080fd5b6000612a798482850161280b565b91505092915050565b600060208284031215612a9457600080fd5b600082013567ffffffffffffffff811115612aae57600080fd5b612aba8482850161284a565b91505092915050565b600060208284031215612ad557600080fd5b6000612ae384828501612874565b91505092915050565b612af581613414565b82525050565b612b0481613426565b82525050565b6000612b1582613316565b612b1f818561332c565b9350612b2f818560208601613497565b612b3881613663565b840191505092915050565b6000612b4e82613321565b612b58818561333d565b9350612b68818560208601613497565b612b7181613663565b840191505092915050565b6000612b8782613321565b612b91818561334e565b9350612ba1818560208601613497565b80840191505092915050565b6000612bba60148361333d565b9150612bc582613674565b602082019050919050565b6000612bdd602b8361333d565b9150612be88261369d565b604082019050919050565b6000612c0060328361333d565b9150612c0b826136ec565b604082019050919050565b6000612c2360268361333d565b9150612c2e8261373b565b604082019050919050565b6000612c4660258361333d565b9150612c518261378a565b604082019050919050565b6000612c69601c8361333d565b9150612c74826137d9565b602082019050919050565b6000612c8c60238361333d565b9150612c9782613802565b604082019050919050565b6000612caf60248361333d565b9150612cba82613851565b604082019050919050565b6000612cd260198361333d565b9150612cdd826138a0565b602082019050919050565b6000612cf560118361333d565b9150612d00826138c9565b602082019050919050565b6000612d1860108361333d565b9150612d23826138f2565b602082019050919050565b6000612d3b60298361333d565b9150612d468261391b565b604082019050919050565b6000612d5e600f8361333d565b9150612d698261396a565b602082019050919050565b6000612d81603e8361333d565b9150612d8c82613993565b604082019050919050565b6000612da460208361333d565b9150612daf826139e2565b602082019050919050565b6000612dc760058361334e565b9150612dd282613a0b565b600582019050919050565b6000612dea60208361333d565b9150612df582613a34565b602082019050919050565b6000612e0d602f8361333d565b9150612e1882613a5d565b604082019050919050565b6000612e3060188361333d565b9150612e3b82613aac565b602082019050919050565b6000612e5360218361333d565b9150612e5e82613ad5565b604082019050919050565b6000612e7660158361333d565b9150612e8182613b24565b602082019050919050565b6000612e99602c8361333d565b9150612ea482613b4d565b604082019050919050565b6000612ebc602e8361333d565b9150612ec782613b9c565b604082019050919050565b612edb8161347e565b82525050565b6000612eed8285612b7c565b9150612ef98284612b7c565b9150612f0482612dba565b91508190509392505050565b6000602082019050612f256000830184612aec565b92915050565b6000608082019050612f406000830187612aec565b612f4d6020830186612aec565b612f5a6040830185612ed2565b8181036060830152612f6c8184612b0a565b905095945050505050565b6000602082019050612f8c6000830184612afb565b92915050565b60006020820190508181036000830152612fac8184612b43565b905092915050565b60006020820190508181036000830152612fcd81612bad565b9050919050565b60006020820190508181036000830152612fed81612bd0565b9050919050565b6000602082019050818103600083015261300d81612bf3565b9050919050565b6000602082019050818103600083015261302d81612c16565b9050919050565b6000602082019050818103600083015261304d81612c39565b9050919050565b6000602082019050818103600083015261306d81612c5c565b9050919050565b6000602082019050818103600083015261308d81612c7f565b9050919050565b600060208201905081810360008301526130ad81612ca2565b9050919050565b600060208201905081810360008301526130cd81612cc5565b9050919050565b600060208201905081810360008301526130ed81612ce8565b9050919050565b6000602082019050818103600083015261310d81612d0b565b9050919050565b6000602082019050818103600083015261312d81612d2e565b9050919050565b6000602082019050818103600083015261314d81612d51565b9050919050565b6000602082019050818103600083015261316d81612d74565b9050919050565b6000602082019050818103600083015261318d81612d97565b9050919050565b600060208201905081810360008301526131ad81612ddd565b9050919050565b600060208201905081810360008301526131cd81612e00565b9050919050565b600060208201905081810360008301526131ed81612e23565b9050919050565b6000602082019050818103600083015261320d81612e46565b9050919050565b6000602082019050818103600083015261322d81612e69565b9050919050565b6000602082019050818103600083015261324d81612e8c565b9050919050565b6000602082019050818103600083015261326d81612eaf565b9050919050565b60006020820190506132896000830184612ed2565b92915050565b60006132996132aa565b90506132a582826134fc565b919050565b6000604051905090565b600067ffffffffffffffff8211156132cf576132ce613634565b5b6132d882613663565b9050602081019050919050565b600067ffffffffffffffff821115613300576132ff613634565b5b61330982613663565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006133648261347e565b915061336f8361347e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133a4576133a36135a7565b5b828201905092915050565b60006133ba8261347e565b91506133c58361347e565b9250826133d5576133d46135d6565b5b828204905092915050565b60006133eb8261347e565b91506133f68361347e565b925082821015613409576134086135a7565b5b828203905092915050565b600061341f8261345e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134b557808201518184015260208101905061349a565b838111156134c4576000848401525b50505050565b600060028204905060018216806134e257607f821691505b602082108114156134f6576134f5613605565b5b50919050565b61350582613663565b810181811067ffffffffffffffff8211171561352457613523613634565b5b80604052505050565b60006135388261347e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561356b5761356a6135a7565b5b600182019050919050565b60006135818261347e565b915061358c8361347e565b92508261359c5761359b6135d6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20746f6b656e207472616e73666572207768696c652070617560008201527f7365640000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5065726d697373696f6e2064656e696564000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4973207a65726f20616464726573730000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e20737570706c792065786365656465640000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b613bf481613414565b8114613bff57600080fd5b50565b613c0b81613426565b8114613c1657600080fd5b50565b613c2281613432565b8114613c2d57600080fd5b50565b613c398161347e565b8114613c4457600080fd5b5056fea26469706673582212200b019523392691d3d76932a563b302cb780bf3b5c8ebda1366bb726027cf871964736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c437962657270756e6b2050690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c437962657270756e6b20506900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569616c746f726b7463766a6f7a7034743367636169683432656b6e7365676d686c7975696d636a3276376a6d64356a3576777032612f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f957806395d89b4111610097578063c87b56dd11610071578063c87b56dd146104dd578063e985e9c51461050d578063f2fde38b1461053d578063f3982e5e14610559576101c4565b806395d89b4114610487578063a22cb465146104a5578063b88d4fde146104c1576101c4565b806370a08231116100d357806370a0823114610425578063715018a6146104555780638456cb591461045f5780638da5cb5b14610469576101c4565b80636352211e146103a9578063648ec7b9146103d95780636a62784214610409576101c4565b80633b9418fd116101665780634f6ccce7116101405780634f6ccce7146103235780635046df991461035357806355f804b31461036f5780635c975abb1461038b576101c4565b80633b9418fd146102cd5780633f4ba83a146102fd57806342842e0e14610307576101c4565b8063095ea7b3116101a2578063095ea7b31461024757806318160ddd1461026357806323b872dd146102815780632f745c591461029d576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de9190612a30565b610575565b6040516101f09190612f77565b60405180910390f35b6102016105ef565b60405161020e9190612f92565b60405180910390f35b610231600480360381019061022c9190612ac3565b610681565b60405161023e9190612f10565b60405180910390f35b610261600480360381019061025c91906129f4565b6106c7565b005b61026b6107df565b6040516102789190613274565b60405180910390f35b61029b600480360381019061029691906128ee565b6107ec565b005b6102b760048036038101906102b291906129f4565b61084c565b6040516102c49190613274565b60405180910390f35b6102e760048036038101906102e29190612889565b6108f1565b6040516102f49190613274565b60405180910390f35b610305610909565b005b610321600480360381019061031c91906128ee565b61091b565b005b61033d60048036038101906103389190612ac3565b61093b565b60405161034a9190613274565b60405180910390f35b61036d60048036038101906103689190612889565b6109d2565b005b61038960048036038101906103849190612a82565b610aa5565b005b610393610ac7565b6040516103a09190612f77565b60405180910390f35b6103c360048036038101906103be9190612ac3565b610ade565b6040516103d09190612f10565b60405180910390f35b6103f360048036038101906103ee9190612889565b610b90565b6040516104009190612f77565b60405180910390f35b610423600480360381019061041e9190612889565b610bb0565b005b61043f600480360381019061043a9190612889565b610d01565b60405161044c9190613274565b60405180910390f35b61045d610db9565b005b610467610dcd565b005b610471610ddf565b60405161047e9190612f10565b60405180910390f35b61048f610e08565b60405161049c9190612f92565b60405180910390f35b6104bf60048036038101906104ba91906129b8565b610e9a565b005b6104db60048036038101906104d6919061293d565b610eb0565b005b6104f760048036038101906104f29190612ac3565b610f12565b6040516105049190612f92565b60405180910390f35b610527600480360381019061052291906128b2565b610fb9565b6040516105349190612f77565b60405180910390f35b61055760048036038101906105529190612889565b61104d565b005b610573600480360381019061056e9190612889565b6110d1565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105e857506105e7826111a4565b5b9050919050565b6060600180546105fe906134ca565b80601f016020809104026020016040519081016040528092919081815260200182805461062a906134ca565b80156106775780601f1061064c57610100808354040283529160200191610677565b820191906000526020600020905b81548152906001019060200180831161065a57829003601f168201915b5050505050905090565b600061068c82611286565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106d282610ade565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073a906131f4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107626112d1565b73ffffffffffffffffffffffffffffffffffffffff16148061079157506107908161078b6112d1565b610fb9565b5b6107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c790613154565b60405180910390fd5b6107da83836112d9565b505050565b6000600980549050905090565b6107fd6107f76112d1565b82611392565b61083c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083390613254565b60405180910390fd5b610847838383611427565b505050565b600061085783610d01565b8210610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f90612fd4565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60106020528060005260406000206000915090505481565b61091161168e565b61091961170c565b565b61093683838360405180602001604052806000815250610eb0565b505050565b60006109456107df565b8210610986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097d90613234565b60405180910390fd5b600982815481106109c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6109da61168e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190613134565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610aad61168e565b80600c9080519060200190610ac39291906126ad565b5050565b6000600b60009054906101000a900460ff16905090565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e906131d4565b60405180910390fd5b80915050919050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610c3a5750610c0b610ddf565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c70906130d4565b60405180910390fd5b610c8161176f565b6001600d5481610c8f6107df565b610c999190613359565b1115610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613214565b60405180910390fd5b610ce4600e6117b9565b6000610cf0600e6117cf565b9050610cfc83826117dd565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990613114565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dc161168e565b610dcb60006119b7565b565b610dd561168e565b610ddd611a7b565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610e17906134ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610e43906134ca565b8015610e905780601f10610e6557610100808354040283529160200191610e90565b820191906000526020600020905b815481529060010190602001808311610e7357829003601f168201915b5050505050905090565b610eac610ea56112d1565b8383611ade565b5050565b610ec1610ebb6112d1565b83611392565b610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613254565b60405180910390fd5b610f0c84848484611c4b565b50505050565b6060610f1d82611ca7565b610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f53906131b4565b60405180910390fd5b6000610f66611d13565b90506000815111610f865760405180602001604052806000815250610fb1565b80610f9084611da5565b604051602001610fa1929190612ee1565b6040516020818303038152906040525b915050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61105561168e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90613014565b60405180910390fd5b6110ce816119b7565b50565b6110d961168e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090613134565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061126f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061127f575061127e82611f52565b5b9050919050565b61128f81611ca7565b6112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c5906131d4565b60405180910390fd5b50565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661134c83610ade565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061139e83610ade565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806113e057506113df8185610fb9565b5b8061141e57508373ffffffffffffffffffffffffffffffffffffffff1661140684610681565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661144782610ade565b73ffffffffffffffffffffffffffffffffffffffff161461149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490613034565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490613094565b60405180910390fd5b611518838383611fbc565b6115236000826112d9565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461157391906133e0565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115ca9190613359565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611689838383612014565b505050565b6116966112d1565b73ffffffffffffffffffffffffffffffffffffffff166116b4610ddf565b73ffffffffffffffffffffffffffffffffffffffff161461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190613194565b60405180910390fd5b565b611714612019565b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6117586112d1565b6040516117659190612f10565b60405180910390a1565b611777610ac7565b156117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae906130f4565b60405180910390fd5b565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490613174565b60405180910390fd5b61185681611ca7565b15611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90613054565b60405180910390fd5b6118a260008383611fbc565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118f29190613359565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119b360008383612014565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a8361176f565b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ac76112d1565b604051611ad49190612f10565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b44906130b4565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c3e9190612f77565b60405180910390a3505050565b611c56848484611427565b611c6284848484612062565b611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890612ff4565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600c8054611d22906134ca565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4e906134ca565b8015611d9b5780601f10611d7057610100808354040283529160200191611d9b565b820191906000526020600020905b815481529060010190602001808311611d7e57829003601f168201915b5050505050905090565b60606000821415611ded576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f4d565b600082905060005b60008214611e1f578080611e089061352d565b915050600a82611e1891906133af565b9150611df5565b60008167ffffffffffffffff811115611e61577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611e935781602001600182028036833780820191505090505b5090505b60008514611f4657600182611eac91906133e0565b9150600a85611ebb9190613576565b6030611ec79190613359565b60f81b818381518110611f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f3f91906133af565b9450611e97565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611fc78383836121f9565b611fcf610ac7565b1561200f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200690613074565b60405180910390fd5b505050565b505050565b612021610ac7565b612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790612fb4565b60405180910390fd5b565b60006120838473ffffffffffffffffffffffffffffffffffffffff1661230d565b156121ec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120ac6112d1565b8786866040518563ffffffff1660e01b81526004016120ce9493929190612f2b565b602060405180830381600087803b1580156120e857600080fd5b505af192505050801561211957506040513d601f19601f820116820180604052508101906121169190612a59565b60015b61219c573d8060008114612149576040519150601f19603f3d011682016040523d82523d6000602084013e61214e565b606091505b50600081511415612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218b90612ff4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121f1565b600190505b949350505050565b612204838383612330565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122475761224281612335565b612286565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461228557612284838261237e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c9576122c4816124eb565b612308565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461230757612306828261262e565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161238b84610d01565b61239591906133e0565b905060006008600084815260200190815260200160002054905081811461247a576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506124ff91906133e0565b90506000600a6000848152602001908152602001600020549050600060098381548110612555577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806009838154811061259d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612612577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061263983610d01565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b8280546126b9906134ca565b90600052602060002090601f0160209004810192826126db5760008555612722565b82601f106126f457805160ff1916838001178555612722565b82800160010185558215612722579182015b82811115612721578251825591602001919060010190612706565b5b50905061272f9190612733565b5090565b5b8082111561274c576000816000905550600101612734565b5090565b600061276361275e846132b4565b61328f565b90508281526020810184848401111561277b57600080fd5b612786848285613488565b509392505050565b60006127a161279c846132e5565b61328f565b9050828152602081018484840111156127b957600080fd5b6127c4848285613488565b509392505050565b6000813590506127db81613beb565b92915050565b6000813590506127f081613c02565b92915050565b60008135905061280581613c19565b92915050565b60008151905061281a81613c19565b92915050565b600082601f83011261283157600080fd5b8135612841848260208601612750565b91505092915050565b600082601f83011261285b57600080fd5b813561286b84826020860161278e565b91505092915050565b60008135905061288381613c30565b92915050565b60006020828403121561289b57600080fd5b60006128a9848285016127cc565b91505092915050565b600080604083850312156128c557600080fd5b60006128d3858286016127cc565b92505060206128e4858286016127cc565b9150509250929050565b60008060006060848603121561290357600080fd5b6000612911868287016127cc565b9350506020612922868287016127cc565b925050604061293386828701612874565b9150509250925092565b6000806000806080858703121561295357600080fd5b6000612961878288016127cc565b9450506020612972878288016127cc565b935050604061298387828801612874565b925050606085013567ffffffffffffffff8111156129a057600080fd5b6129ac87828801612820565b91505092959194509250565b600080604083850312156129cb57600080fd5b60006129d9858286016127cc565b92505060206129ea858286016127e1565b9150509250929050565b60008060408385031215612a0757600080fd5b6000612a15858286016127cc565b9250506020612a2685828601612874565b9150509250929050565b600060208284031215612a4257600080fd5b6000612a50848285016127f6565b91505092915050565b600060208284031215612a6b57600080fd5b6000612a798482850161280b565b91505092915050565b600060208284031215612a9457600080fd5b600082013567ffffffffffffffff811115612aae57600080fd5b612aba8482850161284a565b91505092915050565b600060208284031215612ad557600080fd5b6000612ae384828501612874565b91505092915050565b612af581613414565b82525050565b612b0481613426565b82525050565b6000612b1582613316565b612b1f818561332c565b9350612b2f818560208601613497565b612b3881613663565b840191505092915050565b6000612b4e82613321565b612b58818561333d565b9350612b68818560208601613497565b612b7181613663565b840191505092915050565b6000612b8782613321565b612b91818561334e565b9350612ba1818560208601613497565b80840191505092915050565b6000612bba60148361333d565b9150612bc582613674565b602082019050919050565b6000612bdd602b8361333d565b9150612be88261369d565b604082019050919050565b6000612c0060328361333d565b9150612c0b826136ec565b604082019050919050565b6000612c2360268361333d565b9150612c2e8261373b565b604082019050919050565b6000612c4660258361333d565b9150612c518261378a565b604082019050919050565b6000612c69601c8361333d565b9150612c74826137d9565b602082019050919050565b6000612c8c60238361333d565b9150612c9782613802565b604082019050919050565b6000612caf60248361333d565b9150612cba82613851565b604082019050919050565b6000612cd260198361333d565b9150612cdd826138a0565b602082019050919050565b6000612cf560118361333d565b9150612d00826138c9565b602082019050919050565b6000612d1860108361333d565b9150612d23826138f2565b602082019050919050565b6000612d3b60298361333d565b9150612d468261391b565b604082019050919050565b6000612d5e600f8361333d565b9150612d698261396a565b602082019050919050565b6000612d81603e8361333d565b9150612d8c82613993565b604082019050919050565b6000612da460208361333d565b9150612daf826139e2565b602082019050919050565b6000612dc760058361334e565b9150612dd282613a0b565b600582019050919050565b6000612dea60208361333d565b9150612df582613a34565b602082019050919050565b6000612e0d602f8361333d565b9150612e1882613a5d565b604082019050919050565b6000612e3060188361333d565b9150612e3b82613aac565b602082019050919050565b6000612e5360218361333d565b9150612e5e82613ad5565b604082019050919050565b6000612e7660158361333d565b9150612e8182613b24565b602082019050919050565b6000612e99602c8361333d565b9150612ea482613b4d565b604082019050919050565b6000612ebc602e8361333d565b9150612ec782613b9c565b604082019050919050565b612edb8161347e565b82525050565b6000612eed8285612b7c565b9150612ef98284612b7c565b9150612f0482612dba565b91508190509392505050565b6000602082019050612f256000830184612aec565b92915050565b6000608082019050612f406000830187612aec565b612f4d6020830186612aec565b612f5a6040830185612ed2565b8181036060830152612f6c8184612b0a565b905095945050505050565b6000602082019050612f8c6000830184612afb565b92915050565b60006020820190508181036000830152612fac8184612b43565b905092915050565b60006020820190508181036000830152612fcd81612bad565b9050919050565b60006020820190508181036000830152612fed81612bd0565b9050919050565b6000602082019050818103600083015261300d81612bf3565b9050919050565b6000602082019050818103600083015261302d81612c16565b9050919050565b6000602082019050818103600083015261304d81612c39565b9050919050565b6000602082019050818103600083015261306d81612c5c565b9050919050565b6000602082019050818103600083015261308d81612c7f565b9050919050565b600060208201905081810360008301526130ad81612ca2565b9050919050565b600060208201905081810360008301526130cd81612cc5565b9050919050565b600060208201905081810360008301526130ed81612ce8565b9050919050565b6000602082019050818103600083015261310d81612d0b565b9050919050565b6000602082019050818103600083015261312d81612d2e565b9050919050565b6000602082019050818103600083015261314d81612d51565b9050919050565b6000602082019050818103600083015261316d81612d74565b9050919050565b6000602082019050818103600083015261318d81612d97565b9050919050565b600060208201905081810360008301526131ad81612ddd565b9050919050565b600060208201905081810360008301526131cd81612e00565b9050919050565b600060208201905081810360008301526131ed81612e23565b9050919050565b6000602082019050818103600083015261320d81612e46565b9050919050565b6000602082019050818103600083015261322d81612e69565b9050919050565b6000602082019050818103600083015261324d81612e8c565b9050919050565b6000602082019050818103600083015261326d81612eaf565b9050919050565b60006020820190506132896000830184612ed2565b92915050565b60006132996132aa565b90506132a582826134fc565b919050565b6000604051905090565b600067ffffffffffffffff8211156132cf576132ce613634565b5b6132d882613663565b9050602081019050919050565b600067ffffffffffffffff821115613300576132ff613634565b5b61330982613663565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006133648261347e565b915061336f8361347e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133a4576133a36135a7565b5b828201905092915050565b60006133ba8261347e565b91506133c58361347e565b9250826133d5576133d46135d6565b5b828204905092915050565b60006133eb8261347e565b91506133f68361347e565b925082821015613409576134086135a7565b5b828203905092915050565b600061341f8261345e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134b557808201518184015260208101905061349a565b838111156134c4576000848401525b50505050565b600060028204905060018216806134e257607f821691505b602082108114156134f6576134f5613605565b5b50919050565b61350582613663565b810181811067ffffffffffffffff8211171561352457613523613634565b5b80604052505050565b60006135388261347e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561356b5761356a6135a7565b5b600182019050919050565b60006135818261347e565b915061358c8361347e565b92508261359c5761359b6135d6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20746f6b656e207472616e73666572207768696c652070617560008201527f7365640000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5065726d697373696f6e2064656e696564000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4973207a65726f20616464726573730000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e20737570706c792065786365656465640000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b613bf481613414565b8114613bff57600080fd5b50565b613c0b81613426565b8114613c1657600080fd5b50565b613c2281613432565b8114613c2d57600080fd5b50565b613c398161347e565b8114613c4457600080fd5b5056fea26469706673582212200b019523392691d3d76932a563b302cb780bf3b5c8ebda1366bb726027cf871964736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c437962657270756e6b2050690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c437962657270756e6b20506900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569616c746f726b7463766a6f7a7034743367636169683432656b6e7365676d686c7975696d636a3276376a6d64356a3576777032612f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Cyberpunk Pi
Arg [1] : _symbol (string): Cyberpunk Pi
Arg [2] : _baseTokenURI (string): ipfs://bafybeialtorktcvjozp4t3gcaih42eknsegmhlyuimcj2v7jmd5j5vwp2a/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 437962657270756e6b2050690000000000000000000000000000000000000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [6] : 437962657270756e6b2050690000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [8] : 697066733a2f2f62616679626569616c746f726b7463766a6f7a703474336763
Arg [9] : 6169683432656b6e7365676d686c7975696d636a3276376a6d64356a35767770
Arg [10] : 32612f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
50431:2522:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40061:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25703:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27216:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26733:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40701:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27916:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40369:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50736:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52590:67;;;:::i;:::-;;28323:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40891:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51994:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50987:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49361:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25414:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50691:38;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52152:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25145:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2759:103;;;:::i;:::-;;52519:63;;;:::i;:::-;;2111:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25872:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27459:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28579:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51215:341;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27685:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3017:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51840:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40061:224;40163:4;40202:35;40187:50;;;:11;:50;;;;:90;;;;40241:36;40265:11;40241:23;:36::i;:::-;40187:90;40180:97;;40061:224;;;:::o;25703:100::-;25757:13;25790:5;25783:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25703:100;:::o;27216:171::-;27292:7;27312:23;27327:7;27312:14;:23::i;:::-;27355:15;:24;27371:7;27355:24;;;;;;;;;;;;;;;;;;;;;27348:31;;27216:171;;;:::o;26733:417::-;26814:13;26830:23;26845:7;26830:14;:23::i;:::-;26814:39;;26878:5;26872:11;;:2;:11;;;;26864:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26972:5;26956:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26981:37;26998:5;27005:12;:10;:12::i;:::-;26981:16;:37::i;:::-;26956:62;26934:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;27121:21;27130:2;27134:7;27121:8;:21::i;:::-;26733:417;;;:::o;40701:113::-;40762:7;40789:10;:17;;;;40782:24;;40701:113;:::o;27916:336::-;28111:41;28130:12;:10;:12::i;:::-;28144:7;28111:18;:41::i;:::-;28103:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28216:28;28226:4;28232:2;28236:7;28216:9;:28::i;:::-;27916:336;;;:::o;40369:256::-;40466:7;40502:23;40519:5;40502:16;:23::i;:::-;40494:5;:31;40486:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40591:12;:19;40604:5;40591:19;;;;;;;;;;;;;;;:26;40611:5;40591:26;;;;;;;;;;;;40584:33;;40369:256;;;;:::o;50736:47::-;;;;;;;;;;;;;;;;;:::o;52590:67::-;1997:13;:11;:13::i;:::-;52639:10:::1;:8;:10::i;:::-;52590:67::o:0;28323:185::-;28461:39;28478:4;28484:2;28488:7;28461:39;;;;;;;;;;;;:16;:39::i;:::-;28323:185;;;:::o;40891:233::-;40966:7;41002:30;:28;:30::i;:::-;40994:5;:38;40986:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41099:10;41110:5;41099:17;;;;;;;;;;;;;;;;;;;;;;;;41092:24;;40891:233;;;:::o;51994:150::-;1997:13;:11;:13::i;:::-;52083:1:::1;52067:18;;:4;:18;;;;52059:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;52131:5;52116:6;:12;52123:4;52116:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;51994:150:::0;:::o;50987:97::-;1997:13;:11;:13::i;:::-;51072:4:::1;51057:12;:19;;;;;;;;;;;;:::i;:::-;;50987:97:::0;:::o;49361:86::-;49408:4;49432:7;;;;;;;;;;;49425:14;;49361:86;:::o;25414:222::-;25486:7;25506:13;25522:7;:16;25530:7;25522:16;;;;;;;;;;;;;;;;;;;;;25506:32;;25574:1;25557:19;;:5;:19;;;;25549:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25623:5;25616:12;;;25414:222;;;:::o;50691:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;52152:359::-;51747:6;:18;51754:10;51747:18;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;51783:7;:5;:7::i;:::-;51769:21;;:10;:21;;;51747:43;51739:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48966:19:::1;:17;:19::i;:::-;52227:1:::2;51641:11;;51636:1;51620:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:32;;51612:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;52393:27:::3;:15;:25;:27::i;:::-;52431:15;52449:25;:15;:23;:25::i;:::-;52431:43;;52485:18;52491:2;52495:7;52485:5;:18::i;:::-;51689:1;48996::::2;52152:359:::0;:::o;25145:207::-;25217:7;25262:1;25245:19;;:5;:19;;;;25237:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25328:9;:16;25338:5;25328:16;;;;;;;;;;;;;;;;25321:23;;25145:207;;;:::o;2759:103::-;1997:13;:11;:13::i;:::-;2824:30:::1;2851:1;2824:18;:30::i;:::-;2759:103::o:0;52519:63::-;1997:13;:11;:13::i;:::-;52566:8:::1;:6;:8::i;:::-;52519:63::o:0;2111:87::-;2157:7;2184:6;;;;;;;;;;;2177:13;;2111:87;:::o;25872:104::-;25928:13;25961:7;25954:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25872:104;:::o;27459:155::-;27554:52;27573:12;:10;:12::i;:::-;27587:8;27597;27554:18;:52::i;:::-;27459:155;;:::o;28579:323::-;28753:41;28772:12;:10;:12::i;:::-;28786:7;28753:18;:41::i;:::-;28745:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28856:38;28870:4;28876:2;28880:7;28889:4;28856:13;:38::i;:::-;28579:323;;;;:::o;51215:341::-;51288:13;51322:16;51330:7;51322;:16::i;:::-;51314:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51401:21;51425:10;:8;:10::i;:::-;51401:34;;51477:1;51459:7;51453:21;:25;:95;;;;;;;;;;;;;;;;;51505:7;51514:18;:7;:16;:18::i;:::-;51488:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51453:95;51446:102;;;51215:341;;;:::o;27685:164::-;27782:4;27806:18;:25;27825:5;27806:25;;;;;;;;;;;;;;;:35;27832:8;27806:35;;;;;;;;;;;;;;;;;;;;;;;;;27799:42;;27685:164;;;;:::o;3017:201::-;1997:13;:11;:13::i;:::-;3126:1:::1;3106:22;;:8;:22;;;;3098:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3182:28;3201:8;3182:18;:28::i;:::-;3017:201:::0;:::o;51840:146::-;1997:13;:11;:13::i;:::-;51926:1:::1;51910:18;;:4;:18;;;;51902:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;51974:4;51959:6;:12;51966:4;51959:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;51840:146:::0;:::o;24776:305::-;24878:4;24930:25;24915:40;;;:11;:40;;;;:105;;;;24987:33;24972:48;;;:11;:48;;;;24915:105;:158;;;;25037:36;25061:11;25037:23;:36::i;:::-;24915:158;24895:178;;24776:305;;;:::o;35191:135::-;35273:16;35281:7;35273;:16::i;:::-;35265:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35191:135;:::o;656:98::-;709:7;736:10;729:17;;656:98;:::o;34470:174::-;34572:2;34545:15;:24;34561:7;34545:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34628:7;34624:2;34590:46;;34599:23;34614:7;34599:14;:23::i;:::-;34590:46;;;;;;;;;;;;34470:174;;:::o;30703:264::-;30796:4;30813:13;30829:23;30844:7;30829:14;:23::i;:::-;30813:39;;30882:5;30871:16;;:7;:16;;;:52;;;;30891:32;30908:5;30915:7;30891:16;:32::i;:::-;30871:52;:87;;;;30951:7;30927:31;;:20;30939:7;30927:11;:20::i;:::-;:31;;;30871:87;30863:96;;;30703:264;;;;:::o;33726:625::-;33885:4;33858:31;;:23;33873:7;33858:14;:23::i;:::-;:31;;;33850:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33964:1;33950:16;;:2;:16;;;;33942:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34020:39;34041:4;34047:2;34051:7;34020:20;:39::i;:::-;34124:29;34141:1;34145:7;34124:8;:29::i;:::-;34185:1;34166:9;:15;34176:4;34166:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34214:1;34197:9;:13;34207:2;34197:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34245:2;34226:7;:16;34234:7;34226:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34284:7;34280:2;34265:27;;34274:4;34265:27;;;;;;;;;;;;34305:38;34325:4;34331:2;34335:7;34305:19;:38::i;:::-;33726:625;;;:::o;2276:132::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2276:132::o;50216:120::-;49225:16;:14;:16::i;:::-;50285:5:::1;50275:7;;:15;;;;;;;;;;;;;;;;;;50306:22;50315:12;:10;:12::i;:::-;50306:22;;;;;;:::i;:::-;;;;;;;;50216:120::o:0;49520:108::-;49591:8;:6;:8::i;:::-;49590:9;49582:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;49520:108::o;47211:127::-;47318:1;47300:7;:14;;;:19;;;;;;;;;;;47211:127;:::o;47089:114::-;47154:7;47181;:14;;;47174:21;;47089:114;;;:::o;32301:439::-;32395:1;32381:16;;:2;:16;;;;32373:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32454:16;32462:7;32454;:16::i;:::-;32453:17;32445:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32516:45;32545:1;32549:2;32553:7;32516:20;:45::i;:::-;32591:1;32574:9;:13;32584:2;32574:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32622:2;32603:7;:16;32611:7;32603:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32667:7;32663:2;32642:33;;32659:1;32642:33;;;;;;;;;;;;32688:44;32716:1;32720:2;32724:7;32688:19;:44::i;:::-;32301:439;;:::o;3378:191::-;3452:16;3471:6;;;;;;;;;;;3452:25;;3497:8;3488:6;;:17;;;;;;;;;;;;;;;;;;3552:8;3521:40;;3542:8;3521:40;;;;;;;;;;;;3378:191;;:::o;49957:118::-;48966:19;:17;:19::i;:::-;50027:4:::1;50017:7;;:14;;;;;;;;;;;;;;;;;;50047:20;50054:12;:10;:12::i;:::-;50047:20;;;;;;:::i;:::-;;;;;;;;49957:118::o:0;34787:315::-;34942:8;34933:17;;:5;:17;;;;34925:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35029:8;34991:18;:25;35010:5;34991:25;;;;;;;;;;;;;;;:35;35017:8;34991:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35075:8;35053:41;;35068:5;35053:41;;;35085:8;35053:41;;;;;;:::i;:::-;;;;;;;;34787:315;;;:::o;29783:313::-;29939:28;29949:4;29955:2;29959:7;29939:9;:28::i;:::-;29986:47;30009:4;30015:2;30019:7;30028:4;29986:22;:47::i;:::-;29978:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29783:313;;;;:::o;30409:127::-;30474:4;30526:1;30498:30;;:7;:16;30506:7;30498:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30491:37;;30409:127;;;:::o;51092:113::-;51152:13;51185:12;51178:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51092:113;:::o;20261:723::-;20317:13;20547:1;20538:5;:10;20534:53;;;20565:10;;;;;;;;;;;;;;;;;;;;;20534:53;20597:12;20612:5;20597:20;;20628:14;20653:78;20668:1;20660:4;:9;20653:78;;20686:8;;;;;:::i;:::-;;;;20717:2;20709:10;;;;;:::i;:::-;;;20653:78;;;20741:19;20773:6;20763:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20741:39;;20791:154;20807:1;20798:5;:10;20791:154;;20835:1;20825:11;;;;;:::i;:::-;;;20902:2;20894:5;:10;;;;:::i;:::-;20881:2;:24;;;;:::i;:::-;20868:39;;20851:6;20858;20851:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;20931:2;20922:11;;;;;:::i;:::-;;;20791:154;;;20969:6;20955:21;;;;;20261:723;;;;:::o;23199:157::-;23284:4;23323:25;23308:40;;;:11;:40;;;;23301:47;;23199:157;;;:::o;52665:285::-;52827:45;52854:4;52860:2;52864:7;52827:26;:45::i;:::-;52894:8;:6;:8::i;:::-;52893:9;52885:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;52665:285;;;:::o;37826:125::-;;;;:::o;49705:108::-;49772:8;:6;:8::i;:::-;49764:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;49705:108::o;35890:853::-;36044:4;36065:15;:2;:13;;;:15::i;:::-;36061:675;;;36117:2;36101:36;;;36138:12;:10;:12::i;:::-;36152:4;36158:7;36167:4;36101:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36097:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36359:1;36342:6;:13;:18;36338:328;;;36385:60;;;;;;;;;;:::i;:::-;;;;;;;;36338:328;36616:6;36610:13;36601:6;36597:2;36593:15;36586:38;36097:584;36233:41;;;36223:51;;;:6;:51;;;;36216:58;;;;;36061:675;36720:4;36713:11;;35890:853;;;;;;;:::o;41737:589::-;41881:45;41908:4;41914:2;41918:7;41881:26;:45::i;:::-;41959:1;41943:18;;:4;:18;;;41939:187;;;41978:40;42010:7;41978:31;:40::i;:::-;41939:187;;;42048:2;42040:10;;:4;:10;;;42036:90;;42067:47;42100:4;42106:7;42067:32;:47::i;:::-;42036:90;41939:187;42154:1;42140:16;;:2;:16;;;42136:183;;;42173:45;42210:7;42173:36;:45::i;:::-;42136:183;;;42246:4;42240:10;;:2;:10;;;42236:83;;42267:40;42295:2;42299:7;42267:27;:40::i;:::-;42236:83;42136:183;41737:589;;;:::o;12503:326::-;12563:4;12820:1;12798:7;:19;;;:23;12791:30;;12503:326;;;:::o;37315:126::-;;;;:::o;43049:164::-;43153:10;:17;;;;43126:15;:24;43142:7;43126:24;;;;;;;;;;;:44;;;;43181:10;43197:7;43181:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43049:164;:::o;43840:988::-;44106:22;44156:1;44131:22;44148:4;44131:16;:22::i;:::-;:26;;;;:::i;:::-;44106:51;;44168:18;44189:17;:26;44207:7;44189:26;;;;;;;;;;;;44168:47;;44336:14;44322:10;:28;44318:328;;44367:19;44389:12;:18;44402:4;44389:18;;;;;;;;;;;;;;;:34;44408:14;44389:34;;;;;;;;;;;;44367:56;;44473:11;44440:12;:18;44453:4;44440:18;;;;;;;;;;;;;;;:30;44459:10;44440:30;;;;;;;;;;;:44;;;;44590:10;44557:17;:30;44575:11;44557:30;;;;;;;;;;;:43;;;;44318:328;;44742:17;:26;44760:7;44742:26;;;;;;;;;;;44735:33;;;44786:12;:18;44799:4;44786:18;;;;;;;;;;;;;;;:34;44805:14;44786:34;;;;;;;;;;;44779:41;;;43840:988;;;;:::o;45123:1079::-;45376:22;45421:1;45401:10;:17;;;;:21;;;;:::i;:::-;45376:46;;45433:18;45454:15;:24;45470:7;45454:24;;;;;;;;;;;;45433:45;;45805:19;45827:10;45838:14;45827:26;;;;;;;;;;;;;;;;;;;;;;;;45805:48;;45891:11;45866:10;45877;45866:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;46002:10;45971:15;:28;45987:11;45971:28;;;;;;;;;;;:41;;;;46143:15;:24;46159:7;46143:24;;;;;;;;;;;46136:31;;;46178:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45123:1079;;;;:::o;42627:221::-;42712:14;42729:20;42746:2;42729:16;:20::i;:::-;42712:37;;42787:7;42760:12;:16;42773:2;42760:16;;;;;;;;;;;;;;;:24;42777:6;42760:24;;;;;;;;;;;:34;;;;42834:6;42805:17;:26;42823:7;42805:26;;;;;;;;;;;:35;;;;42627:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:260::-;4941:6;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5049:1;5074:52;5118:7;5109:6;5098:9;5094:22;5074:52;:::i;:::-;5064:62;;5020:116;4948:195;;;;:::o;5149:282::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:2;;;5283:1;5280;5273:12;5235:2;5326:1;5351:63;5406:7;5397:6;5386:9;5382:22;5351:63;:::i;:::-;5341:73;;5297:127;5225:206;;;;:::o;5437:375::-;5506:6;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5732:63;5787:7;5778:6;5767:9;5763:22;5732:63;:::i;:::-;5722:73;;5585:220;5513:299;;;;:::o;5818:262::-;5877:6;5926:2;5914:9;5905:7;5901:23;5897:32;5894:2;;;5942:1;5939;5932:12;5894:2;5985:1;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5956:117;5884:196;;;;:::o;6086:118::-;6173:24;6191:5;6173:24;:::i;:::-;6168:3;6161:37;6151:53;;:::o;6210:109::-;6291:21;6306:5;6291:21;:::i;:::-;6286:3;6279:34;6269:50;;:::o;6325:360::-;6411:3;6439:38;6471:5;6439:38;:::i;:::-;6493:70;6556:6;6551:3;6493:70;:::i;:::-;6486:77;;6572:52;6617:6;6612:3;6605:4;6598:5;6594:16;6572:52;:::i;:::-;6649:29;6671:6;6649:29;:::i;:::-;6644:3;6640:39;6633:46;;6415:270;;;;;:::o;6691:364::-;6779:3;6807:39;6840:5;6807:39;:::i;:::-;6862:71;6926:6;6921:3;6862:71;:::i;:::-;6855:78;;6942:52;6987:6;6982:3;6975:4;6968:5;6964:16;6942:52;:::i;:::-;7019:29;7041:6;7019:29;:::i;:::-;7014:3;7010:39;7003:46;;6783:272;;;;;:::o;7061:377::-;7167:3;7195:39;7228:5;7195:39;:::i;:::-;7250:89;7332:6;7327:3;7250:89;:::i;:::-;7243:96;;7348:52;7393:6;7388:3;7381:4;7374:5;7370:16;7348:52;:::i;:::-;7425:6;7420:3;7416:16;7409:23;;7171:267;;;;;:::o;7444:366::-;7586:3;7607:67;7671:2;7666:3;7607:67;:::i;:::-;7600:74;;7683:93;7772:3;7683:93;:::i;:::-;7801:2;7796:3;7792:12;7785:19;;7590:220;;;:::o;7816:366::-;7958:3;7979:67;8043:2;8038:3;7979:67;:::i;:::-;7972:74;;8055:93;8144:3;8055:93;:::i;:::-;8173:2;8168:3;8164:12;8157:19;;7962:220;;;:::o;8188:366::-;8330:3;8351:67;8415:2;8410:3;8351:67;:::i;:::-;8344:74;;8427:93;8516:3;8427:93;:::i;:::-;8545:2;8540:3;8536:12;8529:19;;8334:220;;;:::o;8560:366::-;8702:3;8723:67;8787:2;8782:3;8723:67;:::i;:::-;8716:74;;8799:93;8888:3;8799:93;:::i;:::-;8917:2;8912:3;8908:12;8901:19;;8706:220;;;:::o;8932:366::-;9074:3;9095:67;9159:2;9154:3;9095:67;:::i;:::-;9088:74;;9171:93;9260:3;9171:93;:::i;:::-;9289:2;9284:3;9280:12;9273:19;;9078:220;;;:::o;9304:366::-;9446:3;9467:67;9531:2;9526:3;9467:67;:::i;:::-;9460:74;;9543:93;9632:3;9543:93;:::i;:::-;9661:2;9656:3;9652:12;9645:19;;9450:220;;;:::o;9676:366::-;9818:3;9839:67;9903:2;9898:3;9839:67;:::i;:::-;9832:74;;9915:93;10004:3;9915:93;:::i;:::-;10033:2;10028:3;10024:12;10017:19;;9822:220;;;:::o;10048:366::-;10190:3;10211:67;10275:2;10270:3;10211:67;:::i;:::-;10204:74;;10287:93;10376:3;10287:93;:::i;:::-;10405:2;10400:3;10396:12;10389:19;;10194:220;;;:::o;10420:366::-;10562:3;10583:67;10647:2;10642:3;10583:67;:::i;:::-;10576:74;;10659:93;10748:3;10659:93;:::i;:::-;10777:2;10772:3;10768:12;10761:19;;10566:220;;;:::o;10792:366::-;10934:3;10955:67;11019:2;11014:3;10955:67;:::i;:::-;10948:74;;11031:93;11120:3;11031:93;:::i;:::-;11149:2;11144:3;11140:12;11133:19;;10938:220;;;:::o;11164:366::-;11306:3;11327:67;11391:2;11386:3;11327:67;:::i;:::-;11320:74;;11403:93;11492:3;11403:93;:::i;:::-;11521:2;11516:3;11512:12;11505:19;;11310:220;;;:::o;11536:366::-;11678:3;11699:67;11763:2;11758:3;11699:67;:::i;:::-;11692:74;;11775:93;11864:3;11775:93;:::i;:::-;11893:2;11888:3;11884:12;11877:19;;11682:220;;;:::o;11908:366::-;12050:3;12071:67;12135:2;12130:3;12071:67;:::i;:::-;12064:74;;12147:93;12236:3;12147:93;:::i;:::-;12265:2;12260:3;12256:12;12249:19;;12054:220;;;:::o;12280:366::-;12422:3;12443:67;12507:2;12502:3;12443:67;:::i;:::-;12436:74;;12519:93;12608:3;12519:93;:::i;:::-;12637:2;12632:3;12628:12;12621:19;;12426:220;;;:::o;12652:366::-;12794:3;12815:67;12879:2;12874:3;12815:67;:::i;:::-;12808:74;;12891:93;12980:3;12891:93;:::i;:::-;13009:2;13004:3;13000:12;12993:19;;12798:220;;;:::o;13024:400::-;13184:3;13205:84;13287:1;13282:3;13205:84;:::i;:::-;13198:91;;13298:93;13387:3;13298:93;:::i;:::-;13416:1;13411:3;13407:11;13400:18;;13188:236;;;:::o;13430:366::-;13572:3;13593:67;13657:2;13652:3;13593:67;:::i;:::-;13586:74;;13669:93;13758:3;13669:93;:::i;:::-;13787:2;13782:3;13778:12;13771:19;;13576:220;;;:::o;13802:366::-;13944:3;13965:67;14029:2;14024:3;13965:67;:::i;:::-;13958:74;;14041:93;14130:3;14041:93;:::i;:::-;14159:2;14154:3;14150:12;14143:19;;13948:220;;;:::o;14174:366::-;14316:3;14337:67;14401:2;14396:3;14337:67;:::i;:::-;14330:74;;14413:93;14502:3;14413:93;:::i;:::-;14531:2;14526:3;14522:12;14515:19;;14320:220;;;:::o;14546:366::-;14688:3;14709:67;14773:2;14768:3;14709:67;:::i;:::-;14702:74;;14785:93;14874:3;14785:93;:::i;:::-;14903:2;14898:3;14894:12;14887:19;;14692:220;;;:::o;14918:366::-;15060:3;15081:67;15145:2;15140:3;15081:67;:::i;:::-;15074:74;;15157:93;15246:3;15157:93;:::i;:::-;15275:2;15270:3;15266:12;15259:19;;15064:220;;;:::o;15290:366::-;15432:3;15453:67;15517:2;15512:3;15453:67;:::i;:::-;15446:74;;15529:93;15618:3;15529:93;:::i;:::-;15647:2;15642:3;15638:12;15631:19;;15436:220;;;:::o;15662:366::-;15804:3;15825:67;15889:2;15884:3;15825:67;:::i;:::-;15818:74;;15901:93;15990:3;15901:93;:::i;:::-;16019:2;16014:3;16010:12;16003:19;;15808:220;;;:::o;16034:118::-;16121:24;16139:5;16121:24;:::i;:::-;16116:3;16109:37;16099:53;;:::o;16158:701::-;16439:3;16461:95;16552:3;16543:6;16461:95;:::i;:::-;16454:102;;16573:95;16664:3;16655:6;16573:95;:::i;:::-;16566:102;;16685:148;16829:3;16685:148;:::i;:::-;16678:155;;16850:3;16843:10;;16443:416;;;;;:::o;16865:222::-;16958:4;16996:2;16985:9;16981:18;16973:26;;17009:71;17077:1;17066:9;17062:17;17053:6;17009:71;:::i;:::-;16963:124;;;;:::o;17093:640::-;17288:4;17326:3;17315:9;17311:19;17303:27;;17340:71;17408:1;17397:9;17393:17;17384:6;17340:71;:::i;:::-;17421:72;17489:2;17478:9;17474:18;17465:6;17421:72;:::i;:::-;17503;17571:2;17560:9;17556:18;17547:6;17503:72;:::i;:::-;17622:9;17616:4;17612:20;17607:2;17596:9;17592:18;17585:48;17650:76;17721:4;17712:6;17650:76;:::i;:::-;17642:84;;17293:440;;;;;;;:::o;17739:210::-;17826:4;17864:2;17853:9;17849:18;17841:26;;17877:65;17939:1;17928:9;17924:17;17915:6;17877:65;:::i;:::-;17831:118;;;;:::o;17955:313::-;18068:4;18106:2;18095:9;18091:18;18083:26;;18155:9;18149:4;18145:20;18141:1;18130:9;18126:17;18119:47;18183:78;18256:4;18247:6;18183:78;:::i;:::-;18175:86;;18073:195;;;;:::o;18274:419::-;18440:4;18478:2;18467:9;18463:18;18455:26;;18527:9;18521:4;18517:20;18513:1;18502:9;18498:17;18491:47;18555:131;18681:4;18555:131;:::i;:::-;18547:139;;18445:248;;;:::o;18699:419::-;18865:4;18903:2;18892:9;18888:18;18880:26;;18952:9;18946:4;18942:20;18938:1;18927:9;18923:17;18916:47;18980:131;19106:4;18980:131;:::i;:::-;18972:139;;18870:248;;;:::o;19124:419::-;19290:4;19328:2;19317:9;19313:18;19305:26;;19377:9;19371:4;19367:20;19363:1;19352:9;19348:17;19341:47;19405:131;19531:4;19405:131;:::i;:::-;19397:139;;19295:248;;;:::o;19549:419::-;19715:4;19753:2;19742:9;19738:18;19730:26;;19802:9;19796:4;19792:20;19788:1;19777:9;19773:17;19766:47;19830:131;19956:4;19830:131;:::i;:::-;19822:139;;19720:248;;;:::o;19974:419::-;20140:4;20178:2;20167:9;20163:18;20155:26;;20227:9;20221:4;20217:20;20213:1;20202:9;20198:17;20191:47;20255:131;20381:4;20255:131;:::i;:::-;20247:139;;20145:248;;;:::o;20399:419::-;20565:4;20603:2;20592:9;20588:18;20580:26;;20652:9;20646:4;20642:20;20638:1;20627:9;20623:17;20616:47;20680:131;20806:4;20680:131;:::i;:::-;20672:139;;20570:248;;;:::o;20824:419::-;20990:4;21028:2;21017:9;21013:18;21005:26;;21077:9;21071:4;21067:20;21063:1;21052:9;21048:17;21041:47;21105:131;21231:4;21105:131;:::i;:::-;21097:139;;20995:248;;;:::o;21249:419::-;21415:4;21453:2;21442:9;21438:18;21430:26;;21502:9;21496:4;21492:20;21488:1;21477:9;21473:17;21466:47;21530:131;21656:4;21530:131;:::i;:::-;21522:139;;21420:248;;;:::o;21674:419::-;21840:4;21878:2;21867:9;21863:18;21855:26;;21927:9;21921:4;21917:20;21913:1;21902:9;21898:17;21891:47;21955:131;22081:4;21955:131;:::i;:::-;21947:139;;21845:248;;;:::o;22099:419::-;22265:4;22303:2;22292:9;22288:18;22280:26;;22352:9;22346:4;22342:20;22338:1;22327:9;22323:17;22316:47;22380:131;22506:4;22380:131;:::i;:::-;22372:139;;22270:248;;;:::o;22524:419::-;22690:4;22728:2;22717:9;22713:18;22705:26;;22777:9;22771:4;22767:20;22763:1;22752:9;22748:17;22741:47;22805:131;22931:4;22805:131;:::i;:::-;22797:139;;22695:248;;;:::o;22949:419::-;23115:4;23153:2;23142:9;23138:18;23130:26;;23202:9;23196:4;23192:20;23188:1;23177:9;23173:17;23166:47;23230:131;23356:4;23230:131;:::i;:::-;23222:139;;23120:248;;;:::o;23374:419::-;23540:4;23578:2;23567:9;23563:18;23555:26;;23627:9;23621:4;23617:20;23613:1;23602:9;23598:17;23591:47;23655:131;23781:4;23655:131;:::i;:::-;23647:139;;23545:248;;;:::o;23799:419::-;23965:4;24003:2;23992:9;23988:18;23980:26;;24052:9;24046:4;24042:20;24038:1;24027:9;24023:17;24016:47;24080:131;24206:4;24080:131;:::i;:::-;24072:139;;23970:248;;;:::o;24224:419::-;24390:4;24428:2;24417:9;24413:18;24405:26;;24477:9;24471:4;24467:20;24463:1;24452:9;24448:17;24441:47;24505:131;24631:4;24505:131;:::i;:::-;24497:139;;24395:248;;;:::o;24649:419::-;24815:4;24853:2;24842:9;24838:18;24830:26;;24902:9;24896:4;24892:20;24888:1;24877:9;24873:17;24866:47;24930:131;25056:4;24930:131;:::i;:::-;24922:139;;24820:248;;;:::o;25074:419::-;25240:4;25278:2;25267:9;25263:18;25255:26;;25327:9;25321:4;25317:20;25313:1;25302:9;25298:17;25291:47;25355:131;25481:4;25355:131;:::i;:::-;25347:139;;25245:248;;;:::o;25499:419::-;25665:4;25703:2;25692:9;25688:18;25680:26;;25752:9;25746:4;25742:20;25738:1;25727:9;25723:17;25716:47;25780:131;25906:4;25780:131;:::i;:::-;25772:139;;25670:248;;;:::o;25924:419::-;26090:4;26128:2;26117:9;26113:18;26105:26;;26177:9;26171:4;26167:20;26163:1;26152:9;26148:17;26141:47;26205:131;26331:4;26205:131;:::i;:::-;26197:139;;26095:248;;;:::o;26349:419::-;26515:4;26553:2;26542:9;26538:18;26530:26;;26602:9;26596:4;26592:20;26588:1;26577:9;26573:17;26566:47;26630:131;26756:4;26630:131;:::i;:::-;26622:139;;26520:248;;;:::o;26774:419::-;26940:4;26978:2;26967:9;26963:18;26955:26;;27027:9;27021:4;27017:20;27013:1;27002:9;26998:17;26991:47;27055:131;27181:4;27055:131;:::i;:::-;27047:139;;26945:248;;;:::o;27199:419::-;27365:4;27403:2;27392:9;27388:18;27380:26;;27452:9;27446:4;27442:20;27438:1;27427:9;27423:17;27416:47;27480:131;27606:4;27480:131;:::i;:::-;27472:139;;27370:248;;;:::o;27624:222::-;27717:4;27755:2;27744:9;27740:18;27732:26;;27768:71;27836:1;27825:9;27821:17;27812:6;27768:71;:::i;:::-;27722:124;;;;:::o;27852:129::-;27886:6;27913:20;;:::i;:::-;27903:30;;27942:33;27970:4;27962:6;27942:33;:::i;:::-;27893:88;;;:::o;27987:75::-;28020:6;28053:2;28047:9;28037:19;;28027:35;:::o;28068:307::-;28129:4;28219:18;28211:6;28208:30;28205:2;;;28241:18;;:::i;:::-;28205:2;28279:29;28301:6;28279:29;:::i;:::-;28271:37;;28363:4;28357;28353:15;28345:23;;28134:241;;;:::o;28381:308::-;28443:4;28533:18;28525:6;28522:30;28519:2;;;28555:18;;:::i;:::-;28519:2;28593:29;28615:6;28593:29;:::i;:::-;28585:37;;28677:4;28671;28667:15;28659:23;;28448:241;;;:::o;28695:98::-;28746:6;28780:5;28774:12;28764:22;;28753:40;;;:::o;28799:99::-;28851:6;28885:5;28879:12;28869:22;;28858:40;;;:::o;28904:168::-;28987:11;29021:6;29016:3;29009:19;29061:4;29056:3;29052:14;29037:29;;28999:73;;;;:::o;29078:169::-;29162:11;29196:6;29191:3;29184:19;29236:4;29231:3;29227:14;29212:29;;29174:73;;;;:::o;29253:148::-;29355:11;29392:3;29377:18;;29367:34;;;;:::o;29407:305::-;29447:3;29466:20;29484:1;29466:20;:::i;:::-;29461:25;;29500:20;29518:1;29500:20;:::i;:::-;29495:25;;29654:1;29586:66;29582:74;29579:1;29576:81;29573:2;;;29660:18;;:::i;:::-;29573:2;29704:1;29701;29697:9;29690:16;;29451:261;;;;:::o;29718:185::-;29758:1;29775:20;29793:1;29775:20;:::i;:::-;29770:25;;29809:20;29827:1;29809:20;:::i;:::-;29804:25;;29848:1;29838:2;;29853:18;;:::i;:::-;29838:2;29895:1;29892;29888:9;29883:14;;29760:143;;;;:::o;29909:191::-;29949:4;29969:20;29987:1;29969:20;:::i;:::-;29964:25;;30003:20;30021:1;30003:20;:::i;:::-;29998:25;;30042:1;30039;30036:8;30033:2;;;30047:18;;:::i;:::-;30033:2;30092:1;30089;30085:9;30077:17;;29954:146;;;;:::o;30106:96::-;30143:7;30172:24;30190:5;30172:24;:::i;:::-;30161:35;;30151:51;;;:::o;30208:90::-;30242:7;30285:5;30278:13;30271:21;30260:32;;30250:48;;;:::o;30304:149::-;30340:7;30380:66;30373:5;30369:78;30358:89;;30348:105;;;:::o;30459:126::-;30496:7;30536:42;30529:5;30525:54;30514:65;;30504:81;;;:::o;30591:77::-;30628:7;30657:5;30646:16;;30636:32;;;:::o;30674:154::-;30758:6;30753:3;30748;30735:30;30820:1;30811:6;30806:3;30802:16;30795:27;30725:103;;;:::o;30834:307::-;30902:1;30912:113;30926:6;30923:1;30920:13;30912:113;;;31011:1;31006:3;31002:11;30996:18;30992:1;30987:3;30983:11;30976:39;30948:2;30945:1;30941:10;30936:15;;30912:113;;;31043:6;31040:1;31037:13;31034:2;;;31123:1;31114:6;31109:3;31105:16;31098:27;31034:2;30883:258;;;;:::o;31147:320::-;31191:6;31228:1;31222:4;31218:12;31208:22;;31275:1;31269:4;31265:12;31296:18;31286:2;;31352:4;31344:6;31340:17;31330:27;;31286:2;31414;31406:6;31403:14;31383:18;31380:38;31377:2;;;31433:18;;:::i;:::-;31377:2;31198:269;;;;:::o;31473:281::-;31556:27;31578:4;31556:27;:::i;:::-;31548:6;31544:40;31686:6;31674:10;31671:22;31650:18;31638:10;31635:34;31632:62;31629:2;;;31697:18;;:::i;:::-;31629:2;31737:10;31733:2;31726:22;31516:238;;;:::o;31760:233::-;31799:3;31822:24;31840:5;31822:24;:::i;:::-;31813:33;;31868:66;31861:5;31858:77;31855:2;;;31938:18;;:::i;:::-;31855:2;31985:1;31978:5;31974:13;31967:20;;31803:190;;;:::o;31999:176::-;32031:1;32048:20;32066:1;32048:20;:::i;:::-;32043:25;;32082:20;32100:1;32082:20;:::i;:::-;32077:25;;32121:1;32111:2;;32126:18;;:::i;:::-;32111:2;32167:1;32164;32160:9;32155:14;;32033:142;;;;:::o;32181:180::-;32229:77;32226:1;32219:88;32326:4;32323:1;32316:15;32350:4;32347:1;32340:15;32367:180;32415:77;32412:1;32405:88;32512:4;32509:1;32502:15;32536:4;32533:1;32526:15;32553:180;32601:77;32598:1;32591:88;32698:4;32695:1;32688:15;32722:4;32719:1;32712:15;32739:180;32787:77;32784:1;32777:88;32884:4;32881:1;32874:15;32908:4;32905:1;32898:15;32925:102;32966:6;33017:2;33013:7;33008:2;33001:5;32997:14;32993:28;32983:38;;32973:54;;;:::o;33033:170::-;33173:22;33169:1;33161:6;33157:14;33150:46;33139:64;:::o;33209:230::-;33349:34;33345:1;33337:6;33333:14;33326:58;33418:13;33413:2;33405:6;33401:15;33394:38;33315:124;:::o;33445:237::-;33585:34;33581:1;33573:6;33569:14;33562:58;33654:20;33649:2;33641:6;33637:15;33630:45;33551:131;:::o;33688:225::-;33828:34;33824:1;33816:6;33812:14;33805:58;33897:8;33892:2;33884:6;33880:15;33873:33;33794:119;:::o;33919:224::-;34059:34;34055:1;34047:6;34043:14;34036:58;34128:7;34123:2;34115:6;34111:15;34104:32;34025:118;:::o;34149:178::-;34289:30;34285:1;34277:6;34273:14;34266:54;34255:72;:::o;34333:222::-;34473:34;34469:1;34461:6;34457:14;34450:58;34542:5;34537:2;34529:6;34525:15;34518:30;34439:116;:::o;34561:223::-;34701:34;34697:1;34689:6;34685:14;34678:58;34770:6;34765:2;34757:6;34753:15;34746:31;34667:117;:::o;34790:175::-;34930:27;34926:1;34918:6;34914:14;34907:51;34896:69;:::o;34971:167::-;35111:19;35107:1;35099:6;35095:14;35088:43;35077:61;:::o;35144:166::-;35284:18;35280:1;35272:6;35268:14;35261:42;35250:60;:::o;35316:228::-;35456:34;35452:1;35444:6;35440:14;35433:58;35525:11;35520:2;35512:6;35508:15;35501:36;35422:122;:::o;35550:165::-;35690:17;35686:1;35678:6;35674:14;35667:41;35656:59;:::o;35721:249::-;35861:34;35857:1;35849:6;35845:14;35838:58;35930:32;35925:2;35917:6;35913:15;35906:57;35827:143;:::o;35976:182::-;36116:34;36112:1;36104:6;36100:14;36093:58;36082:76;:::o;36164:155::-;36304:7;36300:1;36292:6;36288:14;36281:31;36270:49;:::o;36325:182::-;36465:34;36461:1;36453:6;36449:14;36442:58;36431:76;:::o;36513:234::-;36653:34;36649:1;36641:6;36637:14;36630:58;36722:17;36717:2;36709:6;36705:15;36698:42;36619:128;:::o;36753:174::-;36893:26;36889:1;36881:6;36877:14;36870:50;36859:68;:::o;36933:220::-;37073:34;37069:1;37061:6;37057:14;37050:58;37142:3;37137:2;37129:6;37125:15;37118:28;37039:114;:::o;37159:171::-;37299:23;37295:1;37287:6;37283:14;37276:47;37265:65;:::o;37336:231::-;37476:34;37472:1;37464:6;37460:14;37453:58;37545:14;37540:2;37532:6;37528:15;37521:39;37442:125;:::o;37573:233::-;37713:34;37709:1;37701:6;37697:14;37690:58;37782:16;37777:2;37769:6;37765:15;37758:41;37679:127;:::o;37812:122::-;37885:24;37903:5;37885:24;:::i;:::-;37878:5;37875:35;37865:2;;37924:1;37921;37914:12;37865:2;37855:79;:::o;37940:116::-;38010:21;38025:5;38010:21;:::i;:::-;38003:5;38000:32;37990:2;;38046:1;38043;38036:12;37990:2;37980:76;:::o;38062:120::-;38134:23;38151:5;38134:23;:::i;:::-;38127:5;38124:34;38114:2;;38172:1;38169;38162:12;38114:2;38104:78;:::o;38188:122::-;38261:24;38279:5;38261:24;:::i;:::-;38254:5;38251:35;38241:2;;38300:1;38297;38290:12;38241:2;38231:79;:::o
Swarm Source
ipfs://0b019523392691d3d76932a563b302cb780bf3b5c8ebda1366bb726027cf8719
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.